diff options
| author | Florian Fainelli <f.fainelli@gmail.com> | 2017-11-07 19:44:38 -0500 |
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2017-11-29 00:43:42 -0500 |
| commit | 21bb0ef43c11184961792790919d6daf9823e57a (patch) | |
| tree | aaf7a86b547a974f2814a4a5c876978425d7e865 /drivers/char/hw_random/bcm2835-rng.c | |
| parent | 9e054ec21ef8344345b28603fb272fe999f735db (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.c | 20 |
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 | } |
