diff options
Diffstat (limited to 'sound/soc/codecs/wm8523.c')
-rw-r--r-- | sound/soc/codecs/wm8523.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/sound/soc/codecs/wm8523.c b/sound/soc/codecs/wm8523.c index 4fd4d8dca0fc..5355a7a944f7 100644 --- a/sound/soc/codecs/wm8523.c +++ b/sound/soc/codecs/wm8523.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/regulator/consumer.h> | 21 | #include <linux/regulator/consumer.h> |
22 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
23 | #include <linux/of_device.h> | ||
23 | #include <sound/core.h> | 24 | #include <sound/core.h> |
24 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
25 | #include <sound/pcm_params.h> | 26 | #include <sound/pcm_params.h> |
@@ -84,7 +85,7 @@ static const char *wm8523_zd_count_text[] = { | |||
84 | static const struct soc_enum wm8523_zc_count = | 85 | static const struct soc_enum wm8523_zc_count = |
85 | SOC_ENUM_SINGLE(WM8523_ZERO_DETECT, 0, 2, wm8523_zd_count_text); | 86 | SOC_ENUM_SINGLE(WM8523_ZERO_DETECT, 0, 2, wm8523_zd_count_text); |
86 | 87 | ||
87 | static const struct snd_kcontrol_new wm8523_snd_controls[] = { | 88 | static const struct snd_kcontrol_new wm8523_controls[] = { |
88 | SOC_DOUBLE_R_TLV("Playback Volume", WM8523_DAC_GAINL, WM8523_DAC_GAINR, | 89 | SOC_DOUBLE_R_TLV("Playback Volume", WM8523_DAC_GAINL, WM8523_DAC_GAINR, |
89 | 0, 448, 0, dac_tlv), | 90 | 0, 448, 0, dac_tlv), |
90 | SOC_SINGLE("ZC Switch", WM8523_DAC_CTRL3, 4, 1, 0), | 91 | SOC_SINGLE("ZC Switch", WM8523_DAC_CTRL3, 4, 1, 0), |
@@ -101,22 +102,11 @@ SND_SOC_DAPM_OUTPUT("LINEVOUTL"), | |||
101 | SND_SOC_DAPM_OUTPUT("LINEVOUTR"), | 102 | SND_SOC_DAPM_OUTPUT("LINEVOUTR"), |
102 | }; | 103 | }; |
103 | 104 | ||
104 | static const struct snd_soc_dapm_route intercon[] = { | 105 | static const struct snd_soc_dapm_route wm8523_dapm_routes[] = { |
105 | { "LINEVOUTL", NULL, "DAC" }, | 106 | { "LINEVOUTL", NULL, "DAC" }, |
106 | { "LINEVOUTR", NULL, "DAC" }, | 107 | { "LINEVOUTR", NULL, "DAC" }, |
107 | }; | 108 | }; |
108 | 109 | ||
109 | static int wm8523_add_widgets(struct snd_soc_codec *codec) | ||
110 | { | ||
111 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
112 | |||
113 | snd_soc_dapm_new_controls(dapm, wm8523_dapm_widgets, | ||
114 | ARRAY_SIZE(wm8523_dapm_widgets)); | ||
115 | snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); | ||
116 | |||
117 | return 0; | ||
118 | } | ||
119 | |||
120 | static struct { | 110 | static struct { |
121 | int value; | 111 | int value; |
122 | int ratio; | 112 | int ratio; |
@@ -479,10 +469,6 @@ static int wm8523_probe(struct snd_soc_codec *codec) | |||
479 | /* Bias level configuration will have done an extra enable */ | 469 | /* Bias level configuration will have done an extra enable */ |
480 | regulator_bulk_disable(ARRAY_SIZE(wm8523->supplies), wm8523->supplies); | 470 | regulator_bulk_disable(ARRAY_SIZE(wm8523->supplies), wm8523->supplies); |
481 | 471 | ||
482 | snd_soc_add_controls(codec, wm8523_snd_controls, | ||
483 | ARRAY_SIZE(wm8523_snd_controls)); | ||
484 | wm8523_add_widgets(codec); | ||
485 | |||
486 | return 0; | 472 | return 0; |
487 | 473 | ||
488 | err_enable: | 474 | err_enable: |
@@ -512,6 +498,18 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8523 = { | |||
512 | .reg_word_size = sizeof(u16), | 498 | .reg_word_size = sizeof(u16), |
513 | .reg_cache_default = wm8523_reg, | 499 | .reg_cache_default = wm8523_reg, |
514 | .volatile_register = wm8523_volatile_register, | 500 | .volatile_register = wm8523_volatile_register, |
501 | |||
502 | .controls = wm8523_controls, | ||
503 | .num_controls = ARRAY_SIZE(wm8523_controls), | ||
504 | .dapm_widgets = wm8523_dapm_widgets, | ||
505 | .num_dapm_widgets = ARRAY_SIZE(wm8523_dapm_widgets), | ||
506 | .dapm_routes = wm8523_dapm_routes, | ||
507 | .num_dapm_routes = ARRAY_SIZE(wm8523_dapm_routes), | ||
508 | }; | ||
509 | |||
510 | static const struct of_device_id wm8523_of_match[] = { | ||
511 | { .compatible = "wlf,wm8523" }, | ||
512 | { }, | ||
515 | }; | 513 | }; |
516 | 514 | ||
517 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) | 515 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) |
@@ -551,8 +549,9 @@ MODULE_DEVICE_TABLE(i2c, wm8523_i2c_id); | |||
551 | 549 | ||
552 | static struct i2c_driver wm8523_i2c_driver = { | 550 | static struct i2c_driver wm8523_i2c_driver = { |
553 | .driver = { | 551 | .driver = { |
554 | .name = "wm8523-codec", | 552 | .name = "wm8523", |
555 | .owner = THIS_MODULE, | 553 | .owner = THIS_MODULE, |
554 | .of_match_table = wm8523_of_match, | ||
556 | }, | 555 | }, |
557 | .probe = wm8523_i2c_probe, | 556 | .probe = wm8523_i2c_probe, |
558 | .remove = __devexit_p(wm8523_i2c_remove), | 557 | .remove = __devexit_p(wm8523_i2c_remove), |