[alsa-devel] [PATCH 0/3] ASoC updates

The following changes since commit 78bd2cd2124d3a77f7f78af47849ea571a73f2a1: Dmitry Baryshkov (1): ALSA: Separate common pxa2xx-pcm code
are available in the git repository at:
git://opensource.wolfsonmicro.com/linux-2.6-asoc for-tiwai
Mark Brown (3): ASoC: Fix dependency on AC97_BUS ASoC: DAPM support for ADC on WM9713 PCM interface ASoC: Add WM8750 SPI support
sound/soc/Kconfig | 1 + sound/soc/codecs/wm8750.c | 70 ++++++++++++++++++++++++++++++++++++++++++++- sound/soc/codecs/wm8750.h | 1 + sound/soc/codecs/wm9713.c | 12 ++++++- 4 files changed, 81 insertions(+), 3 deletions(-)

When built with AC97 support the ASoC core depends on AC97_BUS so force it to be available Kconfig.
Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com --- sound/soc/Kconfig | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig index 32ac940..4dfda66 100644 --- a/sound/soc/Kconfig +++ b/sound/soc/Kconfig @@ -5,6 +5,7 @@ menuconfig SND_SOC tristate "ALSA for SoC audio support" select SND_PCM + select AC97_BUS if SND_SOC_AC97_BUS ---help---
If you want ASoC support, you should say Y here and also to the

The stereo ADC in the WM9713 can be used to produce data for both the standard AC97 interface and the additional voice PCM interface. Support use on both by defining virtual ADCs tied to each accepting the output from the actual ADCs.
Reported-by: Rodolfo Giometti giometti@enneenne.com Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com --- sound/soc/codecs/wm9713.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c index c10f8a3..441d058 100644 --- a/sound/soc/codecs/wm9713.c +++ b/sound/soc/codecs/wm9713.c @@ -419,8 +419,12 @@ SND_SOC_DAPM_MIXER("Line Mixer", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_MIXER("Capture Mixer", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_DAC("Voice DAC", "Voice Playback", AC97_EXTENDED_MID, 12, 1), SND_SOC_DAPM_DAC("Aux DAC", "Aux Playback", AC97_EXTENDED_MID, 11, 1), -SND_SOC_DAPM_ADC("Left ADC", "Left HiFi Capture", AC97_EXTENDED_MID, 5, 1), -SND_SOC_DAPM_ADC("Right ADC", "Right HiFi Capture", AC97_EXTENDED_MID, 4, 1), +SND_SOC_DAPM_PGA("Left ADC", AC97_EXTENDED_MID, 5, 1, NULL, 0), +SND_SOC_DAPM_PGA("Right ADC", AC97_EXTENDED_MID, 4, 1, NULL, 0), +SND_SOC_DAPM_ADC("Left HiFi ADC", "Left HiFi Capture", SND_SOC_NOPM, 0, 0), +SND_SOC_DAPM_ADC("Right HiFi ADC", "Right HiFi Capture", SND_SOC_NOPM, 0, 0), +SND_SOC_DAPM_ADC("Left Voice ADC", "Left Voice Capture", SND_SOC_NOPM, 0, 0), +SND_SOC_DAPM_ADC("Right Voice ADC", "Right Voice Capture", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_PGA("Left Headphone", AC97_EXTENDED_MSTATUS, 10, 1, NULL, 0), SND_SOC_DAPM_PGA("Right Headphone", AC97_EXTENDED_MSTATUS, 9, 1, NULL, 0), SND_SOC_DAPM_PGA("Left Speaker", AC97_EXTENDED_MSTATUS, 8, 1, NULL, 0), @@ -583,9 +587,13 @@ static const struct snd_soc_dapm_route audio_map[] = {
/* left ADC */ {"Left ADC", NULL, "Left Capture Source"}, + {"Left Voice ADC", NULL, "Left ADC"}, + {"Left HiFi ADC", NULL, "Left ADC"},
/* right ADC */ {"Right ADC", NULL, "Right Capture Source"}, + {"Right Voice ADC", NULL, "Right ADC"}, + {"Right HiFi ADC", NULL, "Right ADC"},
/* mic */ {"Mic A Pre Amp", NULL, "Mic A Source"},

Implement SPI support for WM8750, cut'n'pasting from the support for WM8731 contributed by Cliff Cai and Alan Horstmann since the wire format is the same for both codecs.
Also fix a cut'n'pasted comment in the I2C side of the driver (which was clearly written in the same way) while we're at it.
Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com --- sound/soc/codecs/wm8750.c | 70 ++++++++++++++++++++++++++++++++++++++++++++- sound/soc/codecs/wm8750.h | 1 + 2 files changed, 70 insertions(+), 1 deletions(-)
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c index 9847aa0..4892e39 100644 --- a/sound/soc/codecs/wm8750.c +++ b/sound/soc/codecs/wm8750.c @@ -19,6 +19,7 @@ #include <linux/pm.h> #include <linux/i2c.h> #include <linux/platform_device.h> +#include <linux/spi/spi.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> @@ -841,7 +842,7 @@ static struct snd_soc_device *wm8750_socdev; #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
/* - * WM8731 2 wire address is determined by GPIO5 + * WM8750 2 wire address is determined by GPIO5 * state during powerup. * low = 0x1a * high = 0x1b @@ -928,6 +929,62 @@ err_driver: } #endif
+#if defined(CONFIG_SPI_MASTER) +static int __devinit wm8750_spi_probe(struct spi_device *spi) +{ + struct snd_soc_device *socdev = wm8750_socdev; + struct snd_soc_codec *codec = socdev->codec; + int ret; + + codec->control_data = spi; + + ret = wm8750_init(socdev); + if (ret < 0) + dev_err(&spi->dev, "failed to initialise WM8750\n"); + + return ret; +} + +static int __devexit wm8750_spi_remove(struct spi_device *spi) +{ + return 0; +} + +static struct spi_driver wm8750_spi_driver = { + .driver = { + .name = "wm8750", + .bus = &spi_bus_type, + .owner = THIS_MODULE, + }, + .probe = wm8750_spi_probe, + .remove = __devexit_p(wm8750_spi_remove), +}; + +static int wm8750_spi_write(struct spi_device *spi, const char *data, int len) +{ + struct spi_transfer t; + struct spi_message m; + u8 msg[2]; + + if (len <= 0) + return 0; + + msg[0] = data[0]; + msg[1] = data[1]; + + spi_message_init(&m); + memset(&t, 0, (sizeof t)); + + t.tx_buf = &msg[0]; + t.len = len; + + spi_message_add_tail(&t, &m); + spi_sync(spi, &m); + + return len; +} +#endif + static int wm8750_probe(struct platform_device *pdev) { struct snd_soc_device *socdev = platform_get_drvdata(pdev); @@ -963,6 +1020,14 @@ static int wm8750_probe(struct platform_device *pdev) ret = wm8750_add_i2c_device(pdev, setup); } #endif +#if defined(CONFIG_SPI_MASTER) + if (setup->spi) { + codec->hw_write = (hw_write_t)wm8750_spi_write; + ret = spi_register_driver(&wm8750_spi_driver); + if (ret != 0) + printk(KERN_ERR "can't add spi driver"); + } +#endif
if (ret != 0) { kfree(codec->private_data); @@ -1005,6 +1070,9 @@ static int wm8750_remove(struct platform_device *pdev) i2c_unregister_device(codec->control_data); i2c_del_driver(&wm8750_i2c_driver); #endif +#if defined(CONFIG_SPI_MASTER) + spi_unregister_driver(&wm8750_spi_driver); +#endif kfree(codec->private_data); kfree(codec);
diff --git a/sound/soc/codecs/wm8750.h b/sound/soc/codecs/wm8750.h index fe6c80f..1dc100e 100644 --- a/sound/soc/codecs/wm8750.h +++ b/sound/soc/codecs/wm8750.h @@ -58,6 +58,7 @@ #define WM8750_SYSCLK 0
struct wm8750_setup_data { + int spi; int i2c_bus; unsigned short i2c_address; };

At Tue, 16 Sep 2008 13:48:51 +0100, Mark Brown wrote:
The following changes since commit 78bd2cd2124d3a77f7f78af47849ea571a73f2a1: Dmitry Baryshkov (1): ALSA: Separate common pxa2xx-pcm code
are available in the git repository at:
git://opensource.wolfsonmicro.com/linux-2.6-asoc for-tiwai
Looks OK, so pull now. Thanks!
Takashi
Mark Brown (3): ASoC: Fix dependency on AC97_BUS ASoC: DAPM support for ADC on WM9713 PCM interface ASoC: Add WM8750 SPI support
sound/soc/Kconfig | 1 + sound/soc/codecs/wm8750.c | 70 ++++++++++++++++++++++++++++++++++++++++++++- sound/soc/codecs/wm8750.h | 1 + sound/soc/codecs/wm9713.c | 12 ++++++- 4 files changed, 81 insertions(+), 3 deletions(-)
participants (2)
-
Mark Brown
-
Takashi Iwai