[U-Boot] [PATCH V2 15/18] arm: mx6: cm_fx6: add usb support

Nikita Kiryanov
2014-08-19T14:49:49Z

Hi Igor,

On 13/08/14 17:04, Igor Grinberg wrote:
> On 08/10/14 20:12, Nikita Kiryanov wrote:
>> Add USB and USB OTG host support for Compulab CM-FX6 CoM.
>>
>> Cc: Igor Grinberg <grinberg@compulab.co.il>
>> Cc: Stefano Babic <sbabic@denx.de>
>> Cc: Tom Rini <trini@ti.com>
>> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
>> ---
>> Changes in V2:
>> - No changes
>>
>> board/compulab/cm_fx6/cm_fx6.c | 75 ++++++++++++++++++++++++++++++++++++++++++
>> board/compulab/cm_fx6/common.h | 3 ++
>> include/configs/cm_fx6.h | 10 ++++++
>> 3 files changed, 88 insertions(+)
>>
>> diff --git a/board/compulab/cm_fx6/cm_fx6.c b/board/compulab/cm_fx6/cm_fx6.c
>> index e993de2..28c54b4 100644
>> --- a/board/compulab/cm_fx6/cm_fx6.c
>> +++ b/board/compulab/cm_fx6/cm_fx6.c
>
> [...]
>
>> +static int cm_fx6_usb_hub_reset(void)
>> +{
>> + int err;
>> +
>> + err = gpio_request(CM_FX6_USB_HUB_RST, "usb hub rst");
>> + if (err) {
>> + printf("USB hub rst gpio request failed: %d\n", err);
>> + return -1;
>> + }
>> +
>> + SETUP_IOMUX_PAD(PAD_SD3_RST__GPIO7_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL));
>> + gpio_direction_output(CM_FX6_USB_HUB_RST, 0);
>> + udelay(10);
>> + gpio_direction_output(CM_FX6_USB_HUB_RST, 1);
>> + mdelay(1);
>> +
>> + return 0;
>> +}
>> +
>> +static void cm_fx6_init_usb_otg(void)
>
> Can this function also return int as the one above?

Sure.

>
>> +{
>> + int ret;
>> + struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
>> +
>> + ret = gpio_request(SB_FX6_USB_OTG_PWR, "usb-pwr");
>> + if (ret)
>> + printf("USB OTG pwr gpio request failed: %d\n", ret);
>> +
>> + SETUP_IOMUX_PAD(PAD_EIM_D22__GPIO3_IO22 | MUX_PAD_CTRL(NO_PAD_CTRL));
>> + SETUP_IOMUX_PAD(PAD_ENET_RX_ER__USB_OTG_ID |
>> + MUX_PAD_CTRL(WEAK_PULLDOWN));
>> + clrbits_le32(&iomux->gpr[1], IOMUXC_GPR1_OTG_ID_MASK);
>> + /* disable ext. charger detect, or it'll affect signal quality at dp. */
>> + gpio_direction_output(SB_FX6_USB_OTG_PWR, 0);
>> +}
>> +
>> +#define MX6_USBNC_BASEADDR 0x2184800
>> +#define USBNC_USB_H1_PWR_POL (1 << 9)
>> +int board_ehci_hcd_init(int port)
>> +{
>> + u32 *usbnc_usb_uh1_ctrl = (u32 *)(MX6_USBNC_BASEADDR + 4);
>> + u32 val;
>> +
>> + switch (port) {
>> + case 0:
>> + cm_fx6_init_usb_otg();
>> + break;
>> + case 1:
>> + SETUP_IOMUX_PAD(PAD_GPIO_0__USB_H1_PWR |
>> + MUX_PAD_CTRL(NO_PAD_CTRL));
>> +
>> + /* Set PWR polarity to match power switch's enable polarity */
>> + val = __raw_readl(usbnc_usb_uh1_ctrl);
>> + val |= USBNC_USB_H1_PWR_POL;
>> + __raw_writel(val, usbnc_usb_uh1_ctrl);
>
> Can we have setbits_le32() here?

Sure.

>
>> + return cm_fx6_usb_hub_reset();
>> + default:
>> + break;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +int board_ehci_power(int port, int on)
>> +{
>> + return port ? 0 : gpio_direction_output(SB_FX6_USB_OTG_PWR, on);
>
> Here port is a port number, not some bool conditional.
> Please be explicit about it and don't use the construct above for such cases.

OK I'll rewrite it.