1 /*
2  * Board support file for OMAP4430 based PandaBoard.
3  *
4  * Copyright (C) 2010 Texas Instruments
5  *
6  * Author: David Anders <x0132446@ti.com>
7  *
8  * Based on mach-omap2/board-4430sdp.c
9  *
10  * Author: Santosh Shilimkar <santosh.shilimkar@ti.com>
11  *
12  * Based on mach-omap2/board-3430sdp.c
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License version 2 as
16  * published by the Free Software Foundation.
17  */
18 
19 #include <linux/kernel.h>
20 #include <linux/init.h>
21 #include <linux/platform_device.h>
22 #include <linux/clk.h>
23 #include <linux/io.h>
24 #include <linux/leds.h>
25 #include <linux/gpio.h>
26 #include <linux/usb/otg.h>
27 #include <linux/i2c/twl.h>
28 #include <linux/regulator/machine.h>
29 #include <linux/regulator/fixed.h>
30 #include <linux/wl12xx.h>
31 
32 #include <mach/hardware.h>
33 #include <asm/hardware/gic.h>
34 #include <asm/mach-types.h>
35 #include <asm/mach/arch.h>
36 #include <asm/mach/map.h>
37 #include <video/omapdss.h>
38 
39 #include <plat/board.h>
40 #include "common.h"
41 #include <plat/usb.h>
42 #include <plat/mmc.h>
43 #include <video/omap-panel-dvi.h>
44 
45 #include "hsmmc.h"
46 #include "control.h"
47 #include "mux.h"
48 #include "common-board-devices.h"
49 
50 #define GPIO_HUB_POWER		1
51 #define GPIO_HUB_NRESET		62
52 #define GPIO_WIFI_PMENA		43
53 #define GPIO_WIFI_IRQ		53
54 #define HDMI_GPIO_CT_CP_HPD 60 /* HPD mode enable/disable */
55 #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
56 #define HDMI_GPIO_HPD  63 /* Hotplug detect */
57 
58 /* wl127x BT, FM, GPS connectivity chip */
59 static int wl1271_gpios[] = {46, -1, -1};
60 static struct platform_device wl1271_device = {
61 	.name	= "kim",
62 	.id	= -1,
63 	.dev	= {
64 		.platform_data	= &wl1271_gpios,
65 	},
66 };
67 
68 static struct gpio_led gpio_leds[] = {
69 	{
70 		.name			= "pandaboard::status1",
71 		.default_trigger	= "heartbeat",
72 		.gpio			= 7,
73 	},
74 	{
75 		.name			= "pandaboard::status2",
76 		.default_trigger	= "mmc0",
77 		.gpio			= 8,
78 	},
79 };
80 
81 static struct gpio_led_platform_data gpio_led_info = {
82 	.leds		= gpio_leds,
83 	.num_leds	= ARRAY_SIZE(gpio_leds),
84 };
85 
86 static struct platform_device leds_gpio = {
87 	.name	= "leds-gpio",
88 	.id	= -1,
89 	.dev	= {
90 		.platform_data	= &gpio_led_info,
91 	},
92 };
93 
94 static struct platform_device *panda_devices[] __initdata = {
95 	&leds_gpio,
96 	&wl1271_device,
97 };
98 
99 static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
100 	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
101 	.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
102 	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
103 	.phy_reset  = false,
104 	.reset_gpio_port[0]  = -EINVAL,
105 	.reset_gpio_port[1]  = -EINVAL,
106 	.reset_gpio_port[2]  = -EINVAL
107 };
108 
109 static struct gpio panda_ehci_gpios[] __initdata = {
110 	{ GPIO_HUB_POWER,	GPIOF_OUT_INIT_LOW,  "hub_power"  },
111 	{ GPIO_HUB_NRESET,	GPIOF_OUT_INIT_LOW,  "hub_nreset" },
112 };
113 
omap4_ehci_init(void)114 static void __init omap4_ehci_init(void)
115 {
116 	int ret;
117 	struct clk *phy_ref_clk;
118 
119 	/* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */
120 	phy_ref_clk = clk_get(NULL, "auxclk3_ck");
121 	if (IS_ERR(phy_ref_clk)) {
122 		pr_err("Cannot request auxclk3\n");
123 		return;
124 	}
125 	clk_set_rate(phy_ref_clk, 19200000);
126 	clk_enable(phy_ref_clk);
127 
128 	/* disable the power to the usb hub prior to init and reset phy+hub */
129 	ret = gpio_request_array(panda_ehci_gpios,
130 				 ARRAY_SIZE(panda_ehci_gpios));
131 	if (ret) {
132 		pr_err("Unable to initialize EHCI power/reset\n");
133 		return;
134 	}
135 
136 	gpio_export(GPIO_HUB_POWER, 0);
137 	gpio_export(GPIO_HUB_NRESET, 0);
138 	gpio_set_value(GPIO_HUB_NRESET, 1);
139 
140 	usbhs_init(&usbhs_bdata);
141 
142 	/* enable power to hub */
143 	gpio_set_value(GPIO_HUB_POWER, 1);
144 }
145 
146 static struct omap_musb_board_data musb_board_data = {
147 	.interface_type		= MUSB_INTERFACE_UTMI,
148 	.mode			= MUSB_OTG,
149 	.power			= 100,
150 };
151 
152 static struct omap2_hsmmc_info mmc[] = {
153 	{
154 		.mmc		= 1,
155 		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
156 		.gpio_wp	= -EINVAL,
157 		.gpio_cd	= -EINVAL,
158 	},
159 	{
160 		.name		= "wl1271",
161 		.mmc		= 5,
162 		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
163 		.gpio_wp	= -EINVAL,
164 		.gpio_cd	= -EINVAL,
165 		.ocr_mask	= MMC_VDD_165_195,
166 		.nonremovable	= true,
167 	},
168 	{}	/* Terminator */
169 };
170 
171 static struct regulator_consumer_supply omap4_panda_vmmc5_supply[] = {
172 	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.4"),
173 };
174 
175 static struct regulator_init_data panda_vmmc5 = {
176 	.constraints = {
177 		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
178 	},
179 	.num_consumer_supplies = ARRAY_SIZE(omap4_panda_vmmc5_supply),
180 	.consumer_supplies = omap4_panda_vmmc5_supply,
181 };
182 
183 static struct fixed_voltage_config panda_vwlan = {
184 	.supply_name = "vwl1271",
185 	.microvolts = 1800000, /* 1.8V */
186 	.gpio = GPIO_WIFI_PMENA,
187 	.startup_delay = 70000, /* 70msec */
188 	.enable_high = 1,
189 	.enabled_at_boot = 0,
190 	.init_data = &panda_vmmc5,
191 };
192 
193 static struct platform_device omap_vwlan_device = {
194 	.name		= "reg-fixed-voltage",
195 	.id		= 1,
196 	.dev = {
197 		.platform_data = &panda_vwlan,
198 	},
199 };
200 
201 struct wl12xx_platform_data omap_panda_wlan_data  __initdata = {
202 	.irq = OMAP_GPIO_IRQ(GPIO_WIFI_IRQ),
203 	/* PANDA ref clock is 38.4 MHz */
204 	.board_ref_clock = 2,
205 };
206 
omap4_twl6030_hsmmc_late_init(struct device * dev)207 static int omap4_twl6030_hsmmc_late_init(struct device *dev)
208 {
209 	int ret = 0;
210 	struct platform_device *pdev = container_of(dev,
211 				struct platform_device, dev);
212 	struct omap_mmc_platform_data *pdata = dev->platform_data;
213 
214 	if (!pdata) {
215 		dev_err(dev, "%s: NULL platform data\n", __func__);
216 		return -EINVAL;
217 	}
218 	/* Setting MMC1 Card detect Irq */
219 	if (pdev->id == 0) {
220 		ret = twl6030_mmc_card_detect_config();
221 		 if (ret)
222 			dev_err(dev, "%s: Error card detect config(%d)\n",
223 				__func__, ret);
224 		 else
225 			pdata->slots[0].card_detect = twl6030_mmc_card_detect;
226 	}
227 	return ret;
228 }
229 
omap4_twl6030_hsmmc_set_late_init(struct device * dev)230 static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev)
231 {
232 	struct omap_mmc_platform_data *pdata;
233 
234 	/* dev can be null if CONFIG_MMC_OMAP_HS is not set */
235 	if (!dev) {
236 		pr_err("Failed omap4_twl6030_hsmmc_set_late_init\n");
237 		return;
238 	}
239 	pdata = dev->platform_data;
240 
241 	pdata->init =	omap4_twl6030_hsmmc_late_init;
242 }
243 
omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info * controllers)244 static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
245 {
246 	struct omap2_hsmmc_info *c;
247 
248 	omap2_hsmmc_init(controllers);
249 	for (c = controllers; c->mmc; c++)
250 		omap4_twl6030_hsmmc_set_late_init(c->dev);
251 
252 	return 0;
253 }
254 
255 /* Panda board uses the common PMIC configuration */
256 static struct twl4030_platform_data omap4_panda_twldata;
257 
258 /*
259  * Display monitor features are burnt in their EEPROM as EDID data. The EEPROM
260  * is connected as I2C slave device, and can be accessed at address 0x50
261  */
262 static struct i2c_board_info __initdata panda_i2c_eeprom[] = {
263 	{
264 		I2C_BOARD_INFO("eeprom", 0x50),
265 	},
266 };
267 
omap4_panda_i2c_init(void)268 static int __init omap4_panda_i2c_init(void)
269 {
270 	omap4_pmic_get_config(&omap4_panda_twldata, TWL_COMMON_PDATA_USB,
271 			TWL_COMMON_REGULATOR_VDAC |
272 			TWL_COMMON_REGULATOR_VAUX2 |
273 			TWL_COMMON_REGULATOR_VAUX3 |
274 			TWL_COMMON_REGULATOR_VMMC |
275 			TWL_COMMON_REGULATOR_VPP |
276 			TWL_COMMON_REGULATOR_VANA |
277 			TWL_COMMON_REGULATOR_VCXIO |
278 			TWL_COMMON_REGULATOR_VUSB |
279 			TWL_COMMON_REGULATOR_CLK32KG);
280 	omap4_pmic_init("twl6030", &omap4_panda_twldata);
281 	omap_register_i2c_bus(2, 400, NULL, 0);
282 	/*
283 	 * Bus 3 is attached to the DVI port where devices like the pico DLP
284 	 * projector don't work reliably with 400kHz
285 	 */
286 	omap_register_i2c_bus(3, 100, panda_i2c_eeprom,
287 					ARRAY_SIZE(panda_i2c_eeprom));
288 	omap_register_i2c_bus(4, 400, NULL, 0);
289 	return 0;
290 }
291 
292 #ifdef CONFIG_OMAP_MUX
293 static struct omap_board_mux board_mux[] __initdata = {
294 	/* WLAN IRQ - GPIO 53 */
295 	OMAP4_MUX(GPMC_NCS3, OMAP_MUX_MODE3 | OMAP_PIN_INPUT),
296 	/* WLAN POWER ENABLE - GPIO 43 */
297 	OMAP4_MUX(GPMC_A19, OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT),
298 	/* WLAN SDIO: MMC5 CMD */
299 	OMAP4_MUX(SDMMC5_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
300 	/* WLAN SDIO: MMC5 CLK */
301 	OMAP4_MUX(SDMMC5_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
302 	/* WLAN SDIO: MMC5 DAT[0-3] */
303 	OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
304 	OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
305 	OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
306 	OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
307 	/* gpio 0 - TFP410 PD */
308 	OMAP4_MUX(KPD_COL1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
309 	/* dispc2_data23 */
310 	OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
311 	/* dispc2_data22 */
312 	OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
313 	/* dispc2_data21 */
314 	OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
315 	/* dispc2_data20 */
316 	OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
317 	/* dispc2_data19 */
318 	OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
319 	/* dispc2_data18 */
320 	OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
321 	/* dispc2_data15 */
322 	OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
323 	/* dispc2_data14 */
324 	OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
325 	/* dispc2_data13 */
326 	OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
327 	/* dispc2_data12 */
328 	OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
329 	/* dispc2_data11 */
330 	OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
331 	/* dispc2_data10 */
332 	OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
333 	/* dispc2_data9 */
334 	OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
335 	/* dispc2_data16 */
336 	OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
337 	/* dispc2_data17 */
338 	OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
339 	/* dispc2_hsync */
340 	OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
341 	/* dispc2_pclk */
342 	OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
343 	/* dispc2_vsync */
344 	OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
345 	/* dispc2_de */
346 	OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
347 	/* dispc2_data8 */
348 	OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
349 	/* dispc2_data7 */
350 	OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
351 	/* dispc2_data6 */
352 	OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
353 	/* dispc2_data5 */
354 	OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
355 	/* dispc2_data4 */
356 	OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
357 	/* dispc2_data3 */
358 	OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
359 	/* dispc2_data2 */
360 	OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
361 	/* dispc2_data1 */
362 	OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
363 	/* dispc2_data0 */
364 	OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
365 	{ .reg_offset = OMAP_MUX_TERMINATOR },
366 };
367 
368 #else
369 #define board_mux	NULL
370 #endif
371 
372 /* Display DVI */
373 #define PANDA_DVI_TFP410_POWER_DOWN_GPIO	0
374 
omap4_panda_enable_dvi(struct omap_dss_device * dssdev)375 static int omap4_panda_enable_dvi(struct omap_dss_device *dssdev)
376 {
377 	gpio_set_value(dssdev->reset_gpio, 1);
378 	return 0;
379 }
380 
omap4_panda_disable_dvi(struct omap_dss_device * dssdev)381 static void omap4_panda_disable_dvi(struct omap_dss_device *dssdev)
382 {
383 	gpio_set_value(dssdev->reset_gpio, 0);
384 }
385 
386 /* Using generic display panel */
387 static struct panel_dvi_platform_data omap4_dvi_panel = {
388 	.platform_enable	= omap4_panda_enable_dvi,
389 	.platform_disable	= omap4_panda_disable_dvi,
390 	.i2c_bus_num = 3,
391 };
392 
393 struct omap_dss_device omap4_panda_dvi_device = {
394 	.type			= OMAP_DISPLAY_TYPE_DPI,
395 	.name			= "dvi",
396 	.driver_name		= "dvi",
397 	.data			= &omap4_dvi_panel,
398 	.phy.dpi.data_lines	= 24,
399 	.reset_gpio		= PANDA_DVI_TFP410_POWER_DOWN_GPIO,
400 	.channel		= OMAP_DSS_CHANNEL_LCD2,
401 };
402 
omap4_panda_dvi_init(void)403 int __init omap4_panda_dvi_init(void)
404 {
405 	int r;
406 
407 	/* Requesting TFP410 DVI GPIO and disabling it, at bootup */
408 	r = gpio_request_one(omap4_panda_dvi_device.reset_gpio,
409 				GPIOF_OUT_INIT_LOW, "DVI PD");
410 	if (r)
411 		pr_err("Failed to get DVI powerdown GPIO\n");
412 
413 	return r;
414 }
415 
416 static struct gpio panda_hdmi_gpios[] = {
417 	{ HDMI_GPIO_CT_CP_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ct_cp_hpd" },
418 	{ HDMI_GPIO_LS_OE,	GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
419 	{ HDMI_GPIO_HPD, GPIOF_DIR_IN, "hdmi_gpio_hpd" },
420 };
421 
omap4_panda_panel_enable_hdmi(struct omap_dss_device * dssdev)422 static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
423 {
424 	int status;
425 
426 	status = gpio_request_array(panda_hdmi_gpios,
427 				    ARRAY_SIZE(panda_hdmi_gpios));
428 	if (status)
429 		pr_err("Cannot request HDMI GPIOs\n");
430 
431 	return status;
432 }
433 
omap4_panda_panel_disable_hdmi(struct omap_dss_device * dssdev)434 static void omap4_panda_panel_disable_hdmi(struct omap_dss_device *dssdev)
435 {
436 	gpio_free_array(panda_hdmi_gpios, ARRAY_SIZE(panda_hdmi_gpios));
437 }
438 
439 static struct omap_dss_hdmi_data omap4_panda_hdmi_data = {
440 	.hpd_gpio = HDMI_GPIO_HPD,
441 };
442 
443 static struct omap_dss_device  omap4_panda_hdmi_device = {
444 	.name = "hdmi",
445 	.driver_name = "hdmi_panel",
446 	.type = OMAP_DISPLAY_TYPE_HDMI,
447 	.platform_enable = omap4_panda_panel_enable_hdmi,
448 	.platform_disable = omap4_panda_panel_disable_hdmi,
449 	.channel = OMAP_DSS_CHANNEL_DIGIT,
450 	.data = &omap4_panda_hdmi_data,
451 };
452 
453 static struct omap_dss_device *omap4_panda_dss_devices[] = {
454 	&omap4_panda_dvi_device,
455 	&omap4_panda_hdmi_device,
456 };
457 
458 static struct omap_dss_board_info omap4_panda_dss_data = {
459 	.num_devices	= ARRAY_SIZE(omap4_panda_dss_devices),
460 	.devices	= omap4_panda_dss_devices,
461 	.default_device	= &omap4_panda_dvi_device,
462 };
463 
omap4_panda_display_init(void)464 void omap4_panda_display_init(void)
465 {
466 	int r;
467 
468 	r = omap4_panda_dvi_init();
469 	if (r)
470 		pr_err("error initializing panda DVI\n");
471 
472 	omap_display_init(&omap4_panda_dss_data);
473 
474 	/*
475 	 * OMAP4460SDP/Blaze and OMAP4430 ES2.3 SDP/Blaze boards and
476 	 * later have external pull up on the HDMI I2C lines
477 	 */
478 	if (cpu_is_omap446x() || omap_rev() > OMAP4430_REV_ES2_2)
479 		omap_hdmi_init(OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP);
480 	else
481 		omap_hdmi_init(0);
482 
483 	omap_mux_init_gpio(HDMI_GPIO_LS_OE, OMAP_PIN_OUTPUT);
484 	omap_mux_init_gpio(HDMI_GPIO_CT_CP_HPD, OMAP_PIN_OUTPUT);
485 	omap_mux_init_gpio(HDMI_GPIO_HPD, OMAP_PIN_INPUT_PULLDOWN);
486 }
487 
omap4_panda_init(void)488 static void __init omap4_panda_init(void)
489 {
490 	int package = OMAP_PACKAGE_CBS;
491 	int ret;
492 
493 	if (omap_rev() == OMAP4430_REV_ES1_0)
494 		package = OMAP_PACKAGE_CBL;
495 	omap4_mux_init(board_mux, NULL, package);
496 
497 	ret = wl12xx_set_platform_data(&omap_panda_wlan_data);
498 	if (ret)
499 		pr_err("error setting wl12xx data: %d\n", ret);
500 
501 	omap4_panda_i2c_init();
502 	platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
503 	platform_device_register(&omap_vwlan_device);
504 	omap_serial_init();
505 	omap_sdrc_init(NULL, NULL);
506 	omap4_twl6030_hsmmc_init(mmc);
507 	omap4_ehci_init();
508 	usb_musb_init(&musb_board_data);
509 	omap4_panda_display_init();
510 }
511 
512 MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
513 	/* Maintainer: David Anders - Texas Instruments Inc */
514 	.atag_offset	= 0x100,
515 	.reserve	= omap_reserve,
516 	.map_io		= omap4_map_io,
517 	.init_early	= omap4430_init_early,
518 	.init_irq	= gic_init_irq,
519 	.handle_irq	= gic_handle_irq,
520 	.init_machine	= omap4_panda_init,
521 	.timer		= &omap4_timer,
522 	.restart	= omap_prcm_restart,
523 MACHINE_END
524