diff options
author | James Courtier-Dutton <James@superbug.co.uk> | 2006-04-09 15:48:44 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2006-06-22 15:32:39 -0400 |
commit | be0b7b0113300c324034e94a12244c4ac3f4b354 (patch) | |
tree | 95409a8755e9e8e8055da964383d7f35401cfd17 /sound/pci/ca0106/ca0106_mixer.c | |
parent | 3969f6178b86613fd443e70d11b8848451552bdd (diff) |
[ALSA] ca0106: Fixes MSI K8N's SB Live 24 bit, no sound from line-in.
Fixed bug#1331
Signed-off-by: James Courtier-Dutton <James@superbug.co.uk>
Diffstat (limited to 'sound/pci/ca0106/ca0106_mixer.c')
-rw-r--r-- | sound/pci/ca0106/ca0106_mixer.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/sound/pci/ca0106/ca0106_mixer.c b/sound/pci/ca0106/ca0106_mixer.c index 8a5833317b0a..146eed70dce6 100644 --- a/sound/pci/ca0106/ca0106_mixer.c +++ b/sound/pci/ca0106/ca0106_mixer.c | |||
@@ -227,6 +227,20 @@ static int snd_ca0106_i2c_capture_source_put(struct snd_kcontrol *kcontrol, | |||
227 | return change; | 227 | return change; |
228 | } | 228 | } |
229 | 229 | ||
230 | static int snd_ca0106_capture_line_in_side_out_info(struct snd_kcontrol *kcontrol, | ||
231 | struct snd_ctl_elem_info *uinfo) | ||
232 | { | ||
233 | static char *texts[2] = { "Side out", "Line in" }; | ||
234 | |||
235 | uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; | ||
236 | uinfo->count = 1; | ||
237 | uinfo->value.enumerated.items = 2; | ||
238 | if (uinfo->value.enumerated.item > 1) | ||
239 | uinfo->value.enumerated.item = 1; | ||
240 | strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); | ||
241 | return 0; | ||
242 | } | ||
243 | |||
230 | static int snd_ca0106_capture_mic_line_in_info(struct snd_kcontrol *kcontrol, | 244 | static int snd_ca0106_capture_mic_line_in_info(struct snd_kcontrol *kcontrol, |
231 | struct snd_ctl_elem_info *uinfo) | 245 | struct snd_ctl_elem_info *uinfo) |
232 | { | 246 | { |
@@ -287,6 +301,16 @@ static struct snd_kcontrol_new snd_ca0106_capture_mic_line_in __devinitdata = | |||
287 | .put = snd_ca0106_capture_mic_line_in_put | 301 | .put = snd_ca0106_capture_mic_line_in_put |
288 | }; | 302 | }; |
289 | 303 | ||
304 | static struct snd_kcontrol_new snd_ca0106_capture_line_in_side_out __devinitdata = | ||
305 | { | ||
306 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
307 | .name = "Shared Line in/Side out Capture Switch", | ||
308 | .info = snd_ca0106_capture_line_in_side_out_info, | ||
309 | .get = snd_ca0106_capture_mic_line_in_get, | ||
310 | .put = snd_ca0106_capture_mic_line_in_put | ||
311 | }; | ||
312 | |||
313 | |||
290 | static int snd_ca0106_spdif_info(struct snd_kcontrol *kcontrol, | 314 | static int snd_ca0106_spdif_info(struct snd_kcontrol *kcontrol, |
291 | struct snd_ctl_elem_info *uinfo) | 315 | struct snd_ctl_elem_info *uinfo) |
292 | { | 316 | { |
@@ -611,7 +635,10 @@ int __devinit snd_ca0106_mixer(struct snd_ca0106 *emu) | |||
611 | return err; | 635 | return err; |
612 | } | 636 | } |
613 | if (emu->details->i2c_adc == 1) { | 637 | if (emu->details->i2c_adc == 1) { |
614 | err = snd_ctl_add(card, snd_ctl_new1(&snd_ca0106_capture_mic_line_in, emu)); | 638 | if (emu->details->gpio_type == 1) |
639 | err = snd_ctl_add(card, snd_ctl_new1(&snd_ca0106_capture_mic_line_in, emu)); | ||
640 | else /* gpio_type == 2 */ | ||
641 | err = snd_ctl_add(card, snd_ctl_new1(&snd_ca0106_capture_line_in_side_out, emu)); | ||
615 | if (err < 0) | 642 | if (err < 0) |
616 | return err; | 643 | return err; |
617 | } | 644 | } |