aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm5100.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2011-11-10 11:14:04 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2011-11-10 11:16:19 -0500
commitd9b5e9c6bccc3850b91ddaac11b49f2510375f5b (patch)
tree5e3d8f6b76566e199d7154d1d315b701794e51cc /sound/soc/codecs/wm5100.c
parentc9016a7937122b72d87ff2037664b7bd717d3e4b (diff)
ASoC: Move WM5100 platform data based setup into I2C probe
Get things configured as early as possible, especially useful for the GPIOs which might be useful anyway. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/wm5100.c')
-rw-r--r--sound/soc/codecs/wm5100.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/sound/soc/codecs/wm5100.c b/sound/soc/codecs/wm5100.c
index 0077086d8e5b..f37d67f4058b 100644
--- a/sound/soc/codecs/wm5100.c
+++ b/sound/soc/codecs/wm5100.c
@@ -2467,24 +2467,6 @@ static int wm5100_probe(struct snd_soc_codec *codec)
2467 snd_soc_update_bits(codec, wm5100_dig_vu[i], WM5100_OUT_VU, 2467 snd_soc_update_bits(codec, wm5100_dig_vu[i], WM5100_OUT_VU,
2468 WM5100_OUT_VU); 2468 WM5100_OUT_VU);
2469 2469
2470 for (i = 0; i < ARRAY_SIZE(wm5100->pdata.in_mode); i++) {
2471 snd_soc_update_bits(codec, WM5100_IN1L_CONTROL,
2472 WM5100_IN1_MODE_MASK |
2473 WM5100_IN1_DMIC_SUP_MASK,
2474 (wm5100->pdata.in_mode[i] <<
2475 WM5100_IN1_MODE_SHIFT) |
2476 (wm5100->pdata.dmic_sup[i] <<
2477 WM5100_IN1_DMIC_SUP_SHIFT));
2478 }
2479
2480 for (i = 0; i < ARRAY_SIZE(wm5100->pdata.gpio_defaults); i++) {
2481 if (!wm5100->pdata.gpio_defaults[i])
2482 continue;
2483
2484 snd_soc_write(codec, WM5100_GPIO_CTRL_1 + i,
2485 wm5100->pdata.gpio_defaults[i]);
2486 }
2487
2488 /* Don't debounce interrupts to support use of SYSCLK only */ 2470 /* Don't debounce interrupts to support use of SYSCLK only */
2489 snd_soc_write(codec, WM5100_IRQ_DEBOUNCE_1, 0); 2471 snd_soc_write(codec, WM5100_IRQ_DEBOUNCE_1, 0);
2490 snd_soc_write(codec, WM5100_IRQ_DEBOUNCE_2, 0); 2472 snd_soc_write(codec, WM5100_IRQ_DEBOUNCE_2, 0);
@@ -2739,6 +2721,24 @@ static __devinit int wm5100_i2c_probe(struct i2c_client *i2c,
2739 2721
2740 wm5100_init_gpio(i2c); 2722 wm5100_init_gpio(i2c);
2741 2723
2724 for (i = 0; i < ARRAY_SIZE(wm5100->pdata.gpio_defaults); i++) {
2725 if (!wm5100->pdata.gpio_defaults[i])
2726 continue;
2727
2728 regmap_write(wm5100->regmap, WM5100_GPIO_CTRL_1 + i,
2729 wm5100->pdata.gpio_defaults[i]);
2730 }
2731
2732 for (i = 0; i < ARRAY_SIZE(wm5100->pdata.in_mode); i++) {
2733 regmap_update_bits(wm5100->regmap, WM5100_IN1L_CONTROL,
2734 WM5100_IN1_MODE_MASK |
2735 WM5100_IN1_DMIC_SUP_MASK,
2736 (wm5100->pdata.in_mode[i] <<
2737 WM5100_IN1_MODE_SHIFT) |
2738 (wm5100->pdata.dmic_sup[i] <<
2739 WM5100_IN1_DMIC_SUP_SHIFT));
2740 }
2741
2742 ret = snd_soc_register_codec(&i2c->dev, 2742 ret = snd_soc_register_codec(&i2c->dev,
2743 &soc_codec_dev_wm5100, wm5100_dai, 2743 &soc_codec_dev_wm5100, wm5100_dai,
2744 ARRAY_SIZE(wm5100_dai)); 2744 ARRAY_SIZE(wm5100_dai));