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