diff options
Diffstat (limited to 'recipes-kernel/linux/linux-yocto-3.17/collie/arm-sa1100-add-cpu-clock.patch')
-rw-r--r-- | recipes-kernel/linux/linux-yocto-3.17/collie/arm-sa1100-add-cpu-clock.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-yocto-3.17/collie/arm-sa1100-add-cpu-clock.patch b/recipes-kernel/linux/linux-yocto-3.17/collie/arm-sa1100-add-cpu-clock.patch new file mode 100644 index 0000000..b14727e --- /dev/null +++ b/recipes-kernel/linux/linux-yocto-3.17/collie/arm-sa1100-add-cpu-clock.patch @@ -0,0 +1,95 @@ +From 6abd8c6c642b7f5da4a8065fa6b29c4c90df308d Mon Sep 17 00:00:00 2001 +From: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> +Date: Mon, 11 Nov 2013 22:53:36 +0400 +Subject: [PATCH] arm: sa1100: add cpu clock + +Both SA1100 framebuffer and PCMCIA drivers require knowledge of cpu +frequency to correctly program timings. Currently they receive timing +information by calling cpufreq_get(0). However if cpu frequency driver +is not enabled (e.g. due to unsupported DRAM chip/board on sa1110) +cpufreq_get(0) returns 0, causing incorrect timings to be programmed. + +Add cpu clock returning cpu frequency, to be used by sa11x0 fb and +pcmcia drivers. + +Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> +--- + arch/arm/mach-sa1100/clock.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +diff --git a/arch/arm/mach-sa1100/clock.c b/arch/arm/mach-sa1100/clock.c +index 172ebd0..abf1dc1 100644 +--- a/arch/arm/mach-sa1100/clock.c ++++ b/arch/arm/mach-sa1100/clock.c +@@ -15,10 +15,12 @@ + #include <linux/clkdev.h> + + #include <mach/hardware.h> ++#include <mach/generic.h> + + struct clkops { + void (*enable)(struct clk *); + void (*disable)(struct clk *); ++ unsigned long (*get_rate)(struct clk *); + }; + + struct clk { +@@ -51,6 +53,19 @@ static void clk_gpio27_disable(struct clk *clk) + GAFR &= ~GPIO_32_768kHz; + } + ++static void clk_cpu_enable(struct clk *clk) ++{ ++} ++ ++static void clk_cpu_disable(struct clk *clk) ++{ ++} ++ ++static unsigned long clk_cpu_get_rate(struct clk *clk) ++{ ++ return sa11x0_getspeed(0) * 1000; ++} ++ + int clk_enable(struct clk *clk) + { + unsigned long flags; +@@ -80,16 +95,35 @@ void clk_disable(struct clk *clk) + } + EXPORT_SYMBOL(clk_disable); + ++unsigned long clk_get_rate(struct clk *clk) ++{ ++ if (clk && clk->ops && clk->ops->get_rate) ++ return clk->ops->get_rate(clk); ++ else ++ return 0; ++} ++EXPORT_SYMBOL(clk_get_rate); ++ + const struct clkops clk_gpio27_ops = { + .enable = clk_gpio27_enable, + .disable = clk_gpio27_disable, + }; + ++const struct clkops clk_cpu_ops = { ++ .enable = clk_cpu_enable, ++ .disable = clk_cpu_disable, ++ .get_rate = clk_cpu_get_rate, ++}; ++ + static DEFINE_CLK(gpio27, &clk_gpio27_ops); + ++static DEFINE_CLK(cpu, &clk_cpu_ops); ++ + static struct clk_lookup sa11xx_clkregs[] = { + CLKDEV_INIT("sa1111.0", NULL, &clk_gpio27), + CLKDEV_INIT("sa1100-rtc", NULL, NULL), ++ CLKDEV_INIT("sa11x0-fb", NULL, &clk_cpu), ++ CLKDEV_INIT("sa11x0-pcmcia", NULL, &clk_cpu), + }; + + static int __init sa11xx_clk_init(void) +-- +1.8.4.2 + |