aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/hw_random/atmel-rng.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/hw_random/atmel-rng.c')
-rw-r--r--drivers/char/hw_random/atmel-rng.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index bf9fc6b79328..851bc7e20ad2 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -54,29 +54,22 @@ static int atmel_trng_probe(struct platform_device *pdev)
54 struct resource *res; 54 struct resource *res;
55 int ret; 55 int ret;
56 56
57 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
58 if (!res)
59 return -EINVAL;
60
61 trng = devm_kzalloc(&pdev->dev, sizeof(*trng), GFP_KERNEL); 57 trng = devm_kzalloc(&pdev->dev, sizeof(*trng), GFP_KERNEL);
62 if (!trng) 58 if (!trng)
63 return -ENOMEM; 59 return -ENOMEM;
64 60
65 if (!devm_request_mem_region(&pdev->dev, res->start, 61 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
66 resource_size(res), pdev->name)) 62 trng->base = devm_ioremap_resource(&pdev->dev, res);
67 return -EBUSY; 63 if (IS_ERR(trng->base))
68 64 return PTR_ERR(trng->base);
69 trng->base = devm_ioremap(&pdev->dev, res->start, resource_size(res));
70 if (!trng->base)
71 return -EBUSY;
72 65
73 trng->clk = clk_get(&pdev->dev, NULL); 66 trng->clk = devm_clk_get(&pdev->dev, NULL);
74 if (IS_ERR(trng->clk)) 67 if (IS_ERR(trng->clk))
75 return PTR_ERR(trng->clk); 68 return PTR_ERR(trng->clk);
76 69
77 ret = clk_enable(trng->clk); 70 ret = clk_enable(trng->clk);
78 if (ret) 71 if (ret)
79 goto err_enable; 72 return ret;
80 73
81 writel(TRNG_KEY | 1, trng->base + TRNG_CR); 74 writel(TRNG_KEY | 1, trng->base + TRNG_CR);
82 trng->rng.name = pdev->name; 75 trng->rng.name = pdev->name;
@@ -92,9 +85,6 @@ static int atmel_trng_probe(struct platform_device *pdev)
92 85
93err_register: 86err_register:
94 clk_disable(trng->clk); 87 clk_disable(trng->clk);
95err_enable:
96 clk_put(trng->clk);
97
98 return ret; 88 return ret;
99} 89}
100 90
@@ -106,7 +96,6 @@ static int atmel_trng_remove(struct platform_device *pdev)
106 96
107 writel(TRNG_KEY, trng->base + TRNG_CR); 97 writel(TRNG_KEY, trng->base + TRNG_CR);
108 clk_disable(trng->clk); 98 clk_disable(trng->clk);
109 clk_put(trng->clk);
110 99
111 return 0; 100 return 0;
112} 101}