r3591 - branches/src/target/kernel/2.6.24.x/patches
laforge at sita.openmoko.org
laforge at sita.openmoko.org
Thu Dec 6 08:05:44 CET 2007
Author: laforge
Date: 2007-12-06 08:05:30 +0100 (Thu, 06 Dec 2007)
New Revision: 3591
Modified:
branches/src/target/kernel/2.6.24.x/patches/smedia-glamo.patch
Log:
GLAMO: Adjust DCLK ratio to match the desired pixclock. (Chia-I Wu <olv at openmoko.com>)
Modified: branches/src/target/kernel/2.6.24.x/patches/smedia-glamo.patch
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/smedia-glamo.patch 2007-12-06 07:00:19 UTC (rev 3590)
+++ branches/src/target/kernel/2.6.24.x/patches/smedia-glamo.patch 2007-12-06 07:05:30 UTC (rev 3591)
@@ -545,7 +545,7 @@
===================================================================
--- /dev/null
+++ linux-2.6/drivers/video/glamo/glamo-core.c
-@@ -0,0 +1,1020 @@
+@@ -0,0 +1,1067 @@
+/* Smedia Glamo 336x/337x driver
+ *
+ * (C) 2007 by OpenMoko, Inc.
@@ -1036,9 +1036,85 @@
+ spin_lock(&glamo->lock);
+ __reg_clear_bit(glamo, rst->reg, rst->val);
+ spin_unlock(&glamo->lock);
++
++ msleep(1);
+}
+EXPORT_SYMBOL_GPL(glamo_engine_reset);
+
++enum glamo_pll {
++ GLAMO_PLL1,
++ GLAMO_PLL2,
++};
++
++static int glamo_pll_rate(struct glamo_core *glamo,
++ enum glamo_pll pll)
++{
++ u_int16_t reg;
++ unsigned int div = 512;
++ /* FIXME: move osci into platform_data */
++ unsigned int osci = 32768;
++
++ if (osci == 32768)
++ div = 1;
++
++ switch (pll) {
++ case GLAMO_PLL1:
++ reg = __reg_read(glamo, GLAMO_REG_PLL_GEN1);
++ break;
++ case GLAMO_PLL2:
++ reg = __reg_read(glamo, GLAMO_REG_PLL_GEN3);
++ break;
++ default:
++ return -EINVAL;
++ }
++ return (osci/div)*reg;
++}
++
++int glamo_engine_reclock(struct glamo_core *glamo,
++ enum glamo_engine engine,
++ int ps)
++{
++ int pll, khz;
++ u_int16_t reg, mask, val = 0;
++
++ if (!ps)
++ return 0;
++
++ switch (engine) {
++ case GLAMO_ENGINE_LCD:
++ pll = GLAMO_PLL1;
++ reg = GLAMO_REG_CLOCK_GEN7;
++ mask = 0xff;
++ break;
++ default:
++ dev_warn(&glamo->pdev->dev,
++ "reclock of engine 0x%x not supported\n", engine);
++ return -EINVAL;
++ break;
++ }
++
++ pll = glamo_pll_rate(glamo, pll);
++ khz = 1000000000UL / ps;
++
++ if (khz)
++ val = (pll / khz) / 1000;
++
++ dev_dbg(&glamo->pdev->dev,
++ "PLL %d, kHZ %d, div %d\n", pll, khz, val);
++
++ if (val) {
++ val--;
++
++ reg_set_bit_mask(glamo, reg, mask, val);
++ msleep(5); /* wait some time to stabilize */
++
++ return 0;
++ } else {
++ return -EINVAL;
++ }
++}
++EXPORT_SYMBOL_GPL(glamo_engine_reclock);
++
+/***********************************************************************
+ * script support
+ ***********************************************************************/
@@ -1191,35 +1267,6 @@
+};
+#endif
+
-+enum glamo_pll {
-+ GLAMO_PLL1,
-+ GLAMO_PLL2,
-+};
-+
-+static int glamo_pll_rate(struct glamo_core *glamo,
-+ enum glamo_pll pll)
-+{
-+ u_int16_t reg;
-+ unsigned int div = 512;
-+ /* FIXME: move osci into platform_data */
-+ unsigned int osci = 32768;
-+
-+ if (osci == 32768)
-+ div = 1;
-+
-+ switch (pll) {
-+ case GLAMO_PLL1:
-+ reg = __reg_read(glamo, GLAMO_REG_PLL_GEN1);
-+ break;
-+ case GLAMO_PLL2:
-+ reg = __reg_read(glamo, GLAMO_REG_PLL_GEN3);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return (osci/div)*reg;
-+}
-+
+enum glamo_power {
+ GLAMO_POWER_ON,
+ GLAMO_POWER_STANDBY,
@@ -1614,7 +1661,7 @@
===================================================================
--- /dev/null
+++ linux-2.6/drivers/video/glamo/glamo-fb.c
-@@ -0,0 +1,653 @@
+@@ -0,0 +1,658 @@
+/* Smedia Glamo 336x/337x driver
+ *
+ * (C) 2007 by OpenMoko, Inc.
@@ -1816,6 +1863,11 @@
+
+ glamofb_cmd_mode(glamo, 1);
+
++ if (var->pixclock)
++ glamo_engine_reclock(glamo->mach_info->glamo,
++ GLAMO_ENGINE_LCD,
++ var->pixclock);
++
+ /* XXX highest bits of the following two regs have other meanings */
+ reg_write(glamo, GLAMO_REG_LCD_WIDTH, var->xres);
+ reg_write(glamo, GLAMO_REG_LCD_HEIGHT, var->yres);
@@ -2343,7 +2395,7 @@
===================================================================
--- /dev/null
+++ linux-2.6/drivers/video/glamo/glamo-core.h
-@@ -0,0 +1,51 @@
+@@ -0,0 +1,53 @@
+#ifndef __GLAMO_CORE_H
+#define __GLAMO_CORE_H
+
@@ -2393,6 +2445,8 @@
+int glamo_engine_enable(struct glamo_core *glamo, enum glamo_engine engine);
+int glamo_engine_disable(struct glamo_core *glamo, enum glamo_engine engine);
+void glamo_engine_reset(struct glamo_core *glamo, enum glamo_engine engine);
++int glamo_engine_reclock(struct glamo_core *glamo,
++ enum glamo_engine engine, int ps);
+
+#endif /* __GLAMO_CORE_H */
Index: linux-2.6/drivers/video/glamo/glamo-gpio.c
More information about the commitlog
mailing list