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

Reply via email to