ASoC: ep93xx-ac97: use devm_* helpers to cleanup probe
PATCH 1/1 ASoC: ep93xx-ac97: use devm_* helpers to cleanup probe
Use the devm_* helpers to cleanup the probe routine. This also eliminates having to carry the mem and irq values in the private data for the remove.
Signed-off-by H Hartley Sweeten <[email protected]>
Cc Mika Westerberg <[email protected]>
Cc Liam Girdwood <[email protected]>
Cc Mark Brown <[email protected]>
Cc Jaroslav Kysela <[email protected]>
CC Takashi Iwai <[email protected]>
---
sound/soc/ep93xx/ep93xx-ac97.c +26 -48
@@ -87,17 +87,13 @@* struct ep93xx_ac97_info - EP93xx AC97 controller info structure * @lock: mutex serializing access to the bus (slot 1 & 2 ops) * @dev: pointer to the platform device dev structure -* @mem: physical memory resource for the registers * @regs: mapped AC97 controller registers -* @irq: AC97 interrupt number * @done: bus ops wait here for an interrupt */ struct ep93xx_ac97_info {struct mutex lock;struct device *dev; -struct resource *mem;void __iomem *regs; -int irq;struct completion done; };
@@ -359,66 +355,50 @@ static struct snd_soc_dai_driver ep93xx_ac97_dai = {static int __devinit ep93xx_ac97_probe (struct platform_device *pdev) {struct ep93xx_ac97_info *info; +struct resource *res; +unsigned int irq;int ret; - info =kzalloc (sizeof (struct ep93xx_ac97_info ),GFP_KERNEL ); + info =devm_kzalloc (&pdev->dev,sizeof (*info),GFP_KERNEL );if (!info)return -ENOMEM ; -dev_set_drvdata (&pdev->dev, info); - -mutex_init (&info->lock); -init_completion (&info->done); - info->dev = &pdev->dev; + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!res) +return -ENODEV ; - info->mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); -if (!info->mem) { - ret = -ENXIO ; - goto fail_free_info; - } + info->regs =devm_request_and_ioremap (&pdev->dev, res); +if (!info->regs) +return -ENXIO ; - info->irq =platform_get_irq (pdev,0 ); -if (!info->irq) { - ret = -ENXIO ; - goto fail_free_info; - } + irq =platform_get_irq (pdev,0 ); +if (!irq) +return -ENODEV ; -if (!request_mem_region (info->mem->start,resource_size (info->mem), - pdev->name)) { - ret = -EBUSY ; - goto fail_free_info; - } + ret =devm_request_irq (&pdev->dev, irq, ep93xx_ac97_interrupt, +IRQF_TRIGGER_HIGH , pdev->name, info); +if (ret) + goto fail; - info->regs =ioremap (info->mem->start,resource_size (info->mem)); -if (!info->regs) { - ret = -ENOMEM ; - goto fail_release_mem; - } +dev_set_drvdata (&pdev->dev, info); - ret =request_irq (info->irq, ep93xx_ac97_interrupt,IRQF_TRIGGER_HIGH , - pdev->name, info); -if (ret) - goto fail_unmap_mem; +mutex_init (&info->lock); +init_completion (&info->done); + info->dev = &pdev->dev; ep93xx_ac97_info = info;platform_set_drvdata (pdev, info); ret =snd_soc_register_dai (&pdev->dev, &ep93xx_ac97_dai);if (ret) - goto fail_free_irq; + goto fail;return 0 ; -fail_free_irq: +fail:platform_set_drvdata (pdev,NULL ); -free_irq (info->irq, info); -fail_unmap_mem: -iounmap (info->regs); -fail_release_mem: -release_mem_region (info->mem->start,resource_size (info->mem)); -fail_free_info: -kfree (info); - + ep93xx_ac97_info =NULL ; +dev_set_drvdata (&pdev->dev,NULL );return ret; }
@@ -431,11 +411,9 @@ static int __devexit ep93xx_ac97_remove(struct platform_device *pdev)/* disable the AC97 controller */ ep93xx_ac97_write_reg (info,AC97GCR ,0 ); -free_irq (info->irq, info); -iounmap (info->regs); -release_mem_region (info->mem->start,resource_size (info->mem));platform_set_drvdata (pdev,NULL ); -kfree (info); + ep93xx_ac97_info =NULL ; +dev_set_drvdata (&pdev->dev,NULL );return 0 ; }
Quoted 5 lines · H Hartley Sweeten
Use the devm_* helpers to cleanup the probe routine. This also eliminates having to carry the mem and irq values in the private data for the remove.
Signed-off-by H Hartley Sweeten <[email protected]>Cc Mika Westerberg <[email protected]>
Tested-by Mika Westerberg <[email protected]>
Acked-by Mika Westerberg <[email protected]>
Quoted 4 lines
Cc Liam Girdwood <[email protected]>Cc Mark Brown <[email protected]>Cc Jaroslav Kysela <[email protected]>CC Takashi Iwai <[email protected]>
Mark Brown
AppliedQuoted 9 lines · H Hartley Sweeten
Use the devm_* helpers to cleanup the probe routine. This also eliminates having to carry the mem and irq values in the private data for the remove.
Signed-off-by H Hartley Sweeten <[email protected]>Cc Mika Westerberg <[email protected]>Cc Liam Girdwood <[email protected]>Cc Mark Brown <[email protected]>Cc Jaroslav Kysela <[email protected]>CC Takashi Iwai <[email protected]>
Applied, but please:
- Think more about your CC list.
- Try to avoid putting it in the body of the e-mail.