diff options
Diffstat (limited to 'arch/arm/mach-omap2/board-omap3beagle.c')
-rw-r--r-- | arch/arm/mach-omap2/board-omap3beagle.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index baa79674e9d5..9e5ada01b5fa 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -38,7 +38,9 @@ | |||
38 | #include <mach/common.h> | 38 | #include <mach/common.h> |
39 | #include <mach/gpmc.h> | 39 | #include <mach/gpmc.h> |
40 | #include <mach/nand.h> | 40 | #include <mach/nand.h> |
41 | #include <mach/mux.h> | ||
41 | 42 | ||
43 | #include "mmc-twl4030.h" | ||
42 | 44 | ||
43 | #define GPMC_CS0_BASE 0x60 | 45 | #define GPMC_CS0_BASE 0x60 |
44 | #define GPMC_CS_SIZE 0x30 | 46 | #define GPMC_CS_SIZE 0x30 |
@@ -103,6 +105,78 @@ static struct omap_uart_config omap3_beagle_uart_config __initdata = { | |||
103 | .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), | 105 | .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), |
104 | }; | 106 | }; |
105 | 107 | ||
108 | static struct twl4030_hsmmc_info mmc[] = { | ||
109 | { | ||
110 | .mmc = 1, | ||
111 | .wires = 8, | ||
112 | .gpio_wp = 29, | ||
113 | }, | ||
114 | {} /* Terminator */ | ||
115 | }; | ||
116 | |||
117 | static struct gpio_led gpio_leds[]; | ||
118 | |||
119 | static int beagle_twl_gpio_setup(struct device *dev, | ||
120 | unsigned gpio, unsigned ngpio) | ||
121 | { | ||
122 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | ||
123 | |||
124 | /* REVISIT: need ehci-omap hooks for external VBUS | ||
125 | * power switch and overcurrent detect | ||
126 | */ | ||
127 | |||
128 | gpio_request(gpio + 1, "EHCI_nOC"); | ||
129 | gpio_direction_input(gpio + 1); | ||
130 | |||
131 | /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */ | ||
132 | gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); | ||
133 | gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1); | ||
134 | |||
135 | /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ | ||
136 | gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | ||
137 | |||
138 | return 0; | ||
139 | } | ||
140 | |||
141 | static struct twl4030_gpio_platform_data beagle_gpio_data = { | ||
142 | .gpio_base = OMAP_MAX_GPIO_LINES, | ||
143 | .irq_base = TWL4030_GPIO_IRQ_BASE, | ||
144 | .irq_end = TWL4030_GPIO_IRQ_END, | ||
145 | .use_leds = true, | ||
146 | .pullups = BIT(1), | ||
147 | .pulldowns = BIT(2) | BIT(6) | BIT(7) | BIT(8) | BIT(13) | ||
148 | | BIT(15) | BIT(16) | BIT(17), | ||
149 | .setup = beagle_twl_gpio_setup, | ||
150 | }; | ||
151 | |||
152 | static struct twl4030_platform_data beagle_twldata = { | ||
153 | .irq_base = TWL4030_IRQ_BASE, | ||
154 | .irq_end = TWL4030_IRQ_END, | ||
155 | |||
156 | /* platform_data for children goes here */ | ||
157 | .gpio = &beagle_gpio_data, | ||
158 | }; | ||
159 | |||
160 | static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = { | ||
161 | { | ||
162 | I2C_BOARD_INFO("twl4030", 0x48), | ||
163 | .flags = I2C_CLIENT_WAKE, | ||
164 | .irq = INT_34XX_SYS_NIRQ, | ||
165 | .platform_data = &beagle_twldata, | ||
166 | }, | ||
167 | }; | ||
168 | |||
169 | static int __init omap3_beagle_i2c_init(void) | ||
170 | { | ||
171 | omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo, | ||
172 | ARRAY_SIZE(beagle_i2c_boardinfo)); | ||
173 | #ifdef CONFIG_I2C2_OMAP_BEAGLE | ||
174 | omap_register_i2c_bus(2, 400, NULL, 0); | ||
175 | #endif | ||
176 | omap_register_i2c_bus(3, 400, NULL, 0); | ||
177 | return 0; | ||
178 | } | ||
179 | |||
106 | static void __init omap3_beagle_init_irq(void) | 180 | static void __init omap3_beagle_init_irq(void) |
107 | { | 181 | { |
108 | omap2_init_common_hw(); | 182 | omap2_init_common_hw(); |
@@ -130,6 +204,11 @@ static struct gpio_led gpio_leds[] = { | |||
130 | .default_trigger = "mmc0", | 204 | .default_trigger = "mmc0", |
131 | .gpio = 149, | 205 | .gpio = 149, |
132 | }, | 206 | }, |
207 | { | ||
208 | .name = "beagleboard::pmu_stat", | ||
209 | .gpio = -EINVAL, /* gets replaced */ | ||
210 | .active_low = true, | ||
211 | }, | ||
133 | }; | 212 | }; |
134 | 213 | ||
135 | static struct gpio_led_platform_data gpio_led_info = { | 214 | static struct gpio_led_platform_data gpio_led_info = { |
@@ -218,11 +297,22 @@ static void __init omap3beagle_flash_init(void) | |||
218 | 297 | ||
219 | static void __init omap3_beagle_init(void) | 298 | static void __init omap3_beagle_init(void) |
220 | { | 299 | { |
300 | omap3_beagle_i2c_init(); | ||
221 | platform_add_devices(omap3_beagle_devices, | 301 | platform_add_devices(omap3_beagle_devices, |
222 | ARRAY_SIZE(omap3_beagle_devices)); | 302 | ARRAY_SIZE(omap3_beagle_devices)); |
223 | omap_board_config = omap3_beagle_config; | 303 | omap_board_config = omap3_beagle_config; |
224 | omap_board_config_size = ARRAY_SIZE(omap3_beagle_config); | 304 | omap_board_config_size = ARRAY_SIZE(omap3_beagle_config); |
225 | omap_serial_init(); | 305 | omap_serial_init(); |
306 | |||
307 | omap_cfg_reg(AH8_34XX_GPIO29); | ||
308 | mmc[0].gpio_cd = gpio + 0; | ||
309 | twl4030_mmc_init(mmc); | ||
310 | |||
311 | omap_cfg_reg(J25_34XX_GPIO170); | ||
312 | gpio_request(170, "DVI_nPD"); | ||
313 | /* REVISIT leave DVI powered down until it's needed ... */ | ||
314 | gpio_direction_output(170, true); | ||
315 | |||
226 | omap3beagle_flash_init(); | 316 | omap3beagle_flash_init(); |
227 | } | 317 | } |
228 | 318 | ||