summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2014-01-27 14:34:11 +0100
committerStefan Agner <stefan.agner@toradex.com>2014-01-29 15:41:41 +0100
commit485b5d108fcf75a1066c5de054f8adf2e6118845 (patch)
tree516b1506980b7bcdd07f9d5a8a3880ccfd745fd7 /arch/arm
parent63b293000723e61a880470f093fbe82e86ebd81b (diff)
colibri_t20/colibri_t30: use new platform data for fusion touchscreen
Fusion touchscreen driver now uses platform data to do GPIO initialization by itself. Make use of this by providing GPIO numbers instead of doing initialization in the board initialization.
Diffstat (limited to 'arch/arm')
-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
6 files changed, 35 insertions, 65 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 */