diff options
Diffstat (limited to 'sound/soc/codecs/wm5100.c')
-rw-r--r-- | sound/soc/codecs/wm5100.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/sound/soc/codecs/wm5100.c b/sound/soc/codecs/wm5100.c index 4e3e31aaf509..eca983fad891 100644 --- a/sound/soc/codecs/wm5100.c +++ b/sound/soc/codecs/wm5100.c | |||
@@ -506,21 +506,21 @@ static const char *wm5100_lhpf_mode_text[] = { | |||
506 | "Low-pass", "High-pass" | 506 | "Low-pass", "High-pass" |
507 | }; | 507 | }; |
508 | 508 | ||
509 | static const struct soc_enum wm5100_lhpf1_mode = | 509 | static SOC_ENUM_SINGLE_DECL(wm5100_lhpf1_mode, |
510 | SOC_ENUM_SINGLE(WM5100_HPLPF1_1, WM5100_LHPF1_MODE_SHIFT, 2, | 510 | WM5100_HPLPF1_1, WM5100_LHPF1_MODE_SHIFT, |
511 | wm5100_lhpf_mode_text); | 511 | wm5100_lhpf_mode_text); |
512 | 512 | ||
513 | static const struct soc_enum wm5100_lhpf2_mode = | 513 | static SOC_ENUM_SINGLE_DECL(wm5100_lhpf2_mode, |
514 | SOC_ENUM_SINGLE(WM5100_HPLPF2_1, WM5100_LHPF2_MODE_SHIFT, 2, | 514 | WM5100_HPLPF2_1, WM5100_LHPF2_MODE_SHIFT, |
515 | wm5100_lhpf_mode_text); | 515 | wm5100_lhpf_mode_text); |
516 | 516 | ||
517 | static const struct soc_enum wm5100_lhpf3_mode = | 517 | static SOC_ENUM_SINGLE_DECL(wm5100_lhpf3_mode, |
518 | SOC_ENUM_SINGLE(WM5100_HPLPF3_1, WM5100_LHPF3_MODE_SHIFT, 2, | 518 | WM5100_HPLPF3_1, WM5100_LHPF3_MODE_SHIFT, |
519 | wm5100_lhpf_mode_text); | 519 | wm5100_lhpf_mode_text); |
520 | 520 | ||
521 | static const struct soc_enum wm5100_lhpf4_mode = | 521 | static SOC_ENUM_SINGLE_DECL(wm5100_lhpf4_mode, |
522 | SOC_ENUM_SINGLE(WM5100_HPLPF4_1, WM5100_LHPF4_MODE_SHIFT, 2, | 522 | WM5100_HPLPF4_1, WM5100_LHPF4_MODE_SHIFT, |
523 | wm5100_lhpf_mode_text); | 523 | wm5100_lhpf_mode_text); |
524 | 524 | ||
525 | static const struct snd_kcontrol_new wm5100_snd_controls[] = { | 525 | static const struct snd_kcontrol_new wm5100_snd_controls[] = { |
526 | SOC_SINGLE("IN1 High Performance Switch", WM5100_IN1L_CONTROL, | 526 | SOC_SINGLE("IN1 High Performance Switch", WM5100_IN1L_CONTROL, |
@@ -2100,6 +2100,7 @@ static void wm5100_micd_irq(struct wm5100_priv *wm5100) | |||
2100 | int wm5100_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack) | 2100 | int wm5100_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack) |
2101 | { | 2101 | { |
2102 | struct wm5100_priv *wm5100 = snd_soc_codec_get_drvdata(codec); | 2102 | struct wm5100_priv *wm5100 = snd_soc_codec_get_drvdata(codec); |
2103 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
2103 | 2104 | ||
2104 | if (jack) { | 2105 | if (jack) { |
2105 | wm5100->jack = jack; | 2106 | wm5100->jack = jack; |
@@ -2117,9 +2118,14 @@ int wm5100_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack) | |||
2117 | WM5100_ACCDET_RATE_MASK); | 2118 | WM5100_ACCDET_RATE_MASK); |
2118 | 2119 | ||
2119 | /* We need the charge pump to power MICBIAS */ | 2120 | /* We need the charge pump to power MICBIAS */ |
2120 | snd_soc_dapm_force_enable_pin(&codec->dapm, "CP2"); | 2121 | snd_soc_dapm_mutex_lock(dapm); |
2121 | snd_soc_dapm_force_enable_pin(&codec->dapm, "SYSCLK"); | 2122 | |
2122 | snd_soc_dapm_sync(&codec->dapm); | 2123 | snd_soc_dapm_force_enable_pin_unlocked(dapm, "CP2"); |
2124 | snd_soc_dapm_force_enable_pin_unlocked(dapm, "SYSCLK"); | ||
2125 | |||
2126 | snd_soc_dapm_sync_unlocked(dapm); | ||
2127 | |||
2128 | snd_soc_dapm_mutex_unlock(dapm); | ||
2123 | 2129 | ||
2124 | /* We start off just enabling microphone detection - even a | 2130 | /* We start off just enabling microphone detection - even a |
2125 | * plain headphone will trigger detection. | 2131 | * plain headphone will trigger detection. |
@@ -2337,13 +2343,6 @@ static int wm5100_probe(struct snd_soc_codec *codec) | |||
2337 | int ret, i; | 2343 | int ret, i; |
2338 | 2344 | ||
2339 | wm5100->codec = codec; | 2345 | wm5100->codec = codec; |
2340 | codec->control_data = wm5100->regmap; | ||
2341 | |||
2342 | ret = snd_soc_codec_set_cache_io(codec, 16, 16, SND_SOC_REGMAP); | ||
2343 | if (ret != 0) { | ||
2344 | dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret); | ||
2345 | return ret; | ||
2346 | } | ||
2347 | 2346 | ||
2348 | for (i = 0; i < ARRAY_SIZE(wm5100_dig_vu); i++) | 2347 | for (i = 0; i < ARRAY_SIZE(wm5100_dig_vu); i++) |
2349 | snd_soc_update_bits(codec, wm5100_dig_vu[i], WM5100_OUT_VU, | 2348 | snd_soc_update_bits(codec, wm5100_dig_vu[i], WM5100_OUT_VU, |