[glsdk/meta-ti-glsdk.git] / recipes-kernel / linux / linux-ti33x-psp-3.2 / beaglebone / 0003-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch
1 From 839c23bffe07e2c955904ce3e9e3c776c1b2f88b Mon Sep 17 00:00:00 2001
2 From: Koen Kooi <koen@dominion.thruhere.net>
3 Date: Mon, 30 Jan 2012 21:30:09 +0100
4 Subject: [PATCH 03/22] beaglebone: rebase everything onto 3.2 - WARNING
5 MEGAPATCH
7 ---
8 arch/arm/mach-omap2/board-am335xevm.c | 425 ++++++++++++++++++++++++++++++++-
9 1 file changed, 414 insertions(+), 11 deletions(-)
11 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
12 index 8aa7e10..e0c20c5 100644
13 --- a/arch/arm/mach-omap2/board-am335xevm.c
14 +++ b/arch/arm/mach-omap2/board-am335xevm.c
15 @@ -19,6 +19,7 @@
16 #include <linux/i2c/at24.h>
17 #include <linux/phy.h>
18 #include <linux/gpio.h>
19 +#include <linux/leds.h>
20 #include <linux/spi/spi.h>
21 #include <linux/spi/flash.h>
22 #include <linux/gpio_keys.h>
23 @@ -167,6 +168,66 @@ struct da8xx_lcdc_platform_data TFC_S9700RTWV35TR_01B_pdata = {
25 #include "common.h"
27 +static const struct display_panel bbtoys7_panel = {
28 + WVGA,
29 + 16,
30 + 16,
31 + COLOR_ACTIVE,
32 +};
33 +
34 +static struct lcd_ctrl_config bbtoys7_cfg = {
35 + &bbtoys7_panel,
36 + .ac_bias = 255,
37 + .ac_bias_intrpt = 0,
38 + .dma_burst_sz = 16,
39 + .bpp = 16,
40 + .fdd = 0x80,
41 + .tft_alt_mode = 0,
42 + .stn_565_mode = 0,
43 + .mono_8bit_mode = 0,
44 + .invert_line_clock = 1,
45 + .invert_frm_clock = 1,
46 + .sync_edge = 0,
47 + .sync_ctrl = 1,
48 + .raster_order = 0,
49 +};
50 +
51 +struct da8xx_lcdc_platform_data bbtoys7_pdata = {
52 + .manu_name = "ThreeFive",
53 + .controller_data = &bbtoys7_cfg,
54 + .type = "TFC_S9700RTWV35TR_01B",
55 +};
56 +
57 +static const struct display_panel dvi_panel = {
58 + WVGA,
59 + 16,
60 + 16,
61 + COLOR_ACTIVE,
62 +};
63 +
64 +static struct lcd_ctrl_config dvi_cfg = {
65 + &dvi_panel,
66 + .ac_bias = 255,
67 + .ac_bias_intrpt = 0,
68 + .dma_burst_sz = 16,
69 + .bpp = 16,
70 + .fdd = 0x80,
71 + .tft_alt_mode = 0,
72 + .stn_565_mode = 0,
73 + .mono_8bit_mode = 0,
74 + .invert_line_clock = 1,
75 + .invert_frm_clock = 1,
76 + .sync_edge = 0,
77 + .sync_ctrl = 1,
78 + .raster_order = 0,
79 +};
80 +
81 +struct da8xx_lcdc_platform_data dvi_pdata = {
82 + .manu_name = "BBToys",
83 + .controller_data = &dvi_cfg,
84 + .type = "1024x768@60",
85 +};
86 +
87 /* TSc controller */
88 #include <linux/input/ti_tscadc.h>
89 #include <linux/lis3lv02d.h>
90 @@ -320,9 +381,34 @@ struct am335x_evm_eeprom_config {
91 static struct am335x_evm_eeprom_config config;
92 static bool daughter_brd_detected;
94 -#define GP_EVM_REV_IS_1_0 0x1
95 +struct beaglebone_cape_eeprom_config {
96 + u32 header;
97 + char format_revision[2];
98 + char name[32];
99 + char version[4];
100 + char manufacturer[16];
101 + char partnumber[16];
102 + u16 numpins;
103 + char serial[12];
104 + u8 muxdata[170];
105 + u16 current_3v3;
106 + u16 current_vdd5v;
107 + u16 current_sys5v;
108 + u16 dc;
109 +};
110 +
111 +static struct beaglebone_cape_eeprom_config cape_config;
112 +static bool beaglebone_cape_detected;
113 +
114 +/* keep track of ADC pin usage */
115 +static int capecount = 0;
116 +static bool beaglebone_tsadcpins_free = 1;
117 +
118 +
119 +#define GP_EVM_REV_IS_1_0A 0x1
120 #define GP_EVM_REV_IS_1_1A 0x2
121 #define GP_EVM_REV_IS_UNKNOWN 0xFF
122 +#define GP_EVM_ACTUALLY_BEAGLEBONE 0xBB
123 static unsigned int gp_evm_revision = GP_EVM_REV_IS_UNKNOWN;
124 unsigned int gigabit_enable = 1;
126 @@ -404,11 +490,102 @@ static struct pinmux_config lcdc_pin_mux[] = {
127 {NULL, 0},
128 };
130 +/* Module pin mux for Beagleboardtoys DVI cape */
131 +static struct pinmux_config dvi_pin_mux[] = {
132 + {"lcd_data0.lcd_data0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
133 + | AM33XX_PULL_DISA},
134 + {"lcd_data1.lcd_data1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
135 + | AM33XX_PULL_DISA},
136 + {"lcd_data2.lcd_data2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
137 + | AM33XX_PULL_DISA},
138 + {"lcd_data3.lcd_data3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
139 + | AM33XX_PULL_DISA},
140 + {"lcd_data4.lcd_data4", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
141 + | AM33XX_PULL_DISA},
142 + {"lcd_data5.lcd_data5", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
143 + | AM33XX_PULL_DISA},
144 + {"lcd_data6.lcd_data6", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
145 + | AM33XX_PULL_DISA},
146 + {"lcd_data7.lcd_data7", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
147 + | AM33XX_PULL_DISA},
148 + {"lcd_data8.lcd_data8", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
149 + | AM33XX_PULL_DISA},
150 + {"lcd_data9.lcd_data9", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
151 + | AM33XX_PULL_DISA},
152 + {"lcd_data10.lcd_data10", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
153 + | AM33XX_PULL_DISA},
154 + {"lcd_data11.lcd_data11", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
155 + | AM33XX_PULL_DISA},
156 + {"lcd_data12.lcd_data12", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
157 + | AM33XX_PULL_DISA},
158 + {"lcd_data13.lcd_data13", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
159 + | AM33XX_PULL_DISA},
160 + {"lcd_data14.lcd_data14", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
161 + | AM33XX_PULL_DISA},
162 + {"lcd_data15.lcd_data15", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
163 + | AM33XX_PULL_DISA},
164 + {"lcd_vsync.lcd_vsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
165 + {"lcd_hsync.lcd_hsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
166 + {"lcd_pclk.lcd_pclk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
167 + {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
168 + {"gpmc_a2.rgmii2_td3", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR0 LED
169 + {"gpmc_a3.rgmii2_td2", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR1 LED
170 + {"gpmc_ad7.gpmc_ad7", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // DVI PDn
171 + {NULL, 0},
172 +};
173 +
174 +/* Module pin mux for Beagleboardtoys 7" LCD cape */
175 +static struct pinmux_config bbtoys7_pin_mux[] = {
176 + {"lcd_data0.lcd_data0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
177 + | AM33XX_PULL_DISA},
178 + {"lcd_data1.lcd_data1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
179 + | AM33XX_PULL_DISA},
180 + {"lcd_data2.lcd_data2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
181 + | AM33XX_PULL_DISA},
182 + {"lcd_data3.lcd_data3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
183 + | AM33XX_PULL_DISA},
184 + {"lcd_data4.lcd_data4", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
185 + | AM33XX_PULL_DISA},
186 + {"lcd_data5.lcd_data5", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
187 + | AM33XX_PULL_DISA},
188 + {"lcd_data6.lcd_data6", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
189 + | AM33XX_PULL_DISA},
190 + {"lcd_data7.lcd_data7", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
191 + | AM33XX_PULL_DISA},
192 + {"lcd_data8.lcd_data8", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
193 + | AM33XX_PULL_DISA},
194 + {"lcd_data9.lcd_data9", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
195 + | AM33XX_PULL_DISA},
196 + {"lcd_data10.lcd_data10", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
197 + | AM33XX_PULL_DISA},
198 + {"lcd_data11.lcd_data11", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
199 + | AM33XX_PULL_DISA},
200 + {"lcd_data12.lcd_data12", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
201 + | AM33XX_PULL_DISA},
202 + {"lcd_data13.lcd_data13", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
203 + | AM33XX_PULL_DISA},
204 + {"lcd_data14.lcd_data14", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
205 + | AM33XX_PULL_DISA},
206 + {"lcd_data15.lcd_data15", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
207 + | AM33XX_PULL_DISA},
208 + {"lcd_vsync.lcd_vsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
209 + {"lcd_hsync.lcd_hsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
210 + {"lcd_pclk.lcd_pclk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
211 + {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
212 + {"gpmc_a2.gpio1_18", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // Backlight
213 + {"ecap0_in_pwm0_out.gpio0_7", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // AVDD_EN
214 + {NULL, 0},
215 +};
216 +
217 static struct pinmux_config tsc_pin_mux[] = {
218 {"ain0.ain0", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
219 {"ain1.ain1", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
220 {"ain2.ain2", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
221 {"ain3.ain3", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
222 + {"ain4.ain4", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
223 + {"ain5.ain5", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
224 + {"ain6.ain6", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
225 + {"ain7.ain7", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
226 {"vrefp.vrefp", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
227 {"vrefn.vrefn", OMAP_MUX_MODE0 | AM33XX_INPUT_EN},
228 {NULL, 0},
229 @@ -543,9 +720,9 @@ static struct pinmux_config i2c1_pin_mux[] = {
231 static struct pinmux_config i2c2_pin_mux[] = {
232 {"uart1_ctsn.i2c2_sda", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
233 - AM33XX_PULL_UP | AM33XX_INPUT_EN},
234 + AM33XX_PIN_INPUT_PULLUP},
235 {"uart1_rtsn.i2c2_scl", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
236 - AM33XX_PULL_UP | AM33XX_INPUT_EN},
237 + AM33XX_PIN_INPUT_PULLUP},
238 {NULL, 0},
239 };
241 @@ -823,6 +1000,64 @@ static struct pinmux_config profibus_pin_mux[] = {
242 {NULL, 0},
243 };
245 +
246 +#define BEAGLEBONEDVI_USR0_LED GPIO_TO_PIN(1, 18)
247 +#define BEAGLEBONEDVI_USR1_LED GPIO_TO_PIN(1, 19)
248 +
249 +static struct gpio_led dvi_gpio_leds[] = {
250 + {
251 + .name = "beaglebone::usr0",
252 + .default_trigger = "heartbeat",
253 + .gpio = BEAGLEBONE_USR1_LED,
254 + },
255 + {
256 + .name = "beaglebone::usr1",
257 + .default_trigger = "mmc0",
258 + .gpio = BEAGLEBONE_USR2_LED,
259 + },
260 + {
261 + .name = "beaglebone::usr2",
262 + .gpio = BEAGLEBONE_USR3_LED,
263 + },
264 + {
265 + .name = "beaglebone::usr3",
266 + .gpio = BEAGLEBONE_USR4_LED,
267 + },
268 + {
269 + .name = "dvi::usr0",
270 + .default_trigger = "heartbeat",
271 + .gpio = BEAGLEBONEDVI_USR0_LED,
272 + },
273 + {
274 + .name = "dvi::usr1",
275 + .default_trigger = "mmc0",
276 + .gpio = BEAGLEBONEDVI_USR1_LED,
277 + },
278 +};
279 +
280 +static struct gpio_led_platform_data dvi_gpio_led_info = {
281 + .leds = dvi_gpio_leds,
282 + .num_leds = ARRAY_SIZE(dvi_gpio_leds),
283 +};
284 +
285 +static struct platform_device dvi_leds_gpio = {
286 + .name = "leds-gpio",
287 + .id = -1,
288 + .dev = {
289 + .platform_data = &dvi_gpio_led_info,
290 + },
291 +};
292 +
293 +static struct pinmux_config bone_pin_mux[] = {
294 + /* User LED gpios (gpio1_21 to gpio1_24) */
295 + {"gpmc_a5.rgmii2_td0", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
296 + {"gpmc_a6.rgmii2_tclk", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
297 + {"gpmc_a7.rgmii2_rclk", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
298 + {"gpmc_a8.rgmii2_rd3", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
299 + /* Grounding gpio1_6 (pin 3 Conn A) signals bone tester to start diag tests */
300 + {"gpmc_ad6.gpio1_6", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
301 +};
302 +
303 /* Module pin mux for eCAP0 */
304 static struct pinmux_config ecap0_pin_mux[] = {
305 {"ecap0_in_pwm0_out.ecap0_in_pwm0_out",
306 @@ -932,6 +1167,51 @@ static void lcdc_init(int evm_id, int profile)
307 return;
308 }
310 +#define BEAGLEBONE_LCD_AVDD_EN GPIO_TO_PIN(0, 7)
311 +#define BEAGLEBONE_LCD_BL GPIO_TO_PIN(1, 18)
312 +
313 +static void bbtoys7lcd_init(int evm_id, int profile)
314 +{
315 + setup_pin_mux(bbtoys7_pin_mux);
316 +
317 + // we are being stupid and setting pixclock from here instead of da8xx-fb.c
318 + if (conf_disp_pll(300000000)) {
319 + pr_info("Failed to set pixclock to 300000000, not attempting to"
320 + "register LCD cape\n");
321 + return;
322 + }
323 +
324 + if (am33xx_register_lcdc(&bbtoys7_pdata))
325 + pr_info("Failed to register Beagleboardtoys 7\" LCD cape device\n");
326 +
327 + gpio_request(BEAGLEBONE_LCD_BL, "BONE_LCD_BL");
328 + gpio_direction_output(BEAGLEBONE_LCD_BL, 1);
329 + gpio_request(BEAGLEBONE_LCD_AVDD_EN, "BONE_LCD_AVDD_EN");
330 + gpio_direction_output(BEAGLEBONE_LCD_AVDD_EN, 1);
331 +
332 + return;
333 +}
334 +
335 +#define BEAGLEBONEDVI_PDn GPIO_TO_PIN(1, 7)
336 +
337 +static void dvi_init(int evm_id, int profile)
338 +{
339 + setup_pin_mux(dvi_pin_mux);
340 + gpio_request(BEAGLEBONEDVI_PDn, "DVI_PDn");
341 + gpio_direction_output(BEAGLEBONEDVI_PDn, 1);
342 +
343 + // we are being stupid and setting pixclock from here instead of da8xx-fb.c
344 + if (conf_disp_pll(560000000)) {
345 + pr_info("Failed to set pixclock to 56000000, not attempting to"
346 + "register DVI adapter\n");
347 + return;
348 + }
349 +
350 + if (am33xx_register_lcdc(&dvi_pdata))
351 + pr_info("Failed to register BeagleBoardToys DVI cape\n");
352 + return;
353 +}
354 +
355 static void tsc_init(int evm_id, int profile)
356 {
357 int err;
358 @@ -939,16 +1219,48 @@ static void tsc_init(int evm_id, int profile)
359 if (gp_evm_revision == GP_EVM_REV_IS_1_1A) {
360 am335x_touchscreen_data.analog_input = 1;
361 pr_info("TSC connected to beta GP EVM\n");
362 - } else {
363 + }
364 + if (gp_evm_revision == GP_EVM_REV_IS_1_1A) {
365 am335x_touchscreen_data.analog_input = 0;
366 pr_info("TSC connected to alpha GP EVM\n");
367 }
368 + if( gp_evm_revision == GP_EVM_ACTUALLY_BEAGLEBONE) {
369 + am335x_touchscreen_data.analog_input = 1;
370 + pr_info("TSC connected to BeagleBone\n");;
371 + }
372 setup_pin_mux(tsc_pin_mux);
373 err = platform_device_register(&tsc_device);
374 if (err)
375 pr_err("failed to register touchscreen device\n");
376 }
378 +static void bone_tsc_init(int evm_id, int profile)
379 +{
380 + int err;
381 + setup_pin_mux(tsc_pin_mux);
382 + err = platform_device_register(&bone_tsc_device);
383 + if (err)
384 + pr_err("failed to register touchscreen device\n");
385 +}
386 +
387 +
388 +static void boneleds_init(int evm_id, int profile )
389 +{
390 + int err;
391 + setup_pin_mux(bone_pin_mux);
392 + err = platform_device_register(&bone_leds_gpio);
393 + if (err)
394 + pr_err("failed to register BeagleBone LEDS\n");
395 +}
396 +
397 +static void dvileds_init(int evm_id, int profile )
398 +{
399 + int err;
400 + err = platform_device_register(&dvi_leds_gpio);
401 + if (err)
402 + pr_err("failed to register BeagleBone DVI cape LEDS\n");
403 +}
404 +
405 static void rgmii1_init(int evm_id, int profile)
406 {
407 setup_pin_mux(rgmii1_pin_mux);
408 @@ -1358,18 +1670,106 @@ static void i2c1_init(int evm_id, int profile)
409 return;
410 }
412 +static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context)
413 +{
414 + capecount++;
415 + int ret;
416 + char tmp[32];
417 + char name[32];
418 + char manufacturer[32];
419 +
420 + /* get cape specific data */
421 + ret = mem_acc->read(mem_acc, (char *)&cape_config, 0, sizeof(cape_config));
422 + if (ret != sizeof(cape_config)) {
423 + pr_warning("BeagleBone cape EEPROM: could not read eeprom at address 0x%x\n", capecount + 0x53);
424 + if ((capecount > 3) && (beaglebone_tsadcpins_free == 1)) {
425 + pr_info("BeagleBone cape: exporting ADC pins to sysfs\n");
426 + bone_tsc_init(0,0);
427 + beaglebone_tsadcpins_free = 0;
428 + }
429 + return;
430 + }
431 +
432 + if (cape_config.header != AM335X_EEPROM_HEADER) {
433 + pr_warning("BeagleBone Cape EEPROM: wrong header 0x%x, expected 0x%x\n",
434 + cape_config.header, AM335X_EEPROM_HEADER);
435 + goto out;
436 + }
437 +
438 + pr_info("BeagleBone cape EEPROM: found eeprom at address 0x%x\n", capecount + 0x53);
439 + snprintf(name, sizeof(cape_config.name) + 1, "%s", cape_config.name);
440 + snprintf(manufacturer, sizeof(cape_config.manufacturer) + 1, "%s", cape_config.manufacturer);
441 + pr_info("BeagleBone cape: %s %s\n", manufacturer, name);
442 + snprintf(tmp, sizeof(cape_config.partnumber) + 1, "%s", cape_config.partnumber);
443 + pr_info("BeagleBone cape partnumber: %s\n", tmp);
445 -static struct i2c_board_info am335x_i2c_boardinfo2[] = {
446 + if (!strncmp("BB-BONE-DVID-01", cape_config.partnumber, 5)) {
447 + pr_info("BeagleBone cape: initializing DVI cape\n");
448 + dvi_init(0,0);
449 + }
450 + if (!strncmp("LCD01", cape_config.partnumber, 5)) {
451 + pr_info("BeagleBone cape: initializing LCD cape\n");
452 + bbtoys7lcd_init(0,0);
453 + pr_info("BeagleBone cape: initializing LCD cape touchscreen\n");
454 + tsc_init(0,0);
455 + beaglebone_tsadcpins_free = 0;
456 + }
457 +
458 +
459 + if ((capecount > 3) && (beaglebone_tsadcpins_free == 1)) {
460 + pr_info("BeagleBone cape: exporting ADC pins to sysfs\n");
461 + bone_tsc_init(0,0);
462 + beaglebone_tsadcpins_free = 0;
463 + }
464 +
465 + return;
466 +out:
467 + /*
468 + * If the EEPROM hasn't been programed or an incorrect header
469 + * or board name are read, assume this is an old beaglebone board
470 + * (< Rev A3)
471 + */
472 + pr_err("Could not detect BeagleBone cape properly\n");
473 + beaglebone_cape_detected = false;
474 +
475 +}
476 +
477 +static struct at24_platform_data cape_eeprom_info = {
478 + .byte_len = (256*1024) / 8,
479 + .page_size = 64,
480 + .flags = AT24_FLAG_ADDR16,
481 + .context = (void *)NULL,
482 + .setup = beaglebone_cape_setup,
483 +};
484 +
485 +static struct i2c_board_info __initdata cape_i2c_boardinfo[] = {
486 + {
487 + I2C_BOARD_INFO("24c256", 0x54),
488 + .platform_data = &cape_eeprom_info,
489 + },
490 + {
491 + I2C_BOARD_INFO("24c256", 0x55),
492 + .platform_data = &cape_eeprom_info,
493 + },
494 + {
495 + I2C_BOARD_INFO("24c256", 0x56),
496 + .platform_data = &cape_eeprom_info,
497 + },
498 + {
499 + I2C_BOARD_INFO("24c256", 0x57),
500 + .platform_data = &cape_eeprom_info,
501 + },
502 };
504 static void i2c2_init(int evm_id, int profile)
505 {
506 - setup_pin_mux(i2c2_pin_mux);
507 - omap_register_i2c_bus(3, 100, am335x_i2c_boardinfo2,
508 - ARRAY_SIZE(am335x_i2c_boardinfo2));
509 - return;
510 + setup_pin_mux(i2c2_pin_mux);
511 + omap_register_i2c_bus(3, 100, cape_i2c_boardinfo,
512 + ARRAY_SIZE(cape_i2c_boardinfo));
513 + return;
514 }
516 +
517 /* Setup McASP 1 */
518 static void mcasp1_init(int evm_id, int profile)
519 {
520 @@ -1723,8 +2123,9 @@ static struct evm_dev_cfg beaglebone_old_dev_cfg[] = {
521 {rmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
522 {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
523 {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
524 - {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
525 {i2c2_init, DEV_ON_BASEBOARD, PROFILE_NONE},
526 + {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
527 + {boneleds_init, DEV_ON_BASEBOARD, PROFILE_ALL},
528 {NULL, 0, 0},
529 };
531 @@ -1734,8 +2135,9 @@ static struct evm_dev_cfg beaglebone_dev_cfg[] = {
532 {mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
533 {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
534 {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
535 - {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
536 {i2c2_init, DEV_ON_BASEBOARD, PROFILE_NONE},
537 + {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
538 + {boneleds_init, DEV_ON_BASEBOARD, PROFILE_ALL},
539 {NULL, 0, 0},
540 };
542 @@ -1822,6 +2224,7 @@ static void setup_beaglebone_old(void)
543 static void setup_beaglebone(void)
544 {
545 pr_info("The board is a AM335x Beaglebone.\n");
546 + gp_evm_revision = GP_EVM_ACTUALLY_BEAGLEBONE;
548 /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */
549 am335x_mmc[0].gpio_wp = -EINVAL;
550 --
551 1.7.9.4