Skip to contentSkip to conversation

sound/pci/hda: Fix Amp-In count for widgets with implied selector

PATCH In review Michael Karcher 2 participants 2 messages Apr 5, 2012 Sound

lore
Share & tools
lore
#0 lore raw

PATCH 1/6 sound/pci/hda: Fix Amp-In count for widgets with implied selector

A selector widget with AC_WCAP_IN_AMP has multiple input amplifiers (if the selector widget would have only one common amp, it would be labeled as "output amplifier" instead). This is just like mixer widgets.

If a non-mixer/selector widget has an input amplifier, it is only one input amplifier, even if it has a connection list with more than one entry. The implied selector is placed before the single input amplifier.

At least that is how I read the HDA specs, and what Conexant implements in their CX20549 codec.

sound/pci/hda/hda_proc.c +1 -1
index 254ab52..9b942f0 100644
@@ -653,7 +653,7 @@ static void print_codec_info(struct snd_info_entry *entry,
 			snd_iprintf(buffer, "  Amp-In vals: ");
 			print_amp_vals(buffer, codec, nid, HDA_INPUT,
 				       wid_caps & AC_WCAP_STEREO,
-				       wid_type == AC_WID_PIN ? 1 : conn_len);
+				       (wid_type == AC_WID_AUD_SEL || wid_type == AC_WID_AUD_MIX) ? conn_len : 1);
 		}
 		if (wid_caps & AC_WCAP_OUT_AMP) {
 			snd_iprintf(buffer, "  Amp-Out caps: ");
Signature · 1 line
1.7.9.1
#1 lore raw

At Thu, 05 Apr 2012 15:29:56 +0200,

Quoted 11 lines · Michael Karcher

A selector widget with AC_WCAP_IN_AMP has multiple input amplifiers (if the selector widget would have only one common amp, it would be labeled as "output amplifier" instead). This is just like mixer widgets.

If a non-mixer/selector widget has an input amplifier, it is only one input amplifier, even if it has a connection list with more than one entry. The implied selector is placed before the single input amplifier.

At least that is how I read the HDA specs, and what Conexant implements in their CX20549 codec.

It's rather cx20549-specific behavior. If you take a look at the BIOS auto-parser, spec->single_adc_amp is set as a workaround.

Yes, the proc file output should be fixed as well, but you can't change it globally for all codecs.

Takashi

Quoted 18 lines
sound/pci/hda/hda_proc.c +1 -1
index 254ab52..9b942f0 100644
@@ -653,7 +653,7 @@ static void print_codec_info(struct snd_info_entry *entry,
 			snd_iprintf(buffer, "  Amp-In vals: ");
 			print_amp_vals(buffer, codec, nid, HDA_INPUT,
 				       wid_caps & AC_WCAP_STEREO,
-				       wid_type == AC_WID_PIN ? 1 : conn_len);
+				       (wid_type == AC_WID_AUD_SEL || wid_type == AC_WID_AUD_MIX) ? conn_len : 1);
 		}
 		if (wid_caps & AC_WCAP_OUT_AMP) {
 			snd_iprintf(buffer, "  Amp-Out caps: ");
Signature · 1 line
1.7.9.1