diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2010-09-14 04:28:55 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-09-14 04:28:55 -0400 |
commit | 52d5ac0073eb5faf284574bd98a25a65053eaae0 (patch) | |
tree | 7407911d3c79cec7bce3e42bcafd897a3582f2d4 /arch/arm/mach-shmobile | |
parent | a91a2d06c9797c0a533a71dbeea37b2d5a60c7f5 (diff) |
ARM: mach-shmobile: ap4evb: modify touchpanel judgment condition
Current touchpanel had below 2 issues
- LCDD2 pin which is needed for WVGA was changed to
IRQ28_123 pin on ts_get_pendown_state
- GPIO pull up on ts_init was disabled by gpio_request
on ts_get_pendown_state.
This mean the return value from gpio_get_value is untrusted.
This patch solve these issues
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/arm/mach-shmobile')
-rw-r--r-- | arch/arm/mach-shmobile/board-ap4evb.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index 005337904ad5..3dd76f0106ca 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -834,11 +834,45 @@ static void __init gpio_no_direction(u32 addr) | |||
834 | } | 834 | } |
835 | 835 | ||
836 | /* TouchScreen */ | 836 | /* TouchScreen */ |
837 | #ifdef CONFIG_AP4EVB_QHD | ||
838 | # define GPIO_TSC_IRQ GPIO_FN_IRQ28_123 | ||
839 | # define GPIO_TSC_PORT GPIO_PORT123 | ||
840 | #else /* WVGA */ | ||
841 | # define GPIO_TSC_IRQ GPIO_FN_IRQ7_40 | ||
842 | # define GPIO_TSC_PORT GPIO_PORT40 | ||
843 | #endif | ||
844 | |||
837 | #define IRQ28 evt2irq(0x3380) /* IRQ28A */ | 845 | #define IRQ28 evt2irq(0x3380) /* IRQ28A */ |
838 | #define IRQ7 evt2irq(0x02e0) /* IRQ7A */ | 846 | #define IRQ7 evt2irq(0x02e0) /* IRQ7A */ |
847 | static int ts_get_pendown_state(void) | ||
848 | { | ||
849 | int val; | ||
850 | |||
851 | gpio_free(GPIO_TSC_IRQ); | ||
852 | |||
853 | gpio_request(GPIO_TSC_PORT, NULL); | ||
854 | |||
855 | gpio_direction_input(GPIO_TSC_PORT); | ||
856 | |||
857 | val = gpio_get_value(GPIO_TSC_PORT); | ||
858 | |||
859 | gpio_request(GPIO_TSC_IRQ, NULL); | ||
860 | |||
861 | return !val; | ||
862 | } | ||
863 | |||
864 | static int ts_init(void) | ||
865 | { | ||
866 | gpio_request(GPIO_TSC_IRQ, NULL); | ||
867 | |||
868 | return 0; | ||
869 | } | ||
870 | |||
839 | static struct tsc2007_platform_data tsc2007_info = { | 871 | static struct tsc2007_platform_data tsc2007_info = { |
840 | .model = 2007, | 872 | .model = 2007, |
841 | .x_plate_ohms = 1000, | 873 | .x_plate_ohms = 180, |
874 | .get_pendown_state = ts_get_pendown_state, | ||
875 | .init_platform_hw = ts_init, | ||
842 | }; | 876 | }; |
843 | 877 | ||
844 | static struct i2c_board_info tsc_device = { | 878 | static struct i2c_board_info tsc_device = { |
@@ -1015,7 +1049,6 @@ static void __init ap4evb_init(void) | |||
1015 | gpio_request(GPIO_FN_KEYIN4, NULL); | 1049 | gpio_request(GPIO_FN_KEYIN4, NULL); |
1016 | 1050 | ||
1017 | /* enable TouchScreen */ | 1051 | /* enable TouchScreen */ |
1018 | gpio_request(GPIO_FN_IRQ28_123, NULL); | ||
1019 | set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW); | 1052 | set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW); |
1020 | 1053 | ||
1021 | tsc_device.irq = IRQ28; | 1054 | tsc_device.irq = IRQ28; |
@@ -1072,7 +1105,6 @@ static void __init ap4evb_init(void) | |||
1072 | lcdc_info.ch[0].lcd_size_cfg.height = 91; | 1105 | lcdc_info.ch[0].lcd_size_cfg.height = 91; |
1073 | 1106 | ||
1074 | /* enable TouchScreen */ | 1107 | /* enable TouchScreen */ |
1075 | gpio_request(GPIO_FN_IRQ7_40, NULL); | ||
1076 | set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW); | 1108 | set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW); |
1077 | 1109 | ||
1078 | tsc_device.irq = IRQ7; | 1110 | tsc_device.irq = IRQ7; |