[PATCH v2 01/03] ARM: shmobile: Introduce shmobile_clk_workaround()
Simon Horman
horms at verge.net.au
Wed Mar 12 21:23:06 EDT 2014
On Thu, Mar 13, 2014 at 08:36:17AM +0900, Magnus Damm wrote:
> From: Magnus Damm <damm at opensource.se>
>
> Introduce a new clock workaround function used by DT reference
> code on the mach-shmobile subarchitecture. The new function
> shmobile_clk_workaround() is used to configure clkdev to
> allow DT and platform devices to coexist. It is possible for
> the DT reference board code to also request enabling of the clock
> in case the driver does not implement clock control.
>
> Signed-off-by: Magnus Damm <damm at opensource.se>
Thanks, I have queued this up with Wolfram's Reviewed-by
and Tested-by which he supplied for v1.
I have also removed the trailing empty line that this
patch adds to clock.c.
> ---
>
> Changes since V1:
> - Reworked patch dependency, updated include file path
>
> arch/arm/mach-shmobile/Makefile | 2 -
> arch/arm/mach-shmobile/clock.c | 29 +++++++++++++++++++++++++++
> arch/arm/mach-shmobile/include/mach/clock.h | 16 ++++++++++++++
> 3 files changed, 46 insertions(+), 1 deletion(-)
>
> --- 0001/arch/arm/mach-shmobile/Makefile
> +++ work/arch/arm/mach-shmobile/Makefile 2014-03-13 08:29:12.000000000 +0900
> @@ -21,8 +21,8 @@ obj-$(CONFIG_ARCH_EMEV2) += setup-emev2.
> obj-$(CONFIG_ARCH_R7S72100) += setup-r7s72100.o
>
> # Clock objects
> -ifndef CONFIG_COMMON_CLK
> obj-y += clock.o
> +ifndef CONFIG_COMMON_CLK
> obj-$(CONFIG_ARCH_SH7372) += clock-sh7372.o
> obj-$(CONFIG_ARCH_SH73A0) += clock-sh73a0.o
> obj-$(CONFIG_ARCH_R8A73A4) += clock-r8a73a4.o
> --- 0001/arch/arm/mach-shmobile/clock.c
> +++ work/arch/arm/mach-shmobile/clock.c 2014-03-13 08:29:35.000000000 +0900
> @@ -21,6 +21,32 @@
> */
> #include <linux/kernel.h>
> #include <linux/init.h>
> +
> +#ifdef CONFIG_COMMON_CLK
> +#include <linux/clk.h>
> +#include <linux/clkdev.h>
> +#include <mach/clock.h>
> +
> +void __init shmobile_clk_workaround(const struct clk_name *clks,
> + int nr_clks, bool enable)
> +{
> + const struct clk_name *clkn;
> + struct clk *clk;
> + unsigned int i;
> +
> + for (i = 0; i < nr_clks; ++i) {
> + clkn = clks + i;
> + clk = clk_get(NULL, clkn->clk);
> + if (!IS_ERR(clk)) {
> + clk_register_clkdev(clk, clkn->con_id, clkn->dev_id);
> + if (enable)
> + clk_prepare_enable(clk);
> + clk_put(clk);
> + }
> + }
> +}
> +
> +#else /* CONFIG_COMMON_CLK */
> #include <linux/sh_clk.h>
> #include <linux/export.h>
> #include <mach/clock.h>
> @@ -58,3 +84,6 @@ void __clk_put(struct clk *clk)
> {
> }
> EXPORT_SYMBOL(__clk_put);
> +
> +#endif /* CONFIG_COMMON_CLK */
> +
> --- 0001/arch/arm/mach-shmobile/include/mach/clock.h
> +++ work/arch/arm/mach-shmobile/include/mach/clock.h 2014-03-13 08:29:12.000000000 +0900
> @@ -1,6 +1,21 @@
> #ifndef CLOCK_H
> #define CLOCK_H
>
> +#ifdef CONFIG_COMMON_CLK
> +/* temporary clock configuration helper for platform devices */
> +
> +struct clk_name {
> + const char *clk;
> + const char *con_id;
> + const char *dev_id;
> +};
> +
> +void shmobile_clk_workaround(const struct clk_name *clks, int nr_clks,
> + bool enable);
> +
> +#else /* CONFIG_COMMON_CLK */
> +/* legacy clock implementation */
> +
> unsigned long shmobile_fixed_ratio_clk_recalc(struct clk *clk);
> extern struct sh_clk_ops shmobile_fixed_ratio_clk_ops;
>
> @@ -36,4 +51,5 @@ do { \
> (p)->div = d; \
> } while (0)
>
> +#endif /* CONFIG_COMMON_CLK */
> #endif
>
More information about the linux-arm-kernel
mailing list