aboutsummaryrefslogtreecommitdiff
path: root/sound/soc/codecs/wm8753.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-10-13 10:06:58 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-13 10:06:58 -0700
commitbe3bfbba8f7f6c8f32e8444ef895433701a3f801 (patch)
treedfd00be7d15dbf8353f188f2505426411cb18d06 /sound/soc/codecs/wm8753.c
parent20272c8994cf1e1f8ed745a2ea161dd9ad3889f2 (diff)
parent7dc85076f83253fcffae99e6d5e6ce77840f8841 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: (33 commits) ALSA: ASoC codec: remove unused #include <version.h> ALSA: ASoC: update email address for Liam Girdwood ALSA: hda: corrected invalid mixer values ALSA: hda: add mixers for analog mixer on 92hd75xx codecs ALSA: ASoC: Add destination and source port for DMA on OMAP1 ALSA: ASoC: Drop device registration from GTA01 lm4857 driver ALSA: ASoC: Fix build of GTA01 audio driver ALSA: ASoC: Add widgets before setting endpoints on GTA01 ALSA: ASoC: Fix inverted input PGA mute bits in WM8903 ALSA: ASoC: OMAP: Set DMA stream name at runtime in McBSP DAI driver ALSA: ASoC: OMAP: Add support for OMAP2430 and OMAP34xx in McBSP DAI driver ALSA: ASoC: OMAP: Add multilink support to McBSP DAI driver ALSA: ASoC: Make TLV320AIC26 user-visible ALSA: ASoC - clean up Kconfig for TLV320AIC2 ALSA: ASoC: Make WM8510 microphone input a DAPM mixer ALSA: ASoC: Implement WM8510 bias level control ALSA: ASoC: Remove unused AUDIO_NAME define from codec drivers ALSA: ASoC: tlv320aic3x: Use uniform tlv320aic naming ALSA: ASoC: Add WM8510 SPI support ALSA: ASoC: Add WM8753 SPI support ...
Diffstat (limited to 'sound/soc/codecs/wm8753.c')
-rw-r--r--sound/soc/codecs/wm8753.c75
1 files changed, 70 insertions, 5 deletions
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
index 8c4df44f334..d426eaa2218 100644
--- a/sound/soc/codecs/wm8753.c
+++ b/sound/soc/codecs/wm8753.c
@@ -2,8 +2,7 @@
* wm8753.c -- WM8753 ALSA Soc Audio driver
*
* Copyright 2003 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
+ * Author: Liam Girdwood <lrg@slimlogic.co.uk>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -40,6 +39,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>
@@ -51,7 +51,6 @@
#include "wm8753.h"
-#define AUDIO_NAME "wm8753"
#define WM8753_VERSION "0.16"
static int caps_charge = 2000;
@@ -1719,6 +1718,63 @@ err_driver:
}
#endif
+#if defined(CONFIG_SPI_MASTER)
+static int __devinit wm8753_spi_probe(struct spi_device *spi)
+{
+ struct snd_soc_device *socdev = wm8753_socdev;
+ struct snd_soc_codec *codec = socdev->codec;
+ int ret;
+
+ codec->control_data = spi;
+
+ ret = wm8753_init(socdev);
+ if (ret < 0)
+ dev_err(&spi->dev, "failed to initialise WM8753\n");
+
+ return ret;
+}
+
+static int __devexit wm8753_spi_remove(struct spi_device *spi)
+{
+ return 0;
+}
+
+static struct spi_driver wm8753_spi_driver = {
+ .driver = {
+ .name = "wm8753",
+ .bus = &spi_bus_type,
+ .owner = THIS_MODULE,
+ },
+ .probe = wm8753_spi_probe,
+ .remove = __devexit_p(wm8753_spi_remove),
+};
+
+static int wm8753_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 wm8753_probe(struct platform_device *pdev)
{
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
@@ -1753,8 +1809,14 @@ static int wm8753_probe(struct platform_device *pdev)
codec->hw_write = (hw_write_t)i2c_master_send;
ret = wm8753_add_i2c_device(pdev, setup);
}
-#else
- /* Add other interfaces here */
+#endif
+#if defined(CONFIG_SPI_MASTER)
+ if (setup->spi) {
+ codec->hw_write = (hw_write_t)wm8753_spi_write;
+ ret = spi_register_driver(&wm8753_spi_driver);
+ if (ret != 0)
+ printk(KERN_ERR "can't add spi driver");
+ }
#endif
if (ret != 0) {
@@ -1798,6 +1860,9 @@ static int wm8753_remove(struct platform_device *pdev)
i2c_unregister_device(codec->control_data);
i2c_del_driver(&wm8753_i2c_driver);
#endif
+#if defined(CONFIG_SPI_MASTER)
+ spi_unregister_driver(&wm8753_spi_driver);
+#endif
kfree(codec->private_data);
kfree(codec);