diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-04-11 23:42:25 -0700 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-04-13 10:02:01 -0700 |
commit | ea3e98e75a6f38522450b66e22e34267977915ef (patch) | |
tree | af68006a93184486ce4dcb57e39c7bb491158725 /sound/soc/samsung | |
parent | ea0a591a28b9249ea585f2cf8045e43f57f48fbb (diff) | |
download | op-kernel-dev-ea3e98e75a6f38522450b66e22e34267977915ef.zip op-kernel-dev-ea3e98e75a6f38522450b66e22e34267977915ef.tar.gz |
ASoC: Support the sub speaker driver on Speyside
Speyside includes a WM9081 configured as an external speaker driver taking
an analogue input from HPOUT2 on the WM8915 on the system. Add support for
this to the driver, using a prefix of "Sub" for the WM9081 controls to
ensure we avoid collisions with controls on the WM8915.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Jassi Brar <jassisinghbrar@gmail.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Diffstat (limited to 'sound/soc/samsung')
-rw-r--r-- | sound/soc/samsung/Kconfig | 1 | ||||
-rw-r--r-- | sound/soc/samsung/speyside.c | 34 |
2 files changed, 35 insertions, 0 deletions
diff --git a/sound/soc/samsung/Kconfig b/sound/soc/samsung/Kconfig index 726af2e..459566b 100644 --- a/sound/soc/samsung/Kconfig +++ b/sound/soc/samsung/Kconfig @@ -176,3 +176,4 @@ config SND_SOC_SPEYSIDE depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410 select SND_SAMSUNG_I2S select SND_SOC_WM8915 + select SND_SOC_WM9081 diff --git a/sound/soc/samsung/speyside.c b/sound/soc/samsung/speyside.c index 1e51750..0adaf7f 100644 --- a/sound/soc/samsung/speyside.c +++ b/sound/soc/samsung/speyside.c @@ -13,6 +13,7 @@ #include <sound/soc-dapm.h> #include "../codecs/wm8915.h" +#include "../codecs/wm9081.h" static int speyside_set_bias_level(struct snd_soc_card *card, enum snd_soc_bias_level level) @@ -98,6 +99,30 @@ static struct snd_soc_dai_link speyside_dai[] = { }, }; +static int speyside_wm9081_init(struct snd_soc_dapm_context *dapm) +{ + snd_soc_dapm_nc_pin(dapm, "LINEOUT"); + + /* At any time the WM9081 is active it will have this clock */ + return snd_soc_codec_set_sysclk(dapm->codec, WM9081_SYSCLK_MCLK, + 48000 * 256, 0); +} + +static struct snd_soc_aux_dev speyside_aux_dev[] = { + { + .name = "wm9081", + .codec_name = "wm9081.1-006c", + .init = speyside_wm9081_init, + }, +}; + +static struct snd_soc_codec_conf speyside_codec_conf[] = { + { + .dev_name = "wm9081.1-006c", + .name_prefix = "Sub", + }, +}; + static struct snd_soc_dapm_widget widgets[] = { SND_SOC_DAPM_HP("Headphone", NULL), @@ -118,6 +143,11 @@ static struct snd_soc_dapm_route audio_paths[] = { { "Headphone", NULL, "HPOUT1L" }, { "Headphone", NULL, "HPOUT1R" }, + { "Sub IN1", NULL, "HPOUT2L" }, + { "Sub IN2", NULL, "HPOUT2R" }, + + { "Main Speaker", NULL, "Sub SPKN" }, + { "Main Speaker", NULL, "Sub SPKP" }, { "Main Speaker", NULL, "SPKDAT" }, }; @@ -125,6 +155,10 @@ static struct snd_soc_card speyside = { .name = "Speyside", .dai_link = speyside_dai, .num_links = ARRAY_SIZE(speyside_dai), + .aux_dev = speyside_aux_dev, + .num_aux_devs = ARRAY_SIZE(speyside_aux_dev), + .codec_conf = speyside_codec_conf, + .num_configs = ARRAY_SIZE(speyside_codec_conf), .set_bias_level = speyside_set_bias_level, |