aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/hw_random/bcm2835-rng.c
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2017-11-07 19:44:38 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2017-11-29 00:43:42 -0500
commit21bb0ef43c11184961792790919d6daf9823e57a (patch)
treeaaf7a86b547a974f2814a4a5c876978425d7e865 /drivers/char/hw_random/bcm2835-rng.c
parent9e054ec21ef8344345b28603fb272fe999f735db (diff)
hwrng: bcm2835 - Obtain base register via resource
In preparation for consolidating bcm63xx-rng into bcm2835-rng, make sure that we obtain the base register via platform_get_resource() since we need to support the non-DT enabled MIPS-based BCM63xx DSL SoCs. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/char/hw_random/bcm2835-rng.c')
-rw-r--r--drivers/char/hw_random/bcm2835-rng.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c
index 574211a49549..a818418a7e4c 100644
--- a/drivers/char/hw_random/bcm2835-rng.c
+++ b/drivers/char/hw_random/bcm2835-rng.c
@@ -81,21 +81,23 @@ static int bcm2835_rng_probe(struct platform_device *pdev)
81 void (*rng_setup)(void __iomem *base); 81 void (*rng_setup)(void __iomem *base);
82 const struct of_device_id *rng_id; 82 const struct of_device_id *rng_id;
83 void __iomem *rng_base; 83 void __iomem *rng_base;
84 struct resource *r;
84 int err; 85 int err;
85 86
87 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
88
86 /* map peripheral */ 89 /* map peripheral */
87 rng_base = of_iomap(np, 0); 90 rng_base = devm_ioremap_resource(dev, r);
88 if (!rng_base) { 91 if (IS_ERR(rng_base)) {
89 dev_err(dev, "failed to remap rng regs"); 92 dev_err(dev, "failed to remap rng regs");
90 return -ENODEV; 93 return PTR_ERR(rng_base);
91 } 94 }
92 bcm2835_rng_ops.priv = (unsigned long)rng_base; 95 bcm2835_rng_ops.priv = (unsigned long)rng_base;
93 96
94 rng_id = of_match_node(bcm2835_rng_of_match, np); 97 rng_id = of_match_node(bcm2835_rng_of_match, np);
95 if (!rng_id) { 98 if (!rng_id)
96 iounmap(rng_base);
97 return -EINVAL; 99 return -EINVAL;
98 } 100
99 /* Check for rng init function, execute it */ 101 /* Check for rng init function, execute it */
100 rng_setup = rng_id->data; 102 rng_setup = rng_id->data;
101 if (rng_setup) 103 if (rng_setup)
@@ -107,10 +109,9 @@ static int bcm2835_rng_probe(struct platform_device *pdev)
107 109
108 /* register driver */ 110 /* register driver */
109 err = hwrng_register(&bcm2835_rng_ops); 111 err = hwrng_register(&bcm2835_rng_ops);
110 if (err) { 112 if (err)
111 dev_err(dev, "hwrng registration failed\n"); 113 dev_err(dev, "hwrng registration failed\n");
112 iounmap(rng_base); 114 else
113 } else
114 dev_info(dev, "hwrng registered\n"); 115 dev_info(dev, "hwrng registered\n");
115 116
116 return err; 117 return err;
@@ -125,7 +126,6 @@ static int bcm2835_rng_remove(struct platform_device *pdev)
125 126
126 /* unregister driver */ 127 /* unregister driver */
127 hwrng_unregister(&bcm2835_rng_ops); 128 hwrng_unregister(&bcm2835_rng_ops);
128 iounmap(rng_base);
129 129
130 return 0; 130 return 0;
131} 131}