Browse Source

MLK-14445-5 ehci-mx6: Add OTG ID detecting by GPIO

The i.MX7ulp EVK board uses GPIO to detect ID for USB OTG0,
but when using DM USB driver, it is hard coded to use OTG ID pin.
Add a board override function that when extcon property is provided,
the function can check the GPIO to get ID.

Signed-off-by: Ye Li <ye.li@nxp.com>
imx_v2017.03_4.9.11_1.0.0_ga
Ye Li 4 years ago
parent
commit
8382781a59
1 changed files with 27 additions and 0 deletions
  1. +27
    -0
      drivers/usb/host/ehci-mx6.c

+ 27
- 0
drivers/usb/host/ehci-mx6.c View File

@ -492,6 +492,25 @@ static const struct ehci_ops mx6_ehci_ops = {
.init_after_reset = mx6_init_after_reset
};
/**
* board_ehci_usb_phy_mode - override usb phy mode
* @port: usb host/otg port
*
* Target board specific, override usb_phy_mode.
* When usb-otg is used as usb host port, iomux pad usb_otg_id can be
* left disconnected in this case usb_phy_mode will not be able to identify
* the phy mode that usb port is used.
* Machine file overrides board_usb_phy_mode.
* When the extcon property is set in DTB, machine must provide this function, otherwise
* it will default return HOST.
*
* Return: USB_INIT_DEVICE or USB_INIT_HOST
*/
int __weak board_ehci_usb_phy_mode(struct udevice *dev)
{
return USB_INIT_HOST;
}
static int ehci_usb_phy_mode(struct udevice *dev)
{
struct usb_platdata *plat = dev_get_platdata(dev);
@ -544,6 +563,7 @@ static int ehci_usb_ofdata_to_platdata(struct udevice *dev)
{
struct usb_platdata *plat = dev_get_platdata(dev);
const char *mode;
const struct fdt_property *extcon;
mode = fdt_getprop(gd->fdt_blob, dev_of_offset(dev), "dr_mode", NULL);
if (mode) {
@ -557,6 +577,13 @@ static int ehci_usb_ofdata_to_platdata(struct udevice *dev)
return -EINVAL;
return 0;
} else {
extcon = fdt_get_property(gd->fdt_blob, dev_of_offset(dev),
"extcon", NULL);
if (extcon) {
plat->init_type = board_ehci_usb_phy_mode(dev);
return 0;
}
}
return ehci_usb_phy_mode(dev);


Loading…
Cancel
Save