aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r--arch/arm/mach-omap2/Kconfig6
-rw-r--r--arch/arm/mach-omap2/board-4430sdp.c148
-rw-r--r--arch/arm/mach-omap2/board-cm-t35.c77
-rw-r--r--arch/arm/mach-omap2/board-omap3beagle.c78
-rw-r--r--arch/arm/mach-omap2/board-rx51-peripherals.c135
-rw-r--r--arch/arm/mach-omap2/devices.c3
6 files changed, 401 insertions, 46 deletions
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 19d5891c48e3..4ae6257b39a4 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -266,9 +266,10 @@ config MACH_OMAP_ZOOM3
266 select REGULATOR_FIXED_VOLTAGE 266 select REGULATOR_FIXED_VOLTAGE
267 267
268config MACH_CM_T35 268config MACH_CM_T35
269 bool "CompuLab CM-T35 module" 269 bool "CompuLab CM-T35/CM-T3730 modules"
270 depends on ARCH_OMAP3 270 depends on ARCH_OMAP3
271 default y 271 default y
272 select MACH_CM_T3730
272 select OMAP_PACKAGE_CUS 273 select OMAP_PACKAGE_CUS
273 274
274config MACH_CM_T3517 275config MACH_CM_T3517
@@ -277,6 +278,9 @@ config MACH_CM_T3517
277 default y 278 default y
278 select OMAP_PACKAGE_CBB 279 select OMAP_PACKAGE_CBB
279 280
281config MACH_CM_T3730
282 bool
283
280config MACH_IGEP0020 284config MACH_IGEP0020
281 bool "IGEP v2 board" 285 bool "IGEP v2 board"
282 depends on ARCH_OMAP3 286 depends on ARCH_OMAP3
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 933b25bb10de..a7c0b31fd084 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -22,6 +22,7 @@
22#include <linux/i2c/twl.h> 22#include <linux/i2c/twl.h>
23#include <linux/gpio_keys.h> 23#include <linux/gpio_keys.h>
24#include <linux/regulator/machine.h> 24#include <linux/regulator/machine.h>
25#include <linux/regulator/fixed.h>
25#include <linux/leds.h> 26#include <linux/leds.h>
26#include <linux/leds_pwm.h> 27#include <linux/leds_pwm.h>
27 28
@@ -37,6 +38,7 @@
37#include <plat/mmc.h> 38#include <plat/mmc.h>
38#include <plat/omap4-keypad.h> 39#include <plat/omap4-keypad.h>
39#include <video/omapdss.h> 40#include <video/omapdss.h>
41#include <linux/wl12xx.h>
40 42
41#include "mux.h" 43#include "mux.h"
42#include "hsmmc.h" 44#include "hsmmc.h"
@@ -51,6 +53,9 @@
51#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */ 53#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
52#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */ 54#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
53 55
56#define GPIO_WIFI_PMENA 54
57#define GPIO_WIFI_IRQ 53
58
54static const int sdp4430_keymap[] = { 59static const int sdp4430_keymap[] = {
55 KEY(0, 0, KEY_E), 60 KEY(0, 0, KEY_E),
56 KEY(0, 1, KEY_R), 61 KEY(0, 1, KEY_R),
@@ -124,6 +129,64 @@ static const int sdp4430_keymap[] = {
124 KEY(7, 6, KEY_OK), 129 KEY(7, 6, KEY_OK),
125 KEY(7, 7, KEY_DOWN), 130 KEY(7, 7, KEY_DOWN),
126}; 131};
132static struct omap_device_pad keypad_pads[] __initdata = {
133 { .name = "kpd_col1.kpd_col1",
134 .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
135 },
136 { .name = "kpd_col1.kpd_col1",
137 .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
138 },
139 { .name = "kpd_col2.kpd_col2",
140 .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
141 },
142 { .name = "kpd_col3.kpd_col3",
143 .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
144 },
145 { .name = "kpd_col4.kpd_col4",
146 .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
147 },
148 { .name = "kpd_col5.kpd_col5",
149 .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
150 },
151 { .name = "gpmc_a23.kpd_col7",
152 .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
153 },
154 { .name = "gpmc_a22.kpd_col6",
155 .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
156 },
157 { .name = "kpd_row0.kpd_row0",
158 .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
159 OMAP_MUX_MODE1 | OMAP_INPUT_EN,
160 },
161 { .name = "kpd_row1.kpd_row1",
162 .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
163 OMAP_MUX_MODE1 | OMAP_INPUT_EN,
164 },
165 { .name = "kpd_row2.kpd_row2",
166 .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
167 OMAP_MUX_MODE1 | OMAP_INPUT_EN,
168 },
169 { .name = "kpd_row3.kpd_row3",
170 .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
171 OMAP_MUX_MODE1 | OMAP_INPUT_EN,
172 },
173 { .name = "kpd_row4.kpd_row4",
174 .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
175 OMAP_MUX_MODE1 | OMAP_INPUT_EN,
176 },
177 { .name = "kpd_row5.kpd_row5",
178 .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
179 OMAP_MUX_MODE1 | OMAP_INPUT_EN,
180 },
181 { .name = "gpmc_a18.kpd_row6",
182 .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
183 OMAP_MUX_MODE1 | OMAP_INPUT_EN,
184 },
185 { .name = "gpmc_a19.kpd_row7",
186 .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
187 OMAP_MUX_MODE1 | OMAP_INPUT_EN,
188 },
189};
127 190
128static struct matrix_keymap_data sdp4430_keymap_data = { 191static struct matrix_keymap_data sdp4430_keymap_data = {
129 .keymap = sdp4430_keymap, 192 .keymap = sdp4430_keymap,
@@ -135,6 +198,13 @@ static struct omap4_keypad_platform_data sdp4430_keypad_data = {
135 .rows = 8, 198 .rows = 8,
136 .cols = 8, 199 .cols = 8,
137}; 200};
201
202static struct omap_board_data keypad_data = {
203 .id = 1,
204 .pads = keypad_pads,
205 .pads_cnt = ARRAY_SIZE(keypad_pads),
206};
207
138static struct gpio_led sdp4430_gpio_leds[] = { 208static struct gpio_led sdp4430_gpio_leds[] = {
139 { 209 {
140 .name = "omap4:green:debug0", 210 .name = "omap4:green:debug0",
@@ -315,8 +385,17 @@ static struct omap2_hsmmc_info mmc[] = {
315 { 385 {
316 .mmc = 1, 386 .mmc = 1,
317 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, 387 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
388 .gpio_cd = -EINVAL,
318 .gpio_wp = -EINVAL, 389 .gpio_wp = -EINVAL,
319 }, 390 },
391 {
392 .mmc = 5,
393 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
394 .gpio_cd = -EINVAL,
395 .gpio_wp = -EINVAL,
396 .ocr_mask = MMC_VDD_165_195,
397 .nonremovable = true,
398 },
320 {} /* Terminator */ 399 {} /* Terminator */
321}; 400};
322 401
@@ -324,6 +403,37 @@ static struct regulator_consumer_supply sdp4430_vaux_supply[] = {
324 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"), 403 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
325}; 404};
326 405
406static struct regulator_consumer_supply omap4_sdp4430_vmmc5_supply = {
407 .supply = "vmmc",
408 .dev_name = "omap_hsmmc.4",
409};
410
411static struct regulator_init_data sdp4430_vmmc5 = {
412 .constraints = {
413 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
414 },
415 .num_consumer_supplies = 1,
416 .consumer_supplies = &omap4_sdp4430_vmmc5_supply,
417};
418
419static struct fixed_voltage_config sdp4430_vwlan = {
420 .supply_name = "vwl1271",
421 .microvolts = 1800000, /* 1.8V */
422 .gpio = GPIO_WIFI_PMENA,
423 .startup_delay = 70000, /* 70msec */
424 .enable_high = 1,
425 .enabled_at_boot = 0,
426 .init_data = &sdp4430_vmmc5,
427};
428
429static struct platform_device omap_vwlan_device = {
430 .name = "reg-fixed-voltage",
431 .id = 1,
432 .dev = {
433 .platform_data = &sdp4430_vwlan,
434 },
435};
436
327static int omap4_twl6030_hsmmc_late_init(struct device *dev) 437static int omap4_twl6030_hsmmc_late_init(struct device *dev)
328{ 438{
329 int ret = 0; 439 int ret = 0;
@@ -593,6 +703,41 @@ static inline void board_serial_init(void)
593} 703}
594 #endif 704 #endif
595 705
706static void omap4_sdp4430_wifi_mux_init(void)
707{
708 omap_mux_init_gpio(GPIO_WIFI_IRQ, OMAP_PIN_INPUT |
709 OMAP_PIN_OFF_WAKEUPENABLE);
710 omap_mux_init_gpio(GPIO_WIFI_PMENA, OMAP_PIN_OUTPUT);
711
712 omap_mux_init_signal("sdmmc5_cmd.sdmmc5_cmd",
713 OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
714 omap_mux_init_signal("sdmmc5_clk.sdmmc5_clk",
715 OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
716 omap_mux_init_signal("sdmmc5_dat0.sdmmc5_dat0",
717 OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
718 omap_mux_init_signal("sdmmc5_dat1.sdmmc5_dat1",
719 OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
720 omap_mux_init_signal("sdmmc5_dat2.sdmmc5_dat2",
721 OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
722 omap_mux_init_signal("sdmmc5_dat3.sdmmc5_dat3",
723 OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
724
725}
726
727static struct wl12xx_platform_data omap4_sdp4430_wlan_data __initdata = {
728 .irq = OMAP_GPIO_IRQ(GPIO_WIFI_IRQ),
729 .board_ref_clock = WL12XX_REFCLOCK_26,
730 .board_tcxo_clock = WL12XX_TCXOCLOCK_26,
731};
732
733static void omap4_sdp4430_wifi_init(void)
734{
735 omap4_sdp4430_wifi_mux_init();
736 if (wl12xx_set_platform_data(&omap4_sdp4430_wlan_data))
737 pr_err("Error setting wl12xx data\n");
738 platform_device_register(&omap_vwlan_device);
739}
740
596static void __init omap_4430sdp_init(void) 741static void __init omap_4430sdp_init(void)
597{ 742{
598 int status; 743 int status;
@@ -609,6 +754,7 @@ static void __init omap_4430sdp_init(void)
609 omap_sfh7741prox_init(); 754 omap_sfh7741prox_init();
610 platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices)); 755 platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
611 board_serial_init(); 756 board_serial_init();
757 omap4_sdp4430_wifi_init();
612 omap4_twl6030_hsmmc_init(mmc); 758 omap4_twl6030_hsmmc_init(mmc);
613 759
614 usb_musb_init(&musb_board_data); 760 usb_musb_init(&musb_board_data);
@@ -622,7 +768,7 @@ static void __init omap_4430sdp_init(void)
622 ARRAY_SIZE(sdp4430_spi_board_info)); 768 ARRAY_SIZE(sdp4430_spi_board_info));
623 } 769 }
624 770
625 status = omap4_keyboard_init(&sdp4430_keypad_data); 771 status = omap4_keyboard_init(&sdp4430_keypad_data, &keypad_data);
626 if (status) 772 if (status)
627 pr_err("Keypad initialization failed: %d\n", status); 773 pr_err("Keypad initialization failed: %d\n", status);
628 774
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index f0749215df11..3af8aab435b5 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * board-cm-t35.c (CompuLab CM-T35 module) 2 * CompuLab CM-T35/CM-T3730 modules support
3 * 3 *
4 * Copyright (C) 2009-2011 CompuLab, Ltd. 4 * Copyright (C) 2009-2011 CompuLab, Ltd.
5 * Authors: Mike Rapoport <mike@compulab.co.il> 5 * Authors: Mike Rapoport <mike@compulab.co.il>
@@ -535,17 +535,11 @@ static struct omap_board_mux board_mux[] __initdata = {
535 OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 535 OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
536 OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), 536 OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
537 537
538 /* DSS */ 538 /* common DSS */
539 OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 539 OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
540 OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 540 OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
541 OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 541 OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
542 OMAP3_MUX(DSS_ACBIAS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 542 OMAP3_MUX(DSS_ACBIAS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
543 OMAP3_MUX(DSS_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
544 OMAP3_MUX(DSS_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
545 OMAP3_MUX(DSS_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
546 OMAP3_MUX(DSS_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
547 OMAP3_MUX(DSS_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
548 OMAP3_MUX(DSS_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
549 OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 543 OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
550 OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 544 OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
551 OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 545 OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
@@ -558,12 +552,6 @@ static struct omap_board_mux board_mux[] __initdata = {
558 OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 552 OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
559 OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 553 OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
560 OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), 554 OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
561 OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
562 OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
563 OMAP3_MUX(DSS_DATA20, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
564 OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
565 OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
566 OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
567 555
568 /* display controls */ 556 /* display controls */
569 OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), 557 OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
@@ -576,19 +564,53 @@ static struct omap_board_mux board_mux[] __initdata = {
576 564
577 { .reg_offset = OMAP_MUX_TERMINATOR }, 565 { .reg_offset = OMAP_MUX_TERMINATOR },
578}; 566};
567
568static void __init cm_t3x_common_dss_mux_init(int mux_mode)
569{
570 omap_mux_init_signal("dss_data18", mux_mode);
571 omap_mux_init_signal("dss_data19", mux_mode);
572 omap_mux_init_signal("dss_data20", mux_mode);
573 omap_mux_init_signal("dss_data21", mux_mode);
574 omap_mux_init_signal("dss_data22", mux_mode);
575 omap_mux_init_signal("dss_data23", mux_mode);
576}
577
578static void __init cm_t35_init_mux(void)
579{
580 omap_mux_init_signal("gpio_70", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
581 omap_mux_init_signal("gpio_71", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
582 omap_mux_init_signal("gpio_72", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
583 omap_mux_init_signal("gpio_73", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
584 omap_mux_init_signal("gpio_74", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
585 omap_mux_init_signal("gpio_75", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
586 cm_t3x_common_dss_mux_init(OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
587}
588
589static void __init cm_t3730_init_mux(void)
590{
591 omap_mux_init_signal("sys_boot0", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
592 omap_mux_init_signal("sys_boot1", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
593 omap_mux_init_signal("sys_boot3", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
594 omap_mux_init_signal("sys_boot4", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
595 omap_mux_init_signal("sys_boot5", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
596 omap_mux_init_signal("sys_boot6", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
597 cm_t3x_common_dss_mux_init(OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
598}
599#else
600static inline void cm_t35_init_mux(void) {}
601static inline void cm_t3730_init_mux(void) {}
579#endif 602#endif
580 603
581static struct omap_board_config_kernel cm_t35_config[] __initdata = { 604static struct omap_board_config_kernel cm_t35_config[] __initdata = {
582}; 605};
583 606
584static void __init cm_t35_init(void) 607static void __init cm_t3x_common_init(void)
585{ 608{
586 omap_board_config = cm_t35_config; 609 omap_board_config = cm_t35_config;
587 omap_board_config_size = ARRAY_SIZE(cm_t35_config); 610 omap_board_config_size = ARRAY_SIZE(cm_t35_config);
588 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); 611 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
589 omap_serial_init(); 612 omap_serial_init();
590 cm_t35_init_i2c(); 613 cm_t35_init_i2c();
591 cm_t35_init_nand();
592 omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); 614 omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
593 cm_t35_init_ethernet(); 615 cm_t35_init_ethernet();
594 cm_t35_init_led(); 616 cm_t35_init_led();
@@ -598,6 +620,19 @@ static void __init cm_t35_init(void)
598 usbhs_init(&usbhs_bdata); 620 usbhs_init(&usbhs_bdata);
599} 621}
600 622
623static void __init cm_t35_init(void)
624{
625 cm_t3x_common_init();
626 cm_t35_init_mux();
627 cm_t35_init_nand();
628}
629
630static void __init cm_t3730_init(void)
631{
632 cm_t3x_common_init();
633 cm_t3730_init_mux();
634}
635
601MACHINE_START(CM_T35, "Compulab CM-T35") 636MACHINE_START(CM_T35, "Compulab CM-T35")
602 .boot_params = 0x80000100, 637 .boot_params = 0x80000100,
603 .reserve = omap_reserve, 638 .reserve = omap_reserve,
@@ -607,3 +642,13 @@ MACHINE_START(CM_T35, "Compulab CM-T35")
607 .init_machine = cm_t35_init, 642 .init_machine = cm_t35_init,
608 .timer = &omap3_timer, 643 .timer = &omap3_timer,
609MACHINE_END 644MACHINE_END
645
646MACHINE_START(CM_T3730, "Compulab CM-T3730")
647 .boot_params = 0x80000100,
648 .reserve = omap_reserve,
649 .map_io = omap3_map_io,
650 .init_early = cm_t35_init_early,
651 .init_irq = omap3_init_irq,
652 .init_machine = cm_t3730_init,
653 .timer = &omap3_timer,
654MACHINE_END
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 34f841112768..32f5f895568a 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -60,7 +60,8 @@
60 * AXBX = GPIO173, GPIO172, GPIO171: 1 1 1 60 * AXBX = GPIO173, GPIO172, GPIO171: 1 1 1
61 * C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0 61 * C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0
62 * C4 = GPIO173, GPIO172, GPIO171: 1 0 1 62 * C4 = GPIO173, GPIO172, GPIO171: 1 0 1
63 * XM = GPIO173, GPIO172, GPIO171: 0 0 0 63 * XMA/XMB = GPIO173, GPIO172, GPIO171: 0 0 0
64 * XMC = GPIO173, GPIO172, GPIO171: 0 1 0
64 */ 65 */
65enum { 66enum {
66 OMAP3BEAGLE_BOARD_UNKN = 0, 67 OMAP3BEAGLE_BOARD_UNKN = 0,
@@ -68,14 +69,26 @@ enum {
68 OMAP3BEAGLE_BOARD_C1_3, 69 OMAP3BEAGLE_BOARD_C1_3,
69 OMAP3BEAGLE_BOARD_C4, 70 OMAP3BEAGLE_BOARD_C4,
70 OMAP3BEAGLE_BOARD_XM, 71 OMAP3BEAGLE_BOARD_XM,
72 OMAP3BEAGLE_BOARD_XMC,
71}; 73};
72 74
73static u8 omap3_beagle_version; 75static u8 omap3_beagle_version;
74 76
75static u8 omap3_beagle_get_rev(void) 77/*
76{ 78 * Board-specific configuration
77 return omap3_beagle_version; 79 * Defaults to BeagleBoard-xMC
78} 80 */
81static struct {
82 int mmc1_gpio_wp;
83 int usb_pwr_level;
84 int reset_gpio;
85 int usr_button_gpio;
86} beagle_config = {
87 .mmc1_gpio_wp = -EINVAL,
88 .usb_pwr_level = GPIOF_OUT_INIT_LOW,
89 .reset_gpio = 129,
90 .usr_button_gpio = 4,
91};
79 92
80static struct gpio omap3_beagle_rev_gpios[] __initdata = { 93static struct gpio omap3_beagle_rev_gpios[] __initdata = {
81 { 171, GPIOF_IN, "rev_id_0" }, 94 { 171, GPIOF_IN, "rev_id_0" },
@@ -110,18 +123,32 @@ static void __init omap3_beagle_init_rev(void)
110 case 7: 123 case 7:
111 printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n"); 124 printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
112 omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX; 125 omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
126 beagle_config.mmc1_gpio_wp = 29;
127 beagle_config.reset_gpio = 170;
128 beagle_config.usr_button_gpio = 7;
113 break; 129 break;
114 case 6: 130 case 6:
115 printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n"); 131 printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
116 omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3; 132 omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
133 beagle_config.mmc1_gpio_wp = 23;
134 beagle_config.reset_gpio = 170;
135 beagle_config.usr_button_gpio = 7;
117 break; 136 break;
118 case 5: 137 case 5:
119 printk(KERN_INFO "OMAP3 Beagle Rev: C4\n"); 138 printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
120 omap3_beagle_version = OMAP3BEAGLE_BOARD_C4; 139 omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
140 beagle_config.mmc1_gpio_wp = 23;
141 beagle_config.reset_gpio = 170;
142 beagle_config.usr_button_gpio = 7;
121 break; 143 break;
122 case 0: 144 case 0:
123 printk(KERN_INFO "OMAP3 Beagle Rev: xM\n"); 145 printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n");
124 omap3_beagle_version = OMAP3BEAGLE_BOARD_XM; 146 omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
147 beagle_config.usb_pwr_level = GPIOF_OUT_INIT_HIGH;
148 break;
149 case 2:
150 printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
151 omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
125 break; 152 break;
126 default: 153 default:
127 printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev); 154 printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
@@ -225,7 +252,7 @@ static struct omap2_hsmmc_info mmc[] = {
225 { 252 {
226 .mmc = 1, 253 .mmc = 1,
227 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, 254 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
228 .gpio_wp = 29, 255 .gpio_wp = -EINVAL,
229 }, 256 },
230 {} /* Terminator */ 257 {} /* Terminator */
231}; 258};
@@ -243,17 +270,11 @@ static struct gpio_led gpio_leds[];
243static int beagle_twl_gpio_setup(struct device *dev, 270static int beagle_twl_gpio_setup(struct device *dev,
244 unsigned gpio, unsigned ngpio) 271 unsigned gpio, unsigned ngpio)
245{ 272{
246 int r, usb_pwr_level; 273 int r;
247 274
248 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { 275 if (beagle_config.mmc1_gpio_wp != -EINVAL)
249 mmc[0].gpio_wp = -EINVAL; 276 omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
250 } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) || 277 mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
251 (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) {
252 omap_mux_init_gpio(23, OMAP_PIN_INPUT);
253 mmc[0].gpio_wp = 23;
254 } else {
255 omap_mux_init_gpio(29, OMAP_PIN_INPUT);
256 }
257 /* gpio + 0 is "mmc0_cd" (input/IRQ) */ 278 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
258 mmc[0].gpio_cd = gpio + 0; 279 mmc[0].gpio_cd = gpio + 0;
259 omap2_hsmmc_init(mmc); 280 omap2_hsmmc_init(mmc);
@@ -263,9 +284,8 @@ static int beagle_twl_gpio_setup(struct device *dev,
263 * high / others active low) 284 * high / others active low)
264 * DVI reset GPIO is different between beagle revisions 285 * DVI reset GPIO is different between beagle revisions
265 */ 286 */
266 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { 287 /* Valid for all -xM revisions */
267 usb_pwr_level = GPIOF_OUT_INIT_HIGH; 288 if (cpu_is_omap3630()) {
268 beagle_dvi_device.reset_gpio = 129;
269 /* 289 /*
270 * gpio + 1 on Xm controls the TFP410's enable line (active low) 290 * gpio + 1 on Xm controls the TFP410's enable line (active low)
271 * gpio + 2 control varies depending on the board rev as below: 291 * gpio + 2 control varies depending on the board rev as below:
@@ -283,8 +303,6 @@ static int beagle_twl_gpio_setup(struct device *dev,
283 pr_err("%s: unable to configure DVI_LDO_EN\n", 303 pr_err("%s: unable to configure DVI_LDO_EN\n",
284 __func__); 304 __func__);
285 } else { 305 } else {
286 usb_pwr_level = GPIOF_OUT_INIT_LOW;
287 beagle_dvi_device.reset_gpio = 170;
288 /* 306 /*
289 * REVISIT: need ehci-omap hooks for external VBUS 307 * REVISIT: need ehci-omap hooks for external VBUS
290 * power switch and overcurrent detect 308 * power switch and overcurrent detect
@@ -292,8 +310,10 @@ static int beagle_twl_gpio_setup(struct device *dev,
292 if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC")) 310 if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
293 pr_err("%s: unable to configure EHCI_nOC\n", __func__); 311 pr_err("%s: unable to configure EHCI_nOC\n", __func__);
294 } 312 }
313 beagle_dvi_device.reset_gpio = beagle_config.reset_gpio;
295 314
296 gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR"); 315 gpio_request_one(gpio + TWL4030_GPIO_MAX, beagle_config.usb_pwr_level,
316 "nEN_USB_PWR");
297 317
298 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ 318 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
299 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 319 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -404,7 +424,8 @@ static struct platform_device leds_gpio = {
404static struct gpio_keys_button gpio_buttons[] = { 424static struct gpio_keys_button gpio_buttons[] = {
405 { 425 {
406 .code = BTN_EXTRA, 426 .code = BTN_EXTRA,
407 .gpio = 7, 427 /* Dynamically assigned depending on board */
428 .gpio = -EINVAL,
408 .desc = "user", 429 .desc = "user",
409 .wakeup = 1, 430 .wakeup = 1,
410 }, 431 },
@@ -468,8 +489,8 @@ static void __init beagle_opp_init(void)
468 return; 489 return;
469 } 490 }
470 491
471 /* Custom OPP enabled for XM */ 492 /* Custom OPP enabled for all xM versions */
472 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { 493 if (cpu_is_omap3630()) {
473 struct omap_hwmod *mh = omap_hwmod_lookup("mpu"); 494 struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
474 struct omap_hwmod *dh = omap_hwmod_lookup("iva"); 495 struct omap_hwmod *dh = omap_hwmod_lookup("iva");
475 struct device *dev; 496 struct device *dev;
@@ -509,6 +530,9 @@ static void __init omap3_beagle_init(void)
509 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 530 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
510 omap3_beagle_init_rev(); 531 omap3_beagle_init_rev();
511 omap3_beagle_i2c_init(); 532 omap3_beagle_i2c_init();
533
534 gpio_buttons[0].gpio = beagle_config.usr_button_gpio;
535
512 platform_add_devices(omap3_beagle_devices, 536 platform_add_devices(omap3_beagle_devices,
513 ARRAY_SIZE(omap3_beagle_devices)); 537 ARRAY_SIZE(omap3_beagle_devices));
514 omap_display_init(&beagle_dss_data); 538 omap_display_init(&beagle_dss_data);
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index bdb24db36004..0c9e0f28ed07 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -39,6 +39,7 @@
39#include <sound/tpa6130a2-plat.h> 39#include <sound/tpa6130a2-plat.h>
40#include <media/radio-si4713.h> 40#include <media/radio-si4713.h>
41#include <media/si4713.h> 41#include <media/si4713.h>
42#include <linux/leds-lp5523.h>
42 43
43#include <../drivers/staging/iio/light/tsl2563.h> 44#include <../drivers/staging/iio/light/tsl2563.h>
44 45
@@ -53,6 +54,7 @@
53#define RX51_WL1251_IRQ_GPIO 42 54#define RX51_WL1251_IRQ_GPIO 42
54#define RX51_FMTX_RESET_GPIO 163 55#define RX51_FMTX_RESET_GPIO 163
55#define RX51_FMTX_IRQ 53 56#define RX51_FMTX_IRQ 53
57#define RX51_LP5523_CHIP_EN_GPIO 41
56 58
57#define RX51_USB_TRANSCEIVER_RST_GPIO 67 59#define RX51_USB_TRANSCEIVER_RST_GPIO 67
58 60
@@ -71,6 +73,64 @@ static struct tsl2563_platform_data rx51_tsl2563_platform_data = {
71}; 73};
72#endif 74#endif
73 75
76#if defined(CONFIG_LEDS_LP5523) || defined(CONFIG_LEDS_LP5523_MODULE)
77static struct lp5523_led_config rx51_lp5523_led_config[] = {
78 {
79 .chan_nr = 0,
80 .led_current = 50,
81 }, {
82 .chan_nr = 1,
83 .led_current = 50,
84 }, {
85 .chan_nr = 2,
86 .led_current = 50,
87 }, {
88 .chan_nr = 3,
89 .led_current = 50,
90 }, {
91 .chan_nr = 4,
92 .led_current = 50,
93 }, {
94 .chan_nr = 5,
95 .led_current = 50,
96 }, {
97 .chan_nr = 6,
98 .led_current = 50,
99 }, {
100 .chan_nr = 7,
101 .led_current = 50,
102 }, {
103 .chan_nr = 8,
104 .led_current = 50,
105 }
106};
107
108static int rx51_lp5523_setup(void)
109{
110 return gpio_request_one(RX51_LP5523_CHIP_EN_GPIO, GPIOF_DIR_OUT,
111 "lp5523_enable");
112}
113
114static void rx51_lp5523_release(void)
115{
116 gpio_free(RX51_LP5523_CHIP_EN_GPIO);
117}
118
119static void rx51_lp5523_enable(bool state)
120{
121 gpio_set_value(RX51_LP5523_CHIP_EN_GPIO, !!state);
122}
123
124static struct lp5523_platform_data rx51_lp5523_platform_data = {
125 .led_config = rx51_lp5523_led_config,
126 .num_channels = ARRAY_SIZE(rx51_lp5523_led_config),
127 .clock_mode = LP5523_CLOCK_AUTO,
128 .setup_resources = rx51_lp5523_setup,
129 .release_resources = rx51_lp5523_release,
130 .enable = rx51_lp5523_enable,
131};
132#endif
133
74static struct omap2_mcspi_device_config wl1251_mcspi_config = { 134static struct omap2_mcspi_device_config wl1251_mcspi_config = {
75 .turbo_mode = 0, 135 .turbo_mode = 0,
76 .single_channel = 1, 136 .single_channel = 1,
@@ -495,6 +555,32 @@ static struct regulator_init_data rx51_vmmc2 = {
495 .consumer_supplies = rx51_vmmc2_supplies, 555 .consumer_supplies = rx51_vmmc2_supplies,
496}; 556};
497 557
558static struct regulator_init_data rx51_vpll1 = {
559 .constraints = {
560 .name = "VPLL",
561 .min_uV = 1800000,
562 .max_uV = 1800000,
563 .apply_uV = true,
564 .always_on = true,
565 .valid_modes_mask = REGULATOR_MODE_NORMAL
566 | REGULATOR_MODE_STANDBY,
567 .valid_ops_mask = REGULATOR_CHANGE_MODE,
568 },
569};
570
571static struct regulator_init_data rx51_vpll2 = {
572 .constraints = {
573 .name = "VSDI_CSI",
574 .min_uV = 1800000,
575 .max_uV = 1800000,
576 .apply_uV = true,
577 .always_on = true,
578 .valid_modes_mask = REGULATOR_MODE_NORMAL
579 | REGULATOR_MODE_STANDBY,
580 .valid_ops_mask = REGULATOR_CHANGE_MODE,
581 },
582};
583
498static struct regulator_init_data rx51_vsim = { 584static struct regulator_init_data rx51_vsim = {
499 .constraints = { 585 .constraints = {
500 .name = "VMMC2_IO_18", 586 .name = "VMMC2_IO_18",
@@ -524,6 +610,43 @@ static struct regulator_init_data rx51_vio = {
524 .consumer_supplies = rx51_vio_supplies, 610 .consumer_supplies = rx51_vio_supplies,
525}; 611};
526 612
613static struct regulator_init_data rx51_vintana1 = {
614 .constraints = {
615 .name = "VINTANA1",
616 .min_uV = 1500000,
617 .max_uV = 1500000,
618 .always_on = true,
619 .valid_modes_mask = REGULATOR_MODE_NORMAL
620 | REGULATOR_MODE_STANDBY,
621 .valid_ops_mask = REGULATOR_CHANGE_MODE,
622 },
623};
624
625static struct regulator_init_data rx51_vintana2 = {
626 .constraints = {
627 .name = "VINTANA2",
628 .min_uV = 2750000,
629 .max_uV = 2750000,
630 .apply_uV = true,
631 .always_on = true,
632 .valid_modes_mask = REGULATOR_MODE_NORMAL
633 | REGULATOR_MODE_STANDBY,
634 .valid_ops_mask = REGULATOR_CHANGE_MODE,
635 },
636};
637
638static struct regulator_init_data rx51_vintdig = {
639 .constraints = {
640 .name = "VINTDIG",
641 .min_uV = 1500000,
642 .max_uV = 1500000,
643 .always_on = true,
644 .valid_modes_mask = REGULATOR_MODE_NORMAL
645 | REGULATOR_MODE_STANDBY,
646 .valid_ops_mask = REGULATOR_CHANGE_MODE,
647 },
648};
649
527static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = { 650static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = {
528 .gpio_reset = RX51_FMTX_RESET_GPIO, 651 .gpio_reset = RX51_FMTX_RESET_GPIO,
529}; 652};
@@ -761,7 +884,12 @@ static struct twl4030_platform_data rx51_twldata __initdata = {
761 .vaux2 = &rx51_vaux2, 884 .vaux2 = &rx51_vaux2,
762 .vaux4 = &rx51_vaux4, 885 .vaux4 = &rx51_vaux4,
763 .vmmc1 = &rx51_vmmc1, 886 .vmmc1 = &rx51_vmmc1,
887 .vpll1 = &rx51_vpll1,
888 .vpll2 = &rx51_vpll2,
764 .vsim = &rx51_vsim, 889 .vsim = &rx51_vsim,
890 .vintana1 = &rx51_vintana1,
891 .vintana2 = &rx51_vintana2,
892 .vintdig = &rx51_vintdig,
765 .vio = &rx51_vio, 893 .vio = &rx51_vio,
766}; 894};
767 895
@@ -800,6 +928,12 @@ static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
800 .platform_data = &rx51_tsl2563_platform_data, 928 .platform_data = &rx51_tsl2563_platform_data,
801 }, 929 },
802#endif 930#endif
931#if defined(CONFIG_LEDS_LP5523) || defined(CONFIG_LEDS_LP5523_MODULE)
932 {
933 I2C_BOARD_INFO("lp5523", 0x32),
934 .platform_data = &rx51_lp5523_platform_data,
935 },
936#endif
803 { 937 {
804 I2C_BOARD_INFO("tpa6130a2", 0x60), 938 I2C_BOARD_INFO("tpa6130a2", 0x60),
805 .platform_data = &rx51_tpa6130a2_data, 939 .platform_data = &rx51_tpa6130a2_data,
@@ -950,6 +1084,7 @@ error:
950void __init rx51_peripherals_init(void) 1084void __init rx51_peripherals_init(void)
951{ 1085{
952 rx51_i2c_init(); 1086 rx51_i2c_init();
1087 regulator_has_full_constraints();
953 gpmc_onenand_init(board_onenand_data); 1088 gpmc_onenand_init(board_onenand_data);
954 board_smc91x_init(); 1089 board_smc91x_init();
955 rx51_add_gpio_keys(); 1090 rx51_add_gpio_keys();
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index 5b8ca680ed93..1077ad663f93 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -230,7 +230,7 @@ struct omap_device_pm_latency omap_keyboard_latency[] = {
230}; 230};
231 231
232int __init omap4_keyboard_init(struct omap4_keypad_platform_data 232int __init omap4_keyboard_init(struct omap4_keypad_platform_data
233 *sdp4430_keypad_data) 233 *sdp4430_keypad_data, struct omap_board_data *bdata)
234{ 234{
235 struct omap_device *od; 235 struct omap_device *od;
236 struct omap_hwmod *oh; 236 struct omap_hwmod *oh;
@@ -257,6 +257,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data
257 name, oh->name); 257 name, oh->name);
258 return PTR_ERR(od); 258 return PTR_ERR(od);
259 } 259 }
260 oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt);
260 261
261 return 0; 262 return 0;
262} 263}