+config SND_SOC_CS42888
+ tristate "Cirrus Logic CS42888 CODEC"
+ depends on I2C
+[...]
+#define CS42888_NUM_SUPPLIES 4
+static const char *cs42888_supply_names[CS42888_NUM_SUPPLIES] = {
+ "VA",
+ "VD",
+ "VLS",
+ "VLC",
+};
+
+static const char *cs42888_adc_single[] = { "Differential", "Single-Ended" };
+static const char *cs42888_szc[] = { "Immediate Change", "Zero Cross",
+ "Soft Ramp", "Soft Ramp on Zero Cross" };
+
+static const struct soc_enum cs42888_enum[] = {
+ SOC_ENUM_SINGLE(CS42888_ADCCTL, 4, 2, cs42888_adc_single),
+ SOC_ENUM_SINGLE(CS42888_ADCCTL, 3, 2, cs42888_adc_single),
+ SOC_ENUM_SINGLE(CS42888_TXCTL, 5, 4, cs42888_szc),
+ SOC_ENUM_SINGLE(CS42888_TXCTL, 0, 4, cs42888_szc),
+};
+[...]
+static struct cs42888_ratios cs42888_ratios[] = {
+static struct snd_soc_dai_ops cs42888_dai_ops = {
+ .set_fmt = cs42888_set_dai_fmt,[...]
+ .set_sysclk = cs42888_set_dai_sysclk,
+ .hw_params = cs42888_hw_params,
+ .digital_mute = cs42888_digital_mute,
+};
+
+
+static struct reg_default cs42888_reg[] = {
+
+static struct snd_soc_codec_driver cs42888_driver = {
+ .probe = cs42888_probe,
+ .idle_bias_off = true,
+
+ .controls = cs42888_snd_controls,
+ .num_controls = ARRAY_SIZE(cs42888_snd_controls),
+ .dapm_widgets = cs42888_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(cs42888_dapm_widgets),
+ .dapm_routes = cs42888_dapm_routes,
+ .num_dapm_routes = ARRAY_SIZE(cs42888_dapm_routes),
+};
+