Commit 80d2518d authored by Tero Kristo's avatar Tero Kristo Committed by Paul Walmsley

ARM: OMAP2+: hwmod: fix deassert hardreset clkdm usecounting

Deasserting hardreset increases the usecount for the hwmod parent clockdomain
always, however usecount is only decreased at end in certain error cases.
This causes software supervised clockdomains to remain always on, preventing
idle. Fixed by always releasing the hwmods clockdomain parent when exiting
the function.
Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
Tested-by: default avatarCarlos Hernandez <ceh@ti.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Tony Lindgren <tony@atomide.com>
Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
parent 0717103e
...@@ -1692,16 +1692,15 @@ static int _deassert_hardreset(struct omap_hwmod *oh, const char *name) ...@@ -1692,16 +1692,15 @@ static int _deassert_hardreset(struct omap_hwmod *oh, const char *name)
if (ret == -EBUSY) if (ret == -EBUSY)
pr_warn("omap_hwmod: %s: failed to hardreset\n", oh->name); pr_warn("omap_hwmod: %s: failed to hardreset\n", oh->name);
if (!ret) { if (oh->clkdm) {
/* /*
* Set the clockdomain to HW_AUTO, assuming that the * Set the clockdomain to HW_AUTO, assuming that the
* previous state was HW_AUTO. * previous state was HW_AUTO.
*/ */
if (oh->clkdm && hwsup) if (hwsup)
clkdm_allow_idle(oh->clkdm); clkdm_allow_idle(oh->clkdm);
} else {
if (oh->clkdm) clkdm_hwmod_disable(oh->clkdm, oh);
clkdm_hwmod_disable(oh->clkdm, oh);
} }
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment