diff options
Diffstat (limited to 'packages/linux/linux-rp-2.6.23/tosa-lcdnoise-r1-fix-r0.patch')
-rw-r--r-- | packages/linux/linux-rp-2.6.23/tosa-lcdnoise-r1-fix-r0.patch | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/packages/linux/linux-rp-2.6.23/tosa-lcdnoise-r1-fix-r0.patch b/packages/linux/linux-rp-2.6.23/tosa-lcdnoise-r1-fix-r0.patch new file mode 100644 index 0000000000..02dd6a74eb --- /dev/null +++ b/packages/linux/linux-rp-2.6.23/tosa-lcdnoise-r1-fix-r0.patch @@ -0,0 +1,270 @@ +From eada869814636157956641ba1503f0d6cc04e2b7 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dbaryshkov@gmail.com> +Date: Fri, 19 Oct 2007 17:43:51 +0400 +Subject: [PATCH] tosa-lcdnoise-r1.patch fixes + +--- + arch/arm/mach-pxa/tosa_lcd.c | 34 ++++++++++++++++++++++++++++++++++ + drivers/input/touchscreen/tosa_ts.c | 9 +-------- + include/asm-arm/arch-pxa/tosa.h | 5 +++++ + 3 files changed, 40 insertions(+), 8 deletions(-) + +diff --git a/arch/arm/mach-pxa/tosa_lcd.c b/arch/arm/mach-pxa/tosa_lcd.c +index d52f63f..447ca86 100644 +--- a/arch/arm/mach-pxa/tosa_lcd.c ++++ b/arch/arm/mach-pxa/tosa_lcd.c +@@ -59,6 +59,8 @@ static int bl_intensity; + static struct ssp_dev tosa_nssp_dev; + static struct ssp_state tosa_nssp_state; + static spinlock_t tosa_nssp_lock; ++static int blanked; ++static unsigned long hsync_time; + + static unsigned short normal_i2c[] = { + DAC_BASE, +@@ -130,6 +132,17 @@ static void tosa_lcd_tg_init(struct device *dev) + pxa_nssp_output(TG_GPOSR,0x02); /* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */ + } + ++static unsigned long calc_hsync_time(const struct fb_videomode *mode) { ++ /* The 25 and 44 'magic numbers' are from Sharp's 2.4 patches */ ++ if (mode->yres == 640) { ++ return 25; ++ } ++ if (mode->yres == 320) { ++ return 44; ++ } ++ return 0; ++} ++ + static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode) + { + const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR; +@@ -154,6 +167,8 @@ static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode) + /* set common voltage */ + i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj); + ++ blanked = 0; ++ hsync_time = calc_hsync_time(mode); + } + + static void tosa_lcd_tg_off(struct device *dev) +@@ -172,6 +187,8 @@ static void tosa_lcd_tg_off(struct device *dev) + + /* L3V Off */ + reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); ++ ++ blanked = 1; + } + + static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) { +@@ -238,6 +255,23 @@ static int tosa_detach_client(struct i2c_client* client) { + return 0; + } + ++unsigned long tosa_lcd_get_hsync_time(void) ++{ ++/* This method should eventually contain the correct algorithm for calculating ++ the hsync_time */ ++ if (blanked) ++ return 0; ++ else ++ return hsync_time; ++} ++ ++void tosa_lcd_wait_hsync(void) ++{ ++ /* Waits for a rising edge on the VGA line */ ++ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0); ++ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0); ++} ++ + static struct i2c_driver tosa_driver={ + .id = TOSA_LCD_I2C_DEVICEID, + .attach_adapter = tosa_attach_adapter, +diff --git a/drivers/input/touchscreen/tosa_ts.c b/drivers/input/touchscreen/tosa_ts.c +index bc733e9..134f8ce 100644 +--- a/drivers/input/touchscreen/tosa_ts.c ++++ b/drivers/input/touchscreen/tosa_ts.c +@@ -25,13 +25,6 @@ + #define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1)) + #define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1)) + +-static inline void tosa_lcd_wait_hsync(void) +-{ +- /* Waits for a rising edge on the VGA line */ +- while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0); +- while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0); +-} +- + /* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait + * before sampling the Y axis of the touchscreen */ + void tosa_lcd_sync_on(int adcsel) { +@@ -54,7 +47,7 @@ void tosa_lcd_sync_on(int adcsel) { + } + } + +-void tosa_lcd_sync_off(void) { ++void tosa_lcd_sync_off(int adcsel) { + CCNT_OFF(); + } + +diff --git a/include/asm-arm/arch-pxa/tosa.h b/include/asm-arm/arch-pxa/tosa.h +index ce7322d..7f446fd 100644 +--- a/include/asm-arm/arch-pxa/tosa.h ++++ b/include/asm-arm/arch-pxa/tosa.h +@@ -1,6 +1,7 @@ + /* + * Hardware specific definitions for Sharp SL-C6000x series of PDAs + * ++ * Copyright (c) 2006 Wolfson Microelectronics PLC. + * Copyright (c) 2005 Dirk Opfer + * + * Based on Sharp's 2.4 kernel patches +@@ -187,4 +188,8 @@ + extern struct platform_device tosascoop_jc_device; + extern struct platform_device tosascoop_device; + extern struct platform_device tc6393_device; ++ ++unsigned long tosa_lcd_get_hsync_time(void); ++void tosa_lcd_wait_hsync(void); ++ + #endif /* _ASM_ARCH_TOSA_H_ */ +-- +1.4.4.4 + +From eada869814636157956641ba1503f0d6cc04e2b7 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dbaryshkov@gmail.com> +Date: Fri, 19 Oct 2007 17:43:51 +0400 +Subject: [PATCH] tosa-lcdnoise-r1.patch fixes + +--- + arch/arm/mach-pxa/tosa_lcd.c | 34 ++++++++++++++++++++++++++++++++++ + drivers/input/touchscreen/tosa_ts.c | 9 +-------- + include/asm-arm/arch-pxa/tosa.h | 5 +++++ + 3 files changed, 40 insertions(+), 8 deletions(-) + +diff --git a/arch/arm/mach-pxa/tosa_lcd.c b/arch/arm/mach-pxa/tosa_lcd.c +index d52f63f..447ca86 100644 +--- a/arch/arm/mach-pxa/tosa_lcd.c ++++ b/arch/arm/mach-pxa/tosa_lcd.c +@@ -59,6 +59,8 @@ static int bl_intensity; + static struct ssp_dev tosa_nssp_dev; + static struct ssp_state tosa_nssp_state; + static spinlock_t tosa_nssp_lock; ++static int blanked; ++static unsigned long hsync_time; + + static unsigned short normal_i2c[] = { + DAC_BASE, +@@ -130,6 +132,17 @@ static void tosa_lcd_tg_init(struct device *dev) + pxa_nssp_output(TG_GPOSR,0x02); /* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */ + } + ++static unsigned long calc_hsync_time(const struct fb_videomode *mode) { ++ /* The 25 and 44 'magic numbers' are from Sharp's 2.4 patches */ ++ if (mode->yres == 640) { ++ return 25; ++ } ++ if (mode->yres == 320) { ++ return 44; ++ } ++ return 0; ++} ++ + static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode) + { + const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR; +@@ -154,6 +167,8 @@ static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode) + /* set common voltage */ + i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj); + ++ blanked = 0; ++ hsync_time = calc_hsync_time(mode); + } + + static void tosa_lcd_tg_off(struct device *dev) +@@ -172,6 +187,8 @@ static void tosa_lcd_tg_off(struct device *dev) + + /* L3V Off */ + reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); ++ ++ blanked = 1; + } + + static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) { +@@ -238,6 +255,23 @@ static int tosa_detach_client(struct i2c_client* client) { + return 0; + } + ++unsigned long tosa_lcd_get_hsync_time(void) ++{ ++/* This method should eventually contain the correct algorithm for calculating ++ the hsync_time */ ++ if (blanked) ++ return 0; ++ else ++ return hsync_time; ++} ++ ++void tosa_lcd_wait_hsync(void) ++{ ++ /* Waits for a rising edge on the VGA line */ ++ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0); ++ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0); ++} ++ + static struct i2c_driver tosa_driver={ + .id = TOSA_LCD_I2C_DEVICEID, + .attach_adapter = tosa_attach_adapter, +diff --git a/drivers/input/touchscreen/tosa_ts.c b/drivers/input/touchscreen/tosa_ts.c +index bc733e9..134f8ce 100644 +--- a/drivers/input/touchscreen/tosa_ts.c ++++ b/drivers/input/touchscreen/tosa_ts.c +@@ -25,13 +25,6 @@ + #define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1)) + #define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1)) + +-static inline void tosa_lcd_wait_hsync(void) +-{ +- /* Waits for a rising edge on the VGA line */ +- while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0); +- while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0); +-} +- + /* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait + * before sampling the Y axis of the touchscreen */ + void tosa_lcd_sync_on(int adcsel) { +@@ -54,7 +47,7 @@ void tosa_lcd_sync_on(int adcsel) { + } + } + +-void tosa_lcd_sync_off(void) { ++void tosa_lcd_sync_off(int adcsel) { + CCNT_OFF(); + } + +diff --git a/include/asm-arm/arch-pxa/tosa.h b/include/asm-arm/arch-pxa/tosa.h +index ce7322d..7f446fd 100644 +--- a/include/asm-arm/arch-pxa/tosa.h ++++ b/include/asm-arm/arch-pxa/tosa.h +@@ -1,6 +1,7 @@ + /* + * Hardware specific definitions for Sharp SL-C6000x series of PDAs + * ++ * Copyright (c) 2006 Wolfson Microelectronics PLC. + * Copyright (c) 2005 Dirk Opfer + * + * Based on Sharp's 2.4 kernel patches +@@ -187,4 +188,8 @@ + extern struct platform_device tosascoop_jc_device; + extern struct platform_device tosascoop_device; + extern struct platform_device tc6393_device; ++ ++unsigned long tosa_lcd_get_hsync_time(void); ++void tosa_lcd_wait_hsync(void); ++ + #endif /* _ASM_ARCH_TOSA_H_ */ +-- +1.4.4.4 + |