summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch
blob: d9bc2b5660bfe49ddbf79b89d0b8075319294a43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
From b61b89f98ac85ccd8d503a902bad208343ed0aba Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@dominion.thruhere.net>
Date: Mon, 4 Jun 2012 14:38:02 +0200
Subject: [PATCH] beaglebone: add support for LCD3 rev A1

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 arch/arm/mach-omap2/board-am335xevm.c |   94 +++++++++++++++++++++++++++++----
 1 files changed, 83 insertions(+), 11 deletions(-)

diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
index bb6049a..51bfa8b 100644
--- a/arch/arm/mach-omap2/board-am335xevm.c
+++ b/arch/arm/mach-omap2/board-am335xevm.c
@@ -1136,7 +1136,7 @@ static struct pinmux_config lcd3_keys_pin_mux[] = {
 	{NULL, 0},
 };
 
-/* Configure GPIOs for lcd3 keys */
+/* Configure GPIOs for lcd3 rev A or earlier keys */
 static struct gpio_keys_button beaglebone_lcd3_gpio_keys[] = {
 	{
 		.code                   = KEY_LEFT,
@@ -1193,14 +1193,72 @@ static struct platform_device beaglebone_lcd3_keys = {
 	},
 };
 
-static void beaglebone_lcd3_keys_init(int evm_id, int profile)
-{
-	int err;
-	setup_pin_mux(lcd3_keys_pin_mux);
-	err = platform_device_register(&beaglebone_lcd3_keys);
-	if (err)
-		pr_err("failed to register gpio keys for LCD3 cape\n");
-}
+/* pinmux for lcd3 A1 or newer keys */
+static struct pinmux_config lcd3a1_keys_pin_mux[] = {
+	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Left
+	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Right
+	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // Up
+	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Down
+	{"mcasp0_fsr.gpio3_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Enter
+	{NULL, 0},
+};
+
+/* Configure GPIOs for lcd3 rev A1 or newer keys */
+static struct gpio_keys_button lcd3a1_gpio_keys[] = {
+	{
+		.code                   = KEY_LEFT,
+		.gpio                   = GPIO_TO_PIN(1, 16),
+		.active_low             = true,
+		.desc                   = "left",
+		.type                   = EV_KEY,
+		.wakeup                 = 1,
+	},
+	{
+		.code                   = KEY_RIGHT,
+		.gpio                   = GPIO_TO_PIN(1, 17),
+		.active_low             = true,
+		.desc                   = "right",
+		.type                   = EV_KEY,
+		.wakeup                 = 1,
+	},
+	{
+		.code                   = KEY_UP,
+		.gpio                   = GPIO_TO_PIN(1, 19),
+		.active_low             = true,
+		.desc                   = "up",
+		.type                   = EV_KEY,
+		.wakeup                 = 1,
+	},
+	{
+		.code                   = KEY_DOWN,
+		.gpio                   = GPIO_TO_PIN(3, 16),
+		.active_low             = true,
+		.desc                   = "down",
+		.type                   = EV_KEY,
+		.wakeup                 = 1,
+	},
+	{
+		.code                   = KEY_ENTER,
+		.gpio                   = GPIO_TO_PIN(3, 19),
+		.active_low             = true,
+		.desc                   = "enter",
+		.type                   = EV_KEY,
+		.wakeup                 = 1,
+	},
+};
+
+static struct gpio_keys_platform_data lcd3a1_gpio_key_info = {
+	.buttons        = lcd3a1_gpio_keys,
+	.nbuttons       = ARRAY_SIZE(lcd3a1_gpio_keys),
+};
+
+static struct platform_device lcd3a1_keys = {
+	.name   = "gpio-keys",
+	.id     = -1,
+	.dev    = {
+		.platform_data  = &lcd3a1_gpio_key_info,
+	},
+};
 
 /*
 * @evm_id - evm id which needs to be configured
@@ -2691,8 +2749,22 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
 		pr_info("BeagleBone cape: initializing LCD cape touchscreen\n");
 		tsc_init(0,0);
 		beaglebone_tsadcpins_free = 0;
-		pr_info("BeagleBone cape: Registering gpio-keys for LCD cape\n");
-		beaglebone_lcd3_keys_init(0,0);
+		
+		if (!strncmp("00A0", cape_config.version, 4)) {
+			pr_info("BeagleBone cape: Registering gpio-keys for LCD3 rev A or earlier cape\n");
+			int err;
+			setup_pin_mux(lcd3_keys_pin_mux);
+			err = platform_device_register(&beaglebone_lcd3_keys);
+			if (err)
+				pr_err("failed to register gpio keys for LCD3 rev A or earlier cape\n");
+		} else {
+			pr_info("BeagleBone cape: Registering gpio-keys for LCD rev A1 or later cape\n");
+			int err;
+			setup_pin_mux(lcd3a1_keys_pin_mux);
+			err = platform_device_register(&lcd3a1_keys);
+			if (err)
+				pr_err("failed to register gpio keys for LCD3 rev A1 or later cape\n");
+		}
 		beaglebone_leds_free = 0;
 		lcd3leds_init(0,0);
 	}
-- 
1.7.7.6