Hello,
The first patch adds new enum type to handle non enum coded enums. The twl4030 codec for example have some of it's input/output mux settings in a bitfiled, which can not be handled by the standard enum type.
The second patch converts the twl4030 bitfield enums to the new value_enum type.
Technically it could be possible to add the new members (mask, *values) to the existing soc_enum structure, which could reduce the amount of new code needed to handle this new type. At least the snd_soc_info_value_enum_double, dapm_connect_value_mux, dapm_value_mux_update_power functions can be removed if I modify the soc_enum instead of introducing the new soc_value_enum.
The new type is quite flexible: one can define the normal enum types also with the VALUE_ENUM (although it does not make any sense):
/* Normal enum */ static const char *normal_mux_texts[] = {"Off", "mux1", "mux2", "mux3"};
static const unsigned int normal_mux_values[] = {0x0, 0x1, 0x2, 0x3};
static const struct soc_value_enum normal_mux_enum = SOC_VALUE_ENUM_SINGLE(REGISTER, 0, 0x3, ARRAY_SIZE(normal_mux_texts), normal_mux_texts, normal_mux_values);
But it makes more sense if one wants to handle the bitfiled (from twl4030 codec):
/* PreDrive Right */ static const char *twl4030_predriver_texts[] = {"Off", "DACR1", "DACR2", "DACL2"};
static const unsigned int twl4030_predriver_values[] = {0x0, 0x1, 0x2, 0x4};
static const struct soc_value_enum twl4030_predriver_enum = SOC_VALUE_ENUM_SINGLE(TWL4030_REG_PREDR_CTL, 1, 0x7, ARRAY_SIZE(twl4030_predriver_texts), twl4030_predriver_texts, twl4030_predriver_values);
static const struct snd_kcontrol_new twl4030_dapm_predriver_control = SOC_DAPM_VALUE_ENUM("Route", twl4030_predriver_enum);