summaryrefslogtreecommitdiff
path: root/sound/soc
diff options
context:
space:
mode:
authorBarry Song <21cnbao@gmail.com>2010-03-29 11:16:00 +0800
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-03-29 21:02:24 +0100
commit9dd7b79a86c53a097463ee1582c0bc6c4b83b770 (patch)
tree595e287ac87329f561c7a192ffc97d0aea36a7dd /sound/soc
parente6ab07ce0f0cb1636fd14aa4f3e6e9631bd5d0c6 (diff)
downloadlinux-3.10-9dd7b79a86c53a097463ee1582c0bc6c4b83b770.tar.gz
linux-3.10-9dd7b79a86c53a097463ee1582c0bc6c4b83b770.tar.bz2
linux-3.10-9dd7b79a86c53a097463ee1582c0bc6c4b83b770.zip
ASoC: ad193x: move codec register/unregister to bus probe/remove
The way i've factored out the bus probe and removal functions so that there's no code in the individual I2C and SPI functions means that the register() and unregister() functions could just be squashed into the bus_probe() and bus_remove() functions. Signed-off-by: Barry Song <21cnbao@gmail.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/codecs/ad193x.c102
1 files changed, 44 insertions, 58 deletions
diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c
index e1082067075..4bfd66bc262 100644
--- a/sound/soc/codecs/ad193x.c
+++ b/sound/soc/codecs/ad193x.c
@@ -35,8 +35,6 @@ static const u8 ad193x_reg[AD193X_NUM_REGS] = {
static struct snd_soc_codec *ad193x_codec;
struct snd_soc_codec_device soc_codec_dev_ad193x;
-static int ad193x_register(struct ad193x_priv *ad193x, int bus_type);
-static void ad193x_unregister(struct ad193x_priv *ad193x);
/*
* AD193X volume/mute/de-emphasis etc. controls
@@ -290,69 +288,23 @@ static int ad193x_bus_probe(struct device *dev, void *ctrl_data, int bus_type)
{
struct snd_soc_codec *codec;
struct ad193x_priv *ad193x;
+ int ret;
+
+ if (ad193x_codec) {
+ dev_err(dev, "Another ad193x is registered\n");
+ return -EINVAL;
+ }
ad193x = kzalloc(sizeof(struct ad193x_priv), GFP_KERNEL);
if (ad193x == NULL)
return -ENOMEM;
- codec = &ad193x->codec;
- codec->control_data = ctrl_data;
- codec->dev = dev;
-
dev_set_drvdata(dev, ad193x);
- return ad193x_register(ad193x, bus_type);
-}
-
-static int ad193x_bus_remove(struct device *dev)
-{
- struct ad193x_priv *ad193x = dev_get_drvdata(dev);
-
- ad193x_unregister(ad193x);
- return 0;
-}
-
-static struct snd_soc_dai_ops ad193x_dai_ops = {
- .hw_params = ad193x_hw_params,
- .digital_mute = ad193x_mute,
- .set_tdm_slot = ad193x_set_tdm_slot,
- .set_fmt = ad193x_set_dai_fmt,
-};
-
-/* codec DAI instance */
-struct snd_soc_dai ad193x_dai = {
- .name = "AD193X",
- .playback = {
- .stream_name = "Playback",
- .channels_min = 2,
- .channels_max = 8,
- .rates = SNDRV_PCM_RATE_48000,
- .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE |
- SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE,
- },
- .capture = {
- .stream_name = "Capture",
- .channels_min = 2,
- .channels_max = 4,
- .rates = SNDRV_PCM_RATE_48000,
- .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE |
- SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE,
- },
- .ops = &ad193x_dai_ops,
-};
-EXPORT_SYMBOL_GPL(ad193x_dai);
-
-static int ad193x_register(struct ad193x_priv *ad193x, int bus_type)
-{
- int ret;
- struct snd_soc_codec *codec = &ad193x->codec;
-
- if (ad193x_codec) {
- dev_err(codec->dev, "Another ad193x is registered\n");
- return -EINVAL;
- }
-
+ codec = &ad193x->codec;
mutex_init(&codec->mutex);
+ codec->control_data = ctrl_data;
+ codec->dev = dev;
codec->private_data = ad193x;
codec->reg_cache = ad193x->reg_cache;
codec->reg_cache_size = AD193X_NUM_REGS;
@@ -413,14 +365,48 @@ static int ad193x_register(struct ad193x_priv *ad193x, int bus_type)
return 0;
}
-static void ad193x_unregister(struct ad193x_priv *ad193x)
+static int ad193x_bus_remove(struct device *dev)
{
+ struct ad193x_priv *ad193x = dev_get_drvdata(dev);
+
snd_soc_unregister_dai(&ad193x_dai);
snd_soc_unregister_codec(&ad193x->codec);
kfree(ad193x);
ad193x_codec = NULL;
+
+ return 0;
}
+static struct snd_soc_dai_ops ad193x_dai_ops = {
+ .hw_params = ad193x_hw_params,
+ .digital_mute = ad193x_mute,
+ .set_tdm_slot = ad193x_set_tdm_slot,
+ .set_fmt = ad193x_set_dai_fmt,
+};
+
+/* codec DAI instance */
+struct snd_soc_dai ad193x_dai = {
+ .name = "AD193X",
+ .playback = {
+ .stream_name = "Playback",
+ .channels_min = 2,
+ .channels_max = 8,
+ .rates = SNDRV_PCM_RATE_48000,
+ .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE |
+ SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE,
+ },
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 2,
+ .channels_max = 4,
+ .rates = SNDRV_PCM_RATE_48000,
+ .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE |
+ SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE,
+ },
+ .ops = &ad193x_dai_ops,
+};
+EXPORT_SYMBOL_GPL(ad193x_dai);
+
static int ad193x_probe(struct platform_device *pdev)
{
struct snd_soc_device *socdev = platform_get_drvdata(pdev);