瀏覽代碼

ASoC: Volume controls are never of boolean type

Some limited volume controls (mostly simple attenuations) have only two
settings so the ASoC info functions misreport them as booleans. Since
we currently have no better information check for " Volume" in the
control name and always report any controls matching as being integer.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Mark Brown 16 年之前
父節點
當前提交
fd5dfad9cf
共有 1 個文件被更改,包括 3 次插入3 次删除
  1. 3 3
      sound/soc/soc-core.c

+ 3 - 3
sound/soc/soc-core.c

@@ -1779,7 +1779,7 @@ int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol,
 {
 {
 	int max = kcontrol->private_value;
 	int max = kcontrol->private_value;
 
 
-	if (max == 1)
+	if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 	else
 	else
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
@@ -1809,7 +1809,7 @@ int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
 	unsigned int shift = mc->shift;
 	unsigned int shift = mc->shift;
 	unsigned int rshift = mc->rshift;
 	unsigned int rshift = mc->rshift;
 
 
-	if (max == 1)
+	if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 	else
 	else
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
@@ -1916,7 +1916,7 @@ int snd_soc_info_volsw_2r(struct snd_kcontrol *kcontrol,
 		(struct soc_mixer_control *)kcontrol->private_value;
 		(struct soc_mixer_control *)kcontrol->private_value;
 	int max = mc->max;
 	int max = mc->max;
 
 
-	if (max == 1)
+	if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 	else
 	else
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;