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