Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 346436
b: refs/heads/master
c: bdaa2c6
h: refs/heads/master
v: v3
  • Loading branch information
Viresh Kumar authored and Linus Torvalds committed Dec 18, 2012
1 parent 707524d commit 14d1105
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 61 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: 942bfb3ed08b677e0a447096c501d6b0b49f44f9
refs/heads/master: bdaa2c63b060ae082ab4f20378c1a6307b59b8db
89 changes: 29 additions & 60 deletions trunk/drivers/rtc/rtc-spear.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,35 +363,42 @@ static int __devinit spear_rtc_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "no resource defined\n");
return -EBUSY;
}
if (!request_mem_region(res->start, resource_size(res), pdev->name)) {
dev_err(&pdev->dev, "rtc region already claimed\n");
return -EBUSY;
}

config = kzalloc(sizeof(*config), GFP_KERNEL);
config = devm_kzalloc(&pdev->dev, sizeof(*config), GFP_KERNEL);
if (!config) {
dev_err(&pdev->dev, "out of memory\n");
status = -ENOMEM;
goto err_release_region;
return -ENOMEM;
}

config->clk = clk_get(&pdev->dev, NULL);
if (IS_ERR(config->clk)) {
status = PTR_ERR(config->clk);
goto err_kfree;
/* alarm irqs */
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
dev_err(&pdev->dev, "no update irq?\n");
return irq;
}

status = clk_enable(config->clk);
if (status < 0)
goto err_clk_put;
status = devm_request_irq(&pdev->dev, irq, spear_rtc_irq, 0, pdev->name,
config);
if (status) {
dev_err(&pdev->dev, "Alarm interrupt IRQ%d already claimed\n",
irq);
return status;
}

config->ioaddr = ioremap(res->start, resource_size(res));
config->ioaddr = devm_request_and_ioremap(&pdev->dev, res);
if (!config->ioaddr) {
dev_err(&pdev->dev, "ioremap fail\n");
status = -ENOMEM;
goto err_disable_clock;
dev_err(&pdev->dev, "request-ioremap fail\n");
return -ENOMEM;
}

config->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(config->clk))
return PTR_ERR(config->clk);

status = clk_enable(config->clk);
if (status < 0)
return status;

spin_lock_init(&config->lock);
platform_set_drvdata(pdev, config);

Expand All @@ -401,67 +408,29 @@ static int __devinit spear_rtc_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "can't register RTC device, err %ld\n",
PTR_ERR(config->rtc));
status = PTR_ERR(config->rtc);
goto err_iounmap;
}

/* alarm irqs */
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
dev_err(&pdev->dev, "no update irq?\n");
status = irq;
goto err_clear_platdata;
}

status = request_irq(irq, spear_rtc_irq, 0, pdev->name, config);
if (status) {
dev_err(&pdev->dev, "Alarm interrupt IRQ%d already \
claimed\n", irq);
goto err_clear_platdata;
goto err_disable_clock;
}

if (!device_can_wakeup(&pdev->dev))
device_init_wakeup(&pdev->dev, 1);

return 0;

err_clear_platdata:
platform_set_drvdata(pdev, NULL);
rtc_device_unregister(config->rtc);
err_iounmap:
iounmap(config->ioaddr);
err_disable_clock:
platform_set_drvdata(pdev, NULL);
clk_disable(config->clk);
err_clk_put:
clk_put(config->clk);
err_kfree:
kfree(config);
err_release_region:
release_mem_region(res->start, resource_size(res));

return status;
}

static int __devexit spear_rtc_remove(struct platform_device *pdev)
{
struct spear_rtc_config *config = platform_get_drvdata(pdev);
int irq;
struct resource *res;

/* leave rtc running, but disable irqs */
rtc_device_unregister(config->rtc);
spear_rtc_disable_interrupt(config);
device_init_wakeup(&pdev->dev, 0);
irq = platform_get_irq(pdev, 0);
if (irq)
free_irq(irq, pdev);
clk_disable(config->clk);
clk_put(config->clk);
iounmap(config->ioaddr);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (res)
release_mem_region(res->start, resource_size(res));
platform_set_drvdata(pdev, NULL);
rtc_device_unregister(config->rtc);
kfree(config);
device_init_wakeup(&pdev->dev, 0);

return 0;
}
Expand Down

0 comments on commit 14d1105

Please sign in to comment.