Modified: trunk/sound/soc/blackfin/Kconfig (9626 => 9627)
--- trunk/sound/soc/blackfin/Kconfig 2011-02-24 06:11:39 UTC (rev 9626)
+++ trunk/sound/soc/blackfin/Kconfig 2011-02-24 06:50:00 UTC (rev 9627)
@@ -118,12 +118,28 @@
depends on SND_BF5XX_TDM && (SPI_MASTER || I2C)
select SND_BF5XX_SOC_TDM
select SND_SOC_AD193X
- select SND_SOC_AD193X_SPI if SPI_MASTER
- select SND_SOC_AD193X_I2C if I2C
help
Say Y if you want to add support for AD193X codec on Blackfin.
This driver supports AD1936, AD1937, AD1938 and AD1939.
+choice
+ prompt "AD193X control type select"
+ depends on SND_BF5XX_SOC_AD193X
+
+config SND_SOC_AD193X_SPI
+ bool "use SPI to control AD193X"
+ depends on SPI_MASTER
+ help
+ Say Y if you want to use SPI to control AD193X codec.
+
+config SND_SOC_AD193X_I2C
+ bool "use I2C to control AD193X"
+ depends on I2C
+ help
+ Say Y if you want to use I2C to control AD193X codec.
+
+endchoice
+
config SND_BF5XX_AC97
tristate "SoC AC97 Audio for the ADI BF5xx chip"
depends on BLACKFIN
Modified: trunk/sound/soc/blackfin/bf5xx-ad193x.c (9626 => 9627)
--- trunk/sound/soc/blackfin/bf5xx-ad193x.c 2011-02-24 06:11:39 UTC (rev 9626)
+++ trunk/sound/soc/blackfin/bf5xx-ad193x.c 2011-02-24 06:50:00 UTC (rev 9627)
@@ -87,10 +87,14 @@
static struct snd_soc_dai_link bf5xx_ad193x_dai = {
.name = "ad193x",
.stream_name = "AD193X",
- .cpu_dai_name = "bf5xx-tdm",
+ .cpu_dai_name = "bfin-tdm.0",
.codec_dai_name ="ad193x-hifi",
- .platform_name = "bf5xx-tdm-pcm-audio",
- .codec_name = "ad193x-codec.5",
+ .platform_name = "bfin-pcm-audio",
+#if defined(CONFIG_SND_SOC_AD193X_SPI)
+ .codec_name = "spi0.5",
+#elif defined(CONFIG_SND_SOC_AD193X_I2C)
+ .codec_name = "ad193x-codec.0-0004",
+#endif
.ops = &bf5xx_ad193x_ops,
};
Modified: trunk/sound/soc/codecs/ad193x.c (9626 => 9627)
--- trunk/sound/soc/codecs/ad193x.c 2011-02-24 06:11:39 UTC (rev 9626)
+++ trunk/sound/soc/codecs/ad193x.c 2011-02-24 06:50:00 UTC (rev 9627)
@@ -24,9 +24,7 @@
/* codec private data */
struct ad193x_priv {
- u8 reg_cache[AD193X_NUM_REGS];
- enum snd_soc_control_type bus_type;
- void *control_data;
+ enum snd_soc_control_type control_type;
int sysclk;
};
@@ -355,15 +353,12 @@
struct ad193x_priv *ad193x = snd_soc_codec_get_drvdata(codec);
int ret;
- codec->control_data = ad193x->control_data;
- if (ad193x->bus_type == SND_SOC_I2C)
- ret = snd_soc_codec_set_cache_io(codec, 8, 8, ad193x->bus_type);
+ if (ad193x->control_type == SND_SOC_I2C)
+ ret = snd_soc_codec_set_cache_io(codec, 8, 8, ad193x->control_type);
else
- ret = snd_soc_codec_set_cache_io(codec, 16, 8, ad193x->bus_type);
+ ret = snd_soc_codec_set_cache_io(codec, 16, 8, ad193x->control_type);
if (ret < 0) {
- dev_err(codec->dev, "failed to set cache I/O: %d\n",
- ret);
- kfree(ad193x);
+ dev_err(codec->dev, "failed to set cache I/O: %d\n", ret);
return ret;
}
@@ -392,8 +387,14 @@
return ret;
}
+static int ad193x_remove(struct snd_soc_codec *codec)
+{
+ return 0;
+}
+
static struct snd_soc_codec_driver soc_codec_dev_ad193x = {
.probe = ad193x_probe,
+ .remove = ad193x_remove,
.reg_cache_default = ad193x_reg,
.reg_cache_size = AD193X_NUM_REGS,
.reg_word_size = sizeof(u16),
@@ -410,8 +411,7 @@
return -ENOMEM;
spi_set_drvdata(spi, ad193x);
- ad193x->control_data = spi;
- ad193x->bus_type = SND_SOC_SPI;
+ ad193x->control_type = SND_SOC_SPI;
ret = snd_soc_register_codec(&spi->dev,
&soc_codec_dev_ad193x, &ad193x_dai, 1);
@@ -456,8 +456,7 @@
return -ENOMEM;
i2c_set_clientdata(client, ad193x);
- ad193x->control_data = client;
- ad193x->bus_type = SND_SOC_I2C;
+ ad193x->control_type = SND_SOC_I2C;
ret = snd_soc_register_codec(&client->dev,
&soc_codec_dev_ad193x, &ad193x_dai, 1);