[alsa-devel] [PATCH] ASoC: wm0010: Move resource acquisition to device probe
Mark Brown
broonie at opensource.wolfsonmicro.com
Sat Aug 25 22:04:33 CEST 2012
This is more idimatic for modern drivers. Also fix a couple of return
codes while we're at it.
Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm0010.c | 54 ++++++++++++++++++++++-----------------------
1 file changed, 27 insertions(+), 27 deletions(-)
diff --git a/sound/soc/codecs/wm0010.c b/sound/soc/codecs/wm0010.c
index 30ec0bd..5f99148 100644
--- a/sound/soc/codecs/wm0010.c
+++ b/sound/soc/codecs/wm0010.c
@@ -799,14 +799,35 @@ static irqreturn_t wm0010_irq(int irq, void *data)
static int wm0010_probe(struct snd_soc_codec *codec)
{
struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec);
- struct spi_device *spi = to_spi_device(wm0010->dev);
+
+ wm0010->codec = codec;
+
+ return 0;
+}
+
+static int __devinit wm0010_spi_probe(struct spi_device *spi)
+{
unsigned long flags;
unsigned long gpio_flags;
int ret;
int trigger;
int irq;
+ struct wm0010_priv *wm0010;
- wm0010->codec = codec;
+ wm0010 = devm_kzalloc(&spi->dev, sizeof(*wm0010),
+ GFP_KERNEL);
+ if (!wm0010)
+ return -ENOMEM;
+
+ mutex_init(&wm0010->lock);
+ spin_lock_init(&wm0010->irq_lock);
+
+ spi_set_drvdata(spi, wm0010);
+ wm0010->dev = &spi->dev;
+
+ if (dev_get_platdata(&spi->dev))
+ memcpy(&wm0010->pdata, dev_get_platdata(&spi->dev),
+ sizeof(wm0010->pdata));
init_completion(&wm0010->boot_completion);
@@ -850,7 +871,7 @@ static int wm0010_probe(struct snd_soc_codec *codec)
}
} else {
dev_err(wm0010->dev, "No reset GPIO configured\n");
- return ret;
+ return -EINVAL;
}
irq = spi->irq;
@@ -862,9 +883,11 @@ static int wm0010_probe(struct snd_soc_codec *codec)
ret = request_threaded_irq(irq, NULL, wm0010_irq, trigger,
"wm0010", wm0010);
- if (ret)
+ if (ret) {
dev_err(wm0010->dev, "Failed to request IRQ %d: %d\n",
irq, ret);
+ return ret;
+ }
wm0010->irq = irq;
if (spi->max_speed_hz)
@@ -876,29 +899,6 @@ static int wm0010_probe(struct snd_soc_codec *codec)
wm0010->state = WM0010_POWER_OFF;
spin_unlock_irqrestore(&wm0010->irq_lock, flags);
- return 0;
-}
-
-static int __devinit wm0010_spi_probe(struct spi_device *spi)
-{
- struct wm0010_priv *wm0010;
- int ret;
-
- wm0010 = devm_kzalloc(&spi->dev, sizeof(*wm0010),
- GFP_KERNEL);
- if (!wm0010)
- return -ENOMEM;
-
- mutex_init(&wm0010->lock);
- spin_lock_init(&wm0010->irq_lock);
-
- spi_set_drvdata(spi, wm0010);
- wm0010->dev = &spi->dev;
-
- if (dev_get_platdata(&spi->dev))
- memcpy(&wm0010->pdata, dev_get_platdata(&spi->dev),
- sizeof(wm0010->pdata));
-
ret = snd_soc_register_codec(&spi->dev,
&soc_codec_dev_wm0010, wm0010_dai,
ARRAY_SIZE(wm0010_dai));
--
1.7.10.4
More information about the Alsa-devel
mailing list