diff options
author | Stefan Agner <stefan.agner@toradex.com> | 2014-01-29 15:43:28 +0100 |
---|---|---|
committer | Stefan Agner <stefan.agner@toradex.com> | 2014-01-29 15:43:28 +0100 |
commit | 81465d86db70e169edb1dc59b0d6bc7a34cd13c7 (patch) | |
tree | 516b1506980b7bcdd07f9d5a8a3880ccfd745fd7 | |
parent | 0a4e373dc430abd981b15d392098c9e32a134acd (diff) | |
parent | 485b5d108fcf75a1066c5de054f8adf2e6118845 (diff) |
Merge branch 'fusion-touchscreen' into colibri
-rw-r--r-- | arch/arm/configs/colibri_t20_defconfig | 1 | ||||
-rw-r--r-- | arch/arm/configs/colibri_t30_defconfig | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-colibri_t20.c | 41 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-colibri_t20.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-colibri_t30.c | 51 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-colibri_t30.h | 3 | ||||
-rw-r--r-- | drivers/input/touchscreen/fusion_F0710A.c | 117 | ||||
-rw-r--r-- | include/linux/input/fusion_F0710A.h | 20 |
8 files changed, 147 insertions, 90 deletions
diff --git a/arch/arm/configs/colibri_t20_defconfig b/arch/arm/configs/colibri_t20_defconfig index 26892df10e9c..8fe150767638 100644 --- a/arch/arm/configs/colibri_t20_defconfig +++ b/arch/arm/configs/colibri_t20_defconfig @@ -196,6 +196,7 @@ CONFIG_INPUT_TOUCHSCREEN=y CONFIG_TOUCHSCREEN_WM97XX=y # CONFIG_TOUCHSCREEN_WM9705 is not set # CONFIG_TOUCHSCREEN_WM9713 is not set +CONFIG_TOUCHSCREEN_FUSION_F0710A=m CONFIG_INPUT_MISC=y CONFIG_INPUT_UINPUT=y CONFIG_INPUT_GPIO=y diff --git a/arch/arm/configs/colibri_t30_defconfig b/arch/arm/configs/colibri_t30_defconfig index f0f5481890e7..5fd0bdc80b99 100644 --- a/arch/arm/configs/colibri_t30_defconfig +++ b/arch/arm/configs/colibri_t30_defconfig @@ -191,6 +191,7 @@ CONFIG_KEYBOARD_GPIO=y # CONFIG_INPUT_MOUSE is not set CONFIG_INPUT_TOUCHSCREEN=y CONFIG_TOUCHSCREEN_STMPE=y +CONFIG_TOUCHSCREEN_FUSION_F0710A=m CONFIG_INPUT_MISC=y CONFIG_INPUT_UINPUT=y CONFIG_INPUT_GPIO=y diff --git a/arch/arm/mach-tegra/board-colibri_t20.c b/arch/arm/mach-tegra/board-colibri_t20.c index f7153ab6a50b..470cc004165a 100644 --- a/arch/arm/mach-tegra/board-colibri_t20.c +++ b/arch/arm/mach-tegra/board-colibri_t20.c @@ -43,6 +43,7 @@ #include <media/soc_camera.h> #include <media/tegra_v4l2_camera.h> +#include <linux/input/fusion_F0710A.h> #include "board-colibri_t20.h" #include "board.h" @@ -351,10 +352,8 @@ static struct gpio colibri_t20_gpios[] = { {TEGRA_GPIO_PK6, GPIOF_IN, "SODIMM pin 135"}, #endif #ifndef COLIBRI_T20_VI -#ifndef CONFIG_TOUCHSCREEN_FUSION_F0710A {TEGRA_GPIO_PL0, GPIOF_IN, "SOD-101, Iris X16-16"}, {TEGRA_GPIO_PL1, GPIOF_IN, "SOD-103, Iris X16-15"}, -#endif /* !CONFIG_TOUCHSCREEN_FUSION_F0710A */ //conflicts with Ethernet interrupt on Protea {TEGRA_GPIO_PL2, GPIOF_IN, "SODI-79, Iris X16-19"}, {TEGRA_GPIO_PL3, GPIOF_IN, "SODI-97, Iris X16-17"}, @@ -445,6 +444,19 @@ static void colibri_t20_gpio_init(void) } } +/* + * Fusion touch screen GPIOs (using Toradex display/touch adapater) + * Iris X16-38, SODIMM pin 28 (PWM B), pen down interrupt + * Iris X16-39, SODIMM pin 30 (PWM C), reset + * gpio_request muxes the GPIO function automatically, we only have to make + * sure input/output muxing is done here... + */ +static struct fusion_f0710a_init_data colibri_fusion_pdata = { + .pinmux_fusion_pins = NULL, + .gpio_int = TEGRA_GPIO_PB5, /* SO-DIMM 28: Pen down interrupt */ + .gpio_reset = TEGRA_GPIO_PA6, /* SO-DIMM 30: Reset interrupt */ +}; + /* I2C */ /* GEN1_I2C: I2C_SDA/SCL on SODIMM pin 194/196 (e.g. RTC on carrier board) */ @@ -454,12 +466,11 @@ static struct i2c_board_info colibri_t20_i2c_bus1_board_info[] __initdata = { I2C_BOARD_INFO("rtc-ds1307", 0x68), .type = "m41t00", }, -#ifdef CONFIG_TOUCHSCREEN_FUSION_F0710A { /* TouchRevolution Fusion 7 and 10 multi-touch controller */ I2C_BOARD_INFO("fusion_F0710A", 0x10), + .platform_data = &colibri_fusion_pdata, }, -#endif /* CONFIG_TOUCHSCREEN_FUSION_F0710A */ }; static struct tegra_i2c_platform_data colibri_t20_i2c1_platform_data = { @@ -525,28 +536,6 @@ static void colibri_t20_i2c_init(void) platform_device_register(&tegra_i2c_device2); platform_device_register(&tegra_i2c_device4); -#ifdef CONFIG_TOUCHSCREEN_FUSION_F0710A - if ((gpio_request(FUSION_PEN_DOWN, "103, Iris X16-15 Pen") == 0) && - (gpio_direction_input(FUSION_PEN_DOWN) == 0)) { - gpio_export(FUSION_PEN_DOWN, 0); - } else { - printk(KERN_ERR "Could not obtain GPIO for Fusion pen down\n"); - return; - } - - if ((gpio_request(FUSION_RESET, "101, Iris X16-16 RST") == 0) && - (gpio_direction_output(FUSION_RESET, 1) == 0)) { - gpio_direction_output(FUSION_RESET, 0); - mdelay(10); - gpio_direction_output(FUSION_RESET, 1); - } else { - printk(KERN_ERR "Could not obtain GPIO for Fusion reset\n"); - return; - } - - colibri_t20_i2c_bus1_board_info[1].irq = gpio_to_irq(FUSION_PEN_DOWN); -#endif /* CONFIG_TOUCHSCREEN_FUSION_F0710A */ - i2c_register_board_info(0, colibri_t20_i2c_bus1_board_info, ARRAY_SIZE(colibri_t20_i2c_bus1_board_info)); i2c_register_board_info(4, colibri_t20_i2c_bus4_board_info, diff --git a/arch/arm/mach-tegra/board-colibri_t20.h b/arch/arm/mach-tegra/board-colibri_t20.h index 23e9cdbda749..020670d424fd 100644 --- a/arch/arm/mach-tegra/board-colibri_t20.h +++ b/arch/arm/mach-tegra/board-colibri_t20.h @@ -31,9 +31,6 @@ #define FF_DCD TEGRA_GPIO_PC6 /* SODIMM 31 */ #define FF_DSR TEGRA_GPIO_PC1 /* SODIMM 29 */ -#define FUSION_PEN_DOWN TEGRA_GPIO_PL1 /* SODIMM 103 */ -#define FUSION_RESET TEGRA_GPIO_PL0 /* SODIMM 101 */ - #define I2C_SCL TEGRA_GPIO_PC4 /* SODIMM 196 */ #define I2C_SDA TEGRA_GPIO_PC5 /* SODIMM 194 */ diff --git a/arch/arm/mach-tegra/board-colibri_t30.c b/arch/arm/mach-tegra/board-colibri_t30.c index 63ce67307ee9..db3ab08cbc3d 100644 --- a/arch/arm/mach-tegra/board-colibri_t30.c +++ b/arch/arm/mach-tegra/board-colibri_t30.c @@ -40,6 +40,7 @@ #include <media/soc_camera.h> #include <media/tegra_v4l2_camera.h> +#include <linux/input/fusion_F0710A.h> #include "board-colibri_t30.h" #include "board.h" @@ -60,10 +61,6 @@ #define TEGRA_SNOR_CONFIG_GO BIT(31) #define TEGRA_SNOR_CONFIG_SNOR_CS(val) REG_FIELD((val), 4, 3) -/* ADC */ - -//TODO - /* Audio */ static struct tegra_asoc_platform_data colibri_t30_audio_sgtl5000_pdata = { @@ -373,11 +370,9 @@ static struct gpio colibri_t30_gpios[] = { #ifndef COLIBRI_T30_VI // {TEGRA_GPIO_PY4, GPIOF_IN, "SODI-97, Iris X16-17"}, // {TEGRA_GPIO_PY5, GPIOF_IN, "SODI-79, Iris X16-19"}, -#ifndef CONFIG_TOUCHSCREEN_FUSION_F0710A -// {TEGRA_GPIO_PY6, GPIOF_IN, "103, Iris X16-15 Pen"}, -// {TEGRA_GPIO_PY7, GPIOF_IN, "101, Iris X16-16 RST"}, -#endif -// {TEGRA_GPIO_PZ0, GPIOF_IN, "SODIMM pin 96"}, +// {TEGRA_GPIO_PY6, GPIOF_IN, "SODI-103, Iris X16-15"}, +// {TEGRA_GPIO_PY7, GPIOF_IN, "SODI-101, Iris X16-16"}, +// {TEGRA_GPIO_PZ0, GPIOF_IN, "SODI-96"}, // {TEGRA_GPIO_PZ1, GPIOF_IN, "SODI-98, Iris X16-13"}, #endif // {TEGRA_GPIO_PZ2, GPIOF_IN, "SODIMM pin 156"}, @@ -423,6 +418,19 @@ static void colibri_t30_gpio_init(void) } } +/* + * Fusion touch screen GPIOs (using Toradex display/touch adapater) + * Iris X16-38, SODIMM pin 28 (PWM B), pen down interrupt + * Iris X16-39, SODIMM pin 30 (PWM C), reset + * gpio_request muxes the GPIO function automatically, we only have to make + * sure input/output muxing is done here... + */ +static struct fusion_f0710a_init_data colibri_fusion_pdata = { + .pinmux_fusion_pins = NULL, + .gpio_int = TEGRA_GPIO_PB5, /* SO-DIMM 28: Pen down interrupt */ + .gpio_reset = TEGRA_GPIO_PA6, /* SO-DIMM 30: Reset interrupt */ +}; + /* I2C */ /* Make sure that the pinmuxing enable the 'open drain' feature for pins used @@ -435,12 +443,11 @@ static struct i2c_board_info colibri_t30_i2c_bus1_board_info[] __initdata = { I2C_BOARD_INFO("rtc-ds1307", 0x68), .type = "m41t00", }, -#ifdef CONFIG_TOUCHSCREEN_FUSION_F0710A { /* TouchRevolution Fusion 7 and 10 multi-touch controller */ I2C_BOARD_INFO("fusion_F0710A", 0x10), + .platform_data = &colibri_fusion_pdata, }, -#endif /* CONFIG_TOUCHSCREEN_FUSION_F0710A */ }; static struct tegra_i2c_platform_data colibri_t30_i2c1_platform_data = { @@ -546,28 +553,6 @@ static void __init colibri_t30_i2c_init(void) platform_device_register(&tegra_i2c_device4); platform_device_register(&tegra_i2c_device5); -#ifdef CONFIG_TOUCHSCREEN_FUSION_F0710A - if ((gpio_request(FUSION_PEN_DOWN, "103, Iris X16-15 Pen") == 0) && - (gpio_direction_input(FUSION_PEN_DOWN) == 0)) { - gpio_export(FUSION_PEN_DOWN, 0); - } else { - printk(KERN_ERR "Could not obtain GPIO for Fusion pen down\n"); - return; - } - - if ((gpio_request(FUSION_RESET, "101, Iris X16-16 RST") == 0) && - (gpio_direction_output(FUSION_RESET, 1) == 0)) { - gpio_direction_output(FUSION_RESET, 0); - mdelay(10); - gpio_direction_output(FUSION_RESET, 1); - } else { - printk(KERN_ERR "Could not obtain GPIO for Fusion reset\n"); - return; - } - - colibri_t30_i2c_bus1_board_info[1].irq = gpio_to_irq(FUSION_PEN_DOWN); -#endif /* CONFIG_TOUCHSCREEN_FUSION_F0710A */ - i2c_register_board_info(0, colibri_t30_i2c_bus1_board_info, ARRAY_SIZE(colibri_t30_i2c_bus1_board_info)); diff --git a/arch/arm/mach-tegra/board-colibri_t30.h b/arch/arm/mach-tegra/board-colibri_t30.h index 85563fe222ba..3c67cb10f960 100644 --- a/arch/arm/mach-tegra/board-colibri_t30.h +++ b/arch/arm/mach-tegra/board-colibri_t30.h @@ -43,9 +43,6 @@ #define EN_MIC_GND TEGRA_GPIO_PT1 -#define FUSION_PEN_DOWN TEGRA_GPIO_PY6 /* SODIMM 103 */ -#define FUSION_RESET TEGRA_GPIO_PY7 /* SODIMM 101 */ - #define I2C_SCL TEGRA_GPIO_PC4 /* SODIMM 196 */ #define I2C_SDA TEGRA_GPIO_PC5 /* SODIMM 194 */ diff --git a/drivers/input/touchscreen/fusion_F0710A.c b/drivers/input/touchscreen/fusion_F0710A.c index d29baf08de91..330d4130399a 100644 --- a/drivers/input/touchscreen/fusion_F0710A.c +++ b/drivers/input/touchscreen/fusion_F0710A.c @@ -16,6 +16,7 @@ #include <linux/delay.h> #include <asm/irq.h> #include <linux/gpio.h> +#include <linux/input/fusion_F0710A.h> #include "fusion_F0710A.h" @@ -82,6 +83,10 @@ static int fusion_F0710A_register_input(void) input_set_abs_params(dev, ABS_MT_WIDTH_MAJOR, 0, 15, 0, 0); #endif + input_set_abs_params(dev, ABS_X, 0, fusion_F0710A.info.xres-1, 0, 0); + input_set_abs_params(dev, ABS_Y, 0, fusion_F0710A.info.yres-1, 0, 0); + input_set_abs_params(dev, ABS_PRESSURE, 0, 255, 0, 0); + ret = input_register_device(dev); if (ret < 0) goto bail1; @@ -126,8 +131,6 @@ static int fusion_F0710A_read_sensor(void) if (ret < 0) { dev_err(&fusion_F0710A.client->dev, "Read block failed: %d\n", ret); - /* Clear fusion_F0710A interrupt */ - fusion_F0710A_write_complete(); return ret; } @@ -150,10 +153,9 @@ static int fusion_F0710A_read_sensor(void) fusion_F0710A.z2 = DATA(fusion_F0710A_SEC_PRESS); fusion_F0710A.tip2 = DATA(fusion_F0710A_SEC_TIDTS)&0x0f; fusion_F0710A.tid2 =(DATA(fusion_F0710A_SEC_TIDTS)&0xf0)>>4; - #undef DATA - /* Clear fusion_F0710A interrupt */ - return fusion_F0710A_write_complete(); + + return 0; } #define val_cut_max(x, max, reverse) \ @@ -173,11 +175,13 @@ static void fusion_F0710A_wq(struct work_struct *work) int x1 = 0, y1 = 0, z1 = 0, x2 = 0, y2 = 0, z2 = 0; if (fusion_F0710A_read_sensor() < 0) - return; + goto restore_irq; +#ifdef DEBUG printk(KERN_DEBUG "tip1, tid1, x1, y1, z1 (%x,%x,%d,%d,%d); tip2, tid2, x2, y2, z2 (%x,%x,%d,%d,%d)\n", fusion_F0710A.tip1, fusion_F0710A.tid1, fusion_F0710A.x1, fusion_F0710A.y1, fusion_F0710A.z1, fusion_F0710A.tip2, fusion_F0710A.tid2, fusion_F0710A.x2, fusion_F0710A.y2, fusion_F0710A.z2); +#endif /* DEBUG */ val_cut_max(fusion_F0710A.x1, fusion_F0710A.info.xres-1, fusion_F0710A.info.xy_reverse); val_cut_max(fusion_F0710A.y1, fusion_F0710A.info.yres-1, fusion_F0710A.info.xy_reverse); @@ -253,10 +257,18 @@ static void fusion_F0710A_wq(struct work_struct *work) input_mt_sync(dev); #endif /* CONFIG_ANDROID */ + input_report_abs(dev, ABS_X, x1); + input_report_abs(dev, ABS_Y, y1); + input_report_abs(dev, ABS_PRESSURE, z1); + input_report_key(dev, BTN_TOUCH, fusion_F0710A.tip1); + input_sync(dev); +restore_irq: enable_irq(fusion_F0710A.client->irq); + /* Clear fusion_F0710A interrupt */ + fusion_F0710A_write_complete(); } static DECLARE_WORK(fusion_F0710A_work, fusion_F0710A_wq); @@ -265,6 +277,7 @@ static irqreturn_t fusion_F0710A_interrupt(int irq, void *dev_id) disable_irq_nosync(fusion_F0710A.client->irq); queue_work(fusion_F0710A.workq, &fusion_F0710A_work); + return IRQ_HANDLED; } @@ -274,10 +287,55 @@ const static u8* g_ver_product[4] = { static int fusion_F0710A_probe(struct i2c_client *i2c, const struct i2c_device_id *id) { + struct fusion_f0710a_init_data *pdata = i2c->dev.platform_data; int ret; u8 ver_product, ver_id; u32 version; + if (pdata == NULL) + { + dev_err(&i2c->dev, "No platform data for Fusion driver\n"); + return -ENODEV; + } + + /* Request pinmuxing, if necessary */ + if (pdata->pinmux_fusion_pins != NULL) + { + ret = pdata->pinmux_fusion_pins(); + if (ret < 0) { + dev_err(&i2c->dev, "muxing GPIOs failed\n"); + return -ENODEV; + } + } + + if ((gpio_request(pdata->gpio_int, "SO-DIMM 28 (Iris X16-38 Pen)") == 0) && + (gpio_direction_input(pdata->gpio_int) == 0)) { + gpio_export(pdata->gpio_int, 0); + } else { + dev_warn(&i2c->dev, "Could not obtain GPIO for Fusion pen down\n"); + return -ENODEV; + } + + if ((gpio_request(pdata->gpio_reset, "SO-DIMM 30 (Iris X16-39 RST)") == 0) && + (gpio_direction_output(pdata->gpio_reset, 1) == 0)) { + + /* Generate a 0 => 1 edge explicitly, and wait for startup... */ + gpio_set_value(pdata->gpio_reset, 0); + msleep(10); + gpio_set_value(pdata->gpio_reset, 1); + /* Wait for startup (up to 125ms according to datasheet) */ + msleep(125); + + gpio_export(pdata->gpio_reset, 0); + } else { + dev_warn(&i2c->dev, "Could not obtain GPIO for Fusion reset\n"); + ret = -ENODEV; + goto bail0; + } + + /* Use Pen Down GPIO as sampling interrupt */ + i2c->irq = gpio_to_irq(pdata->gpio_int); + if(!i2c->irq) { dev_err(&i2c->dev, "fusion_F0710A irq < 0 \n"); @@ -289,7 +347,7 @@ static int fusion_F0710A_probe(struct i2c_client *i2c, const struct i2c_device_i fusion_F0710A.client = i2c; i2c_set_clientdata(i2c, &fusion_F0710A); - printk(KERN_INFO "fusion_F0710A :Touchscreen registered with bus id (%d) with slave address 0x%x\n", + dev_info(&i2c->dev, "Touchscreen registered with bus id (%d) with slave address 0x%x\n", i2c_adapter_id(fusion_F0710A.client->adapter), fusion_F0710A.client->addr); /* Read out a lot of registers */ @@ -310,9 +368,9 @@ static int fusion_F0710A_probe(struct i2c_client *i2c, const struct i2c_device_i ver_id = ((u8)(ret) & 0x6) >> 1; version += ((((u32)ret) & 0xf8) >> 3) * 10; version += (((u32)ret) & 0x1) + 1; /* 0 is build 1, 1 is build 2 */ - printk(KERN_INFO "fusion_F0710A version product %s(%d)\n", g_ver_product[ver_product] ,ver_product); - printk(KERN_INFO "fusion_F0710A version id %s(%d)\n", ver_id ? "1.4" : "1.0", ver_id); - printk(KERN_INFO "fusion_F0710A version series (%d)\n", version); + dev_info(&i2c->dev, "version product %s(%d)\n", g_ver_product[ver_product] ,ver_product); + dev_info(&i2c->dev, "version id %s(%d)\n", ver_id ? "1.4" : "1.0", ver_id); + dev_info(&i2c->dev, "version series (%d)\n", version); switch(ver_product) { @@ -366,32 +424,36 @@ static int fusion_F0710A_probe(struct i2c_client *i2c, const struct i2c_device_i return 0; - bail4: +bail4: free_irq(i2c->irq, &fusion_F0710A); - bail3: +bail3: destroy_workqueue(fusion_F0710A.workq); fusion_F0710A.workq = NULL; - - bail2: +bail2: input_unregister_device(fusion_F0710A.input); - bail1: +bail1: + gpio_free(pdata->gpio_reset); +bail0: + gpio_free(pdata->gpio_int); return ret; } -#ifdef CONFIG_PM -static int fusion_F0710A_suspend(struct i2c_client *i2c, pm_message_t mesg) +#ifdef CONFIG_PM_SLEEP +static int fusion_F0710A_suspend(struct device *dev) { + struct i2c_client *i2c = to_i2c_client(dev); disable_irq(i2c->irq); flush_workqueue(fusion_F0710A.workq); return 0; } -static int fusion_F0710A_resume(struct i2c_client *i2c) +static int fusion_F0710A_resume(struct device *dev) { + struct i2c_client *i2c = to_i2c_client(dev); enable_irq(i2c->irq); return 0; @@ -400,12 +462,16 @@ static int fusion_F0710A_resume(struct i2c_client *i2c) static int fusion_F0710A_remove(struct i2c_client *i2c) { + struct fusion_f0710a_init_data *pdata = i2c->dev.platform_data; + + gpio_free(pdata->gpio_int); + gpio_free(pdata->gpio_reset); destroy_workqueue(fusion_F0710A.workq); free_irq(i2c->irq, &fusion_F0710A); input_unregister_device(fusion_F0710A.input); i2c_set_clientdata(i2c, NULL); - printk(KERN_INFO "fusion_F0710A driver removed\n"); + dev_info(&i2c->dev, "driver removed\n"); return 0; } @@ -415,21 +481,22 @@ static struct i2c_device_id fusion_F0710A_id[] = { {}, }; +static const struct dev_pm_ops fusion_F0710A_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(fusion_F0710A_suspend, fusion_F0710A_resume) +}; + static struct i2c_driver fusion_F0710A_i2c_drv = { .driver = { + .owner = THIS_MODULE, .name = DRV_NAME, + .pm = &fusion_F0710A_pm_ops, }, .probe = fusion_F0710A_probe, .remove = fusion_F0710A_remove, -#ifdef CONFIG_PM - .suspend = fusion_F0710A_suspend, - .resume = fusion_F0710A_resume, -#endif .id_table = fusion_F0710A_id, .address_list = normal_i2c, }; - static int __init fusion_F0710A_init( void ) { int ret; @@ -439,7 +506,7 @@ static int __init fusion_F0710A_init( void ) /* Probe for fusion_F0710A on I2C. */ ret = i2c_add_driver(&fusion_F0710A_i2c_drv); if (ret < 0) { - printk(KERN_ERR "fusion_F0710A_init can't add i2c driver: %d\n", ret); + printk(KERN_WARNING DRV_NAME " can't add i2c driver: %d\n", ret); } return ret; diff --git a/include/linux/input/fusion_F0710A.h b/include/linux/input/fusion_F0710A.h new file mode 100644 index 000000000000..7d152cbdd06e --- /dev/null +++ b/include/linux/input/fusion_F0710A.h @@ -0,0 +1,20 @@ +/* linux/input/fusion_F0710A.h + * + * Platform data for Fusion F0710A driver + * + * Copyright (c) 2013 Toradex AG (stefan.agner@toradex.ch) + * + * For licencing details see kernel-base/COPYING + */ + +#ifndef __LINUX_I2C_FUSION_F0710A_H +#define __LINUX_I2C_FUSION_F0710A_H + +/* Board specific touch screen initial values */ +struct fusion_f0710a_init_data { + int (*pinmux_fusion_pins)(void); + int gpio_int; + int gpio_reset; +}; + +#endif /* __LINUX_I2C_FUSION_F0710A_H */ |