Commit 58cf2f14 authored by Eero Nurkkala's avatar Eero Nurkkala Committed by Tony Lindgren

OMAP: McBSP: Do not enable or disable clocks on failed path

McBSP clocks are being double enabled in the event the
McBSP is already active. Also, they are unnecessarily
disabled when there's no active McBSP in use. Fix this
phenomenom by enabling and disabling the clocks at the
proper location.
Signed-off-by: default avatarEero Nurkkala <ext-eero.nurkkala@nokia.com>
Acked-by: default avatarJarkko Nikula <jarkko.nikula@nokia.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent bd0d1794
...@@ -226,9 +226,6 @@ int omap_mcbsp_request(unsigned int id) ...@@ -226,9 +226,6 @@ int omap_mcbsp_request(unsigned int id)
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request) if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request)
mcbsp->pdata->ops->request(id); mcbsp->pdata->ops->request(id);
for (i = 0; i < mcbsp->num_clks; i++)
clk_enable(mcbsp->clks[i]);
spin_lock(&mcbsp->lock); spin_lock(&mcbsp->lock);
if (!mcbsp->free) { if (!mcbsp->free) {
dev_err(mcbsp->dev, "McBSP%d is currently in use\n", dev_err(mcbsp->dev, "McBSP%d is currently in use\n",
...@@ -240,6 +237,9 @@ int omap_mcbsp_request(unsigned int id) ...@@ -240,6 +237,9 @@ int omap_mcbsp_request(unsigned int id)
mcbsp->free = 0; mcbsp->free = 0;
spin_unlock(&mcbsp->lock); spin_unlock(&mcbsp->lock);
for (i = 0; i < mcbsp->num_clks; i++)
clk_enable(mcbsp->clks[i]);
/* /*
* Enable wakup behavior, smart idle and all wakeups * Enable wakup behavior, smart idle and all wakeups
* REVISIT: some wakeups may be unnecessary * REVISIT: some wakeups may be unnecessary
...@@ -319,9 +319,6 @@ void omap_mcbsp_free(unsigned int id) ...@@ -319,9 +319,6 @@ void omap_mcbsp_free(unsigned int id)
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free) if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
mcbsp->pdata->ops->free(id); mcbsp->pdata->ops->free(id);
for (i = mcbsp->num_clks - 1; i >= 0; i--)
clk_disable(mcbsp->clks[i]);
spin_lock(&mcbsp->lock); spin_lock(&mcbsp->lock);
if (mcbsp->free) { if (mcbsp->free) {
dev_err(mcbsp->dev, "McBSP%d was not reserved\n", dev_err(mcbsp->dev, "McBSP%d was not reserved\n",
...@@ -329,7 +326,12 @@ void omap_mcbsp_free(unsigned int id) ...@@ -329,7 +326,12 @@ void omap_mcbsp_free(unsigned int id)
spin_unlock(&mcbsp->lock); spin_unlock(&mcbsp->lock);
return; return;
} }
spin_unlock(&mcbsp->lock);
for (i = mcbsp->num_clks - 1; i >= 0; i--)
clk_disable(mcbsp->clks[i]);
spin_lock(&mcbsp->lock);
mcbsp->free = 1; mcbsp->free = 1;
spin_unlock(&mcbsp->lock); spin_unlock(&mcbsp->lock);
......
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