summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/configs/colibri_t20_defconfig1
-rw-r--r--arch/arm/configs/colibri_t30_defconfig1
-rw-r--r--arch/arm/mach-tegra/board-colibri_t20.c41
-rw-r--r--arch/arm/mach-tegra/board-colibri_t20.h3
-rw-r--r--arch/arm/mach-tegra/board-colibri_t30.c51
-rw-r--r--arch/arm/mach-tegra/board-colibri_t30.h3
-rw-r--r--drivers/input/touchscreen/fusion_F0710A.c117
-rw-r--r--include/linux/input/fusion_F0710A.h20
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 */