* [PATCH] OMAP1: Add clock for the SOSSI
@ 2007-03-04 11:35 Arnaud Patard
2007-03-07 8:01 ` Tony Lindgren
0 siblings, 1 reply; 2+ messages in thread
From: Arnaud Patard @ 2007-03-04 11:35 UTC (permalink / raw)
To: linux-omap-open-source
[-- Attachment #1: Type: text/plain, Size: 228 bytes --]
Due to the n800fb changes, the sossi video driver needs a new clock
called ck_sossi. This patch adds the sossi clock definitions made in
the n800 kernel from maemo.org.
Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: add_sossi_clk.patch --]
[-- Type: text/x-diff, Size: 3896 bytes --]
---
arch/arm/mach-omap1/clock.c | 36 35 + 1 - 0 !
arch/arm/mach-omap1/clock.h | 18 17 + 1 - 0 !
2 files changed, 52 insertions(+), 2 deletions(-)
Index: linux-omap-2.6/arch/arm/mach-omap1/clock.c
===================================================================
--- linux-omap-2.6.orig/arch/arm/mach-omap1/clock.c 2007-03-02 21:55:31.000000000 +0100
+++ linux-omap-2.6/arch/arm/mach-omap1/clock.c 2007-03-03 17:27:50.000000000 +0100
@@ -49,6 +49,16 @@ static void omap1_uart_recalc(struct clk
clk->rate = 12000000;
}
+static void omap1_sossi_recalc(struct clk *clk)
+{
+ u32 div = omap_readl(MOD_CONF_CTRL_1);
+
+ div = (div >> 17) & 0x7;
+ div++;
+ clk->rate = clk->parent->rate / div;
+}
+
+
static int omap1_clk_enable_dsp_domain(struct clk *clk)
{
int retval;
@@ -396,6 +406,31 @@ static int omap1_set_ext_clk_rate(struct
return 0;
}
+static int omap1_set_sossi_rate(struct clk *clk, unsigned long rate)
+{
+ u32 l;
+ int div;
+ unsigned long p_rate;
+
+ p_rate = clk->parent->rate;
+ /* Round towards slower frequency */
+ div = (p_rate + rate - 1) / rate;
+ div--;
+ if (div < 0 || div > 7)
+ return -EINVAL;
+
+ l = omap_readl(MOD_CONF_CTRL_1);
+ l &= ~(7 << 17);
+ l |= div << 17;
+ omap_writel(l, MOD_CONF_CTRL_1);
+
+ clk->rate = p_rate / (div + 1);
+ if (unlikely(clk->flags & RATE_PROPAGATES))
+ propagate_rate(clk);
+
+ return 0;
+}
+
static long omap1_round_ext_clk_rate(struct clk * clk, unsigned long rate)
{
return 96000000 / calc_ext_dsor(rate);
@@ -617,7 +652,6 @@ static void __init omap1_clk_disable_unu
/* FIXME: This clock seems to be necessary but no-one
* has asked for its activation. */
if (clk == &tc2_ck // FIX: pm.c (SRAM), CCP, Camera
- || clk == &ck_dpll1out.clk // FIX: SoSSI, SSR
|| clk == &arm_gpio_ck // FIX: GPIO code for 1510
) {
printk(KERN_INFO "FIXME: Clock \"%s\" seems unused\n",
Index: linux-omap-2.6/arch/arm/mach-omap1/clock.h
===================================================================
--- linux-omap-2.6.orig/arch/arm/mach-omap1/clock.h 2007-03-02 21:55:31.000000000 +0100
+++ linux-omap-2.6/arch/arm/mach-omap1/clock.h 2007-03-03 17:27:50.000000000 +0100
@@ -23,6 +23,8 @@ static int omap1_clk_set_rate_dsp_domain
static void omap1_clk_disable_dsp_domain(struct clk * clk);
static int omap1_set_uart_rate(struct clk * clk, unsigned long rate);
static void omap1_uart_recalc(struct clk * clk);
+static int omap1_set_sossi_rate(struct clk *clk, unsigned long rate);
+static void omap1_sossi_recalc(struct clk *clk);
static int omap1_clk_enable_uart_functional(struct clk * clk);
static void omap1_clk_disable_uart_functional(struct clk * clk);
static int omap1_set_ext_clk_rate(struct clk * clk, unsigned long rate);
@@ -170,7 +172,8 @@ static struct arm_idlect1_clk ck_dpll1ou
.clk = {
.name = "ck_dpll1out",
.parent = &ck_dpll1,
- .flags = CLOCK_IN_OMAP16XX | CLOCK_IDLE_CONTROL,
+ .flags = CLOCK_IN_OMAP16XX | CLOCK_IDLE_CONTROL |
+ ENABLE_REG_32BIT | RATE_PROPAGATES,
.enable_reg = (void __iomem *)ARM_IDLECT2,
.enable_bit = EN_CKOUT_ARM,
.recalc = &followparent_recalc,
@@ -179,6 +182,18 @@ static struct arm_idlect1_clk ck_dpll1ou
},
.idlect_shift = 12,
};
+static struct clk sossi_ck = {
+ .name = "ck_sossi",
+ .parent = &ck_dpll1out.clk,
+ .flags = CLOCK_IN_OMAP16XX | CLOCK_NO_IDLE_PARENT |
+ ENABLE_REG_32BIT,
+ .enable_reg = (void __iomem *)MOD_CONF_CTRL_1,
+ .enable_bit = 16,
+ .recalc = &omap1_sossi_recalc,
+ .set_rate = &omap1_set_sossi_rate,
+ .enable = &omap1_clk_enable_generic,
+ .disable = &omap1_clk_disable_generic,
+};
static struct clk arm_ck = {
.name = "arm_ck",
@@ -760,6 +775,7 @@ static struct clk * onchip_clks[] = {
&ck_dpll1,
/* CK_GEN1 clocks */
&ck_dpll1out.clk,
+ &sossi_ck,
&arm_ck,
&armper_ck.clk,
&arm_gpio_ck,
[-- Attachment #3: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] OMAP1: Add clock for the SOSSI
2007-03-04 11:35 [PATCH] OMAP1: Add clock for the SOSSI Arnaud Patard
@ 2007-03-07 8:01 ` Tony Lindgren
0 siblings, 0 replies; 2+ messages in thread
From: Tony Lindgren @ 2007-03-07 8:01 UTC (permalink / raw)
To: Arnaud Patard; +Cc: linux-omap-open-source
* Arnaud Patard <arnaud.patard@rtp-net.org> [070304 03:36]:
>
> Due to the n800fb changes, the sossi video driver needs a new clock
> called ck_sossi. This patch adds the sossi clock definitions made in
> the n800 kernel from maemo.org.
I've pushed Imre's version of these so we can get the right author.
Regards,
Tony
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-03-07 8:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-04 11:35 [PATCH] OMAP1: Add clock for the SOSSI Arnaud Patard
2007-03-07 8:01 ` Tony Lindgren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox