Commit 70c5acbdcc7bb1651bb166f9e4b2345759a9fb18

Authored by Jaya Kumar
Committed by Jaroslav Kysela
1 parent ecb594e66e

[ALSA] ac97_codec - fix duplicate control creation in AC97

This patch conditions AC97 control creation by whether or not the
codec is an AD18xx codec. This fixes the case where the default control
would get created and then snd_ac97_mixer_build fails out when creation
of ad18xx specific control would get attempted. This problem was found
and debuged by Marcelo Tosatti.

Signed-off-by: Jaya Kumar <jayakumar.alsa@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>

Showing 1 changed file with 6 additions and 3 deletions Side-by-side Diff

sound/pci/ac97/ac97_codec.c
... ... @@ -1236,7 +1236,8 @@
1236 1236 ac97->regs[AC97_CENTER_LFE_MASTER] = 0x8080;
1237 1237  
1238 1238 /* build center controls */
1239   - if (snd_ac97_try_volume_mix(ac97, AC97_CENTER_LFE_MASTER)) {
  1239 + if ((snd_ac97_try_volume_mix(ac97, AC97_CENTER_LFE_MASTER))
  1240 + && !(ac97->flags & AC97_AD_MULTI)) {
1240 1241 if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_center[0], ac97))) < 0)
1241 1242 return err;
1242 1243 if ((err = snd_ctl_add(card, kctl = snd_ac97_cnew(&snd_ac97_controls_center[1], ac97))) < 0)
... ... @@ -1248,7 +1249,8 @@
1248 1249 }
1249 1250  
1250 1251 /* build LFE controls */
1251   - if (snd_ac97_try_volume_mix(ac97, AC97_CENTER_LFE_MASTER+1)) {
  1252 + if ((snd_ac97_try_volume_mix(ac97, AC97_CENTER_LFE_MASTER+1))
  1253 + && !(ac97->flags & AC97_AD_MULTI)) {
1252 1254 if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_lfe[0], ac97))) < 0)
1253 1255 return err;
1254 1256 if ((err = snd_ctl_add(card, kctl = snd_ac97_cnew(&snd_ac97_controls_lfe[1], ac97))) < 0)
... ... @@ -1260,7 +1262,8 @@
1260 1262 }
1261 1263  
1262 1264 /* build surround controls */
1263   - if (snd_ac97_try_volume_mix(ac97, AC97_SURROUND_MASTER)) {
  1265 + if ((snd_ac97_try_volume_mix(ac97, AC97_SURROUND_MASTER))
  1266 + && !(ac97->flags & AC97_AD_MULTI)) {
1264 1267 /* Surround Master (0x38) is with stereo mutes */
1265 1268 if ((err = snd_ac97_cmix_new_stereo(card, "Surround Playback", AC97_SURROUND_MASTER, 1, ac97)) < 0)
1266 1269 return err;