diff options
author | Linus Torvalds | 2008-10-16 11:25:32 -0700 |
---|---|---|
committer | Linus Torvalds | 2008-10-16 11:25:32 -0700 |
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) mem = request_mem_region(res->start, res->end - res->start + 1, pdev->name); - if (mem == NULL) - return -EBUSY; + if (mem == NULL) { + ret = -EBUSY; + goto err_region; + } dev_set_drvdata(&pdev->dev, mem); - rng_base = (u32 __force __iomem *)io_p2v(res->start); + rng_base = ioremap(res->start, res->end - res->start + 1); + if (!rng_base) { + ret = -ENOMEM; + goto err_ioremap; + } ret = hwrng_register(&omap_rng_ops); - if (ret) { - release_resource(mem); - rng_base = NULL; - return ret; - } + if (ret) + goto err_register; dev_info(&pdev->dev, "OMAP Random Number Generator ver. %02x\n", omap_rng_read_reg(RNG_REV_REG)); @@ -138,6 +141,18 @@ static int __init omap_rng_probe(struct platform_device *pdev) rng_dev = pdev; return 0; + +err_register: + iounmap(rng_base); + rng_base = NULL; +err_ioremap: + release_resource(mem); +err_region: + if (cpu_is_omap24xx()) { + clk_disable(rng_ick); + clk_put(rng_ick); + } + return ret; } static int __exit omap_rng_remove(struct platform_device *pdev) @@ -148,6 +163,8 @@ static int __exit omap_rng_remove(struct platform_device *pdev) omap_rng_write_reg(RNG_MASK_REG, 0x0); + iounmap(rng_base); + if (cpu_is_omap24xx()) { clk_disable(rng_ick); clk_put(rng_ick); |