|
@@ -61,7 +61,6 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started "
|
|
|
"(default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
|
|
|
|
|
|
struct nuc900_wdt {
|
|
|
- struct resource *res;
|
|
|
struct clk *wdt_clock;
|
|
|
struct platform_device *pdev;
|
|
|
void __iomem *wdt_base;
|
|
@@ -244,9 +243,11 @@ static struct miscdevice nuc900wdt_miscdev = {
|
|
|
|
|
|
static int nuc900wdt_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
+ struct resource *res;
|
|
|
int ret = 0;
|
|
|
|
|
|
- nuc900_wdt = kzalloc(sizeof(struct nuc900_wdt), GFP_KERNEL);
|
|
|
+ nuc900_wdt = devm_kzalloc(&pdev->dev, sizeof(*nuc900_wdt),
|
|
|
+ GFP_KERNEL);
|
|
|
if (!nuc900_wdt)
|
|
|
return -ENOMEM;
|
|
|
|
|
@@ -254,33 +255,20 @@ static int nuc900wdt_probe(struct platform_device *pdev)
|
|
|
|
|
|
spin_lock_init(&nuc900_wdt->wdt_lock);
|
|
|
|
|
|
- nuc900_wdt->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
- if (nuc900_wdt->res == NULL) {
|
|
|
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
+ if (res == NULL) {
|
|
|
dev_err(&pdev->dev, "no memory resource specified\n");
|
|
|
- ret = -ENOENT;
|
|
|
- goto err_get;
|
|
|
+ return -ENOENT;
|
|
|
}
|
|
|
|
|
|
- if (!request_mem_region(nuc900_wdt->res->start,
|
|
|
- resource_size(nuc900_wdt->res), pdev->name)) {
|
|
|
- dev_err(&pdev->dev, "failed to get memory region\n");
|
|
|
- ret = -ENOENT;
|
|
|
- goto err_get;
|
|
|
- }
|
|
|
-
|
|
|
- nuc900_wdt->wdt_base = ioremap(nuc900_wdt->res->start,
|
|
|
- resource_size(nuc900_wdt->res));
|
|
|
- if (nuc900_wdt->wdt_base == NULL) {
|
|
|
- dev_err(&pdev->dev, "failed to ioremap() region\n");
|
|
|
- ret = -EINVAL;
|
|
|
- goto err_req;
|
|
|
- }
|
|
|
+ nuc900_wdt->wdt_base = devm_ioremap_resource(&pdev->dev, res);
|
|
|
+ if (IS_ERR(nuc900_wdt->wdt_base))
|
|
|
+ return PTR_ERR(nuc900_wdt->wdt_base);
|
|
|
|
|
|
- nuc900_wdt->wdt_clock = clk_get(&pdev->dev, NULL);
|
|
|
+ nuc900_wdt->wdt_clock = devm_clk_get(&pdev->dev, NULL);
|
|
|
if (IS_ERR(nuc900_wdt->wdt_clock)) {
|
|
|
dev_err(&pdev->dev, "failed to find watchdog clock source\n");
|
|
|
- ret = PTR_ERR(nuc900_wdt->wdt_clock);
|
|
|
- goto err_map;
|
|
|
+ return PTR_ERR(nuc900_wdt->wdt_clock);
|
|
|
}
|
|
|
|
|
|
clk_enable(nuc900_wdt->wdt_clock);
|
|
@@ -298,14 +286,6 @@ static int nuc900wdt_probe(struct platform_device *pdev)
|
|
|
|
|
|
err_clk:
|
|
|
clk_disable(nuc900_wdt->wdt_clock);
|
|
|
- clk_put(nuc900_wdt->wdt_clock);
|
|
|
-err_map:
|
|
|
- iounmap(nuc900_wdt->wdt_base);
|
|
|
-err_req:
|
|
|
- release_mem_region(nuc900_wdt->res->start,
|
|
|
- resource_size(nuc900_wdt->res));
|
|
|
-err_get:
|
|
|
- kfree(nuc900_wdt);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -314,14 +294,6 @@ static int nuc900wdt_remove(struct platform_device *pdev)
|
|
|
misc_deregister(&nuc900wdt_miscdev);
|
|
|
|
|
|
clk_disable(nuc900_wdt->wdt_clock);
|
|
|
- clk_put(nuc900_wdt->wdt_clock);
|
|
|
-
|
|
|
- iounmap(nuc900_wdt->wdt_base);
|
|
|
-
|
|
|
- release_mem_region(nuc900_wdt->res->start,
|
|
|
- resource_size(nuc900_wdt->res));
|
|
|
-
|
|
|
- kfree(nuc900_wdt);
|
|
|
|
|
|
return 0;
|
|
|
}
|