提交 2a60997a 编写于 作者: M Mike Rapoport 提交者: Tony Lindgren

omap: igep0020: add support for IGEP3

Add IGEP3 machine support to board-igep0020
Signed-off-by: NMike Rapoport <mike@compulab.co.il>
Acked-by: NEnric Balletbo i Serra <eballetbo@iseebcn.com>
Signed-off-by: NTony Lindgren <tony@atomide.com>
上级 0d4ab9a5
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
#define IGEP2_RC_GPIO_WIFI_NRESET 139 #define IGEP2_RC_GPIO_WIFI_NRESET 139
#define IGEP2_RC_GPIO_BT_NRESET 137 #define IGEP2_RC_GPIO_BT_NRESET 137
#define IGEP3_GPIO_LED0_GREEN 54
#define IGEP3_GPIO_LED0_RED 53
#define IGEP3_GPIO_LED1_RED 16
#define IGEP3_GPIO_USBH_NRESET 183
/* /*
* IGEP2 Hardware Revision Table * IGEP2 Hardware Revision Table
* *
...@@ -69,6 +74,7 @@ ...@@ -69,6 +74,7 @@
#define IGEP2_BOARD_HWREV_B 0 #define IGEP2_BOARD_HWREV_B 0
#define IGEP2_BOARD_HWREV_C 1 #define IGEP2_BOARD_HWREV_C 1
#define IGEP3_BOARD_HWREV 2
static u8 hwrev; static u8 hwrev;
...@@ -76,6 +82,11 @@ static void __init igep2_get_revision(void) ...@@ -76,6 +82,11 @@ static void __init igep2_get_revision(void)
{ {
u8 ret; u8 ret;
if (machine_is_igep0030()) {
hwrev = IGEP3_BOARD_HWREV;
return;
}
omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT); omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT);
if (gpio_request_one(IGEP2_GPIO_LED1_RED, GPIOF_IN, "GPIO_HW0_REV")) { if (gpio_request_one(IGEP2_GPIO_LED1_RED, GPIOF_IN, "GPIO_HW0_REV")) {
...@@ -332,24 +343,40 @@ static struct platform_device igep_led_device = { ...@@ -332,24 +343,40 @@ static struct platform_device igep_led_device = {
static void __init igep_leds_init(void) static void __init igep_leds_init(void)
{ {
igep_gpio_leds[0].gpio = IGEP2_GPIO_LED0_RED; if (machine_is_igep0020()) {
igep_gpio_leds[1].gpio = IGEP2_GPIO_LED0_GREEN; igep_gpio_leds[0].gpio = IGEP2_GPIO_LED0_RED;
igep_gpio_leds[2].gpio = IGEP2_GPIO_LED1_RED; igep_gpio_leds[1].gpio = IGEP2_GPIO_LED0_GREEN;
igep_gpio_leds[2].gpio = IGEP2_GPIO_LED1_RED;
} else {
igep_gpio_leds[0].gpio = IGEP3_GPIO_LED0_RED;
igep_gpio_leds[1].gpio = IGEP3_GPIO_LED0_GREEN;
igep_gpio_leds[2].gpio = IGEP3_GPIO_LED1_RED;
}
platform_device_register(&igep_led_device); platform_device_register(&igep_led_device);
} }
#else #else
static struct gpio igep_gpio_leds[] __initdata = { static struct gpio igep_gpio_leds[] __initdata = {
{ IGEP2_GPIO_LED0_RED, GPIOF_OUT_INIT_LOW, "gpio-led:red:d0" }, { -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:red:d0" },
{ IGEP2_GPIO_LED0_GREEN, GPIOF_OUT_INIT_LOW, "gpio-led:green:d0" }, { -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:green:d0" },
{ IGEP2_GPIO_LED1_RED, GPIOF_OUT_INIT_LOW, "gpio-led:red:d1" }, { -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:red:d1" },
}; };
static inline void igep_leds_init(void) static inline void igep_leds_init(void)
{ {
int i; int i;
if (machine_is_igep0020()) {
igep_gpio_leds[0].gpio = IGEP2_GPIO_LED0_RED;
igep_gpio_leds[1].gpio = IGEP2_GPIO_LED0_GREEN;
igep_gpio_leds[2].gpio = IGEP2_GPIO_LED1_RED;
} else {
igep_gpio_leds[0].gpio = IGEP3_GPIO_LED0_RED;
igep_gpio_leds[1].gpio = IGEP3_GPIO_LED0_GREEN;
igep_gpio_leds[2].gpio = IGEP3_GPIO_LED1_RED;
}
if (gpio_request_array(igep_gpio_leds, ARRAY_SIZE(igep_gpio_leds))) { if (gpio_request_array(igep_gpio_leds, ARRAY_SIZE(igep_gpio_leds))) {
pr_warning("IGEP v2: Could not obtain leds gpios\n"); pr_warning("IGEP v2: Could not obtain leds gpios\n");
return; return;
...@@ -386,6 +413,9 @@ static int igep_twl_gpio_setup(struct device *dev, ...@@ -386,6 +413,9 @@ static int igep_twl_gpio_setup(struct device *dev,
igep_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1; igep_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;
#endif #endif
if (machine_is_igep0030())
return 0;
/* /*
* REVISIT: need ehci-omap hooks for external VBUS * REVISIT: need ehci-omap hooks for external VBUS
* power switch and overcurrent detect * power switch and overcurrent detect
...@@ -548,18 +578,20 @@ static void __init igep_i2c_init(void) ...@@ -548,18 +578,20 @@ static void __init igep_i2c_init(void)
{ {
int ret; int ret;
/* if (machine_is_igep0020()) {
* Bus 3 is attached to the DVI port where devices like the pico DLP /*
* projector don't work reliably with 400kHz * Bus 3 is attached to the DVI port where devices like the
*/ * pico DLP projector don't work reliably with 400kHz
ret = omap_register_i2c_bus(3, 100, igep2_i2c3_boardinfo, */
ARRAY_SIZE(igep2_i2c3_boardinfo)); ret = omap_register_i2c_bus(3, 100, igep2_i2c3_boardinfo,
if (ret) ARRAY_SIZE(igep2_i2c3_boardinfo));
pr_warning("IGEP2: Could not register I2C3 bus (%d)\n", ret); if (ret)
pr_warning("IGEP2: Could not register I2C3 bus (%d)\n", ret);
igep_twldata.codec = &igep2_codec_data;
igep_twldata.keypad = &igep2_keypad_pdata; igep_twldata.codec = &igep2_codec_data;
igep_twldata.vpll2 = &igep2_vpll2; igep_twldata.keypad = &igep2_keypad_pdata;
igep_twldata.vpll2 = &igep2_vpll2;
}
omap3_pmic_init("twl4030", &igep_twldata); omap3_pmic_init("twl4030", &igep_twldata);
} }
...@@ -575,6 +607,17 @@ static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = { ...@@ -575,6 +607,17 @@ static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = {
.reset_gpio_port[2] = -EINVAL, .reset_gpio_port[2] = -EINVAL,
}; };
static const struct usbhs_omap_board_data igep3_usbhs_bdata __initconst = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
.phy_reset = true,
.reset_gpio_port[0] = -EINVAL,
.reset_gpio_port[1] = IGEP3_GPIO_USBH_NRESET,
.reset_gpio_port[2] = -EINVAL,
};
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
{ .reg_offset = OMAP_MUX_TERMINATOR }, { .reg_offset = OMAP_MUX_TERMINATOR },
...@@ -597,7 +640,7 @@ static void __init igep_wlan_bt_init(void) ...@@ -597,7 +640,7 @@ static void __init igep_wlan_bt_init(void)
igep_wlan_bt_gpios[0].gpio = IGEP2_RB_GPIO_WIFI_NPD; igep_wlan_bt_gpios[0].gpio = IGEP2_RB_GPIO_WIFI_NPD;
igep_wlan_bt_gpios[1].gpio = IGEP2_RB_GPIO_WIFI_NRESET; igep_wlan_bt_gpios[1].gpio = IGEP2_RB_GPIO_WIFI_NRESET;
igep_wlan_bt_gpios[2].gpio = IGEP2_RB_GPIO_BT_NRESET; igep_wlan_bt_gpios[2].gpio = IGEP2_RB_GPIO_BT_NRESET;
} else if (hwrev == IGEP2_BOARD_HWREV_C) { } else if (hwrev == IGEP2_BOARD_HWREV_C || machine_is_igep0030()) {
igep_wlan_bt_gpios[0].gpio = IGEP2_RC_GPIO_WIFI_NPD; igep_wlan_bt_gpios[0].gpio = IGEP2_RC_GPIO_WIFI_NPD;
igep_wlan_bt_gpios[1].gpio = IGEP2_RC_GPIO_WIFI_NRESET; igep_wlan_bt_gpios[1].gpio = IGEP2_RC_GPIO_WIFI_NRESET;
igep_wlan_bt_gpios[2].gpio = IGEP2_RC_GPIO_BT_NRESET; igep_wlan_bt_gpios[2].gpio = IGEP2_RC_GPIO_BT_NRESET;
...@@ -645,10 +688,14 @@ static void __init igep_init(void) ...@@ -645,10 +688,14 @@ static void __init igep_init(void)
*/ */
igep_wlan_bt_init(); igep_wlan_bt_init();
omap_display_init(&igep2_dss_data); if (machine_is_igep0020()) {
igep2_display_init(); omap_display_init(&igep2_dss_data);
igep2_init_smsc911x(); igep2_display_init();
usbhs_init(&igep2_usbhs_bdata); igep2_init_smsc911x();
usbhs_init(&igep2_usbhs_bdata);
} else {
usbhs_init(&igep3_usbhs_bdata);
}
} }
MACHINE_START(IGEP0020, "IGEP v2 board") MACHINE_START(IGEP0020, "IGEP v2 board")
...@@ -660,3 +707,13 @@ MACHINE_START(IGEP0020, "IGEP v2 board") ...@@ -660,3 +707,13 @@ MACHINE_START(IGEP0020, "IGEP v2 board")
.init_machine = igep_init, .init_machine = igep_init,
.timer = &omap_timer, .timer = &omap_timer,
MACHINE_END MACHINE_END
MACHINE_START(IGEP0030, "IGEP OMAP3 module")
.boot_params = 0x80000100,
.reserve = omap_reserve,
.map_io = omap3_map_io,
.init_early = igep_init_early,
.init_irq = omap_init_irq,
.init_machine = igep_init,
.timer = &omap_timer,
MACHINE_END
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册