summaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/twl6040.c
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2013-01-11 17:01:01 +0100
committerMark Brown <broonie@opensource.wolfsonmicro.com>2013-01-12 00:54:57 +0100
commit9523fcdcc02e812f3a0f4849b3af1b295ad50470 (patch)
tree30073e8ddd54f26a6c6b401bc5fc14bd345990bf /sound/soc/codecs/twl6040.c
parentASoC: twl6040: Only set the bias_level once in twl6040_resume() (diff)
downloadlinux-9523fcdcc02e812f3a0f4849b3af1b295ad50470.tar.xz
linux-9523fcdcc02e812f3a0f4849b3af1b295ad50470.zip
ASoC: twl6040: Convert to use devm_* when possible
In this way we can clean up the probe and remove paths Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/twl6040.c')
-rw-r--r--sound/soc/codecs/twl6040.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c
index 86f12a498f38..90b721e437a3 100644
--- a/sound/soc/codecs/twl6040.c
+++ b/sound/soc/codecs/twl6040.c
@@ -1131,9 +1131,10 @@ static int twl6040_probe(struct snd_soc_codec *codec)
struct platform_device, dev);
int ret = 0;
- priv = kzalloc(sizeof(struct twl6040_data), GFP_KERNEL);
+ priv = devm_kzalloc(codec->dev, sizeof(*priv), GFP_KERNEL);
if (priv == NULL)
return -ENOMEM;
+
snd_soc_codec_set_drvdata(codec, priv);
priv->codec = codec;
@@ -1158,25 +1159,23 @@ static int twl6040_probe(struct snd_soc_codec *codec)
priv->plug_irq = platform_get_irq(pdev, 0);
if (priv->plug_irq < 0) {
dev_err(codec->dev, "invalid irq\n");
- ret = -EINVAL;
- goto work_err;
+ return -EINVAL;
}
priv->workqueue = alloc_workqueue("twl6040-codec", 0, 0);
- if (!priv->workqueue) {
- ret = -ENOMEM;
- goto work_err;
- }
+ if (!priv->workqueue)
+ return -ENOMEM;
INIT_DELAYED_WORK(&priv->hs_jack.work, twl6040_accessory_work);
mutex_init(&priv->mutex);
- ret = request_threaded_irq(priv->plug_irq, NULL, twl6040_audio_handler,
- IRQF_NO_SUSPEND, "twl6040_irq_plug", codec);
+ ret = devm_request_threaded_irq(codec->dev, priv->plug_irq, NULL,
+ twl6040_audio_handler, IRQF_NO_SUSPEND,
+ "twl6040_irq_plug", codec);
if (ret) {
dev_err(codec->dev, "PLUG IRQ request failed: %d\n", ret);
- goto plugirq_err;
+ goto err;
}
twl6040_init_chip(codec);
@@ -1186,12 +1185,8 @@ static int twl6040_probe(struct snd_soc_codec *codec)
if (!ret)
return 0;
- /* Error path */
- free_irq(priv->plug_irq, codec);
-plugirq_err:
+err:
destroy_workqueue(priv->workqueue);
-work_err:
- kfree(priv);
return ret;
}
@@ -1200,9 +1195,7 @@ static int twl6040_remove(struct snd_soc_codec *codec)
struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
twl6040_set_bias_level(codec, SND_SOC_BIAS_OFF);
- free_irq(priv->plug_irq, codec);
destroy_workqueue(priv->workqueue);
- kfree(priv);
return 0;
}