Commit 9a8d38db authored by Takashi Iwai's avatar Takashi Iwai Committed by Mark Brown

ASoC: Rename soc_enum.max field with items

The name "max" in struct soc_enum is rather confusing since it
actually takes the number of items.  With "max", one might try to
assign (nitems - 1) value.

Rename the field to a more appropriate one, "items", which is also
used in struct snd_ctl_elem_info, too.

This patch also rewrites some code like "if (x > e->nitems - 1)" with
"if (x >= e->nitems)".  Not only the latter improves the readability,
it also fixes a potential bug when e->items is zero.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Acked-by: default avatarLiam Girdwood <liam.r.girdwood@linux.intel.com>
Acked-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 38dbfb59
...@@ -162,19 +162,19 @@ ...@@ -162,19 +162,19 @@
.private_value = (unsigned long)&(struct soc_mixer_control) \ .private_value = (unsigned long)&(struct soc_mixer_control) \
{.reg = xreg, .min = xmin, .max = xmax, \ {.reg = xreg, .min = xmin, .max = xmax, \
.platform_max = xmax} } .platform_max = xmax} }
#define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmax, xtexts) \ #define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xitems, xtexts) \
{ .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \ { .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \
.max = xmax, .texts = xtexts, \ .items = xitems, .texts = xtexts, \
.mask = xmax ? roundup_pow_of_two(xmax) - 1 : 0} .mask = xitems ? roundup_pow_of_two(xitems) - 1 : 0}
#define SOC_ENUM_SINGLE(xreg, xshift, xmax, xtexts) \ #define SOC_ENUM_SINGLE(xreg, xshift, xitems, xtexts) \
SOC_ENUM_DOUBLE(xreg, xshift, xshift, xmax, xtexts) SOC_ENUM_DOUBLE(xreg, xshift, xshift, xitems, xtexts)
#define SOC_ENUM_SINGLE_EXT(xmax, xtexts) \ #define SOC_ENUM_SINGLE_EXT(xitems, xtexts) \
{ .max = xmax, .texts = xtexts } { .items = xitems, .texts = xtexts }
#define SOC_VALUE_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xmax, xtexts, xvalues) \ #define SOC_VALUE_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xitems, xtexts, xvalues) \
{ .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \ { .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \
.mask = xmask, .max = xmax, .texts = xtexts, .values = xvalues} .mask = xmask, .items = xitems, .texts = xtexts, .values = xvalues}
#define SOC_VALUE_ENUM_SINGLE(xreg, xshift, xmask, xmax, xtexts, xvalues) \ #define SOC_VALUE_ENUM_SINGLE(xreg, xshift, xmask, xnitmes, xtexts, xvalues) \
SOC_VALUE_ENUM_DOUBLE(xreg, xshift, xshift, xmask, xmax, xtexts, xvalues) SOC_VALUE_ENUM_DOUBLE(xreg, xshift, xshift, xmask, xnitmes, xtexts, xvalues)
#define SOC_ENUM(xname, xenum) \ #define SOC_ENUM(xname, xenum) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\
.info = snd_soc_info_enum_double, \ .info = snd_soc_info_enum_double, \
...@@ -1089,7 +1089,7 @@ struct soc_enum { ...@@ -1089,7 +1089,7 @@ struct soc_enum {
unsigned short reg2; unsigned short reg2;
unsigned char shift_l; unsigned char shift_l;
unsigned char shift_r; unsigned char shift_r;
unsigned int max; unsigned int items;
unsigned int mask; unsigned int mask;
const char * const *texts; const char * const *texts;
const unsigned int *values; const unsigned int *values;
......
...@@ -1849,7 +1849,7 @@ static void max98088_handle_eq_pdata(struct snd_soc_codec *codec) ...@@ -1849,7 +1849,7 @@ static void max98088_handle_eq_pdata(struct snd_soc_codec *codec)
/* Now point the soc_enum to .texts array items */ /* Now point the soc_enum to .texts array items */
max98088->eq_enum.texts = max98088->eq_texts; max98088->eq_enum.texts = max98088->eq_texts;
max98088->eq_enum.max = max98088->eq_textcnt; max98088->eq_enum.items = max98088->eq_textcnt;
ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls)); ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls));
if (ret != 0) if (ret != 0)
......
...@@ -1861,7 +1861,7 @@ static void max98095_handle_eq_pdata(struct snd_soc_codec *codec) ...@@ -1861,7 +1861,7 @@ static void max98095_handle_eq_pdata(struct snd_soc_codec *codec)
/* Now point the soc_enum to .texts array items */ /* Now point the soc_enum to .texts array items */
max98095->eq_enum.texts = max98095->eq_texts; max98095->eq_enum.texts = max98095->eq_texts;
max98095->eq_enum.max = max98095->eq_textcnt; max98095->eq_enum.items = max98095->eq_textcnt;
ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls)); ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls));
if (ret != 0) if (ret != 0)
...@@ -2016,7 +2016,7 @@ static void max98095_handle_bq_pdata(struct snd_soc_codec *codec) ...@@ -2016,7 +2016,7 @@ static void max98095_handle_bq_pdata(struct snd_soc_codec *codec)
/* Now point the soc_enum to .texts array items */ /* Now point the soc_enum to .texts array items */
max98095->bq_enum.texts = max98095->bq_texts; max98095->bq_enum.texts = max98095->bq_texts;
max98095->bq_enum.max = max98095->bq_textcnt; max98095->bq_enum.items = max98095->bq_textcnt;
ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls)); ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls));
if (ret != 0) if (ret != 0)
......
...@@ -975,13 +975,13 @@ static int snd_soc_put_twl4030_opmode_enum_double(struct snd_kcontrol *kcontrol, ...@@ -975,13 +975,13 @@ static int snd_soc_put_twl4030_opmode_enum_double(struct snd_kcontrol *kcontrol,
return -EBUSY; return -EBUSY;
} }
if (ucontrol->value.enumerated.item[0] > e->max - 1) if (ucontrol->value.enumerated.item[0] >= e->items)
return -EINVAL; return -EINVAL;
val = ucontrol->value.enumerated.item[0] << e->shift_l; val = ucontrol->value.enumerated.item[0] << e->shift_l;
mask = e->mask << e->shift_l; mask = e->mask << e->shift_l;
if (e->shift_l != e->shift_r) { if (e->shift_l != e->shift_r) {
if (ucontrol->value.enumerated.item[1] > e->max - 1) if (ucontrol->value.enumerated.item[1] >= e->items)
return -EINVAL; return -EINVAL;
val |= ucontrol->value.enumerated.item[1] << e->shift_r; val |= ucontrol->value.enumerated.item[1] << e->shift_r;
mask |= e->mask << e->shift_r; mask |= e->mask << e->shift_r;
......
...@@ -1981,7 +1981,7 @@ static void wm8904_handle_retune_mobile_pdata(struct snd_soc_codec *codec) ...@@ -1981,7 +1981,7 @@ static void wm8904_handle_retune_mobile_pdata(struct snd_soc_codec *codec)
dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n", dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n",
wm8904->num_retune_mobile_texts); wm8904->num_retune_mobile_texts);
wm8904->retune_mobile_enum.max = wm8904->num_retune_mobile_texts; wm8904->retune_mobile_enum.items = wm8904->num_retune_mobile_texts;
wm8904->retune_mobile_enum.texts = wm8904->retune_mobile_texts; wm8904->retune_mobile_enum.texts = wm8904->retune_mobile_texts;
ret = snd_soc_add_codec_controls(codec, &control, 1); ret = snd_soc_add_codec_controls(codec, &control, 1);
...@@ -2022,7 +2022,7 @@ static void wm8904_handle_pdata(struct snd_soc_codec *codec) ...@@ -2022,7 +2022,7 @@ static void wm8904_handle_pdata(struct snd_soc_codec *codec)
for (i = 0; i < pdata->num_drc_cfgs; i++) for (i = 0; i < pdata->num_drc_cfgs; i++)
wm8904->drc_texts[i] = pdata->drc_cfgs[i].name; wm8904->drc_texts[i] = pdata->drc_cfgs[i].name;
wm8904->drc_enum.max = pdata->num_drc_cfgs; wm8904->drc_enum.items = pdata->num_drc_cfgs;
wm8904->drc_enum.texts = wm8904->drc_texts; wm8904->drc_enum.texts = wm8904->drc_texts;
ret = snd_soc_add_codec_controls(codec, &control, 1); ret = snd_soc_add_codec_controls(codec, &control, 1);
......
...@@ -944,7 +944,7 @@ void wm8958_dsp2_init(struct snd_soc_codec *codec) ...@@ -944,7 +944,7 @@ void wm8958_dsp2_init(struct snd_soc_codec *codec)
for (i = 0; i < pdata->num_mbc_cfgs; i++) for (i = 0; i < pdata->num_mbc_cfgs; i++)
wm8994->mbc_texts[i] = pdata->mbc_cfgs[i].name; wm8994->mbc_texts[i] = pdata->mbc_cfgs[i].name;
wm8994->mbc_enum.max = pdata->num_mbc_cfgs; wm8994->mbc_enum.items = pdata->num_mbc_cfgs;
wm8994->mbc_enum.texts = wm8994->mbc_texts; wm8994->mbc_enum.texts = wm8994->mbc_texts;
ret = snd_soc_add_codec_controls(wm8994->hubs.codec, ret = snd_soc_add_codec_controls(wm8994->hubs.codec,
...@@ -973,7 +973,7 @@ void wm8958_dsp2_init(struct snd_soc_codec *codec) ...@@ -973,7 +973,7 @@ void wm8958_dsp2_init(struct snd_soc_codec *codec)
for (i = 0; i < pdata->num_vss_cfgs; i++) for (i = 0; i < pdata->num_vss_cfgs; i++)
wm8994->vss_texts[i] = pdata->vss_cfgs[i].name; wm8994->vss_texts[i] = pdata->vss_cfgs[i].name;
wm8994->vss_enum.max = pdata->num_vss_cfgs; wm8994->vss_enum.items = pdata->num_vss_cfgs;
wm8994->vss_enum.texts = wm8994->vss_texts; wm8994->vss_enum.texts = wm8994->vss_texts;
ret = snd_soc_add_codec_controls(wm8994->hubs.codec, ret = snd_soc_add_codec_controls(wm8994->hubs.codec,
...@@ -1003,7 +1003,7 @@ void wm8958_dsp2_init(struct snd_soc_codec *codec) ...@@ -1003,7 +1003,7 @@ void wm8958_dsp2_init(struct snd_soc_codec *codec)
for (i = 0; i < pdata->num_vss_hpf_cfgs; i++) for (i = 0; i < pdata->num_vss_hpf_cfgs; i++)
wm8994->vss_hpf_texts[i] = pdata->vss_hpf_cfgs[i].name; wm8994->vss_hpf_texts[i] = pdata->vss_hpf_cfgs[i].name;
wm8994->vss_hpf_enum.max = pdata->num_vss_hpf_cfgs; wm8994->vss_hpf_enum.items = pdata->num_vss_hpf_cfgs;
wm8994->vss_hpf_enum.texts = wm8994->vss_hpf_texts; wm8994->vss_hpf_enum.texts = wm8994->vss_hpf_texts;
ret = snd_soc_add_codec_controls(wm8994->hubs.codec, ret = snd_soc_add_codec_controls(wm8994->hubs.codec,
...@@ -1034,7 +1034,7 @@ void wm8958_dsp2_init(struct snd_soc_codec *codec) ...@@ -1034,7 +1034,7 @@ void wm8958_dsp2_init(struct snd_soc_codec *codec)
for (i = 0; i < pdata->num_enh_eq_cfgs; i++) for (i = 0; i < pdata->num_enh_eq_cfgs; i++)
wm8994->enh_eq_texts[i] = pdata->enh_eq_cfgs[i].name; wm8994->enh_eq_texts[i] = pdata->enh_eq_cfgs[i].name;
wm8994->enh_eq_enum.max = pdata->num_enh_eq_cfgs; wm8994->enh_eq_enum.items = pdata->num_enh_eq_cfgs;
wm8994->enh_eq_enum.texts = wm8994->enh_eq_texts; wm8994->enh_eq_enum.texts = wm8994->enh_eq_texts;
ret = snd_soc_add_codec_controls(wm8994->hubs.codec, ret = snd_soc_add_codec_controls(wm8994->hubs.codec,
......
...@@ -3237,7 +3237,7 @@ static void wm8994_handle_retune_mobile_pdata(struct wm8994_priv *wm8994) ...@@ -3237,7 +3237,7 @@ static void wm8994_handle_retune_mobile_pdata(struct wm8994_priv *wm8994)
dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n", dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n",
wm8994->num_retune_mobile_texts); wm8994->num_retune_mobile_texts);
wm8994->retune_mobile_enum.max = wm8994->num_retune_mobile_texts; wm8994->retune_mobile_enum.items = wm8994->num_retune_mobile_texts;
wm8994->retune_mobile_enum.texts = wm8994->retune_mobile_texts; wm8994->retune_mobile_enum.texts = wm8994->retune_mobile_texts;
ret = snd_soc_add_codec_controls(wm8994->hubs.codec, controls, ret = snd_soc_add_codec_controls(wm8994->hubs.codec, controls,
...@@ -3293,7 +3293,7 @@ static void wm8994_handle_pdata(struct wm8994_priv *wm8994) ...@@ -3293,7 +3293,7 @@ static void wm8994_handle_pdata(struct wm8994_priv *wm8994)
for (i = 0; i < pdata->num_drc_cfgs; i++) for (i = 0; i < pdata->num_drc_cfgs; i++)
wm8994->drc_texts[i] = pdata->drc_cfgs[i].name; wm8994->drc_texts[i] = pdata->drc_cfgs[i].name;
wm8994->drc_enum.max = pdata->num_drc_cfgs; wm8994->drc_enum.items = pdata->num_drc_cfgs;
wm8994->drc_enum.texts = wm8994->drc_texts; wm8994->drc_enum.texts = wm8994->drc_texts;
ret = snd_soc_add_codec_controls(wm8994->hubs.codec, controls, ret = snd_soc_add_codec_controls(wm8994->hubs.codec, controls,
......
...@@ -2595,7 +2595,7 @@ static void wm8996_retune_mobile_pdata(struct snd_soc_codec *codec) ...@@ -2595,7 +2595,7 @@ static void wm8996_retune_mobile_pdata(struct snd_soc_codec *codec)
dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n", dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n",
wm8996->num_retune_mobile_texts); wm8996->num_retune_mobile_texts);
wm8996->retune_mobile_enum.max = wm8996->num_retune_mobile_texts; wm8996->retune_mobile_enum.items = wm8996->num_retune_mobile_texts;
wm8996->retune_mobile_enum.texts = wm8996->retune_mobile_texts; wm8996->retune_mobile_enum.texts = wm8996->retune_mobile_texts;
ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls)); ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls));
......
...@@ -103,7 +103,7 @@ static int ams_delta_set_audio_mode(struct snd_kcontrol *kcontrol, ...@@ -103,7 +103,7 @@ static int ams_delta_set_audio_mode(struct snd_kcontrol *kcontrol,
if (!codec->hw_write) if (!codec->hw_write)
return -EUNATCH; return -EUNATCH;
if (ucontrol->value.enumerated.item[0] >= control->max) if (ucontrol->value.enumerated.item[0] >= control->items)
return -EINVAL; return -EINVAL;
mutex_lock(&codec->mutex); mutex_lock(&codec->mutex);
......
...@@ -2571,10 +2571,10 @@ int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, ...@@ -2571,10 +2571,10 @@ int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
uinfo->count = e->shift_l == e->shift_r ? 1 : 2; uinfo->count = e->shift_l == e->shift_r ? 1 : 2;
uinfo->value.enumerated.items = e->max; uinfo->value.enumerated.items = e->items;
if (uinfo->value.enumerated.item > e->max - 1) if (uinfo->value.enumerated.item >= e->items)
uinfo->value.enumerated.item = e->max - 1; uinfo->value.enumerated.item = e->items - 1;
strlcpy(uinfo->value.enumerated.name, strlcpy(uinfo->value.enumerated.name,
e->texts[uinfo->value.enumerated.item], e->texts[uinfo->value.enumerated.item],
sizeof(uinfo->value.enumerated.name)); sizeof(uinfo->value.enumerated.name));
...@@ -2626,12 +2626,12 @@ int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, ...@@ -2626,12 +2626,12 @@ int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
unsigned int val; unsigned int val;
unsigned int mask; unsigned int mask;
if (ucontrol->value.enumerated.item[0] > e->max - 1) if (ucontrol->value.enumerated.item[0] >= e->items)
return -EINVAL; return -EINVAL;
val = ucontrol->value.enumerated.item[0] << e->shift_l; val = ucontrol->value.enumerated.item[0] << e->shift_l;
mask = e->mask << e->shift_l; mask = e->mask << e->shift_l;
if (e->shift_l != e->shift_r) { if (e->shift_l != e->shift_r) {
if (ucontrol->value.enumerated.item[1] > e->max - 1) if (ucontrol->value.enumerated.item[1] >= e->items)
return -EINVAL; return -EINVAL;
val |= ucontrol->value.enumerated.item[1] << e->shift_r; val |= ucontrol->value.enumerated.item[1] << e->shift_r;
mask |= e->mask << e->shift_r; mask |= e->mask << e->shift_r;
...@@ -2662,14 +2662,14 @@ int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol, ...@@ -2662,14 +2662,14 @@ int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol,
reg_val = snd_soc_read(codec, e->reg); reg_val = snd_soc_read(codec, e->reg);
val = (reg_val >> e->shift_l) & e->mask; val = (reg_val >> e->shift_l) & e->mask;
for (mux = 0; mux < e->max; mux++) { for (mux = 0; mux < e->items; mux++) {
if (val == e->values[mux]) if (val == e->values[mux])
break; break;
} }
ucontrol->value.enumerated.item[0] = mux; ucontrol->value.enumerated.item[0] = mux;
if (e->shift_l != e->shift_r) { if (e->shift_l != e->shift_r) {
val = (reg_val >> e->shift_r) & e->mask; val = (reg_val >> e->shift_r) & e->mask;
for (mux = 0; mux < e->max; mux++) { for (mux = 0; mux < e->items; mux++) {
if (val == e->values[mux]) if (val == e->values[mux])
break; break;
} }
...@@ -2700,12 +2700,12 @@ int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol, ...@@ -2700,12 +2700,12 @@ int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol,
unsigned int val; unsigned int val;
unsigned int mask; unsigned int mask;
if (ucontrol->value.enumerated.item[0] > e->max - 1) if (ucontrol->value.enumerated.item[0] >= e->items)
return -EINVAL; return -EINVAL;
val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l; val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l;
mask = e->mask << e->shift_l; mask = e->mask << e->shift_l;
if (e->shift_l != e->shift_r) { if (e->shift_l != e->shift_r) {
if (ucontrol->value.enumerated.item[1] > e->max - 1) if (ucontrol->value.enumerated.item[1] >= e->items)
return -EINVAL; return -EINVAL;
val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r; val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r;
mask |= e->mask << e->shift_r; mask |= e->mask << e->shift_r;
......
...@@ -535,7 +535,7 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w, ...@@ -535,7 +535,7 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
soc_widget_read(w, e->reg, &val); soc_widget_read(w, e->reg, &val);
item = (val >> e->shift_l) & e->mask; item = (val >> e->shift_l) & e->mask;
if (item < e->max && !strcmp(p->name, e->texts[item])) if (item < e->items && !strcmp(p->name, e->texts[item]))
p->connect = 1; p->connect = 1;
else else
p->connect = 0; p->connect = 0;
...@@ -563,12 +563,12 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w, ...@@ -563,12 +563,12 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
soc_widget_read(w, e->reg, &val); soc_widget_read(w, e->reg, &val);
val = (val >> e->shift_l) & e->mask; val = (val >> e->shift_l) & e->mask;
for (item = 0; item < e->max; item++) { for (item = 0; item < e->items; item++) {
if (val == e->values[item]) if (val == e->values[item])
break; break;
} }
if (item < e->max && !strcmp(p->name, e->texts[item])) if (item < e->items && !strcmp(p->name, e->texts[item]))
p->connect = 1; p->connect = 1;
else else
p->connect = 0; p->connect = 0;
...@@ -616,7 +616,7 @@ static int dapm_connect_mux(struct snd_soc_dapm_context *dapm, ...@@ -616,7 +616,7 @@ static int dapm_connect_mux(struct snd_soc_dapm_context *dapm,
struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
int i; int i;
for (i = 0; i < e->max; i++) { for (i = 0; i < e->items; i++) {
if (!(strcmp(control_name, e->texts[i]))) { if (!(strcmp(control_name, e->texts[i]))) {
list_add(&path->list, &dapm->card->paths); list_add(&path->list, &dapm->card->paths);
list_add(&path->list_sink, &dest->sources); list_add(&path->list_sink, &dest->sources);
...@@ -2967,13 +2967,13 @@ int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol, ...@@ -2967,13 +2967,13 @@ int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
struct snd_soc_dapm_update update; struct snd_soc_dapm_update update;
int ret = 0; int ret = 0;
if (ucontrol->value.enumerated.item[0] > e->max - 1) if (ucontrol->value.enumerated.item[0] >= e->items)
return -EINVAL; return -EINVAL;
mux = ucontrol->value.enumerated.item[0]; mux = ucontrol->value.enumerated.item[0];
val = mux << e->shift_l; val = mux << e->shift_l;
mask = e->mask << e->shift_l; mask = e->mask << e->shift_l;
if (e->shift_l != e->shift_r) { if (e->shift_l != e->shift_r) {
if (ucontrol->value.enumerated.item[1] > e->max - 1) if (ucontrol->value.enumerated.item[1] >= e->items)
return -EINVAL; return -EINVAL;
val |= ucontrol->value.enumerated.item[1] << e->shift_r; val |= ucontrol->value.enumerated.item[1] << e->shift_r;
mask |= e->mask << e->shift_r; mask |= e->mask << e->shift_r;
...@@ -3036,7 +3036,7 @@ int snd_soc_dapm_put_enum_virt(struct snd_kcontrol *kcontrol, ...@@ -3036,7 +3036,7 @@ int snd_soc_dapm_put_enum_virt(struct snd_kcontrol *kcontrol,
int change; int change;
int ret = 0; int ret = 0;
if (ucontrol->value.enumerated.item[0] >= e->max) if (ucontrol->value.enumerated.item[0] >= e->items)
return -EINVAL; return -EINVAL;
mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
...@@ -3077,14 +3077,14 @@ int snd_soc_dapm_get_value_enum_double(struct snd_kcontrol *kcontrol, ...@@ -3077,14 +3077,14 @@ int snd_soc_dapm_get_value_enum_double(struct snd_kcontrol *kcontrol,
reg_val = snd_soc_read(codec, e->reg); reg_val = snd_soc_read(codec, e->reg);
val = (reg_val >> e->shift_l) & e->mask; val = (reg_val >> e->shift_l) & e->mask;
for (mux = 0; mux < e->max; mux++) { for (mux = 0; mux < e->items; mux++) {
if (val == e->values[mux]) if (val == e->values[mux])
break; break;
} }
ucontrol->value.enumerated.item[0] = mux; ucontrol->value.enumerated.item[0] = mux;
if (e->shift_l != e->shift_r) { if (e->shift_l != e->shift_r) {
val = (reg_val >> e->shift_r) & e->mask; val = (reg_val >> e->shift_r) & e->mask;
for (mux = 0; mux < e->max; mux++) { for (mux = 0; mux < e->items; mux++) {
if (val == e->values[mux]) if (val == e->values[mux])
break; break;
} }
...@@ -3119,13 +3119,13 @@ int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, ...@@ -3119,13 +3119,13 @@ int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol,
struct snd_soc_dapm_update update; struct snd_soc_dapm_update update;
int ret = 0; int ret = 0;
if (ucontrol->value.enumerated.item[0] > e->max - 1) if (ucontrol->value.enumerated.item[0] >= e->items)
return -EINVAL; return -EINVAL;
mux = ucontrol->value.enumerated.item[0]; mux = ucontrol->value.enumerated.item[0];
val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l; val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l;
mask = e->mask << e->shift_l; mask = e->mask << e->shift_l;
if (e->shift_l != e->shift_r) { if (e->shift_l != e->shift_r) {
if (ucontrol->value.enumerated.item[1] > e->max - 1) if (ucontrol->value.enumerated.item[1] >= e->items)
return -EINVAL; return -EINVAL;
val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r; val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r;
mask |= e->mask << e->shift_r; mask |= e->mask << e->shift_r;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment