diff options
author | Mahesh Mahadevan <r9aadq@freescale.com> | 2008-03-19 15:04:41 -0500 |
---|---|---|
committer | Daniel Schaeffer <daniel.schaeffer@timesys.com> | 2008-08-25 15:20:52 -0400 |
commit | d1db1919be713a3326a98eaf56dc0bd5a738d598 (patch) | |
tree | 3a67843c765c1d5d22b18688e3a3f3126b3879ea /arch | |
parent | 66a6ff85430481c40432711745c1897f28c7f13a (diff) |
ENGR00069342 Add Touchscreen Support for MX37 3Stack Board
Add Support for Touchscreen on the 3-Stack board
Signed-off-by: Mahesh Mahadevan <r9aadq@freescale.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/configs/imx37_3stack_defconfig | 1 | ||||
-rw-r--r-- | arch/arm/mach-mx37/mx37_3stack.c | 33 | ||||
-rw-r--r-- | arch/arm/mach-mx37/mx37_3stack_gpio.c | 19 | ||||
-rw-r--r-- | arch/arm/plat-mxc/gpio.c | 9 |
4 files changed, 49 insertions, 13 deletions
diff --git a/arch/arm/configs/imx37_3stack_defconfig b/arch/arm/configs/imx37_3stack_defconfig index 84a87e71f341..2e300ee7f276 100644 --- a/arch/arm/configs/imx37_3stack_defconfig +++ b/arch/arm/configs/imx37_3stack_defconfig @@ -641,6 +641,7 @@ CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_TOUCHWIN is not set # CONFIG_TOUCHSCREEN_UCB1400 is not set # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_TSC2007=y # CONFIG_INPUT_MISC is not set # diff --git a/arch/arm/mach-mx37/mx37_3stack.c b/arch/arm/mach-mx37/mx37_3stack.c index 50119bf99092..494d35e7bab4 100644 --- a/arch/arm/mach-mx37/mx37_3stack.c +++ b/arch/arm/mach-mx37/mx37_3stack.c @@ -22,6 +22,7 @@ #include <linux/clk.h> #include <linux/platform_device.h> #include <linux/spi/spi.h> +#include <linux/i2c.h> #if defined(CONFIG_MTD) || defined(CONFIG_MTD_MODULE) #include <linux/mtd/mtd.h> #include <linux/mtd/map.h> @@ -155,6 +156,14 @@ static struct mxc_lcd_platform_data lcd_data = { .reset = lcd_reset, }; +static struct i2c_board_info mxc_i2c0_board_info[] __initdata = { + { + .driver_name = "TSC2007", + .addr = 0x48, + .irq = IOMUX_TO_IRQ(MX37_PIN_AUD5_RXFS), + }, +}; + static struct spi_board_info mxc_spi_board_info[] __initdata = { { .modalias = "cpld_spi", @@ -210,6 +219,26 @@ static inline void mxc_init_fb(void) } #endif +#if defined(CONFIG_TOUCHSCREEN_TSC2007) || defined(CONFIG_TOUCHSCREEN_TSC2007_MODULE) + +static int __init mxc_init_touchscreen(void) +{ + int pad_val; + + mxc_request_iomux(MX37_PIN_AUD5_RXFS, IOMUX_CONFIG_GPIO); + pad_val = PAD_CTL_PKE_ENABLE | PAD_CTL_100K_PU; + mxc_iomux_set_pad(MX37_PIN_AUD5_RXFS, pad_val); + mxc_set_gpio_direction(MX37_PIN_AUD5_RXFS, 1); + + return 0; +} +#else +static int __init mxc_init_touchscreen(void) +{ + return 0; +} +#endif + /*lan9217 device*/ #if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) static struct resource smsc911x_resources[] = { @@ -283,11 +312,15 @@ static void __init mxc_board_init(void) mxc_clocks_init(); mxc_gpio_init(); early_console_setup(saved_command_line); + i2c_register_board_info(0, mxc_i2c0_board_info, + ARRAY_SIZE(mxc_i2c0_board_info)); + spi_register_board_info(mxc_spi_board_info, ARRAY_SIZE(mxc_spi_board_info)); mxc_init_nand_mtd(); mxc_init_fb(); + mxc_init_touchscreen(); } /* diff --git a/arch/arm/mach-mx37/mx37_3stack_gpio.c b/arch/arm/mach-mx37/mx37_3stack_gpio.c index 0e7c8a0c3ba0..6d3bf1e4767a 100644 --- a/arch/arm/mach-mx37/mx37_3stack_gpio.c +++ b/arch/arm/mach-mx37/mx37_3stack_gpio.c @@ -19,6 +19,7 @@ #include <asm/hardware.h> #include <asm/arch/clock.h> #include <asm/arch/gpio.h> + #include "iomux.h" /*! @@ -176,19 +177,19 @@ void gpio_i2c_active(int i2c_num) case 0: /* Touch */ /* select I2C1_SCK as daisy chain input */ + mxc_request_iomux(MX37_PIN_I2C1_CLK, IOMUX_CONFIG_ALT0); mxc_iomux_set_input(MUX_IN_I2C1_SCL, INPUT_CTL_PATH1); /* OpenDrain enabled, 100k PU enabled */ - mxc_iomux_set_pad(MX37_PIN_I2C1_CLK, - PAD_CTL_100K_PU | - PAD_CTL_ODE_OPENDRAIN_ENABLE); - mxc_request_iomux(MX37_PIN_I2C1_CLK, IOMUX_CONFIG_ALT0); + regval = + PAD_CTL_ODE_OPENDRAIN_ENABLE | PAD_CTL_100K_PU | + PAD_CTL_PKE_ENABLE; + mxc_iomux_set_pad(MX37_PIN_I2C1_CLK, regval); + /*select I2C1_SDA as daisy chain input */ - mxc_iomux_set_input(MUX_IN_I2C1_SDA, INPUT_CTL_PATH1); - /* OpenDrain enabled, 100k PU enabled */ - mxc_iomux_set_pad(MX37_PIN_I2C1_DAT, - PAD_CTL_100K_PU | - PAD_CTL_ODE_OPENDRAIN_ENABLE); mxc_request_iomux(MX37_PIN_I2C1_DAT, IOMUX_CONFIG_ALT0); + mxc_iomux_set_input(MUX_IN_I2C1_SDA, INPUT_CTL_PATH1); + mxc_iomux_set_pad(MX37_PIN_I2C1_DAT, regval); + mxc_iomux_set_pad(MX37_PIN_GRP_H3, PAD_CTL_HYS_ENABLE); break; case 1: /* PMIC */ diff --git a/arch/arm/plat-mxc/gpio.c b/arch/arm/plat-mxc/gpio.c index a1c85dbaab0a..d852ad53f051 100644 --- a/arch/arm/plat-mxc/gpio.c +++ b/arch/arm/plat-mxc/gpio.c @@ -1,5 +1,5 @@ /* - * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright 2004-2008 Freescale Semiconductor, Inc. All Rights Reserved. */ /* @@ -343,9 +343,10 @@ static void mxc_gpio_irq_handler(u32 irq, struct irq_desc *desc) int_valid = __raw_readl(isr_reg) & imr_val; if (unlikely(!int_valid)) { - printk(KERN_ERR "\nGPIO port: %d Spurious interrupt:0x%0x\n\n", - port->num, int_valid); - BUG(); /* oops */ + printk(KERN_DEBUG + "\nGPIO port: %d Spurious interrupt:0x%0x Mask: %x\n\n", + port->num, int_valid, imr_val); + return; } gpio_irq = port->virtual_irq_start; |