diff options
Diffstat (limited to 'recipes-bsp/u-boot/u-boot-v2012.04.01/0015-i.MX6Q-mx6qsabrelite-Add-keypress-support-to-alter-b.patch')
-rw-r--r-- | recipes-bsp/u-boot/u-boot-v2012.04.01/0015-i.MX6Q-mx6qsabrelite-Add-keypress-support-to-alter-b.patch | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/recipes-bsp/u-boot/u-boot-v2012.04.01/0015-i.MX6Q-mx6qsabrelite-Add-keypress-support-to-alter-b.patch b/recipes-bsp/u-boot/u-boot-v2012.04.01/0015-i.MX6Q-mx6qsabrelite-Add-keypress-support-to-alter-b.patch deleted file mode 100644 index 1b263be..0000000 --- a/recipes-bsp/u-boot/u-boot-v2012.04.01/0015-i.MX6Q-mx6qsabrelite-Add-keypress-support-to-alter-b.patch +++ /dev/null | |||
@@ -1,195 +0,0 @@ | |||
1 | From 92a45a8ec4bf1abe5ff5ac123bf4edd6ccb2f353 Mon Sep 17 00:00:00 2001 | ||
2 | From: Eric Nelson <eric.nelson@boundarydevices.com> | ||
3 | Date: Wed, 25 Apr 2012 14:14:04 +0000 | ||
4 | Subject: [PATCH 15/56] i.MX6Q: mx6qsabrelite: Add keypress support to alter | ||
5 | boot flow | ||
6 | |||
7 | Uses the 'magic_keys' idiom as described in doc/README.kbd: | ||
8 | http://lists.denx.de/pipermail/u-boot/2012-April/122502.html | ||
9 | |||
10 | Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com> | ||
11 | Acked-by: Marek Vasut <marex@denx.de> | ||
12 | Acked-by: Stefano Babic <sbabic@denx.de> | ||
13 | --- | ||
14 | board/freescale/mx6qsabrelite/mx6qsabrelite.c | 122 ++++++++++++++++++++++++- | ||
15 | include/configs/mx6qsabrelite.h | 3 + | ||
16 | 2 files changed, 123 insertions(+), 2 deletions(-) | ||
17 | |||
18 | diff --git a/board/freescale/mx6qsabrelite/mx6qsabrelite.c b/board/freescale/mx6qsabrelite/mx6qsabrelite.c | ||
19 | index b4d9519..90773aa 100644 | ||
20 | --- a/board/freescale/mx6qsabrelite/mx6qsabrelite.c | ||
21 | +++ b/board/freescale/mx6qsabrelite/mx6qsabrelite.c | ||
22 | @@ -50,6 +50,10 @@ DECLARE_GLOBAL_DATA_PTR; | ||
23 | PAD_CTL_PUS_100K_DOWN | PAD_CTL_SPEED_MED | \ | ||
24 | PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) | ||
25 | |||
26 | +#define BUTTON_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ | ||
27 | + PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ | ||
28 | + PAD_CTL_DSE_40ohm | PAD_CTL_HYS) | ||
29 | + | ||
30 | int dram_init(void) | ||
31 | { | ||
32 | gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE); | ||
33 | @@ -122,6 +126,22 @@ iomux_v3_cfg_t enet_pads2[] = { | ||
34 | MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), | ||
35 | }; | ||
36 | |||
37 | +/* Button assignments for J14 */ | ||
38 | +static iomux_v3_cfg_t button_pads[] = { | ||
39 | + /* Menu */ | ||
40 | + MX6Q_PAD_NANDF_D1__GPIO_2_1 | MUX_PAD_CTRL(BUTTON_PAD_CTRL), | ||
41 | + /* Back */ | ||
42 | + MX6Q_PAD_NANDF_D2__GPIO_2_2 | MUX_PAD_CTRL(BUTTON_PAD_CTRL), | ||
43 | + /* Labelled Search (mapped to Power under Android) */ | ||
44 | + MX6Q_PAD_NANDF_D3__GPIO_2_3 | MUX_PAD_CTRL(BUTTON_PAD_CTRL), | ||
45 | + /* Home */ | ||
46 | + MX6Q_PAD_NANDF_D4__GPIO_2_4 | MUX_PAD_CTRL(BUTTON_PAD_CTRL), | ||
47 | + /* Volume Down */ | ||
48 | + MX6Q_PAD_GPIO_19__GPIO_4_5 | MUX_PAD_CTRL(BUTTON_PAD_CTRL), | ||
49 | + /* Volume Up */ | ||
50 | + MX6Q_PAD_GPIO_18__GPIO_7_13 | MUX_PAD_CTRL(BUTTON_PAD_CTRL), | ||
51 | +}; | ||
52 | + | ||
53 | static void setup_iomux_enet(void) | ||
54 | { | ||
55 | gpio_direction_output(87, 0); /* GPIO 3-23 */ | ||
56 | @@ -267,11 +287,18 @@ int board_eth_init(bd_t *bis) | ||
57 | return 0; | ||
58 | } | ||
59 | |||
60 | +static void setup_buttons(void) | ||
61 | +{ | ||
62 | + imx_iomux_v3_setup_multiple_pads(button_pads, | ||
63 | + ARRAY_SIZE(button_pads)); | ||
64 | +} | ||
65 | + | ||
66 | int board_early_init_f(void) | ||
67 | { | ||
68 | - setup_iomux_uart(); | ||
69 | + setup_iomux_uart(); | ||
70 | + setup_buttons(); | ||
71 | |||
72 | - return 0; | ||
73 | + return 0; | ||
74 | } | ||
75 | |||
76 | int board_init(void) | ||
77 | @@ -292,3 +319,94 @@ int checkboard(void) | ||
78 | |||
79 | return 0; | ||
80 | } | ||
81 | + | ||
82 | +struct button_key { | ||
83 | + char const *name; | ||
84 | + unsigned gpnum; | ||
85 | + char ident; | ||
86 | +}; | ||
87 | + | ||
88 | +static struct button_key const buttons[] = { | ||
89 | + {"back", GPIO_NUMBER(2, 2), 'B'}, | ||
90 | + {"home", GPIO_NUMBER(2, 4), 'H'}, | ||
91 | + {"menu", GPIO_NUMBER(2, 1), 'M'}, | ||
92 | + {"search", GPIO_NUMBER(2, 3), 'S'}, | ||
93 | + {"volup", GPIO_NUMBER(7, 13), 'V'}, | ||
94 | + {"voldown", GPIO_NUMBER(4, 5), 'v'}, | ||
95 | +}; | ||
96 | + | ||
97 | +/* | ||
98 | + * generate a null-terminated string containing the buttons pressed | ||
99 | + * returns number of keys pressed | ||
100 | + */ | ||
101 | +static int read_keys(char *buf) | ||
102 | +{ | ||
103 | + int i, numpressed = 0; | ||
104 | + for (i = 0; i < ARRAY_SIZE(buttons); i++) { | ||
105 | + if (!gpio_get_value(buttons[i].gpnum)) | ||
106 | + buf[numpressed++] = buttons[i].ident; | ||
107 | + } | ||
108 | + buf[numpressed] = '\0'; | ||
109 | + return numpressed; | ||
110 | +} | ||
111 | + | ||
112 | +static int do_kbd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | ||
113 | +{ | ||
114 | + char envvalue[ARRAY_SIZE(buttons)+1]; | ||
115 | + int numpressed = read_keys(envvalue); | ||
116 | + setenv("keybd", envvalue); | ||
117 | + return numpressed == 0; | ||
118 | +} | ||
119 | + | ||
120 | +U_BOOT_CMD( | ||
121 | + kbd, 1, 1, do_kbd, | ||
122 | + "Tests for keypresses, sets 'keybd' environment variable", | ||
123 | + "Returns 0 (true) to shell if key is pressed." | ||
124 | +); | ||
125 | + | ||
126 | +#ifdef CONFIG_PREBOOT | ||
127 | +static char const kbd_magic_prefix[] = "key_magic"; | ||
128 | +static char const kbd_command_prefix[] = "key_cmd"; | ||
129 | + | ||
130 | +static void preboot_keys(void) | ||
131 | +{ | ||
132 | + int numpressed; | ||
133 | + char keypress[ARRAY_SIZE(buttons)+1]; | ||
134 | + numpressed = read_keys(keypress); | ||
135 | + if (numpressed) { | ||
136 | + char *kbd_magic_keys = getenv("magic_keys"); | ||
137 | + char *suffix; | ||
138 | + /* | ||
139 | + * loop over all magic keys | ||
140 | + */ | ||
141 | + for (suffix = kbd_magic_keys; *suffix; ++suffix) { | ||
142 | + char *keys; | ||
143 | + char magic[sizeof(kbd_magic_prefix) + 1]; | ||
144 | + sprintf(magic, "%s%c", kbd_magic_prefix, *suffix); | ||
145 | + keys = getenv(magic); | ||
146 | + if (keys) { | ||
147 | + if (!strcmp(keys, keypress)) | ||
148 | + break; | ||
149 | + } | ||
150 | + } | ||
151 | + if (*suffix) { | ||
152 | + char cmd_name[sizeof(kbd_command_prefix) + 1]; | ||
153 | + char *cmd; | ||
154 | + sprintf(cmd_name, "%s%c", kbd_command_prefix, *suffix); | ||
155 | + cmd = getenv(cmd_name); | ||
156 | + if (cmd) { | ||
157 | + setenv("preboot", cmd); | ||
158 | + return; | ||
159 | + } | ||
160 | + } | ||
161 | + } | ||
162 | +} | ||
163 | +#endif | ||
164 | + | ||
165 | +int misc_init_r(void) | ||
166 | +{ | ||
167 | +#ifdef CONFIG_PREBOOT | ||
168 | + preboot_keys(); | ||
169 | +#endif | ||
170 | + return 0; | ||
171 | +} | ||
172 | diff --git a/include/configs/mx6qsabrelite.h b/include/configs/mx6qsabrelite.h | ||
173 | index 492c618..48be6e6 100644 | ||
174 | --- a/include/configs/mx6qsabrelite.h | ||
175 | +++ b/include/configs/mx6qsabrelite.h | ||
176 | @@ -42,6 +42,7 @@ | ||
177 | |||
178 | #define CONFIG_ARCH_CPU_INIT | ||
179 | #define CONFIG_BOARD_EARLY_INIT_F | ||
180 | +#define CONFIG_MISC_INIT_R | ||
181 | #define CONFIG_MXC_GPIO | ||
182 | |||
183 | #define CONFIG_MXC_UART | ||
184 | @@ -110,6 +111,8 @@ | ||
185 | |||
186 | #define CONFIG_BOOTDELAY 3 | ||
187 | |||
188 | +#define CONFIG_PREBOOT "" | ||
189 | + | ||
190 | #define CONFIG_LOADADDR 0x10800000 | ||
191 | #define CONFIG_SYS_TEXT_BASE 0x17800000 | ||
192 | |||
193 | -- | ||
194 | 1.7.10 | ||
195 | |||