diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-16 14:25:32 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-16 14:25:32 -0400 |
commit | 8ef50901d3c619127858b7d7f614fcab45e09d6b (patch) | |
tree | e75a0d48029d4a5857033e4edf1cd572a5a3fc62 /drivers/char | |
parent | 435263702ef0fc9ffdc6301a71c03b1d9ac0f1e0 (diff) | |
parent | 2502991560dc8244dbe10e48473d85722c1e2ec1 (diff) |
Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (51 commits)
[ARM] 5308/1: Fix Viper ISA IRQ handling
[ARM] 5307/1: pxa: fix CM-X2XX PCMCIA build error
[ARM] 5306/1: pxa: fix build error on CM-X270
[ARM] 5302/1: ARM: OMAP: Revert omap3 WDT changes to avoid merge conflict
[ARM] 5305/1: ARM: OMAP: Fix compile of McBSP by removing unnecessary check
[ARM] 5301/1: ARM: OMAP: Add missing irq defines
ARM: OMAP3: Add default kernel config for OMAP LDP
ARM: OMAP3: Add basic board support for OMAP LDP
ARM: OMAP3: Defconfig for the Gumstix Overo board (rev 3)
ARM: OMAP3: Add support for the Gumstix Overo board (rev 3)
ARM: OMAP3: Add Beagle defconfig
ARM: OMAP3: Add minimal Beagle board support
ARM: OMAP3: Add minimal omap3430 support
ARM: OMAP2: Fix sparse, checkpatch warnings in OMAP2/3 IRQ code
ARM: OMAP: Fixes to omap_mcbsp_request function
ARM: OMAP: Add support for OMAP2430 in McBSP
ARM: OMAP: Add support for McBSP devices 3 - 5 on 34xx
ARM: OMAP: Allocate McBSP devices dynamically
Fix sections for omap-mcbsp platform driver
[ARM] S3C24XX: Additional include moves
...
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/hw_random/omap-rng.c | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c index 51738bdd834e..d4e7dca06e4f 100644 --- a/drivers/char/hw_random/omap-rng.c +++ b/drivers/char/hw_random/omap-rng.c | |||
@@ -118,18 +118,21 @@ static int __init omap_rng_probe(struct platform_device *pdev) | |||
118 | 118 | ||
119 | mem = request_mem_region(res->start, res->end - res->start + 1, | 119 | mem = request_mem_region(res->start, res->end - res->start + 1, |
120 | pdev->name); | 120 | pdev->name); |
121 | if (mem == NULL) | 121 | if (mem == NULL) { |
122 | return -EBUSY; | 122 | ret = -EBUSY; |
123 | goto err_region; | ||
124 | } | ||
123 | 125 | ||
124 | dev_set_drvdata(&pdev->dev, mem); | 126 | dev_set_drvdata(&pdev->dev, mem); |
125 | rng_base = (u32 __force __iomem *)io_p2v(res->start); | 127 | rng_base = ioremap(res->start, res->end - res->start + 1); |
128 | if (!rng_base) { | ||
129 | ret = -ENOMEM; | ||
130 | goto err_ioremap; | ||
131 | } | ||
126 | 132 | ||
127 | ret = hwrng_register(&omap_rng_ops); | 133 | ret = hwrng_register(&omap_rng_ops); |
128 | if (ret) { | 134 | if (ret) |
129 | release_resource(mem); | 135 | goto err_register; |
130 | rng_base = NULL; | ||
131 | return ret; | ||
132 | } | ||
133 | 136 | ||
134 | dev_info(&pdev->dev, "OMAP Random Number Generator ver. %02x\n", | 137 | dev_info(&pdev->dev, "OMAP Random Number Generator ver. %02x\n", |
135 | omap_rng_read_reg(RNG_REV_REG)); | 138 | omap_rng_read_reg(RNG_REV_REG)); |
@@ -138,6 +141,18 @@ static int __init omap_rng_probe(struct platform_device *pdev) | |||
138 | rng_dev = pdev; | 141 | rng_dev = pdev; |
139 | 142 | ||
140 | return 0; | 143 | return 0; |
144 | |||
145 | err_register: | ||
146 | iounmap(rng_base); | ||
147 | rng_base = NULL; | ||
148 | err_ioremap: | ||
149 | release_resource(mem); | ||
150 | err_region: | ||
151 | if (cpu_is_omap24xx()) { | ||
152 | clk_disable(rng_ick); | ||
153 | clk_put(rng_ick); | ||
154 | } | ||
155 | return ret; | ||
141 | } | 156 | } |
142 | 157 | ||
143 | static int __exit omap_rng_remove(struct platform_device *pdev) | 158 | static int __exit omap_rng_remove(struct platform_device *pdev) |
@@ -148,6 +163,8 @@ static int __exit omap_rng_remove(struct platform_device *pdev) | |||
148 | 163 | ||
149 | omap_rng_write_reg(RNG_MASK_REG, 0x0); | 164 | omap_rng_write_reg(RNG_MASK_REG, 0x0); |
150 | 165 | ||
166 | iounmap(rng_base); | ||
167 | |||
151 | if (cpu_is_omap24xx()) { | 168 | if (cpu_is_omap24xx()) { |
152 | clk_disable(rng_ick); | 169 | clk_disable(rng_ick); |
153 | clk_put(rng_ick); | 170 | clk_put(rng_ick); |