[alsa-devel] [PATCH 0/2] ASoC: New enum type for bitfield coded enums

Peter Ujfalusi peter.ujfalusi at nokia.com
Mon Jan 5 08:54:56 CET 2009


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);





More information about the Alsa-devel mailing list