Commit 70c5acbdcc7bb1651bb166f9e4b2345759a9fb18
Committed by
Jaroslav Kysela
1 parent
ecb594e66e
Exists in
master
and in
7 other branches
[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; |