summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2014-11-10 22:41:47 +0100
committerMark Brown <broonie@kernel.org>2014-11-18 15:37:46 +0000
commiteda1a701fd9589b6ed15b109558bd4f6202e3829 (patch)
tree0741b263b8e99bb168181997704e9533635d1bc0
parent336b8423e285174ebecf02a743d69913b83bbc48 (diff)
downloadop-kernel-dev-eda1a701fd9589b6ed15b109558bd4f6202e3829.zip
op-kernel-dev-eda1a701fd9589b6ed15b109558bd4f6202e3829.tar.gz
ASoC: ac97: Use static ac97_bus
We always pass soc_ac97_ops to snd_soc_new_ac97_codec(). So instead of allocating a snd_ac97_bus in snd_soc_new_ac97_codec() just use a static one that gets initialized when snd_soc_set_ac97_ops() is called. Also drop the device number parameter from snd_soc_new_ac97_codec(). We currently only support one device per bus and all drivers pass 0 for the device number. And if we should ever support multiple devices per bus it wouldn't be up to individual AC'97 device drivers to pick their number, but rather either the AC'97 adapter driver or the core code will assign them. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--include/sound/soc.h3
-rw-r--r--sound/soc/codecs/ad1980.c2
-rw-r--r--sound/soc/codecs/stac9766.c2
-rw-r--r--sound/soc/codecs/wm9705.c2
-rw-r--r--sound/soc/codecs/wm9712.c2
-rw-r--r--sound/soc/codecs/wm9713.c2
-rw-r--r--sound/soc/soc-ac97.c22
7 files changed, 14 insertions, 21 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index adef34f..44b3ce5 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -499,8 +499,7 @@ int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned int reg,
unsigned int mask, unsigned int value);
#ifdef CONFIG_SND_SOC_AC97_BUS
-int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
- struct snd_ac97_bus_ops *ops, int num);
+int snd_soc_new_ac97_codec(struct snd_soc_codec *codec);
void snd_soc_free_ac97_codec(struct snd_soc_codec *codec);
int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops);
diff --git a/sound/soc/codecs/ad1980.c b/sound/soc/codecs/ad1980.c
index 9ed4e12..f71cc21 100644
--- a/sound/soc/codecs/ad1980.c
+++ b/sound/soc/codecs/ad1980.c
@@ -220,7 +220,7 @@ static int ad1980_soc_probe(struct snd_soc_codec *codec)
u16 vendor_id2;
u16 ext_status;
- ret = snd_soc_new_ac97_codec(codec, soc_ac97_ops, 0);
+ ret = snd_soc_new_ac97_codec(codec);
if (ret < 0) {
dev_err(codec->dev, "Failed to register AC97 codec\n");
return ret;
diff --git a/sound/soc/codecs/stac9766.c b/sound/soc/codecs/stac9766.c
index 53b810d..45ac4a7 100644
--- a/sound/soc/codecs/stac9766.c
+++ b/sound/soc/codecs/stac9766.c
@@ -336,7 +336,7 @@ static int stac9766_codec_probe(struct snd_soc_codec *codec)
{
int ret = 0;
- ret = snd_soc_new_ac97_codec(codec, soc_ac97_ops, 0);
+ ret = snd_soc_new_ac97_codec(codec);
if (ret < 0)
goto codec_err;
diff --git a/sound/soc/codecs/wm9705.c b/sound/soc/codecs/wm9705.c
index 1650195..2cb8a31 100644
--- a/sound/soc/codecs/wm9705.c
+++ b/sound/soc/codecs/wm9705.c
@@ -337,7 +337,7 @@ static int wm9705_soc_probe(struct snd_soc_codec *codec)
{
int ret = 0;
- ret = snd_soc_new_ac97_codec(codec, soc_ac97_ops, 0);
+ ret = snd_soc_new_ac97_codec(codec);
if (ret < 0) {
dev_err(codec->dev, "Failed to register AC97 codec\n");
return ret;
diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
index 3fad37e..6b36223 100644
--- a/sound/soc/codecs/wm9712.c
+++ b/sound/soc/codecs/wm9712.c
@@ -666,7 +666,7 @@ static int wm9712_soc_probe(struct snd_soc_codec *codec)
{
int ret = 0;
- ret = snd_soc_new_ac97_codec(codec, soc_ac97_ops, 0);
+ ret = snd_soc_new_ac97_codec(codec);
if (ret < 0) {
dev_err(codec->dev, "Failed to register AC97 codec\n");
return ret;
diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c
index 998e4c7..2071df7 100644
--- a/sound/soc/codecs/wm9713.c
+++ b/sound/soc/codecs/wm9713.c
@@ -1219,7 +1219,7 @@ static int wm9713_soc_probe(struct snd_soc_codec *codec)
{
int ret = 0, reg;
- ret = snd_soc_new_ac97_codec(codec, soc_ac97_ops, 0);
+ ret = snd_soc_new_ac97_codec(codec);
if (ret < 0)
return ret;
diff --git a/sound/soc/soc-ac97.c b/sound/soc/soc-ac97.c
index da7b031..dbfca7e 100644
--- a/sound/soc/soc-ac97.c
+++ b/sound/soc/soc-ac97.c
@@ -38,6 +38,10 @@ struct snd_ac97_reset_cfg {
int gpio_reset;
};
+static struct snd_ac97_bus soc_ac97_bus = {
+ .ops = NULL, /* Gets initialized in snd_soc_set_ac97_ops() */
+};
+
/* unregister ac97 codec */
static int soc_ac97_dev_unregister(struct snd_soc_codec *codec)
{
@@ -140,27 +144,17 @@ static void soc_ac97_device_release(struct device *dev)
/**
* snd_soc_new_ac97_codec - initailise AC97 device
* @codec: audio codec
- * @ops: AC97 bus operations
- * @num: AC97 codec number
*
* Initialises AC97 codec resources for use by ad-hoc devices only.
*/
-int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
- struct snd_ac97_bus_ops *ops, int num)
+int snd_soc_new_ac97_codec(struct snd_soc_codec *codec)
{
codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
if (codec->ac97 == NULL)
return -ENOMEM;
- codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL);
- if (codec->ac97->bus == NULL) {
- kfree(codec->ac97);
- codec->ac97 = NULL;
- return -ENOMEM;
- }
-
- codec->ac97->bus->ops = ops;
- codec->ac97->num = num;
+ codec->ac97->bus = &soc_ac97_bus;
+ codec->ac97->num = 0;
codec->ac97->dev.release = soc_ac97_device_release;
/*
@@ -183,7 +177,6 @@ EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec);
void snd_soc_free_ac97_codec(struct snd_soc_codec *codec)
{
soc_unregister_ac97_codec(codec);
- kfree(codec->ac97->bus);
codec->ac97->bus = NULL;
put_device(&codec->ac97->dev);
codec->ac97 = NULL;
@@ -314,6 +307,7 @@ int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops)
return -EBUSY;
soc_ac97_ops = ops;
+ soc_ac97_bus.ops = ops;
return 0;
}
OpenPOWER on IntegriCloud