Update of /cvsroot/alsa/alsa-kernel/pci/trident
In directory sc8-pr-cvs1:/tmp/cvs-serv17648/pci/trident
Modified Files:
trident_main.c
Log Message:
Control API update
- separated volatile data from snd_kcontrol_t to reduce space for multi elements
- added multi elements
- changed trident driver to use multi elements
- added dimen union to the info structure to describe matrix
Index: trident_main.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/trident/trident_main.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- trident_main.c 24 Mar 2003 16:32:37 -0000 1.39
+++ trident_main.c 1 Apr 2003 13:55:50 -0000 1.40
@@ -1881,7 +1881,7 @@
runtime->hw = snd_trident_spdif_7018;
}
- trident->spdif_pcm_ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
+ trident->spdif_pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
snd_ctl_notify(trident->card, SNDRV_CTL_EVENT_MASK_VALUE |
SNDRV_CTL_EVENT_MASK_INFO, &trident->spdif_pcm_ctl->id);
@@ -1920,7 +1920,7 @@
outl(temp, TRID_REG(trident, SI_SERIAL_INTF_CTRL));
}
spin_unlock_irq(&trident->reg_lock);
- trident->spdif_pcm_ctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
+ trident->spdif_pcm_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
snd_ctl_notify(trident->card, SNDRV_CTL_EVENT_MASK_VALUE |
SNDRV_CTL_EVENT_MASK_INFO, &trident->spdif_pcm_ctl->id);
return 0;
@@ -2677,7 +2677,7 @@
snd_ctl_elem_value_t * ucontrol)
{
trident_t *trident = snd_kcontrol_chip(kcontrol);
- snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t
*)kcontrol->private_value;
+ snd_trident_pcm_mixer_t *mix =
&trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
if (trident->device == TRIDENT_DEVICE_ID_SI7018) {
ucontrol->value.integer.value[0] = 1023 - mix->vol;
@@ -2692,7 +2692,7 @@
{
unsigned long flags;
trident_t *trident = snd_kcontrol_chip(kcontrol);
- snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t
*)kcontrol->private_value;
+ snd_trident_pcm_mixer_t *mix =
&trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
unsigned int val;
int change = 0;
@@ -2715,6 +2715,7 @@
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "PCM Front Playback Volume",
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
SNDRV_CTL_ELEM_ACCESS_INACTIVE,
+ .count = 32,
.info = snd_trident_pcm_vol_control_info,
.get = snd_trident_pcm_vol_control_get,
.put = snd_trident_pcm_vol_control_put,
@@ -2738,7 +2739,8 @@
static int snd_trident_pcm_pan_control_get(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
- snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t
*)kcontrol->private_value;
+ trident_t *trident = snd_kcontrol_chip(kcontrol);
+ snd_trident_pcm_mixer_t *mix =
&trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
ucontrol->value.integer.value[0] = mix->pan;
if (ucontrol->value.integer.value[0] & 0x40) {
@@ -2754,7 +2756,7 @@
{
unsigned long flags;
trident_t *trident = snd_kcontrol_chip(kcontrol);
- snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t
*)kcontrol->private_value;
+ snd_trident_pcm_mixer_t *mix =
&trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
unsigned char val;
int change = 0;
@@ -2776,6 +2778,7 @@
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "PCM Pan Playback Control",
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
SNDRV_CTL_ELEM_ACCESS_INACTIVE,
+ .count = 32,
.info = snd_trident_pcm_pan_control_info,
.get = snd_trident_pcm_pan_control_get,
.put = snd_trident_pcm_pan_control_put,
@@ -2799,7 +2802,8 @@
static int snd_trident_pcm_rvol_control_get(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
- snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t
*)kcontrol->private_value;
+ trident_t *trident = snd_kcontrol_chip(kcontrol);
+ snd_trident_pcm_mixer_t *mix =
&trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
ucontrol->value.integer.value[0] = 127 - mix->rvol;
return 0;
@@ -2810,7 +2814,7 @@
{
unsigned long flags;
trident_t *trident = snd_kcontrol_chip(kcontrol);
- snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t
*)kcontrol->private_value;
+ snd_trident_pcm_mixer_t *mix =
&trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
unsigned short val;
int change = 0;
@@ -2829,6 +2833,7 @@
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "PCM Reverb Playback Volume",
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
SNDRV_CTL_ELEM_ACCESS_INACTIVE,
+ .count = 32,
.info = snd_trident_pcm_rvol_control_info,
.get = snd_trident_pcm_rvol_control_get,
.put = snd_trident_pcm_rvol_control_put,
@@ -2852,7 +2857,8 @@
static int snd_trident_pcm_cvol_control_get(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
- snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t
*)kcontrol->private_value;
+ trident_t *trident = snd_kcontrol_chip(kcontrol);
+ snd_trident_pcm_mixer_t *mix =
&trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
ucontrol->value.integer.value[0] = 127 - mix->cvol;
return 0;
@@ -2863,7 +2869,7 @@
{
unsigned long flags;
trident_t *trident = snd_kcontrol_chip(kcontrol);
- snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t
*)kcontrol->private_value;
+ snd_trident_pcm_mixer_t *mix =
&trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
unsigned short val;
int change = 0;
@@ -2882,28 +2888,32 @@
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "PCM Chorus Playback Volume",
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
SNDRV_CTL_ELEM_ACCESS_INACTIVE,
+ .count = 32,
.info = snd_trident_pcm_cvol_control_info,
.get = snd_trident_pcm_cvol_control_get,
.put = snd_trident_pcm_cvol_control_put,
};
-static void snd_trident_notify_pcm_change1(snd_card_t * card, snd_kcontrol_t *kctl,
int activate)
+static void snd_trident_notify_pcm_change1(snd_card_t * card, snd_kcontrol_t *kctl,
int num, int activate)
{
+ snd_ctl_elem_id_t id;
+
snd_runtime_check(kctl != NULL, return);
if (activate)
- kctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
+ kctl->vd[num].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
else
- kctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
+ kctl->vd[num].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE |
- SNDRV_CTL_EVENT_MASK_INFO, &kctl->id);
+ SNDRV_CTL_EVENT_MASK_INFO,
+ snd_ctl_build_ioff(&id, kctl, num));
}
-static void snd_trident_notify_pcm_change(snd_card_t * card, snd_trident_pcm_mixer_t
* tmix, int activate)
+static void snd_trident_notify_pcm_change(trident_t *trident, snd_trident_pcm_mixer_t
*tmix, int num, int activate)
{
- snd_trident_notify_pcm_change1(card, tmix->ctl_vol, activate);
- snd_trident_notify_pcm_change1(card, tmix->ctl_pan, activate);
- snd_trident_notify_pcm_change1(card, tmix->ctl_rvol, activate);
- snd_trident_notify_pcm_change1(card, tmix->ctl_cvol, activate);
+ snd_trident_notify_pcm_change1(trident->card, trident->ctl_vol, num, activate);
+ snd_trident_notify_pcm_change1(trident->card, trident->ctl_pan, num, activate);
+ snd_trident_notify_pcm_change1(trident->card, trident->ctl_rvol, num,
activate);
+ snd_trident_notify_pcm_change1(trident->card, trident->ctl_cvol, num,
activate);
}
static int snd_trident_pcm_mixer_build(trident_t *trident, snd_trident_voice_t
*voice, snd_pcm_substream_t *substream)
@@ -2917,7 +2927,7 @@
tmix->pan = T4D_DEFAULT_PCM_PAN;
tmix->rvol = T4D_DEFAULT_PCM_RVOL;
tmix->cvol = T4D_DEFAULT_PCM_CVOL;
- snd_trident_notify_pcm_change(trident->card, tmix, 1);
+ snd_trident_notify_pcm_change(trident, tmix, substream->number, 1);
return 0;
}
@@ -2928,7 +2938,7 @@
snd_assert(trident != NULL && substream != NULL, return -EINVAL);
tmix = &trident->pcm_mixer[substream->number];
tmix->voice = NULL;
- snd_trident_notify_pcm_change(trident->card, tmix, 0);
+ snd_trident_notify_pcm_change(trident, tmix, substream->number, 0);
return 0;
}
@@ -3007,34 +3017,26 @@
tmix = &trident->pcm_mixer[idx];
tmix->voice = NULL;
- if ((kctl = tmix->ctl_vol = snd_ctl_new1(&snd_trident_pcm_vol_control,
trident)) == NULL)
- return -ENOMEM;
- kctl->private_value = (long)tmix;
- kctl->id.index = idx;
- if ((err = snd_ctl_add(card, kctl)))
- return err;
+ }
+ if ((trident->ctl_vol = snd_ctl_new1(&snd_trident_pcm_vol_control, trident))
== NULL)
+ return -ENOMEM;
+ if ((err = snd_ctl_add(card, trident->ctl_vol)))
+ return err;
- if ((kctl = tmix->ctl_pan = snd_ctl_new1(&snd_trident_pcm_pan_control,
trident)) == NULL)
- return -ENOMEM;
- kctl->private_value = (long)tmix;
- kctl->id.index = idx;
- if ((err = snd_ctl_add(card, kctl)))
- return err;
+ if ((trident->ctl_pan = snd_ctl_new1(&snd_trident_pcm_pan_control, trident))
== NULL)
+ return -ENOMEM;
+ if ((err = snd_ctl_add(card, trident->ctl_pan)))
+ return err;
- if ((kctl = tmix->ctl_rvol =
snd_ctl_new1(&snd_trident_pcm_rvol_control, trident)) == NULL)
- return -ENOMEM;
- kctl->private_value = (long)tmix;
- kctl->id.index = idx;
- if ((err = snd_ctl_add(card, kctl)))
- return err;
+ if ((trident->ctl_rvol = snd_ctl_new1(&snd_trident_pcm_rvol_control, trident))
== NULL)
+ return -ENOMEM;
+ if ((err = snd_ctl_add(card, trident->ctl_rvol)))
+ return err;
- if ((kctl = tmix->ctl_cvol =
snd_ctl_new1(&snd_trident_pcm_cvol_control, trident)) == NULL)
- return -ENOMEM;
- kctl->private_value = (long)tmix;
- kctl->id.index = idx;
- if ((err = snd_ctl_add(card, kctl)))
- return err;
- }
+ if ((trident->ctl_cvol = snd_ctl_new1(&snd_trident_pcm_cvol_control, trident))
== NULL)
+ return -ENOMEM;
+ if ((err = snd_ctl_add(card, trident->ctl_cvol)))
+ return err;
if (trident->device == TRIDENT_DEVICE_ID_NX) {
if ((err = snd_ctl_add(card, kctl =
snd_ctl_new1(&snd_trident_ac97_rear_control, trident))) < 0)
-------------------------------------------------------
This SF.net email is sponsored by: ValueWeb:
Dedicated Hosting for just $79/mo with 500 GB of bandwidth!
No other company gives more support or power for your dedicated server
http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog