Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 305562
b: refs/heads/master
c: e7cff0a
h: refs/heads/master
v: v3
  • Loading branch information
H Hartley Sweeten authored and Mark Brown committed Apr 1, 2012
1 parent 38c1d3b commit 80f3f00
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 49 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b46b373f4084cc02d4d41a5a42199fe8462c2f13
refs/heads/master: e7cff0abf99a0895bc2094e08809bd5e0c4f6a4a
74 changes: 26 additions & 48 deletions trunk/sound/soc/ep93xx/ep93xx-ac97.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}
Expand Down

0 comments on commit 80f3f00

Please sign in to comment.