arm: mach-omap2: hsmmc_reset: fix clk_get() error handling
clk_get() return value should be checked with IS_ERR(). Furthermore, clocks should be put and disabled properly. Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
committed by
Tony Lindgren
parent
f7bb0d9ab2
commit
434c23a7ef
@@ -638,6 +638,7 @@ static struct platform_device dummy_pdev = {
|
|||||||
static void __init omap_hsmmc_reset(void)
|
static void __init omap_hsmmc_reset(void)
|
||||||
{
|
{
|
||||||
u32 i, nr_controllers;
|
u32 i, nr_controllers;
|
||||||
|
struct clk *iclk, *fclk;
|
||||||
|
|
||||||
if (cpu_is_omap242x())
|
if (cpu_is_omap242x())
|
||||||
return;
|
return;
|
||||||
@@ -647,7 +648,6 @@ static void __init omap_hsmmc_reset(void)
|
|||||||
|
|
||||||
for (i = 0; i < nr_controllers; i++) {
|
for (i = 0; i < nr_controllers; i++) {
|
||||||
u32 v, base = 0;
|
u32 v, base = 0;
|
||||||
struct clk *iclk, *fclk;
|
|
||||||
struct device *dev = &dummy_pdev.dev;
|
struct device *dev = &dummy_pdev.dev;
|
||||||
|
|
||||||
switch (i) {
|
switch (i) {
|
||||||
@@ -678,19 +678,16 @@ static void __init omap_hsmmc_reset(void)
|
|||||||
dummy_pdev.id = i;
|
dummy_pdev.id = i;
|
||||||
dev_set_name(&dummy_pdev.dev, "mmci-omap-hs.%d", i);
|
dev_set_name(&dummy_pdev.dev, "mmci-omap-hs.%d", i);
|
||||||
iclk = clk_get(dev, "ick");
|
iclk = clk_get(dev, "ick");
|
||||||
if (iclk && clk_enable(iclk))
|
if (IS_ERR(iclk))
|
||||||
iclk = NULL;
|
goto err1;
|
||||||
|
if (clk_enable(iclk))
|
||||||
|
goto err2;
|
||||||
|
|
||||||
fclk = clk_get(dev, "fck");
|
fclk = clk_get(dev, "fck");
|
||||||
if (fclk && clk_enable(fclk))
|
if (IS_ERR(fclk))
|
||||||
fclk = NULL;
|
goto err3;
|
||||||
|
if (clk_enable(fclk))
|
||||||
if (!iclk || !fclk) {
|
goto err4;
|
||||||
printk(KERN_WARNING
|
|
||||||
"%s: Unable to enable clocks for MMC%d, "
|
|
||||||
"cannot reset.\n", __func__, i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
omap_writel(MMCHS_SYSCONFIG_SWRESET, base + MMCHS_SYSCONFIG);
|
omap_writel(MMCHS_SYSCONFIG_SWRESET, base + MMCHS_SYSCONFIG);
|
||||||
v = omap_readl(base + MMCHS_SYSSTATUS);
|
v = omap_readl(base + MMCHS_SYSSTATUS);
|
||||||
@@ -698,15 +695,22 @@ static void __init omap_hsmmc_reset(void)
|
|||||||
MMCHS_SYSSTATUS_RESETDONE))
|
MMCHS_SYSSTATUS_RESETDONE))
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
|
|
||||||
if (fclk) {
|
|
||||||
clk_disable(fclk);
|
clk_disable(fclk);
|
||||||
clk_put(fclk);
|
clk_put(fclk);
|
||||||
}
|
|
||||||
if (iclk) {
|
|
||||||
clk_disable(iclk);
|
clk_disable(iclk);
|
||||||
clk_put(iclk);
|
clk_put(iclk);
|
||||||
}
|
}
|
||||||
}
|
return;
|
||||||
|
|
||||||
|
err4:
|
||||||
|
clk_put(fclk);
|
||||||
|
err3:
|
||||||
|
clk_disable(iclk);
|
||||||
|
err2:
|
||||||
|
clk_put(iclk);
|
||||||
|
err1:
|
||||||
|
printk(KERN_WARNING "%s: Unable to enable clocks for MMC%d, "
|
||||||
|
"cannot reset.\n", __func__, i);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void omap_hsmmc_reset(void) {}
|
static inline void omap_hsmmc_reset(void) {}
|
||||||
|
Reference in New Issue
Block a user