@@ -914,9 +914,13 @@ static const struct suf {
*/
const char * const capture_volume_names[] = {
"ADC Boost Gain",
+ "ADC PGA Gain",
"IN1 Boost",
"IN2 Boost",
"IN3 Boost",
+ "Mono ADC Boost Gain",
+ "STO1 ADC Boost Gain",
+ "STO2 ADC Boost Gain",
NULL
};
#endif
@@ -944,6 +948,17 @@ static int base_len(const char *name, selem_ctl_type_t *type)
*type = CTL_CAPTURE_VOLUME;
return nlen;
}
+
+ /*
+ * Sometimes these have a " Volume" suffix instead of a
+ * " Capture Volume" suffix. Check for this so that we set
+ * type to CTL_CAPTURE_VOLUME instead of CTL_GLOBAL_VOLUME.
+ */
+ snprintf(buf, sizeof(buf), "%s Volume", capture_volume_names[i]);
+ if (!strcmp(name, buf)) {
+ *type = CTL_CAPTURE_VOLUME;
+ return nlen - strlen(" Volume");
+ }
}
p = suffixes;
The following ASoC codec drivers: sound/soc/codecs/rt5659.c sound/soc/codecs/rt5660.c sound/soc/codecs/rt5665.c sound/soc/codecs/rt5668.c sound/soc/codecs/rt5670.c sound/soc/codecs/rt5682.c Use the following troublesome capture-volume-control names: "IN1 Boost Volume" "IN2 Boost Volume" "IN3 Boost Volume" "STO1 ADC Boost Gain Volume" "STO2 ADC Boost Gain Volume" "Mono ADC Boost Gain Volume" And sound/soc/codecs/es8316.c uses "ADC PGA Gain Volume". Note how these are suffixed with just " Volume" instead of "Capture Volume" add some special handling for this to the base_len() function, which is responsbile for getting the control-type, so that the type correctly gets set to CTL_CAPTURE_VOLUME instead of CTL_GLOBAL_VOLUME. This correctly makes snd_mixer_selem_has_capture_volume() return true for these (and makes snd_mixer_selem_has_common_volume() return false). Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- src/mixer/simple_none.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)