Path: blob/master/arch/arm/mach-omap2/board-4430sdp.c
10817 views
/*1* Board support file for OMAP4430 SDP.2*3* Copyright (C) 2009 Texas Instruments4*5* Author: Santosh Shilimkar <[email protected]>6*7* Based on mach-omap2/board-3430sdp.c8*9* This program is free software; you can redistribute it and/or modify10* it under the terms of the GNU General Public License version 2 as11* published by the Free Software Foundation.12*/1314#include <linux/kernel.h>15#include <linux/init.h>16#include <linux/platform_device.h>17#include <linux/io.h>18#include <linux/gpio.h>19#include <linux/usb/otg.h>20#include <linux/spi/spi.h>21#include <linux/i2c/twl.h>22#include <linux/gpio_keys.h>23#include <linux/regulator/machine.h>24#include <linux/leds.h>25#include <linux/leds_pwm.h>2627#include <mach/hardware.h>28#include <mach/omap4-common.h>29#include <asm/mach-types.h>30#include <asm/mach/arch.h>31#include <asm/mach/map.h>3233#include <plat/board.h>34#include <plat/common.h>35#include <plat/usb.h>36#include <plat/mmc.h>37#include <plat/omap4-keypad.h>38#include <video/omapdss.h>3940#include "mux.h"41#include "hsmmc.h"42#include "timer-gp.h"43#include "control.h"44#include "common-board-devices.h"4546#define ETH_KS8851_IRQ 3447#define ETH_KS8851_POWER_ON 4848#define ETH_KS8851_QUART 13849#define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 18450#define OMAP4_SFH7741_ENABLE_GPIO 18851#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */52#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */5354static const int sdp4430_keymap[] = {55KEY(0, 0, KEY_E),56KEY(0, 1, KEY_R),57KEY(0, 2, KEY_T),58KEY(0, 3, KEY_HOME),59KEY(0, 4, KEY_F5),60KEY(0, 5, KEY_UNKNOWN),61KEY(0, 6, KEY_I),62KEY(0, 7, KEY_LEFTSHIFT),6364KEY(1, 0, KEY_D),65KEY(1, 1, KEY_F),66KEY(1, 2, KEY_G),67KEY(1, 3, KEY_SEND),68KEY(1, 4, KEY_F6),69KEY(1, 5, KEY_UNKNOWN),70KEY(1, 6, KEY_K),71KEY(1, 7, KEY_ENTER),7273KEY(2, 0, KEY_X),74KEY(2, 1, KEY_C),75KEY(2, 2, KEY_V),76KEY(2, 3, KEY_END),77KEY(2, 4, KEY_F7),78KEY(2, 5, KEY_UNKNOWN),79KEY(2, 6, KEY_DOT),80KEY(2, 7, KEY_CAPSLOCK),8182KEY(3, 0, KEY_Z),83KEY(3, 1, KEY_KPPLUS),84KEY(3, 2, KEY_B),85KEY(3, 3, KEY_F1),86KEY(3, 4, KEY_F8),87KEY(3, 5, KEY_UNKNOWN),88KEY(3, 6, KEY_O),89KEY(3, 7, KEY_SPACE),9091KEY(4, 0, KEY_W),92KEY(4, 1, KEY_Y),93KEY(4, 2, KEY_U),94KEY(4, 3, KEY_F2),95KEY(4, 4, KEY_VOLUMEUP),96KEY(4, 5, KEY_UNKNOWN),97KEY(4, 6, KEY_L),98KEY(4, 7, KEY_LEFT),99100KEY(5, 0, KEY_S),101KEY(5, 1, KEY_H),102KEY(5, 2, KEY_J),103KEY(5, 3, KEY_F3),104KEY(5, 4, KEY_F9),105KEY(5, 5, KEY_VOLUMEDOWN),106KEY(5, 6, KEY_M),107KEY(5, 7, KEY_RIGHT),108109KEY(6, 0, KEY_Q),110KEY(6, 1, KEY_A),111KEY(6, 2, KEY_N),112KEY(6, 3, KEY_BACK),113KEY(6, 4, KEY_BACKSPACE),114KEY(6, 5, KEY_UNKNOWN),115KEY(6, 6, KEY_P),116KEY(6, 7, KEY_UP),117118KEY(7, 0, KEY_PROG1),119KEY(7, 1, KEY_PROG2),120KEY(7, 2, KEY_PROG3),121KEY(7, 3, KEY_PROG4),122KEY(7, 4, KEY_F4),123KEY(7, 5, KEY_UNKNOWN),124KEY(7, 6, KEY_OK),125KEY(7, 7, KEY_DOWN),126};127128static struct matrix_keymap_data sdp4430_keymap_data = {129.keymap = sdp4430_keymap,130.keymap_size = ARRAY_SIZE(sdp4430_keymap),131};132133static struct omap4_keypad_platform_data sdp4430_keypad_data = {134.keymap_data = &sdp4430_keymap_data,135.rows = 8,136.cols = 8,137};138static struct gpio_led sdp4430_gpio_leds[] = {139{140.name = "omap4:green:debug0",141.gpio = 61,142},143{144.name = "omap4:green:debug1",145.gpio = 30,146},147{148.name = "omap4:green:debug2",149.gpio = 7,150},151{152.name = "omap4:green:debug3",153.gpio = 8,154},155{156.name = "omap4:green:debug4",157.gpio = 50,158},159{160.name = "omap4:blue:user",161.gpio = 169,162},163{164.name = "omap4:red:user",165.gpio = 170,166},167{168.name = "omap4:green:user",169.gpio = 139,170},171172};173174static struct gpio_keys_button sdp4430_gpio_keys[] = {175{176.desc = "Proximity Sensor",177.type = EV_SW,178.code = SW_FRONT_PROXIMITY,179.gpio = OMAP4_SFH7741_SENSOR_OUTPUT_GPIO,180.active_low = 0,181}182};183184static struct gpio_led_platform_data sdp4430_led_data = {185.leds = sdp4430_gpio_leds,186.num_leds = ARRAY_SIZE(sdp4430_gpio_leds),187};188189static struct led_pwm sdp4430_pwm_leds[] = {190{191.name = "omap4:green:chrg",192.pwm_id = 1,193.max_brightness = 255,194.pwm_period_ns = 7812500,195},196};197198static struct led_pwm_platform_data sdp4430_pwm_data = {199.num_leds = ARRAY_SIZE(sdp4430_pwm_leds),200.leds = sdp4430_pwm_leds,201};202203static struct platform_device sdp4430_leds_pwm = {204.name = "leds_pwm",205.id = -1,206.dev = {207.platform_data = &sdp4430_pwm_data,208},209};210211static int omap_prox_activate(struct device *dev)212{213gpio_set_value(OMAP4_SFH7741_ENABLE_GPIO , 1);214return 0;215}216217static void omap_prox_deactivate(struct device *dev)218{219gpio_set_value(OMAP4_SFH7741_ENABLE_GPIO , 0);220}221222static struct gpio_keys_platform_data sdp4430_gpio_keys_data = {223.buttons = sdp4430_gpio_keys,224.nbuttons = ARRAY_SIZE(sdp4430_gpio_keys),225.enable = omap_prox_activate,226.disable = omap_prox_deactivate,227};228229static struct platform_device sdp4430_gpio_keys_device = {230.name = "gpio-keys",231.id = -1,232.dev = {233.platform_data = &sdp4430_gpio_keys_data,234},235};236237static struct platform_device sdp4430_leds_gpio = {238.name = "leds-gpio",239.id = -1,240.dev = {241.platform_data = &sdp4430_led_data,242},243};244static struct spi_board_info sdp4430_spi_board_info[] __initdata = {245{246.modalias = "ks8851",247.bus_num = 1,248.chip_select = 0,249.max_speed_hz = 24000000,250.irq = ETH_KS8851_IRQ,251},252};253254static struct gpio sdp4430_eth_gpios[] __initdata = {255{ ETH_KS8851_POWER_ON, GPIOF_OUT_INIT_HIGH, "eth_power" },256{ ETH_KS8851_QUART, GPIOF_OUT_INIT_HIGH, "quart" },257{ ETH_KS8851_IRQ, GPIOF_IN, "eth_irq" },258};259260static int __init omap_ethernet_init(void)261{262int status;263264/* Request of GPIO lines */265status = gpio_request_array(sdp4430_eth_gpios,266ARRAY_SIZE(sdp4430_eth_gpios));267if (status)268pr_err("Cannot request ETH GPIOs\n");269270return status;271}272273static struct platform_device sdp4430_lcd_device = {274.name = "sdp4430_lcd",275.id = -1,276};277278static struct platform_device *sdp4430_devices[] __initdata = {279&sdp4430_lcd_device,280&sdp4430_gpio_keys_device,281&sdp4430_leds_gpio,282&sdp4430_leds_pwm,283};284285static struct omap_lcd_config sdp4430_lcd_config __initdata = {286.ctrl_name = "internal",287};288289static struct omap_board_config_kernel sdp4430_config[] __initdata = {290{ OMAP_TAG_LCD, &sdp4430_lcd_config },291};292293static void __init omap_4430sdp_init_early(void)294{295omap2_init_common_infrastructure();296omap2_init_common_devices(NULL, NULL);297#ifdef CONFIG_OMAP_32K_TIMER298omap2_gp_clockevent_set_gptimer(1);299#endif300}301302static struct omap_musb_board_data musb_board_data = {303.interface_type = MUSB_INTERFACE_UTMI,304.mode = MUSB_OTG,305.power = 100,306};307308static struct twl4030_usb_data omap4_usbphy_data = {309.phy_init = omap4430_phy_init,310.phy_exit = omap4430_phy_exit,311.phy_power = omap4430_phy_power,312.phy_set_clock = omap4430_phy_set_clk,313.phy_suspend = omap4430_phy_suspend,314};315316static struct omap2_hsmmc_info mmc[] = {317{318.mmc = 2,319.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,320.gpio_cd = -EINVAL,321.gpio_wp = -EINVAL,322.nonremovable = true,323.ocr_mask = MMC_VDD_29_30,324.no_off_init = true,325},326{327.mmc = 1,328.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,329.gpio_wp = -EINVAL,330},331{} /* Terminator */332};333334static struct regulator_consumer_supply sdp4430_vaux_supply[] = {335{336.supply = "vmmc",337.dev_name = "omap_hsmmc.1",338},339};340static struct regulator_consumer_supply sdp4430_vmmc_supply[] = {341{342.supply = "vmmc",343.dev_name = "omap_hsmmc.0",344},345};346347static int omap4_twl6030_hsmmc_late_init(struct device *dev)348{349int ret = 0;350struct platform_device *pdev = container_of(dev,351struct platform_device, dev);352struct omap_mmc_platform_data *pdata = dev->platform_data;353354/* Setting MMC1 Card detect Irq */355if (pdev->id == 0) {356ret = twl6030_mmc_card_detect_config();357if (ret)358pr_err("Failed configuring MMC1 card detect\n");359pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +360MMCDETECT_INTR_OFFSET;361pdata->slots[0].card_detect = twl6030_mmc_card_detect;362}363return ret;364}365366static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev)367{368struct omap_mmc_platform_data *pdata;369370/* dev can be null if CONFIG_MMC_OMAP_HS is not set */371if (!dev) {372pr_err("Failed %s\n", __func__);373return;374}375pdata = dev->platform_data;376pdata->init = omap4_twl6030_hsmmc_late_init;377}378379static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)380{381struct omap2_hsmmc_info *c;382383omap2_hsmmc_init(controllers);384for (c = controllers; c->mmc; c++)385omap4_twl6030_hsmmc_set_late_init(c->dev);386387return 0;388}389390static struct regulator_init_data sdp4430_vaux1 = {391.constraints = {392.min_uV = 1000000,393.max_uV = 3000000,394.apply_uV = true,395.valid_modes_mask = REGULATOR_MODE_NORMAL396| REGULATOR_MODE_STANDBY,397.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE398| REGULATOR_CHANGE_MODE399| REGULATOR_CHANGE_STATUS,400},401.num_consumer_supplies = 1,402.consumer_supplies = sdp4430_vaux_supply,403};404405static struct regulator_init_data sdp4430_vaux2 = {406.constraints = {407.min_uV = 1200000,408.max_uV = 2800000,409.apply_uV = true,410.valid_modes_mask = REGULATOR_MODE_NORMAL411| REGULATOR_MODE_STANDBY,412.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE413| REGULATOR_CHANGE_MODE414| REGULATOR_CHANGE_STATUS,415},416};417418static struct regulator_init_data sdp4430_vaux3 = {419.constraints = {420.min_uV = 1000000,421.max_uV = 3000000,422.apply_uV = true,423.valid_modes_mask = REGULATOR_MODE_NORMAL424| REGULATOR_MODE_STANDBY,425.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE426| REGULATOR_CHANGE_MODE427| REGULATOR_CHANGE_STATUS,428},429};430431/* VMMC1 for MMC1 card */432static struct regulator_init_data sdp4430_vmmc = {433.constraints = {434.min_uV = 1200000,435.max_uV = 3000000,436.apply_uV = true,437.valid_modes_mask = REGULATOR_MODE_NORMAL438| REGULATOR_MODE_STANDBY,439.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE440| REGULATOR_CHANGE_MODE441| REGULATOR_CHANGE_STATUS,442},443.num_consumer_supplies = 1,444.consumer_supplies = sdp4430_vmmc_supply,445};446447static struct regulator_init_data sdp4430_vpp = {448.constraints = {449.min_uV = 1800000,450.max_uV = 2500000,451.apply_uV = true,452.valid_modes_mask = REGULATOR_MODE_NORMAL453| REGULATOR_MODE_STANDBY,454.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE455| REGULATOR_CHANGE_MODE456| REGULATOR_CHANGE_STATUS,457},458};459460static struct regulator_init_data sdp4430_vusim = {461.constraints = {462.min_uV = 1200000,463.max_uV = 2900000,464.apply_uV = true,465.valid_modes_mask = REGULATOR_MODE_NORMAL466| REGULATOR_MODE_STANDBY,467.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE468| REGULATOR_CHANGE_MODE469| REGULATOR_CHANGE_STATUS,470},471};472473static struct regulator_init_data sdp4430_vana = {474.constraints = {475.min_uV = 2100000,476.max_uV = 2100000,477.valid_modes_mask = REGULATOR_MODE_NORMAL478| REGULATOR_MODE_STANDBY,479.valid_ops_mask = REGULATOR_CHANGE_MODE480| REGULATOR_CHANGE_STATUS,481},482};483484static struct regulator_init_data sdp4430_vcxio = {485.constraints = {486.min_uV = 1800000,487.max_uV = 1800000,488.valid_modes_mask = REGULATOR_MODE_NORMAL489| REGULATOR_MODE_STANDBY,490.valid_ops_mask = REGULATOR_CHANGE_MODE491| REGULATOR_CHANGE_STATUS,492},493};494495static struct regulator_init_data sdp4430_vdac = {496.constraints = {497.min_uV = 1800000,498.max_uV = 1800000,499.valid_modes_mask = REGULATOR_MODE_NORMAL500| REGULATOR_MODE_STANDBY,501.valid_ops_mask = REGULATOR_CHANGE_MODE502| REGULATOR_CHANGE_STATUS,503},504};505506static struct regulator_init_data sdp4430_vusb = {507.constraints = {508.min_uV = 3300000,509.max_uV = 3300000,510.apply_uV = true,511.valid_modes_mask = REGULATOR_MODE_NORMAL512| REGULATOR_MODE_STANDBY,513.valid_ops_mask = REGULATOR_CHANGE_MODE514| REGULATOR_CHANGE_STATUS,515},516};517518static struct regulator_init_data sdp4430_clk32kg = {519.constraints = {520.valid_ops_mask = REGULATOR_CHANGE_STATUS,521},522};523524static struct twl4030_platform_data sdp4430_twldata = {525.irq_base = TWL6030_IRQ_BASE,526.irq_end = TWL6030_IRQ_END,527528/* Regulators */529.vmmc = &sdp4430_vmmc,530.vpp = &sdp4430_vpp,531.vusim = &sdp4430_vusim,532.vana = &sdp4430_vana,533.vcxio = &sdp4430_vcxio,534.vdac = &sdp4430_vdac,535.vusb = &sdp4430_vusb,536.vaux1 = &sdp4430_vaux1,537.vaux2 = &sdp4430_vaux2,538.vaux3 = &sdp4430_vaux3,539.clk32kg = &sdp4430_clk32kg,540.usb = &omap4_usbphy_data541};542543static struct i2c_board_info __initdata sdp4430_i2c_3_boardinfo[] = {544{545I2C_BOARD_INFO("tmp105", 0x48),546},547{548I2C_BOARD_INFO("bh1780", 0x29),549},550};551static struct i2c_board_info __initdata sdp4430_i2c_4_boardinfo[] = {552{553I2C_BOARD_INFO("hmc5843", 0x1e),554},555};556static int __init omap4_i2c_init(void)557{558omap4_pmic_init("twl6030", &sdp4430_twldata);559omap_register_i2c_bus(2, 400, NULL, 0);560omap_register_i2c_bus(3, 400, sdp4430_i2c_3_boardinfo,561ARRAY_SIZE(sdp4430_i2c_3_boardinfo));562omap_register_i2c_bus(4, 400, sdp4430_i2c_4_boardinfo,563ARRAY_SIZE(sdp4430_i2c_4_boardinfo));564return 0;565}566567static void __init omap_sfh7741prox_init(void)568{569int error;570571error = gpio_request_one(OMAP4_SFH7741_ENABLE_GPIO,572GPIOF_OUT_INIT_LOW, "sfh7741");573if (error < 0)574pr_err("%s:failed to request GPIO %d, error %d\n",575__func__, OMAP4_SFH7741_ENABLE_GPIO, error);576}577578static void sdp4430_hdmi_mux_init(void)579{580/* PAD0_HDMI_HPD_PAD1_HDMI_CEC */581omap_mux_init_signal("hdmi_hpd",582OMAP_PIN_INPUT_PULLUP);583omap_mux_init_signal("hdmi_cec",584OMAP_PIN_INPUT_PULLUP);585/* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */586omap_mux_init_signal("hdmi_ddc_scl",587OMAP_PIN_INPUT_PULLUP);588omap_mux_init_signal("hdmi_ddc_sda",589OMAP_PIN_INPUT_PULLUP);590}591592static struct gpio sdp4430_hdmi_gpios[] = {593{ HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },594{ HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },595};596597static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)598{599int status;600601status = gpio_request_array(sdp4430_hdmi_gpios,602ARRAY_SIZE(sdp4430_hdmi_gpios));603if (status)604pr_err("%s: Cannot request HDMI GPIOs\n", __func__);605606return status;607}608609static void sdp4430_panel_disable_hdmi(struct omap_dss_device *dssdev)610{611gpio_free(HDMI_GPIO_LS_OE);612gpio_free(HDMI_GPIO_HPD);613}614615static struct omap_dss_device sdp4430_hdmi_device = {616.name = "hdmi",617.driver_name = "hdmi_panel",618.type = OMAP_DISPLAY_TYPE_HDMI,619.clocks = {620.dispc = {621.dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK,622},623.hdmi = {624.regn = 15,625.regm2 = 1,626},627},628.platform_enable = sdp4430_panel_enable_hdmi,629.platform_disable = sdp4430_panel_disable_hdmi,630.channel = OMAP_DSS_CHANNEL_DIGIT,631};632633static struct omap_dss_device *sdp4430_dss_devices[] = {634&sdp4430_hdmi_device,635};636637static struct omap_dss_board_info sdp4430_dss_data = {638.num_devices = ARRAY_SIZE(sdp4430_dss_devices),639.devices = sdp4430_dss_devices,640.default_device = &sdp4430_hdmi_device,641};642643void omap_4430sdp_display_init(void)644{645sdp4430_hdmi_mux_init();646omap_display_init(&sdp4430_dss_data);647}648649#ifdef CONFIG_OMAP_MUX650static struct omap_board_mux board_mux[] __initdata = {651OMAP4_MUX(USBB2_ULPITLL_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),652{ .reg_offset = OMAP_MUX_TERMINATOR },653};654655static struct omap_device_pad serial2_pads[] __initdata = {656OMAP_MUX_STATIC("uart2_cts.uart2_cts",657OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),658OMAP_MUX_STATIC("uart2_rts.uart2_rts",659OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),660OMAP_MUX_STATIC("uart2_rx.uart2_rx",661OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),662OMAP_MUX_STATIC("uart2_tx.uart2_tx",663OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),664};665666static struct omap_device_pad serial3_pads[] __initdata = {667OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",668OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),669OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",670OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),671OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",672OMAP_PIN_INPUT | OMAP_MUX_MODE0),673OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",674OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),675};676677static struct omap_device_pad serial4_pads[] __initdata = {678OMAP_MUX_STATIC("uart4_rx.uart4_rx",679OMAP_PIN_INPUT | OMAP_MUX_MODE0),680OMAP_MUX_STATIC("uart4_tx.uart4_tx",681OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),682};683684static struct omap_board_data serial2_data __initdata = {685.id = 1,686.pads = serial2_pads,687.pads_cnt = ARRAY_SIZE(serial2_pads),688};689690static struct omap_board_data serial3_data __initdata = {691.id = 2,692.pads = serial3_pads,693.pads_cnt = ARRAY_SIZE(serial3_pads),694};695696static struct omap_board_data serial4_data __initdata = {697.id = 3,698.pads = serial4_pads,699.pads_cnt = ARRAY_SIZE(serial4_pads),700};701702static inline void board_serial_init(void)703{704struct omap_board_data bdata;705bdata.flags = 0;706bdata.pads = NULL;707bdata.pads_cnt = 0;708bdata.id = 0;709/* pass dummy data for UART1 */710omap_serial_init_port(&bdata);711712omap_serial_init_port(&serial2_data);713omap_serial_init_port(&serial3_data);714omap_serial_init_port(&serial4_data);715}716#else717#define board_mux NULL718719static inline void board_serial_init(void)720{721omap_serial_init();722}723#endif724725static void __init omap_4430sdp_init(void)726{727int status;728int package = OMAP_PACKAGE_CBS;729730if (omap_rev() == OMAP4430_REV_ES1_0)731package = OMAP_PACKAGE_CBL;732omap4_mux_init(board_mux, NULL, package);733734omap_board_config = sdp4430_config;735omap_board_config_size = ARRAY_SIZE(sdp4430_config);736737omap4_i2c_init();738omap_sfh7741prox_init();739platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));740board_serial_init();741omap4_twl6030_hsmmc_init(mmc);742743usb_musb_init(&musb_board_data);744745status = omap_ethernet_init();746if (status) {747pr_err("Ethernet initialization failed: %d\n", status);748} else {749sdp4430_spi_board_info[0].irq = gpio_to_irq(ETH_KS8851_IRQ);750spi_register_board_info(sdp4430_spi_board_info,751ARRAY_SIZE(sdp4430_spi_board_info));752}753754status = omap4_keyboard_init(&sdp4430_keypad_data);755if (status)756pr_err("Keypad initialization failed: %d\n", status);757758omap_4430sdp_display_init();759}760761static void __init omap_4430sdp_map_io(void)762{763omap2_set_globals_443x();764omap44xx_map_common_io();765}766767MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")768/* Maintainer: Santosh Shilimkar - Texas Instruments Inc */769.boot_params = 0x80000100,770.reserve = omap_reserve,771.map_io = omap_4430sdp_map_io,772.init_early = omap_4430sdp_init_early,773.init_irq = gic_init_irq,774.init_machine = omap_4430sdp_init,775.timer = &omap_timer,776MACHINE_END777778779