Path: blob/master/arch/arm/mach-omap2/board-igep0020.c
10817 views
/*1* Copyright (C) 2009 Integration Software and Electronic Engineering.2*3* Modified from mach-omap2/board-generic.c4*5* This program is free software; you can redistribute it and/or modify6* it under the terms of the GNU General Public License version 2 as7* published by the Free Software Foundation.8*/910#include <linux/kernel.h>11#include <linux/init.h>12#include <linux/platform_device.h>13#include <linux/delay.h>14#include <linux/err.h>15#include <linux/clk.h>16#include <linux/io.h>17#include <linux/gpio.h>18#include <linux/interrupt.h>19#include <linux/input.h>2021#include <linux/regulator/machine.h>22#include <linux/regulator/fixed.h>23#include <linux/i2c/twl.h>24#include <linux/mmc/host.h>2526#include <asm/mach-types.h>27#include <asm/mach/arch.h>2829#include <plat/board.h>30#include <plat/common.h>31#include <plat/gpmc.h>32#include <plat/usb.h>33#include <video/omapdss.h>34#include <video/omap-panel-generic-dpi.h>35#include <plat/onenand.h>3637#include "mux.h"38#include "hsmmc.h"39#include "sdram-numonyx-m65kxxxxam.h"40#include "common-board-devices.h"4142#define IGEP2_SMSC911X_CS 543#define IGEP2_SMSC911X_GPIO 17644#define IGEP2_GPIO_USBH_NRESET 2445#define IGEP2_GPIO_LED0_GREEN 2646#define IGEP2_GPIO_LED0_RED 2747#define IGEP2_GPIO_LED1_RED 2848#define IGEP2_GPIO_DVI_PUP 1704950#define IGEP2_RB_GPIO_WIFI_NPD 9451#define IGEP2_RB_GPIO_WIFI_NRESET 9552#define IGEP2_RB_GPIO_BT_NRESET 13753#define IGEP2_RC_GPIO_WIFI_NPD 13854#define IGEP2_RC_GPIO_WIFI_NRESET 13955#define IGEP2_RC_GPIO_BT_NRESET 1375657#define IGEP3_GPIO_LED0_GREEN 5458#define IGEP3_GPIO_LED0_RED 5359#define IGEP3_GPIO_LED1_RED 1660#define IGEP3_GPIO_USBH_NRESET 1836162/*63* IGEP2 Hardware Revision Table64*65* --------------------------------------------------------------------------66* | Id. | Hw Rev. | HW0 (28) | WIFI_NPD | WIFI_NRESET | BT_NRESET |67* --------------------------------------------------------------------------68* | 0 | B | high | gpio94 | gpio95 | - |69* | 0 | B/C (B-compatible) | high | gpio94 | gpio95 | gpio137 |70* | 1 | C | low | gpio138 | gpio139 | gpio137 |71* --------------------------------------------------------------------------72*/7374#define IGEP2_BOARD_HWREV_B 075#define IGEP2_BOARD_HWREV_C 176#define IGEP3_BOARD_HWREV 27778static u8 hwrev;7980static void __init igep2_get_revision(void)81{82u8 ret;8384if (machine_is_igep0030()) {85hwrev = IGEP3_BOARD_HWREV;86return;87}8889omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT);9091if (gpio_request_one(IGEP2_GPIO_LED1_RED, GPIOF_IN, "GPIO_HW0_REV")) {92pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n");93pr_err("IGEP2: Unknown Hardware Revision\n");94return;95}9697ret = gpio_get_value(IGEP2_GPIO_LED1_RED);98if (ret == 0) {99pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");100hwrev = IGEP2_BOARD_HWREV_C;101} else if (ret == 1) {102pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");103hwrev = IGEP2_BOARD_HWREV_B;104} else {105pr_err("IGEP2: Unknown Hardware Revision\n");106hwrev = -1;107}108109gpio_free(IGEP2_GPIO_LED1_RED);110}111112#if defined(CONFIG_MTD_ONENAND_OMAP2) || \113defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)114115#define ONENAND_MAP 0x20000000116117/* NAND04GR4E1A ( x2 Flash built-in COMBO POP MEMORY )118* Since the device is equipped with two DataRAMs, and two-plane NAND119* Flash memory array, these two component enables simultaneous program120* of 4KiB. Plane1 has only even blocks such as block0, block2, block4121* while Plane2 has only odd blocks such as block1, block3, block5.122* So MTD regards it as 4KiB page size and 256KiB block size 64*(2*2048)123*/124125static struct mtd_partition igep_onenand_partitions[] = {126{127.name = "X-Loader",128.offset = 0,129.size = 2 * (64*(2*2048))130},131{132.name = "U-Boot",133.offset = MTDPART_OFS_APPEND,134.size = 6 * (64*(2*2048)),135},136{137.name = "Environment",138.offset = MTDPART_OFS_APPEND,139.size = 2 * (64*(2*2048)),140},141{142.name = "Kernel",143.offset = MTDPART_OFS_APPEND,144.size = 12 * (64*(2*2048)),145},146{147.name = "File System",148.offset = MTDPART_OFS_APPEND,149.size = MTDPART_SIZ_FULL,150},151};152153static struct omap_onenand_platform_data igep_onenand_data = {154.parts = igep_onenand_partitions,155.nr_parts = ARRAY_SIZE(igep_onenand_partitions),156.dma_channel = -1, /* disable DMA in OMAP OneNAND driver */157};158159static struct platform_device igep_onenand_device = {160.name = "omap2-onenand",161.id = -1,162.dev = {163.platform_data = &igep_onenand_data,164},165};166167static void __init igep_flash_init(void)168{169u8 cs = 0;170u8 onenandcs = GPMC_CS_NUM + 1;171172for (cs = 0; cs < GPMC_CS_NUM; cs++) {173u32 ret;174ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);175176/* Check if NAND/oneNAND is configured */177if ((ret & 0xC00) == 0x800)178/* NAND found */179pr_err("IGEP: Unsupported NAND found\n");180else {181ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7);182if ((ret & 0x3F) == (ONENAND_MAP >> 24))183/* ONENAND found */184onenandcs = cs;185}186}187188if (onenandcs > GPMC_CS_NUM) {189pr_err("IGEP: Unable to find configuration in GPMC\n");190return;191}192193igep_onenand_data.cs = onenandcs;194195if (platform_device_register(&igep_onenand_device) < 0)196pr_err("IGEP: Unable to register OneNAND device\n");197}198199#else200static void __init igep_flash_init(void) {}201#endif202203#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)204205#include <linux/smsc911x.h>206#include <plat/gpmc-smsc911x.h>207208static struct omap_smsc911x_platform_data smsc911x_cfg = {209.cs = IGEP2_SMSC911X_CS,210.gpio_irq = IGEP2_SMSC911X_GPIO,211.gpio_reset = -EINVAL,212.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,213};214215static inline void __init igep2_init_smsc911x(void)216{217gpmc_smsc911x_init(&smsc911x_cfg);218}219220#else221static inline void __init igep2_init_smsc911x(void) { }222#endif223224static struct regulator_consumer_supply igep_vmmc1_supply =225REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");226227/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */228static struct regulator_init_data igep_vmmc1 = {229.constraints = {230.min_uV = 1850000,231.max_uV = 3150000,232.valid_modes_mask = REGULATOR_MODE_NORMAL233| REGULATOR_MODE_STANDBY,234.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE235| REGULATOR_CHANGE_MODE236| REGULATOR_CHANGE_STATUS,237},238.num_consumer_supplies = 1,239.consumer_supplies = &igep_vmmc1_supply,240};241242static struct regulator_consumer_supply igep_vio_supply =243REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");244245static struct regulator_init_data igep_vio = {246.constraints = {247.min_uV = 1800000,248.max_uV = 1800000,249.apply_uV = 1,250.valid_modes_mask = REGULATOR_MODE_NORMAL251| REGULATOR_MODE_STANDBY,252.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE253| REGULATOR_CHANGE_MODE254| REGULATOR_CHANGE_STATUS,255},256.num_consumer_supplies = 1,257.consumer_supplies = &igep_vio_supply,258};259260static struct regulator_consumer_supply igep_vmmc2_supply =261REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");262263static struct regulator_init_data igep_vmmc2 = {264.constraints = {265.valid_modes_mask = REGULATOR_MODE_NORMAL,266.always_on = 1,267},268.num_consumer_supplies = 1,269.consumer_supplies = &igep_vmmc2_supply,270};271272static struct fixed_voltage_config igep_vwlan = {273.supply_name = "vwlan",274.microvolts = 3300000,275.gpio = -EINVAL,276.enabled_at_boot = 1,277.init_data = &igep_vmmc2,278};279280static struct platform_device igep_vwlan_device = {281.name = "reg-fixed-voltage",282.id = 0,283.dev = {284.platform_data = &igep_vwlan,285},286};287288static struct omap2_hsmmc_info mmc[] = {289{290.mmc = 1,291.caps = MMC_CAP_4_BIT_DATA,292.gpio_cd = -EINVAL,293.gpio_wp = -EINVAL,294},295#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)296{297.mmc = 2,298.caps = MMC_CAP_4_BIT_DATA,299.gpio_cd = -EINVAL,300.gpio_wp = -EINVAL,301},302#endif303{} /* Terminator */304};305306#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)307#include <linux/leds.h>308309static struct gpio_led igep_gpio_leds[] = {310[0] = {311.name = "gpio-led:red:d0",312.default_trigger = "default-off"313},314[1] = {315.name = "gpio-led:green:d0",316.default_trigger = "default-off",317},318[2] = {319.name = "gpio-led:red:d1",320.default_trigger = "default-off",321},322[3] = {323.name = "gpio-led:green:d1",324.default_trigger = "heartbeat",325.gpio = -EINVAL, /* gets replaced */326.active_low = 1,327},328};329330static struct gpio_led_platform_data igep_led_pdata = {331.leds = igep_gpio_leds,332.num_leds = ARRAY_SIZE(igep_gpio_leds),333};334335static struct platform_device igep_led_device = {336.name = "leds-gpio",337.id = -1,338.dev = {339.platform_data = &igep_led_pdata,340},341};342343static void __init igep_leds_init(void)344{345if (machine_is_igep0020()) {346igep_gpio_leds[0].gpio = IGEP2_GPIO_LED0_RED;347igep_gpio_leds[1].gpio = IGEP2_GPIO_LED0_GREEN;348igep_gpio_leds[2].gpio = IGEP2_GPIO_LED1_RED;349} else {350igep_gpio_leds[0].gpio = IGEP3_GPIO_LED0_RED;351igep_gpio_leds[1].gpio = IGEP3_GPIO_LED0_GREEN;352igep_gpio_leds[2].gpio = IGEP3_GPIO_LED1_RED;353}354355platform_device_register(&igep_led_device);356}357358#else359static struct gpio igep_gpio_leds[] __initdata = {360{ -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:red:d0" },361{ -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:green:d0" },362{ -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:red:d1" },363};364365static inline void igep_leds_init(void)366{367int i;368369if (machine_is_igep0020()) {370igep_gpio_leds[0].gpio = IGEP2_GPIO_LED0_RED;371igep_gpio_leds[1].gpio = IGEP2_GPIO_LED0_GREEN;372igep_gpio_leds[2].gpio = IGEP2_GPIO_LED1_RED;373} else {374igep_gpio_leds[0].gpio = IGEP3_GPIO_LED0_RED;375igep_gpio_leds[1].gpio = IGEP3_GPIO_LED0_GREEN;376igep_gpio_leds[2].gpio = IGEP3_GPIO_LED1_RED;377}378379if (gpio_request_array(igep_gpio_leds, ARRAY_SIZE(igep_gpio_leds))) {380pr_warning("IGEP v2: Could not obtain leds gpios\n");381return;382}383384for (i = 0; i < ARRAY_SIZE(igep_gpio_leds); i++)385gpio_export(igep_gpio_leds[i].gpio, 0);386}387#endif388389static struct gpio igep2_twl_gpios[] = {390{ -EINVAL, GPIOF_IN, "GPIO_EHCI_NOC" },391{ -EINVAL, GPIOF_OUT_INIT_LOW, "GPIO_USBH_CPEN" },392};393394static int igep_twl_gpio_setup(struct device *dev,395unsigned gpio, unsigned ngpio)396{397int ret;398399/* gpio + 0 is "mmc0_cd" (input/IRQ) */400mmc[0].gpio_cd = gpio + 0;401omap2_hsmmc_init(mmc);402403/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */404#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)405ret = gpio_request_one(gpio + TWL4030_GPIO_MAX + 1, GPIOF_OUT_INIT_HIGH,406"gpio-led:green:d1");407if (ret == 0)408gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);409else410pr_warning("IGEP: Could not obtain gpio GPIO_LED1_GREEN\n");411#else412igep_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;413#endif414415if (machine_is_igep0030())416return 0;417418/*419* REVISIT: need ehci-omap hooks for external VBUS420* power switch and overcurrent detect421*/422igep2_twl_gpios[0].gpio = gpio + 1;423424/* TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN (out, active low) */425igep2_twl_gpios[1].gpio = gpio + TWL4030_GPIO_MAX;426427ret = gpio_request_array(igep2_twl_gpios, ARRAY_SIZE(igep2_twl_gpios));428if (ret < 0)429pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");430431return 0;432};433434static struct twl4030_gpio_platform_data igep_twl4030_gpio_pdata = {435.gpio_base = OMAP_MAX_GPIO_LINES,436.irq_base = TWL4030_GPIO_IRQ_BASE,437.irq_end = TWL4030_GPIO_IRQ_END,438.use_leds = true,439.setup = igep_twl_gpio_setup,440};441442static struct twl4030_usb_data igep_usb_data = {443.usb_mode = T2_USB_MODE_ULPI,444};445446static int igep2_enable_dvi(struct omap_dss_device *dssdev)447{448gpio_direction_output(IGEP2_GPIO_DVI_PUP, 1);449450return 0;451}452453static void igep2_disable_dvi(struct omap_dss_device *dssdev)454{455gpio_direction_output(IGEP2_GPIO_DVI_PUP, 0);456}457458static struct panel_generic_dpi_data dvi_panel = {459.name = "generic",460.platform_enable = igep2_enable_dvi,461.platform_disable = igep2_disable_dvi,462};463464static struct omap_dss_device igep2_dvi_device = {465.type = OMAP_DISPLAY_TYPE_DPI,466.name = "dvi",467.driver_name = "generic_dpi_panel",468.data = &dvi_panel,469.phy.dpi.data_lines = 24,470};471472static struct omap_dss_device *igep2_dss_devices[] = {473&igep2_dvi_device474};475476static struct omap_dss_board_info igep2_dss_data = {477.num_devices = ARRAY_SIZE(igep2_dss_devices),478.devices = igep2_dss_devices,479.default_device = &igep2_dvi_device,480};481482static struct regulator_consumer_supply igep2_vpll2_supplies[] = {483REGULATOR_SUPPLY("vdds_dsi", "omapdss"),484REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),485};486487static struct regulator_init_data igep2_vpll2 = {488.constraints = {489.name = "VDVI",490.min_uV = 1800000,491.max_uV = 1800000,492.apply_uV = true,493.valid_modes_mask = REGULATOR_MODE_NORMAL494| REGULATOR_MODE_STANDBY,495.valid_ops_mask = REGULATOR_CHANGE_MODE496| REGULATOR_CHANGE_STATUS,497},498.num_consumer_supplies = ARRAY_SIZE(igep2_vpll2_supplies),499.consumer_supplies = igep2_vpll2_supplies,500};501502static void __init igep2_display_init(void)503{504int err = gpio_request_one(IGEP2_GPIO_DVI_PUP, GPIOF_OUT_INIT_HIGH,505"GPIO_DVI_PUP");506if (err)507pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n");508}509510static struct platform_device *igep_devices[] __initdata = {511&igep_vwlan_device,512};513514static void __init igep_init_early(void)515{516omap2_init_common_infrastructure();517omap2_init_common_devices(m65kxxxxam_sdrc_params,518m65kxxxxam_sdrc_params);519}520521static struct twl4030_codec_audio_data igep2_audio_data;522523static struct twl4030_codec_data igep2_codec_data = {524.audio_mclk = 26000000,525.audio = &igep2_audio_data,526};527528static int igep2_keymap[] = {529KEY(0, 0, KEY_LEFT),530KEY(0, 1, KEY_RIGHT),531KEY(0, 2, KEY_A),532KEY(0, 3, KEY_B),533KEY(1, 0, KEY_DOWN),534KEY(1, 1, KEY_UP),535KEY(1, 2, KEY_E),536KEY(1, 3, KEY_F),537KEY(2, 0, KEY_ENTER),538KEY(2, 1, KEY_I),539KEY(2, 2, KEY_J),540KEY(2, 3, KEY_K),541KEY(3, 0, KEY_M),542KEY(3, 1, KEY_N),543KEY(3, 2, KEY_O),544KEY(3, 3, KEY_P)545};546547static struct matrix_keymap_data igep2_keymap_data = {548.keymap = igep2_keymap,549.keymap_size = ARRAY_SIZE(igep2_keymap),550};551552static struct twl4030_keypad_data igep2_keypad_pdata = {553.keymap_data = &igep2_keymap_data,554.rows = 4,555.cols = 4,556.rep = 1,557};558559static struct twl4030_platform_data igep_twldata = {560.irq_base = TWL4030_IRQ_BASE,561.irq_end = TWL4030_IRQ_END,562563/* platform_data for children goes here */564.usb = &igep_usb_data,565.gpio = &igep_twl4030_gpio_pdata,566.vmmc1 = &igep_vmmc1,567.vio = &igep_vio,568};569570static struct i2c_board_info __initdata igep2_i2c3_boardinfo[] = {571{572I2C_BOARD_INFO("eeprom", 0x50),573},574};575576static void __init igep_i2c_init(void)577{578int ret;579580if (machine_is_igep0020()) {581/*582* Bus 3 is attached to the DVI port where devices like the583* pico DLP projector don't work reliably with 400kHz584*/585ret = omap_register_i2c_bus(3, 100, igep2_i2c3_boardinfo,586ARRAY_SIZE(igep2_i2c3_boardinfo));587if (ret)588pr_warning("IGEP2: Could not register I2C3 bus (%d)\n", ret);589590igep_twldata.codec = &igep2_codec_data;591igep_twldata.keypad = &igep2_keypad_pdata;592igep_twldata.vpll2 = &igep2_vpll2;593}594595omap3_pmic_init("twl4030", &igep_twldata);596}597598static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = {599.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,600.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,601.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,602603.phy_reset = true,604.reset_gpio_port[0] = IGEP2_GPIO_USBH_NRESET,605.reset_gpio_port[1] = -EINVAL,606.reset_gpio_port[2] = -EINVAL,607};608609static const struct usbhs_omap_board_data igep3_usbhs_bdata __initconst = {610.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,611.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,612.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,613614.phy_reset = true,615.reset_gpio_port[0] = -EINVAL,616.reset_gpio_port[1] = IGEP3_GPIO_USBH_NRESET,617.reset_gpio_port[2] = -EINVAL,618};619620#ifdef CONFIG_OMAP_MUX621static struct omap_board_mux board_mux[] __initdata = {622{ .reg_offset = OMAP_MUX_TERMINATOR },623};624#endif625626#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)627static struct gpio igep_wlan_bt_gpios[] __initdata = {628{ -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NPD" },629{ -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NRESET" },630{ -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_BT_NRESET" },631};632633static void __init igep_wlan_bt_init(void)634{635int err;636637/* GPIO's for WLAN-BT combo depends on hardware revision */638if (hwrev == IGEP2_BOARD_HWREV_B) {639igep_wlan_bt_gpios[0].gpio = IGEP2_RB_GPIO_WIFI_NPD;640igep_wlan_bt_gpios[1].gpio = IGEP2_RB_GPIO_WIFI_NRESET;641igep_wlan_bt_gpios[2].gpio = IGEP2_RB_GPIO_BT_NRESET;642} else if (hwrev == IGEP2_BOARD_HWREV_C || machine_is_igep0030()) {643igep_wlan_bt_gpios[0].gpio = IGEP2_RC_GPIO_WIFI_NPD;644igep_wlan_bt_gpios[1].gpio = IGEP2_RC_GPIO_WIFI_NRESET;645igep_wlan_bt_gpios[2].gpio = IGEP2_RC_GPIO_BT_NRESET;646} else647return;648649err = gpio_request_array(igep_wlan_bt_gpios,650ARRAY_SIZE(igep_wlan_bt_gpios));651if (err) {652pr_warning("IGEP2: Could not obtain WIFI/BT gpios\n");653return;654}655656gpio_export(igep_wlan_bt_gpios[0].gpio, 0);657gpio_export(igep_wlan_bt_gpios[1].gpio, 0);658gpio_export(igep_wlan_bt_gpios[2].gpio, 0);659660gpio_set_value(igep_wlan_bt_gpios[1].gpio, 0);661udelay(10);662gpio_set_value(igep_wlan_bt_gpios[1].gpio, 1);663664}665#else666static inline void __init igep_wlan_bt_init(void) { }667#endif668669static void __init igep_init(void)670{671omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);672673/* Get IGEP2 hardware revision */674igep2_get_revision();675/* Register I2C busses and drivers */676igep_i2c_init();677platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices));678omap_serial_init();679usb_musb_init(NULL);680681igep_flash_init();682igep_leds_init();683684/*685* WLAN-BT combo module from MuRata which has a Marvell WLAN686* (88W8686) + CSR Bluetooth chipset. Uses SDIO interface.687*/688igep_wlan_bt_init();689690if (machine_is_igep0020()) {691omap_display_init(&igep2_dss_data);692igep2_display_init();693igep2_init_smsc911x();694usbhs_init(&igep2_usbhs_bdata);695} else {696usbhs_init(&igep3_usbhs_bdata);697}698}699700MACHINE_START(IGEP0020, "IGEP v2 board")701.boot_params = 0x80000100,702.reserve = omap_reserve,703.map_io = omap3_map_io,704.init_early = igep_init_early,705.init_irq = omap_init_irq,706.init_machine = igep_init,707.timer = &omap_timer,708MACHINE_END709710MACHINE_START(IGEP0030, "IGEP OMAP3 module")711.boot_params = 0x80000100,712.reserve = omap_reserve,713.map_io = omap3_map_io,714.init_early = igep_init_early,715.init_irq = omap_init_irq,716.init_machine = igep_init,717.timer = &omap_timer,718MACHINE_END719720721