diff options
author | Robert Collins <rcollins@nvidia.com> | 2010-11-22 15:00:09 -0800 |
---|---|---|
committer | Maria Gutowski <mgutowski@nvidia.com> | 2010-12-13 16:13:24 -0800 |
commit | 89c147f14ce3ee69800fb8a3eadcce14e8786b97 (patch) | |
tree | f4adfaed832910d8bdcfdfe4a1dee66901d56fd9 /arch/arm/mach-tegra/board-ventana.c | |
parent | 35c64ca7c5c8569cdd1a13c88a1f10ec0c596fd1 (diff) |
[ARM/tegra] Atmel touchscreen board support
Change-Id: If8cbee93793ae150266b140fad88457cc0385aaa
Reviewed-on: http://git-master/r/11492
Tested-by: Robert R Collins <rcollins@nvidia.com>
Reviewed-by: Robert R Collins <rcollins@nvidia.com>
Reviewed-by: Maria Gutowski <mgutowski@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/board-ventana.c')
-rw-r--r-- | arch/arm/mach-tegra/board-ventana.c | 82 |
1 files changed, 75 insertions, 7 deletions
diff --git a/arch/arm/mach-tegra/board-ventana.c b/arch/arm/mach-tegra/board-ventana.c index 5bd7dff1f33b..31dc4b23f929 100644 --- a/arch/arm/mach-tegra/board-ventana.c +++ b/arch/arm/mach-tegra/board-ventana.c @@ -26,7 +26,6 @@ #include <linux/clk.h> #include <linux/serial_8250.h> #include <linux/i2c.h> -#include <linux/i2c/panjit_ts.h> #include <linux/dma-mapping.h> #include <linux/delay.h> #include <linux/i2c-tegra.h> @@ -35,6 +34,15 @@ #include <linux/input.h> #include <linux/tegra_usb.h> #include <linux/usb/android_composite.h> + +#ifdef CONFIG_TOUCHSCREEN_PANJIT_I2C +#include <linux/i2c/panjit_ts.h> +#endif + +#ifdef CONFIG_TOUCHSCREEN_ATMEL_MT_T9 +#include <linux/i2c/atmel_maxtouch.h> +#endif + #include <mach/clk.h> #include <mach/iomap.h> #include <mach/irqs.h> @@ -336,19 +344,20 @@ static void ventana_keys_init(void) tegra_gpio_enable(ventana_keys[i].gpio); } +#ifdef CONFIG_TOUCHSCREEN_PANJIT_I2C static struct panjit_i2c_ts_platform_data panjit_data = { .gpio_reset = TEGRA_GPIO_PQ7, }; static const struct i2c_board_info ventana_i2c_bus1_touch_info[] = { { - I2C_BOARD_INFO("panjit_touch", 0x3), - .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PV6), - .platform_data = &panjit_data, - }, + I2C_BOARD_INFO("panjit_touch", 0x3), + .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PV6), + .platform_data = &panjit_data, + }, }; -static int __init ventana_touch_init(void) +static int __init ventana_touch_init_panjit(void) { tegra_gpio_enable(TEGRA_GPIO_PV6); @@ -357,7 +366,60 @@ static int __init ventana_touch_init(void) return 0; } +#endif + +#ifdef CONFIG_TOUCHSCREEN_ATMEL_MT_T9 +/* Atmel MaxTouch touchscreen Driver data */ +/*-----------------------------------------------------*/ +/* + * Reads the CHANGELINE state; interrupt is valid if the changeline + * is low. + */ +static u8 read_chg() +{ + return gpio_get_value(TEGRA_GPIO_PV6); +} + +static u8 valid_interrupt() +{ + return !read_chg(); +} + +static struct mxt_platform_data Atmel_mxt_info = { + /* Maximum number of simultaneous touches to report. */ + .numtouch = 10, + // TODO: no need for any hw-specific things at init/exit? + .init_platform_hw = NULL, + .exit_platform_hw = NULL, + .max_x = 1366, + .max_y = 768, + .valid_interrupt = &valid_interrupt, + .read_chg = &read_chg, +}; + +static struct i2c_board_info __initdata i2c_info[] = { + { + I2C_BOARD_INFO("maXTouch", MXT_I2C_ADDRESS), + .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PV6), + .platform_data = &Atmel_mxt_info, + }, +}; + +static int __init ventana_touch_init_atmel(void) +{ + tegra_gpio_enable(TEGRA_GPIO_PV6); /* FIXME: Ventana-specific GPIO assignment */ + tegra_gpio_enable(TEGRA_GPIO_PQ7); /* FIXME: Ventana-specific GPIO assignment */ + gpio_set_value(TEGRA_GPIO_PQ7, 0); + msleep(1); + gpio_set_value(TEGRA_GPIO_PQ7, 1); + msleep(100); + + i2c_register_board_info(0, i2c_info, 1); + + return 0; +} +#endif static struct tegra_ehci_platform_data tegra_ehci_pdata[] = { [0] = { @@ -459,7 +521,13 @@ static void __init tegra_ventana_init(void) ventana_i2c_init(); ventana_charge_init(); ventana_regulator_init(); - ventana_touch_init(); +#ifdef CONFIG_TOUCHSCREEN_PANJIT_I2C + ventana_touch_init_panjit(); +#endif +#ifdef CONFIG_TOUCHSCREEN_ATMEL_MT_T9 + ventana_touch_init_atmel(); +#endif + ventana_keys_init(); ventana_usb_init(); ventana_gps_init(); |