Skip to content

Commit

Permalink
ARM: OMAP2+: gpmc: Sanity check GPMC fck on probe
Browse files Browse the repository at this point in the history
This prevents potential division by zero errors
if GPMC fck turns out to be zero due to faulty clock
data.

Use resource managed clk_get() API.

Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
  • Loading branch information
Roger Quadros committed Oct 30, 2014
1 parent 4cf27d2 commit 8bf9be5
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions arch/arm/mach-omap2/gpmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,11 +204,6 @@ static unsigned long gpmc_get_fclk_period(void)
{
unsigned long rate = clk_get_rate(gpmc_l3_clk);

if (rate == 0) {
printk(KERN_WARNING "gpmc_l3_clk not enabled\n");
return 0;
}

rate /= 1000;
rate = 1000000000 / rate; /* In picoseconds */

Expand Down Expand Up @@ -1692,13 +1687,18 @@ static int gpmc_probe(struct platform_device *pdev)
else
gpmc_irq = res->start;

gpmc_l3_clk = clk_get(&pdev->dev, "fck");
gpmc_l3_clk = devm_clk_get(&pdev->dev, "fck");
if (IS_ERR(gpmc_l3_clk)) {
dev_err(&pdev->dev, "error: clk_get\n");
dev_err(&pdev->dev, "Failed to get GPMC fck\n");
gpmc_irq = 0;
return PTR_ERR(gpmc_l3_clk);
}

if (!clk_get_rate(gpmc_l3_clk)) {
dev_err(&pdev->dev, "Invalid GPMC fck clock rate\n");
return -EINVAL;
}

pm_runtime_enable(&pdev->dev);
pm_runtime_get_sync(&pdev->dev);

Expand Down Expand Up @@ -1741,7 +1741,6 @@ static int gpmc_probe(struct platform_device *pdev)
rc = gpmc_probe_dt(pdev);
if (rc < 0) {
pm_runtime_put_sync(&pdev->dev);
clk_put(gpmc_l3_clk);
dev_err(gpmc_dev, "failed to probe DT parameters\n");
return rc;
}
Expand Down

0 comments on commit 8bf9be5

Please sign in to comment.