| Index: sound/soc/codecs/wm9090.c
|
| diff --git a/sound/soc/codecs/wm9090.c b/sound/soc/codecs/wm9090.c
|
| index 6e5f64f627cb82e6c7379ab389ec0a10e45d9b0a..4de12203e6113508712731c1060ed4e8d39cc743 100644
|
| --- a/sound/soc/codecs/wm9090.c
|
| +++ b/sound/soc/codecs/wm9090.c
|
| @@ -28,7 +28,6 @@
|
| #include <linux/slab.h>
|
| #include <sound/initval.h>
|
| #include <sound/soc.h>
|
| -#include <sound/soc-dapm.h>
|
| #include <sound/tlv.h>
|
| #include <sound/wm9090.h>
|
|
|
| @@ -145,7 +144,7 @@ struct wm9090_priv {
|
| void *control_data;
|
| };
|
|
|
| -static int wm9090_volatile(unsigned int reg)
|
| +static int wm9090_volatile(struct snd_soc_codec *codec, unsigned int reg)
|
| {
|
| switch (reg) {
|
| case WM9090_SOFTWARE_RESET:
|
| @@ -442,31 +441,32 @@ static const struct snd_soc_dapm_route audio_map_in2_diff[] = {
|
| static int wm9090_add_controls(struct snd_soc_codec *codec)
|
| {
|
| struct wm9090_priv *wm9090 = snd_soc_codec_get_drvdata(codec);
|
| + struct snd_soc_dapm_context *dapm = &codec->dapm;
|
| int i;
|
|
|
| - snd_soc_dapm_new_controls(codec, wm9090_dapm_widgets,
|
| + snd_soc_dapm_new_controls(dapm, wm9090_dapm_widgets,
|
| ARRAY_SIZE(wm9090_dapm_widgets));
|
|
|
| - snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
|
| + snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
|
|
|
| snd_soc_add_controls(codec, wm9090_controls,
|
| ARRAY_SIZE(wm9090_controls));
|
|
|
| if (wm9090->pdata.lin1_diff) {
|
| - snd_soc_dapm_add_routes(codec, audio_map_in1_diff,
|
| + snd_soc_dapm_add_routes(dapm, audio_map_in1_diff,
|
| ARRAY_SIZE(audio_map_in1_diff));
|
| } else {
|
| - snd_soc_dapm_add_routes(codec, audio_map_in1_se,
|
| + snd_soc_dapm_add_routes(dapm, audio_map_in1_se,
|
| ARRAY_SIZE(audio_map_in1_se));
|
| snd_soc_add_controls(codec, wm9090_in1_se_controls,
|
| ARRAY_SIZE(wm9090_in1_se_controls));
|
| }
|
|
|
| if (wm9090->pdata.lin2_diff) {
|
| - snd_soc_dapm_add_routes(codec, audio_map_in2_diff,
|
| + snd_soc_dapm_add_routes(dapm, audio_map_in2_diff,
|
| ARRAY_SIZE(audio_map_in2_diff));
|
| } else {
|
| - snd_soc_dapm_add_routes(codec, audio_map_in2_se,
|
| + snd_soc_dapm_add_routes(dapm, audio_map_in2_se,
|
| ARRAY_SIZE(audio_map_in2_se));
|
| snd_soc_add_controls(codec, wm9090_in2_se_controls,
|
| ARRAY_SIZE(wm9090_in2_se_controls));
|
| @@ -513,12 +513,12 @@ static int wm9090_set_bias_level(struct snd_soc_codec *codec,
|
| break;
|
|
|
| case SND_SOC_BIAS_STANDBY:
|
| - if (codec->bias_level == SND_SOC_BIAS_OFF) {
|
| + if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) {
|
| /* Restore the register cache */
|
| for (i = 1; i < codec->driver->reg_cache_size; i++) {
|
| if (reg_cache[i] == wm9090_reg_defaults[i])
|
| continue;
|
| - if (wm9090_volatile(i))
|
| + if (wm9090_volatile(codec, i))
|
| continue;
|
|
|
| ret = snd_soc_write(codec, i, reg_cache[i]);
|
| @@ -543,7 +543,7 @@ static int wm9090_set_bias_level(struct snd_soc_codec *codec,
|
| break;
|
| }
|
|
|
| - codec->bias_level = level;
|
| + codec->dapm.bias_level = level;
|
|
|
| return 0;
|
| }
|
| @@ -551,7 +551,6 @@ static int wm9090_set_bias_level(struct snd_soc_codec *codec,
|
| static int wm9090_probe(struct snd_soc_codec *codec)
|
| {
|
| struct wm9090_priv *wm9090 = snd_soc_codec_get_drvdata(codec);
|
| - u16 *reg_cache = codec->reg_cache;
|
| int ret;
|
|
|
| codec->control_data = wm9090->control_data;
|
| @@ -576,22 +575,30 @@ static int wm9090_probe(struct snd_soc_codec *codec)
|
| /* Configure some defaults; they will be written out when we
|
| * bring the bias up.
|
| */
|
| - reg_cache[WM9090_IN1_LINE_INPUT_A_VOLUME] |= WM9090_IN1_VU
|
| - | WM9090_IN1A_ZC;
|
| - reg_cache[WM9090_IN1_LINE_INPUT_B_VOLUME] |= WM9090_IN1_VU
|
| - | WM9090_IN1B_ZC;
|
| - reg_cache[WM9090_IN2_LINE_INPUT_A_VOLUME] |= WM9090_IN2_VU
|
| - | WM9090_IN2A_ZC;
|
| - reg_cache[WM9090_IN2_LINE_INPUT_B_VOLUME] |= WM9090_IN2_VU
|
| - | WM9090_IN2B_ZC;
|
| - reg_cache[WM9090_SPEAKER_VOLUME_LEFT] |=
|
| - WM9090_SPKOUT_VU | WM9090_SPKOUTL_ZC;
|
| - reg_cache[WM9090_LEFT_OUTPUT_VOLUME] |=
|
| - WM9090_HPOUT1_VU | WM9090_HPOUT1L_ZC;
|
| - reg_cache[WM9090_RIGHT_OUTPUT_VOLUME] |=
|
| - WM9090_HPOUT1_VU | WM9090_HPOUT1R_ZC;
|
| -
|
| - reg_cache[WM9090_CLOCKING_1] |= WM9090_TOCLK_ENA;
|
| + snd_soc_update_bits(codec, WM9090_IN1_LINE_INPUT_A_VOLUME,
|
| + WM9090_IN1_VU | WM9090_IN1A_ZC,
|
| + WM9090_IN1_VU | WM9090_IN1A_ZC);
|
| + snd_soc_update_bits(codec, WM9090_IN1_LINE_INPUT_B_VOLUME,
|
| + WM9090_IN1_VU | WM9090_IN1B_ZC,
|
| + WM9090_IN1_VU | WM9090_IN1B_ZC);
|
| + snd_soc_update_bits(codec, WM9090_IN2_LINE_INPUT_A_VOLUME,
|
| + WM9090_IN2_VU | WM9090_IN2A_ZC,
|
| + WM9090_IN2_VU | WM9090_IN2A_ZC);
|
| + snd_soc_update_bits(codec, WM9090_IN2_LINE_INPUT_B_VOLUME,
|
| + WM9090_IN2_VU | WM9090_IN2B_ZC,
|
| + WM9090_IN2_VU | WM9090_IN2B_ZC);
|
| + snd_soc_update_bits(codec, WM9090_SPEAKER_VOLUME_LEFT,
|
| + WM9090_SPKOUT_VU | WM9090_SPKOUTL_ZC,
|
| + WM9090_SPKOUT_VU | WM9090_SPKOUTL_ZC);
|
| + snd_soc_update_bits(codec, WM9090_LEFT_OUTPUT_VOLUME,
|
| + WM9090_HPOUT1_VU | WM9090_HPOUT1L_ZC,
|
| + WM9090_HPOUT1_VU | WM9090_HPOUT1L_ZC);
|
| + snd_soc_update_bits(codec, WM9090_RIGHT_OUTPUT_VOLUME,
|
| + WM9090_HPOUT1_VU | WM9090_HPOUT1R_ZC,
|
| + WM9090_HPOUT1_VU | WM9090_HPOUT1R_ZC);
|
| +
|
| + snd_soc_update_bits(codec, WM9090_CLOCKING_1,
|
| + WM9090_TOCLK_ENA, WM9090_TOCLK_ENA);
|
|
|
| wm9090_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
|
|
|
|