2011/5/12 Mike Rapoport <mike@xxxxxxxxxxxxxx>: > Add IGEP3 machine support to board-igep0020 > > Signed-off-by: Mike Rapoport <mike@xxxxxxxxxxxxxx> > --- > Âarch/arm/mach-omap2/board-igep0020.c | Â103 ++++++++++++++++++++++++++-------- > Â1 files changed, 80 insertions(+), 23 deletions(-) > > diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c > index ea7cbc6..0d6d583 100644 > --- a/arch/arm/mach-omap2/board-igep0020.c > +++ b/arch/arm/mach-omap2/board-igep0020.c > @@ -55,6 +55,11 @@ > Â#define IGEP2_RC_GPIO_WIFI_NRESET Â139 > Â#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 > Â* > @@ -69,6 +74,7 @@ > > Â#define IGEP2_BOARD_HWREV_B  Â0 > Â#define IGEP2_BOARD_HWREV_C  Â1 > +#define IGEP3_BOARD_HWREV   Â2 > > Âstatic u8 hwrev; > > @@ -76,6 +82,11 @@ static void __init igep2_get_revision(void) > Â{ >    Âu8 ret; > > +    if (machine_is_igep0030()) { > +        hwrev = IGEP3_BOARD_HWREV; > +        return; > +    } > + >    Âomap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT); > >    Âif (gpio_request_one(IGEP2_GPIO_LED1_RED, GPIOF_IN, "GPIO_HW0_REV")) { > @@ -332,24 +343,40 @@ static struct platform_device igep_led_device = { > > Âstatic void __init igep_leds_init(void) > Â{ > -    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; > +    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; > +    } > >    Âplatform_device_register(&igep_led_device); > Â} > > Â#else > Âstatic struct gpio igep_gpio_leds[] __initdata = { > -    { IGEP2_GPIO_LED0_RED,  GPIOF_OUT_INIT_LOW, "gpio-led:red:d0"  }, > -    { IGEP2_GPIO_LED0_GREEN, 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:d0"  }, > +    { -EINVAL,   ÂGPIOF_OUT_INIT_LOW, "gpio-led:green:d0" }, > +    { -EINVAL,   ÂGPIOF_OUT_INIT_LOW, "gpio-led:red:d1"  }, > Â}; > > Âstatic inline void igep_leds_init(void) > Â{ >    Â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))) { >        Âpr_warning("IGEP v2: Could not obtain leds gpios\n"); >        Âreturn; > @@ -386,6 +413,9 @@ static int igep_twl_gpio_setup(struct device *dev, >    Âigep_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1; > Â#endif > > +    if (machine_is_igep0030()) > +        return 0; > + >    Â/* >     * REVISIT: need ehci-omap hooks for external VBUS >     * power switch and overcurrent detect > @@ -548,18 +578,20 @@ static void __init igep_i2c_init(void) > Â{ >    Âint ret; > > -    /* > -    Â* 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)); > -    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.vpll2   Â= &igep2_vpll2; > +    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 > +        Â*/ > +        ret = omap_register_i2c_bus(3, 100, igep2_i2c3_boardinfo, > +                      ARRAY_SIZE(igep2_i2c3_boardinfo)); > +        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.vpll2   Â= &igep2_vpll2; > +    } > >    Âomap3_pmic_init("twl4030", &igep_twldata); > Â} > @@ -575,6 +607,17 @@ static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = { >    Â.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 > Âstatic struct omap_board_mux board_mux[] __initdata = { >    Â{ .reg_offset = OMAP_MUX_TERMINATOR }, > @@ -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[1].gpio = IGEP2_RB_GPIO_WIFI_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[1].gpio = IGEP2_RC_GPIO_WIFI_NRESET; >        Âigep_wlan_bt_gpios[2].gpio = IGEP2_RC_GPIO_BT_NRESET; > @@ -645,10 +688,14 @@ static void __init igep_init(void) >     */ >    Âigep_wlan_bt_init(); > > -    omap_display_init(&igep2_dss_data); > -    igep2_display_init(); > -    igep2_init_smsc911x(); > -    usbhs_init(&igep2_usbhs_bdata); > +    if (machine_is_igep0020()) { > +        omap_display_init(&igep2_dss_data); > +        igep2_display_init(); > +        igep2_init_smsc911x(); > +        usbhs_init(&igep2_usbhs_bdata); > +    } else { > +        usbhs_init(&igep3_usbhs_bdata); > +    } > Â} > > ÂMACHINE_START(IGEP0020, "IGEP v2 board") > @@ -660,3 +707,13 @@ MACHINE_START(IGEP0020, "IGEP v2 board") >    Â.init_machine  = igep_init, >    Â.timer     Â= &omap_timer, > Â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 > -- > 1.7.3.1 > > Acked-by: Enric Balletbo i Serra <eballetbo@xxxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html