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