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