Skip to content

Commit

Permalink
ASoC: atmel-ssc: remove clk_disable_unprepare call from critical section
Browse files Browse the repository at this point in the history
clk_prepare/unprepare (and indirectly clk_prepare_enable/disable_unprepare)
may sleep and thus cannot be called in critical section.

This patch fix a bug introduced by commit
6f0d947 where clk_disable_unprepare was
called with user_lock hold.

Signed-off-by: Boris BREZILLON <b.brezillon@overkiz.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Boris BREZILLON authored and Mark Brown committed Jul 18, 2013
1 parent ad81f05 commit 9a9b1c6
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions drivers/misc/atmel-ssc.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,19 @@ EXPORT_SYMBOL(ssc_request);

void ssc_free(struct ssc_device *ssc)
{
bool disable_clk = true;

spin_lock(&user_lock);
if (ssc->user) {
if (ssc->user)
ssc->user--;
clk_disable_unprepare(ssc->clk);
} else {
else {
disable_clk = false;
dev_dbg(&ssc->pdev->dev, "device already free\n");
}
spin_unlock(&user_lock);

if (disable_clk)
clk_disable_unprepare(ssc->clk);
}
EXPORT_SYMBOL(ssc_free);

Expand Down

0 comments on commit 9a9b1c6

Please sign in to comment.