diff options
Diffstat (limited to 'packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch')
-rw-r--r-- | packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch b/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch new file mode 100644 index 0000000000..21f3cf66b1 --- /dev/null +++ b/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch @@ -0,0 +1,158 @@ +From 564b757ba44b517ac6d693b94a177708bb5d3887 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dbaryshkov@gmail.com> +Date: Fri, 19 Oct 2007 17:30:30 +0400 +Subject: [PATCH] tosa-lcdnoise-r1.patch + +--- + drivers/input/touchscreen/Kconfig | 13 +++++ + drivers/input/touchscreen/Makefile | 1 + + drivers/input/touchscreen/tosa_ts.c | 102 +++++++++++++++++++++++++++++++++++ + 3 files changed, 116 insertions(+), 0 deletions(-) + +diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig +index 3ac01b4..6862e8f 100644 +--- a/drivers/input/touchscreen/Kconfig ++++ b/drivers/input/touchscreen/Kconfig +@@ -219,6 +219,19 @@ config TOUCHSCREEN_USB_DMC_TSC10 + bool "DMC TSC-10/25 device support" if EMBEDDED + depends on TOUCHSCREEN_USB_COMPOSITE + ++config TOUCHSCREEN_TOSA ++ tristate "Sharp Tosa touchscreen driver" ++ depends on TOUCHSCREEN_WM97XX && MACH_TOSA ++ default n ++ help ++ Say Y here to enable the driver for the touchscreen on the ++ Sharp Tosa PDA. ++ depends on TOUCHSCREEN_WM97XX && MACH_TOSA ++ If unsure, say N. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called tosa_ts. ++ + config TOUCHSCREEN_TSC2101 + tristate "TI TSC2101 touchscreen input driver" + depends on MACH_HX2750 && INPUT && INPUT_TOUCHSCREEN +diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile +index f64d1a5..4fc0e17 100644 +--- a/drivers/input/touchscreen/Makefile ++++ b/drivers/input/touchscreen/Makefile +@@ -22,6 +22,7 @@ obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o + obj-$(CONFIG_TOUCHSCREEN_TSC2101) += tsc2101_ts.o + obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o + obj-$(CONFIG_TOUCHSCREEN_WM97XX_PXA) += pxa-wm97xx.o ++obj-$(CONFIG_TOUCHSCREEN_TOSA) += tosa_ts.o + + ifeq ($(CONFIG_TOUCHSCREEN_WM9713),y) + wm97xx-ts-objs += wm9713.o +diff --git a/drivers/input/touchscreen/tosa_ts.c b/drivers/input/touchscreen/tosa_ts.c +new file mode 100644 +index 0000000..bc733e9 +--- /dev/null ++++ b/drivers/input/touchscreen/tosa_ts.c +@@ -0,0 +1,102 @@ ++/* ++ * tosa_ts.c -- Touchscreen driver for Sharp SL-6000 (Tosa). ++ * ++ * Copyright 2006 Wolfson Microelectronics PLC. ++ * Author: Mike Arthur ++ * linux@wolfsonmicro.com ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ * ++ * Revision history ++ * 1st Sep 2006 Initial version. ++ * ++ */ ++ ++#include <linux/wm97xx.h> ++#include <asm/arch/tosa.h> ++#include <asm/arch/hardware.h> ++#include <asm/arch/pxa-regs.h> ++ ++/* Taken from the Sharp 2.4 kernel code */ ++#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a)) ++#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) { ++ unsigned long timer1 = 0, timer2 = 0, wait_time = 0; ++ if (adcsel == WM97XX_ADCSEL_Y) { ++ wait_time = tosa_lcd_get_hsync_time(); ++ CCNT_ON(); ++ ++ if (wait_time) { ++ /* wait for LCD rising edge */ ++ tosa_lcd_wait_hsync(); ++ /* get clock */ ++ CCNT(timer1); ++ CCNT(timer2); ++ ++ while ((timer2 - timer1) < wait_time) { ++ CCNT(timer2); ++ } ++ } ++ } ++} ++ ++void tosa_lcd_sync_off(void) { ++ CCNT_OFF(); ++} ++ ++static struct wm97xx_mach_ops tosa_mach_ops = { ++ .pre_sample = tosa_lcd_sync_on, ++ .post_sample = tosa_lcd_sync_off, ++}; ++ ++int tosa_ts_probe(struct device *dev) { ++ struct wm97xx *wm = dev->driver_data; ++ return wm97xx_register_mach_ops (wm, &tosa_mach_ops); ++} ++ ++ ++int tosa_ts_remove(struct device *dev) { ++ struct wm97xx *wm = dev->driver_data; ++ wm97xx_unregister_mach_ops (wm); ++ return 0; ++} ++ ++static struct device_driver tosa_ts_driver = { ++ .name = "wm97xx-touchscreen", ++ .bus = &wm97xx_bus_type, ++ .owner = THIS_MODULE, ++ .probe = tosa_ts_probe, ++ .remove = tosa_ts_remove, ++}; ++ ++static int __init tosa_ts_init(void) ++{ ++ return driver_register(&tosa_ts_driver); ++} ++ ++static void __exit tosa_ts_exit(void) ++{ ++ driver_unregister(&tosa_ts_driver); ++} ++ ++module_init(tosa_ts_init); ++module_exit(tosa_ts_exit); ++ ++/* Module information */ ++MODULE_AUTHOR("Mike Arthur, mike@mikearthur.co.uk, www.wolfsonmicro.com"); ++MODULE_DESCRIPTION("Sharp SL6000 Tosa Touch Screen Driver"); ++MODULE_LICENSE("GPL"); +-- +1.4.4.4 + |