Hi Ilya,

On 12/15/11 02:53, Ilya Yanok wrote:
> Support for the HTKW mcx board (TI AM3517 based) including serial,
> Ethernet, I2C, USB host, HSMMC, DSS and RTC.
> 
> Signed-off-by: Ilya Yanok <[email protected]>
> 
> ---
> Requires updated mach-types file and previously posted AM35xx-EMAC
> patch: http://article.gmane.org/gmane.linux.ports.arm.omap/66861
> 
> Changes from V1:
>  - Kconfig option name fixed
>  - Makefile entry sanitized
>  - Unneeded headers removed
>  - EMAC initialization moved to separate file/patch
>  - Use gpio_{request,free}_{array,one} where possible
>  - don't use platform data for touchscreen, we only need to pass
>    irq number, do it via client.irq
>  - check mcx_ts_init return value
>  - Moved DEBUG_LL_OMAP3 entry to be in aplhabetical order
>  - check return value of gpio_request for USB pwr pin
>  - use pr_err instead of printk for error printing
>  - added a fixed regulator for vdds_dsi
>  - added SDcard card-detect pin
> 
>  arch/arm/mach-omap2/Kconfig                  |    6 +
>  arch/arm/mach-omap2/Makefile                 |    1 +
>  arch/arm/mach-omap2/board-mcx.c              |  495 
> ++++++++++++++++++++++++++
>  arch/arm/plat-omap/include/plat/uncompress.h |    1 +
>  4 files changed, 503 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/mach-omap2/board-mcx.c

[...]

> diff --git a/arch/arm/mach-omap2/board-mcx.c b/arch/arm/mach-omap2/board-mcx.c
> new file mode 100644
> index 0000000..6375fa1
> --- /dev/null
> +++ b/arch/arm/mach-omap2/board-mcx.c

[...]

> +static void __init mcx_display_init(void)
> +{
> +     int r;
> +
> +     r = gpio_request_array(mcx_dss_gpios, ARRAY_SIZE(mcx_dss_gpios));
> +     if (r) {
> +             pr_err("failed to get DSS control GPIOs\n");
> +             return;
> +     }
> +
> +     omap_mux_init_gpio(LCD_BKLIGHT_EN, OMAP_PIN_OUTPUT);
> +     omap_mux_init_gpio(LCD_LVL_SFHT_BUF_ENn, OMAP_PIN_OUTPUT);
> +     omap_mux_init_gpio(LCD_PWR_ENn, OMAP_PIN_OUTPUT);
> +     omap_mux_init_gpio(HDMI_TRCVR_PDn, OMAP_PIN_OUTPUT);

Shouldn't you mux the pins, before you access the GPIO
(e.g. before the gpio_request_array()).
Are there any safety problems?

> +
> +     r = omap_display_init(&mcx_dss_data);
> +     if (r) {
> +             pr_err("Failed to register DSS device\n");
> +             gpio_free_array(mcx_dss_gpios, ARRAY_SIZE(mcx_dss_gpios));
> +     }
> +}

[...]

> +#define TOUCH_INT_GPIO       170
> +
> +static int __init mcx_ts_init(void)
> +{
> +     struct i2c_board_info mcx_edt_ts[] = {
> +             {
> +                     I2C_BOARD_INFO("edt_ts", 0x38),
> +                     .irq = gpio_to_irq(TOUCH_INT_GPIO),
> +             },
> +     };
> +     int err;
> +
> +     err = gpio_request_one(TOUCH_INT_GPIO, GPIOF_IN, "TOUCH_INT");
> +     if (err < 0) {
> +             pr_err("failed to get TOUCH_INT gpio\n");
> +             return -ENODEV;
> +     }
> +     omap_mux_init_gpio(TOUCH_INT_GPIO, OMAP_PIN_INPUT);

Same here...

> +
> +     return i2c_register_board_info(3, mcx_edt_ts, 1);
> +}

[...]

> +#define USB_HOST_PWR_EN              132
> +#define USB_PHY1_RESET               154
> +#define USB_PHY2_RESET               152
> +
> +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
> +
> +     .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
> +     .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
> +     .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
> +
> +     .phy_reset  = true,
> +     .reset_gpio_port[0]  = USB_PHY1_RESET,
> +     .reset_gpio_port[1]  = USB_PHY2_RESET,
> +     .reset_gpio_port[2]  = -EINVAL
> +};
> +
> +#define SD_CARD_CD           61
> +#define SD_CARD_WP           65
> +
> +static struct omap2_hsmmc_info mmc[] = {
> +     {
> +             .mmc            = 1,
> +             .caps           = MMC_CAP_4_BIT_DATA,
> +             .gpio_cd        = SD_CARD_CD,
> +             .gpio_wp        = SD_CARD_WP,
> +             .ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34 |
> +                                     MMC_VDD_165_195,

The ocr_mask will be overridden, by the following patch:
-----------------
commit e89715a7e48d505f42813a4e3ee0f0efb49832ba
Author: Abhilash K V <[email protected]>
Date:   Fri Dec 9 12:27:36 2011 -0800

    ARM: OMAP: hsmmc: Support for AM3517 MMC1 voltages
--------------

in Tony's hsmmc branch.

IMO it should be fixed, by adding a check if the ocr_mask is
already set...
I can't send a patch for this right now...

[...]

> +     },
> +     {}      /* Terminator */
> +};
> +
> +#ifdef CONFIG_OMAP_MUX
> +static struct omap_board_mux board_mux[] __initdata = {
> +     OMAP3_MUX(CHASSIS_DMAREQ3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
> +     OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT |
> +                     OMAP_PULL_ENA | OMAP_PULL_UP),
> +     OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
> +     OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
> +     OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT |
> +                     OMAP_PULL_ENA | OMAP_PULL_UP),

Hmm... pullup for output? Is this needed for kind of safety?

[...]

> +static void __init mcx_init(void)
> +{
> +     int err;
> +
> +     omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
> +     mcx_i2c_init();
> +     platform_add_devices(mcx_devices, ARRAY_SIZE(mcx_devices));
> +     omap_serial_init();

Shouldn't this one be before the mcx_i2c_init() call?

> +
> +     mcx_display_init();
> +
> +     /* Configure EHCI ports */
> +     err = gpio_request_one(USB_HOST_PWR_EN, GPIOF_OUT_INIT_HIGH,
> +                     "USB_HOST_PWR_EN");
> +     if (err)
> +             pr_warn("Failed to request USB host power enable GPIO\n");

empty line here will improve the readability.

> +     omap_mux_init_gpio(USB_HOST_PWR_EN, OMAP_PIN_OUTPUT);
> +     omap_mux_init_gpio(USB_PHY1_RESET, OMAP_PIN_OUTPUT);
> +     omap_mux_init_gpio(USB_PHY2_RESET, OMAP_PIN_OUTPUT);

once again mux after gpio_request?

> +     usbhs_init(&usbhs_bdata);
> +     omap_nand_flash_init(NAND_BUSWIDTH_16, mcx_nand_partitions,
> +                          ARRAY_SIZE(mcx_nand_partitions));
> +     /* Ethernet */
> +     am35xx_ethernet_init(MCX_MDIO_FREQUENCY, 1);
> +
> +     /* MMC init */
> +     omap_mux_init_gpio(SD_CARD_WP, OMAP_PIN_INPUT);
> +     omap_mux_init_gpio(SD_CARD_CD, OMAP_PIN_INPUT);
> +     omap2_hsmmc_init(mmc);
> +}

[...]


-- 
Regards,
Igor.
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to