.private_value = (unsigned long)&(struct soc_mixer_control) \
                {.reg = xreg, .min = xmin, .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, \
-       .max = xmax, .texts = xtexts, \
-       .mask = xmax ? roundup_pow_of_two(xmax) - 1 : 0}
-#define SOC_ENUM_SINGLE(xreg, xshift, xmax, xtexts) \
-       SOC_ENUM_DOUBLE(xreg, xshift, xshift, xmax, xtexts)
-#define SOC_ENUM_SINGLE_EXT(xmax, xtexts) \
-{      .max = xmax, .texts = xtexts }
-#define SOC_VALUE_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xmax, xtexts, xvalues) \
+       .items = xitems, .texts = xtexts, \
+       .mask = xitems ? roundup_pow_of_two(xitems) - 1 : 0}
+#define SOC_ENUM_SINGLE(xreg, xshift, xitems, xtexts) \
+       SOC_ENUM_DOUBLE(xreg, xshift, xshift, xitems, xtexts)
+#define SOC_ENUM_SINGLE_EXT(xitems, xtexts) \
+{      .items = xitems, .texts = xtexts }
+#define SOC_VALUE_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xitems, xtexts, xvalues) \
 {      .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \
-       .mask = xmask, .max = xmax, .texts = xtexts, .values = xvalues}
-#define SOC_VALUE_ENUM_SINGLE(xreg, xshift, xmask, xmax, xtexts, xvalues) \
-       SOC_VALUE_ENUM_DOUBLE(xreg, xshift, xshift, xmask, xmax, xtexts, xvalues)
+       .mask = xmask, .items = xitems, .texts = xtexts, .values = xvalues}
+#define SOC_VALUE_ENUM_SINGLE(xreg, xshift, xmask, xnitmes, xtexts, xvalues) \
+       SOC_VALUE_ENUM_DOUBLE(xreg, xshift, xshift, xmask, xnitmes, xtexts, xvalues)
 #define SOC_ENUM(xname, xenum) \
 {      .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\
        .info = snd_soc_info_enum_double, \
        unsigned short reg2;
        unsigned char shift_l;
        unsigned char shift_r;
-       unsigned int max;
+       unsigned int items;
        unsigned int mask;
        const char * const *texts;
        const unsigned int *values;
 
 
        /* Now point the soc_enum to .texts array items */
        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));
        if (ret != 0)
 
 
        /* Now point the soc_enum to .texts array items */
        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));
        if (ret != 0)
 
        /* Now point the soc_enum to .texts array items */
        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));
        if (ret != 0)
 
                return -EBUSY;
        }
 
-       if (ucontrol->value.enumerated.item[0] > e->max - 1)
+       if (ucontrol->value.enumerated.item[0] >= e->items)
                return -EINVAL;
 
        val = ucontrol->value.enumerated.item[0] << e->shift_l;
        mask = e->mask << e->shift_l;
        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;
                val |= ucontrol->value.enumerated.item[1] << e->shift_r;
                mask |= e->mask << e->shift_r;
 
        dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n",
                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;
 
        ret = snd_soc_add_codec_controls(codec, &control, 1);
                for (i = 0; i < pdata->num_drc_cfgs; i++)
                        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;
 
                ret = snd_soc_add_codec_controls(codec, &control, 1);
 
                for (i = 0; i < pdata->num_mbc_cfgs; i++)
                        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;
 
                ret = snd_soc_add_codec_controls(wm8994->hubs.codec,
                for (i = 0; i < pdata->num_vss_cfgs; i++)
                        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;
 
                ret = snd_soc_add_codec_controls(wm8994->hubs.codec,
                for (i = 0; i < pdata->num_vss_hpf_cfgs; i++)
                        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;
 
                ret = snd_soc_add_codec_controls(wm8994->hubs.codec,
                for (i = 0; i < pdata->num_enh_eq_cfgs; i++)
                        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;
 
                ret = snd_soc_add_codec_controls(wm8994->hubs.codec,
 
        dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n",
                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;
 
        ret = snd_soc_add_codec_controls(wm8994->hubs.codec, controls,
                for (i = 0; i < pdata->num_drc_cfgs; i++)
                        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;
 
                ret = snd_soc_add_codec_controls(wm8994->hubs.codec, controls,
 
        dev_dbg(codec->dev, "Allocated %d unique ReTune Mobile names\n",
                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;
 
        ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls));
 
        if (!codec->hw_write)
                return -EUNATCH;
 
-       if (ucontrol->value.enumerated.item[0] >= control->max)
+       if (ucontrol->value.enumerated.item[0] >= control->items)
                return -EINVAL;
 
        mutex_lock(&codec->mutex);
 
 
        uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
        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)
-               uinfo->value.enumerated.item = e->max - 1;
+       if (uinfo->value.enumerated.item >= e->items)
+               uinfo->value.enumerated.item = e->items - 1;
        strlcpy(uinfo->value.enumerated.name,
                e->texts[uinfo->value.enumerated.item],
                sizeof(uinfo->value.enumerated.name));
        unsigned int val;
        unsigned int mask;
 
-       if (ucontrol->value.enumerated.item[0] > e->max - 1)
+       if (ucontrol->value.enumerated.item[0] >= e->items)
                return -EINVAL;
        val = ucontrol->value.enumerated.item[0] << e->shift_l;
        mask = e->mask << e->shift_l;
        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;
                val |= ucontrol->value.enumerated.item[1] << e->shift_r;
                mask |= e->mask << e->shift_r;
 
        reg_val = snd_soc_read(codec, e->reg);
        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])
                        break;
        }
        ucontrol->value.enumerated.item[0] = mux;
        if (e->shift_l != e->shift_r) {
                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])
                                break;
                }
        unsigned int val;
        unsigned int mask;
 
-       if (ucontrol->value.enumerated.item[0] > e->max - 1)
+       if (ucontrol->value.enumerated.item[0] >= e->items)
                return -EINVAL;
        val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l;
        mask = e->mask << e->shift_l;
        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;
                val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r;
                mask |= e->mask << e->shift_r;
 
                soc_widget_read(w, e->reg, &val);
                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;
                else
                        p->connect = 0;
 
                soc_widget_read(w, e->reg, &val);
                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])
                                break;
                }
 
-               if (item < e->max && !strcmp(p->name, e->texts[item]))
+               if (item < e->items && !strcmp(p->name, e->texts[item]))
                        p->connect = 1;
                else
                        p->connect = 0;
        struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
        int i;
 
-       for (i = 0; i < e->max; i++) {
+       for (i = 0; i < e->items; i++) {
                if (!(strcmp(control_name, e->texts[i]))) {
                        list_add(&path->list, &dapm->card->paths);
                        list_add(&path->list_sink, &dest->sources);
        struct snd_soc_dapm_update update;
        int ret = 0;
 
-       if (ucontrol->value.enumerated.item[0] > e->max - 1)
+       if (ucontrol->value.enumerated.item[0] >= e->items)
                return -EINVAL;
        mux = ucontrol->value.enumerated.item[0];
        val = mux << e->shift_l;
        mask = e->mask << e->shift_l;
        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;
                val |= ucontrol->value.enumerated.item[1] << e->shift_r;
                mask |= e->mask << e->shift_r;
        int change;
        int ret = 0;
 
-       if (ucontrol->value.enumerated.item[0] >= e->max)
+       if (ucontrol->value.enumerated.item[0] >= e->items)
                return -EINVAL;
 
        mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
 
        reg_val = snd_soc_read(codec, e->reg);
        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])
                        break;
        }
        ucontrol->value.enumerated.item[0] = mux;
        if (e->shift_l != e->shift_r) {
                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])
                                break;
                }
        struct snd_soc_dapm_update update;
        int ret = 0;
 
-       if (ucontrol->value.enumerated.item[0] > e->max - 1)
+       if (ucontrol->value.enumerated.item[0] >= e->items)
                return -EINVAL;
        mux = ucontrol->value.enumerated.item[0];
        val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l;
        mask = e->mask << e->shift_l;
        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;
                val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r;
                mask |= e->mask << e->shift_r;