Skip to content

Commit

Permalink
ASoC: Factor out 7 bit register 9 bit data SPI write
Browse files Browse the repository at this point in the history
This converts all the Wolfson drivers using this format (the only devices
that do) except WM8753 to use it.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Mark Brown committed Aug 3, 2009
1 parent 8d50e44 commit 27ded04
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 128 deletions.
25 changes: 0 additions & 25 deletions sound/soc/codecs/wm8510.c
Original file line number Diff line number Diff line change
Expand Up @@ -737,30 +737,6 @@ static struct spi_driver wm8510_spi_driver = {
.probe = wm8510_spi_probe,
.remove = __devexit_p(wm8510_spi_remove),
};

static int wm8510_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 /* CONFIG_SPI_MASTER */

static int wm8510_probe(struct platform_device *pdev)
Expand Down Expand Up @@ -790,7 +766,6 @@ static int wm8510_probe(struct platform_device *pdev)
#endif
#if defined(CONFIG_SPI_MASTER)
if (setup->spi) {
codec->hw_write = (hw_write_t)wm8510_spi_write;
ret = spi_register_driver(&wm8510_spi_driver);
if (ret != 0)
printk(KERN_ERR "can't add spi driver");
Expand Down
25 changes: 0 additions & 25 deletions sound/soc/codecs/wm8728.c
Original file line number Diff line number Diff line change
Expand Up @@ -425,30 +425,6 @@ static struct spi_driver wm8728_spi_driver = {
.probe = wm8728_spi_probe,
.remove = __devexit_p(wm8728_spi_remove),
};

static int wm8728_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 /* CONFIG_SPI_MASTER */

static int wm8728_probe(struct platform_device *pdev)
Expand Down Expand Up @@ -478,7 +454,6 @@ static int wm8728_probe(struct platform_device *pdev)
#endif
#if defined(CONFIG_SPI_MASTER)
if (setup->spi) {
codec->hw_write = (hw_write_t)wm8728_spi_write;
ret = spi_register_driver(&wm8728_spi_driver);
if (ret != 0)
printk(KERN_ERR "can't add spi driver");
Expand Down
25 changes: 0 additions & 25 deletions sound/soc/codecs/wm8731.c
Original file line number Diff line number Diff line change
Expand Up @@ -591,30 +591,6 @@ static void wm8731_unregister(struct wm8731_priv *wm8731)
}

#if defined(CONFIG_SPI_MASTER)
static int wm8731_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;
}

static int __devinit wm8731_spi_probe(struct spi_device *spi)
{
struct snd_soc_codec *codec;
Expand All @@ -626,7 +602,6 @@ static int __devinit wm8731_spi_probe(struct spi_device *spi)

codec = &wm8731->codec;
codec->control_data = spi;
codec->hw_write = (hw_write_t)wm8731_spi_write;
codec->dev = &spi->dev;

dev_set_drvdata(&spi->dev, wm8731);
Expand Down
25 changes: 0 additions & 25 deletions sound/soc/codecs/wm8750.c
Original file line number Diff line number Diff line change
Expand Up @@ -911,30 +911,6 @@ static struct spi_driver wm8750_spi_driver = {
.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)
Expand Down Expand Up @@ -973,7 +949,6 @@ static int wm8750_probe(struct platform_device *pdev)
#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");
Expand Down
25 changes: 0 additions & 25 deletions sound/soc/codecs/wm8988.c
Original file line number Diff line number Diff line change
Expand Up @@ -979,30 +979,6 @@ static struct i2c_driver wm8988_i2c_driver = {
#endif

#if defined(CONFIG_SPI_MASTER)
static int wm8988_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;
}

static int __devinit wm8988_spi_probe(struct spi_device *spi)
{
struct wm8988_priv *wm8988;
Expand All @@ -1013,7 +989,6 @@ static int __devinit wm8988_spi_probe(struct spi_device *spi)
return -ENOMEM;

codec = &wm8988->codec;
codec->hw_write = (hw_write_t)wm8988_spi_write;
codec->control_data = spi;
codec->dev = &spi->dev;

Expand Down
39 changes: 36 additions & 3 deletions sound/soc/soc-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*/

#include <linux/i2c.h>
#include <linux/spi/spi.h>
#include <sound/soc.h>

static unsigned int snd_soc_7_9_read(struct snd_soc_codec *codec,
Expand Down Expand Up @@ -46,6 +47,36 @@ static int snd_soc_7_9_write(struct snd_soc_codec *codec, unsigned int reg,
return -EIO;
}

#if defined(CONFIG_SPI_MASTER)
static int snd_soc_7_9_spi_write(void *control_data, const char *data,
int len)
{
struct spi_device *spi = control_data;
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;
}
#else
#define snd_soc_7_9_spi_write NULL
#endif

static int snd_soc_8_16_write(struct snd_soc_codec *codec, unsigned int reg,
unsigned int value)
{
Expand Down Expand Up @@ -115,12 +146,12 @@ static struct {
int addr_bits;
int data_bits;
int (*write)(struct snd_soc_codec *codec, unsigned int, unsigned int);
int (*spi_write)(void *, const char *, int);
unsigned int (*read)(struct snd_soc_codec *, unsigned int);
unsigned int (*i2c_read)(struct snd_soc_codec *, unsigned int);
} io_types[] = {
{ 7, 9, snd_soc_7_9_write, snd_soc_7_9_read },
{ 8, 16,
snd_soc_8_16_write, snd_soc_8_16_read,
{ 7, 9, snd_soc_7_9_write, snd_soc_7_9_spi_write, snd_soc_7_9_read },
{ 8, 16, snd_soc_8_16_write, NULL, snd_soc_8_16_read,
snd_soc_8_16_read_i2c },
};

Expand Down Expand Up @@ -177,6 +208,8 @@ int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
break;

case SND_SOC_SPI:
if (io_types[i].spi_write)
codec->hw_write = io_types[i].spi_write;
break;
}

Expand Down

0 comments on commit 27ded04

Please sign in to comment.