Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6abda3e1 authored by Shawn Guo's avatar Shawn Guo
Browse files

ARM: mxs: select HAVE_CLK_PREPARE for clock



This patch adds clk_prepare/clk_unprepare for mxs clock api by
renaming the existing non-atomic clk_enable/clk_disable to
clk_prepare/clk_unprepare and adding a pair of dummy
clk_enable/clk_disable.  Then with selecting HAVE_CLK_PREPARE for
mxs clock, we can fix the mutex locking warning that has been
reported for a few times.

Signed-off-by: default avatarShawn Guo <shawn.guo@linaro.org>
parent 5c77f560
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -442,6 +442,7 @@ config ARCH_MXS
	select ARCH_REQUIRE_GPIOLIB
	select ARCH_REQUIRE_GPIOLIB
	select CLKDEV_LOOKUP
	select CLKDEV_LOOKUP
	select CLKSRC_MMIO
	select CLKSRC_MMIO
	select HAVE_CLK_PREPARE
	help
	help
	  Support for Freescale MXS-based family of processors
	  Support for Freescale MXS-based family of processors


+22 −9
Original line number Original line Diff line number Diff line
@@ -74,10 +74,15 @@ static int __clk_enable(struct clk *clk)
	return 0;
	return 0;
}
}


/* This function increments the reference count on the clock and enables the
/*
 * clock if not already enabled. The parent clock tree is recursively enabled
 * The clk_enable/clk_disable could be called by drivers in atomic context,
 * so they should not really hold mutex.  Instead, clk_prepare/clk_unprepare
 * can hold a mutex, as the pair will only be called in non-atomic context.
 * Before migrating to common clk framework, we can have __clk_enable and
 * __clk_disable called in clk_prepare/clk_unprepare with mutex held and
 * leave clk_enable/clk_disable as the dummy functions.
 */
 */
int clk_enable(struct clk *clk)
int clk_prepare(struct clk *clk)
{
{
	int ret = 0;
	int ret = 0;


@@ -90,13 +95,9 @@ int clk_enable(struct clk *clk)


	return ret;
	return ret;
}
}
EXPORT_SYMBOL(clk_enable);
EXPORT_SYMBOL(clk_prepare);


/* This function decrements the reference count on the clock and disables
void clk_unprepare(struct clk *clk)
 * the clock when reference count is 0. The parent clock tree is
 * recursively disabled
 */
void clk_disable(struct clk *clk)
{
{
	if (clk == NULL || IS_ERR(clk))
	if (clk == NULL || IS_ERR(clk))
		return;
		return;
@@ -105,6 +106,18 @@ void clk_disable(struct clk *clk)
	__clk_disable(clk);
	__clk_disable(clk);
	mutex_unlock(&clocks_mutex);
	mutex_unlock(&clocks_mutex);
}
}
EXPORT_SYMBOL(clk_unprepare);

int clk_enable(struct clk *clk)
{
	return 0;
}
EXPORT_SYMBOL(clk_enable);

void clk_disable(struct clk *clk)
{
	/* nothing to do */
}
EXPORT_SYMBOL(clk_disable);
EXPORT_SYMBOL(clk_disable);


/* Retrieve the *current* clock rate. If the clock itself
/* Retrieve the *current* clock rate. If the clock itself