Update of /cvsroot/alsa/alsa-kernel/pci/emu10k1 In directory sc8-pr-cvs1:/tmp/cvs-serv4078/pci/emu10k1
Modified Files: emumixer.c emupcm.c Log Message: use the new "duplicated controls" for the pcm mixers. Index: emumixer.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emumixer.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- emumixer.c 15 Aug 2002 12:13:09 -0000 1.14 +++ emumixer.c 9 Apr 2003 15:00:04 -0000 1.15 @@ -45,7 +45,7 @@ snd_ctl_elem_value_t * ucontrol) { emu10k1_t *emu = snd_kcontrol_chip(kcontrol); - int idx = kcontrol->private_value; + unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); unsigned long flags; spin_lock_irqsave(&emu->reg_lock, flags); @@ -71,7 +71,8 @@ snd_ctl_elem_value_t * ucontrol) { emu10k1_t *emu = snd_kcontrol_chip(kcontrol); - int idx = kcontrol->private_value, change; + unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); + int change; unsigned int val; unsigned long flags; @@ -94,6 +95,7 @@ .access = SNDRV_CTL_ELEM_ACCESS_READ, .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,MASK), + .count = 4, .info = snd_emu10k1_spdif_info, .get = snd_emu10k1_spdif_get_mask }; @@ -102,6 +104,7 @@ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT), + .count = 4, .info = snd_emu10k1_spdif_info, .get = snd_emu10k1_spdif_get, .put = snd_emu10k1_spdif_put @@ -150,8 +153,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int voice, idx; int num_efx = emu->audigy ? 8 : 4; int mask = emu->audigy ? 0x3f : 0x0f; @@ -169,8 +172,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int change = 0, voice, idx, val; int num_efx = emu->audigy ? 8 : 4; int mask = emu->audigy ? 0x3f : 0x0f; @@ -204,6 +207,7 @@ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "EMU10K1 PCM Send Routing", + .count = 32, .info = snd_emu10k1_send_routing_info, .get = snd_emu10k1_send_routing_get, .put = snd_emu10k1_send_routing_put @@ -223,8 +227,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int idx; int num_efx = emu->audigy ? 8 : 4; @@ -239,8 +243,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int change = 0, idx, val; int num_efx = emu->audigy ? 8 : 4; @@ -272,6 +276,7 @@ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "EMU10K1 PCM Send Volume", + .count = 32, .info = snd_emu10k1_send_volume_info, .get = snd_emu10k1_send_volume_get, .put = snd_emu10k1_send_volume_put @@ -289,8 +294,8 @@ static int snd_emu10k1_attn_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; unsigned long flags; int idx; @@ -305,8 +310,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int change = 0, idx, val; spin_lock_irqsave(&emu->reg_lock, flags); @@ -334,6 +339,7 @@ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "EMU10K1 PCM Volume", + .count = 32, .info = snd_emu10k1_attn_info, .get = snd_emu10k1_attn_get, .put = snd_emu10k1_attn_put @@ -420,7 +426,7 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu) { ac97_t ac97; - int err, pcm, idx; + int err, pcm; snd_kcontrol_t *kctl; snd_card_t *card = emu->card; @@ -436,6 +442,19 @@ strcpy(emu->card->mixername, "EMU APS"); } + if ((kctl = emu->ctl_send_routing = snd_ctl_new1(&snd_emu10k1_send_routing_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; + if ((kctl = emu->ctl_send_volume = snd_ctl_new1(&snd_emu10k1_send_volume_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; + if ((kctl = emu->ctl_attn = snd_ctl_new1(&snd_emu10k1_attn_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; + for (pcm = 0; pcm < 32; pcm++) { emu10k1_pcm_mixer_t *mix; int v; @@ -443,50 +462,26 @@ mix = &emu->pcm_mixer[pcm]; mix->epcm = NULL; - if ((kctl = mix->ctl_send_routing = snd_ctl_new1(&snd_emu10k1_send_routing_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = (long)mix; - kctl->id.index = pcm; - if ((err = snd_ctl_add(card, kctl))) - return err; for (v = 0; v < 4; v++) mix->send_routing[0][v] = mix->send_routing[1][v] = mix->send_routing[2][v] = v; - if ((kctl = mix->ctl_send_volume = snd_ctl_new1(&snd_emu10k1_send_volume_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = (long)mix; - kctl->id.index = pcm; - if ((err = snd_ctl_add(card, kctl))) - return err; memset(&mix->send_volume, 0, sizeof(mix->send_volume)); mix->send_volume[0][0] = mix->send_volume[0][1] = mix->send_volume[1][0] = mix->send_volume[2][1] = 255; - if ((kctl = mix->ctl_attn = snd_ctl_new1(&snd_emu10k1_attn_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = (long)mix; - kctl->id.index = pcm; - if ((err = snd_ctl_add(card, kctl))) - return err; mix->attn[0] = mix->attn[1] = mix->attn[2] = 0xffff; } - for (idx = 0; idx < 3; idx++) { - if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_mask_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = idx; - kctl->id.index = idx; - if ((err = snd_ctl_add(card, kctl))) - return err; - if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = idx; - kctl->id.index = idx; - if ((err = snd_ctl_add(card, kctl))) - return err; - } + if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_mask_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; + if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; if (emu->audigy) { if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL) Index: emupcm.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emupcm.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- emupcm.c 1 Apr 2003 13:55:44 -0000 1.20 +++ emupcm.c 9 Apr 2003 15:00:06 -0000 1.21 @@ -740,22 +740,25 @@ * */ -static void snd_emu10k1_pcm_mixer_notify1(snd_card_t *card, snd_kcontrol_t *kctl, int activate) +static void snd_emu10k1_pcm_mixer_notify1(emu10k1_t *emu, snd_kcontrol_t *kctl, int idx, int activate) { + snd_ctl_elem_id_t id; + snd_runtime_check(kctl != NULL, return); if (activate) - kctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + kctl->vd[idx].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; else - kctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; - snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE | - SNDRV_CTL_EVENT_MASK_INFO, &kctl->id); + kctl->vd[idx].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE | + SNDRV_CTL_EVENT_MASK_INFO, + snd_ctl_build_ioff(&id, kctl, idx)); } -static void snd_emu10k1_pcm_mixer_notify(snd_card_t *card, emu10k1_pcm_mixer_t *mix, int activate) +static void snd_emu10k1_pcm_mixer_notify(emu10k1_t *emu, int idx, int activate) { - snd_emu10k1_pcm_mixer_notify1(card, mix->ctl_send_routing, activate); - snd_emu10k1_pcm_mixer_notify1(card, mix->ctl_send_volume, activate); - snd_emu10k1_pcm_mixer_notify1(card, mix->ctl_attn, activate); + snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_send_routing, idx, activate); + snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_send_volume, idx, activate); + snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_attn, idx, activate); } static void snd_emu10k1_pcm_free_substream(snd_pcm_runtime_t *runtime) @@ -799,7 +802,7 @@ mix->send_volume[1][0] = mix->send_volume[2][1] = 255; mix->attn[0] = mix->attn[1] = mix->attn[2] = 0xffff; mix->epcm = epcm; - snd_emu10k1_pcm_mixer_notify(emu->card, mix, 1); + snd_emu10k1_pcm_mixer_notify(emu, substream->number, 1); return 0; } @@ -809,7 +812,7 @@ emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[substream->number]; mix->epcm = NULL; - snd_emu10k1_pcm_mixer_notify(emu->card, mix, 0); + snd_emu10k1_pcm_mixer_notify(emu, substream->number, 0); return 0; } ------------------------------------------------------- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog