> > On the Renesas R8A7791 SoC based boards there's MAX3355 USB OTG chip and > mini-AB USB connector corresponding to USB port 0 driven either by EHCI/OHCI > or Renesas USBHS gadget controller. And we'd like the host/gadget drivers to > work based on the cable type connected. An 'extcon' driver for MAX3355 has > been written, so we only need to bind to it via device tree which I'm doing in > this patch. > > I wasn't able to find a solution better than checking the cable type at the host > driver probe time and refusing to drive a host if B-cable is connected. > You may need a dual-role/otg driver to do it, which can enable host/device function according to ID pin. Peter > Signed-off-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx> > > --- > The patch is against the 'usb-next' branch of Greg KH's 'usb.git' repo. > It needs the recent 'extcon' core in order to properly handle probe deferral. > > drivers/usb/core/hcd.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > Index: usb/drivers/usb/core/hcd.c > ============================================================ > ======= > --- usb.orig/drivers/usb/core/hcd.c > +++ usb/drivers/usb/core/hcd.c > @@ -42,6 +42,7 @@ > #include <linux/pm_runtime.h> > #include <linux/types.h> > > +#include <linux/extcon.h> > #include <linux/phy/phy.h> > #include <linux/usb.h> > #include <linux/usb/hcd.h> > @@ -2632,6 +2633,23 @@ int usb_add_hcd(struct usb_hcd *hcd, > int retval; > struct usb_device *rhdev; > > + if (IS_ENABLED(CONFIG_EXTCON) && > + of_property_read_bool(hcd->self.controller->of_node, "extcon")) { > + struct extcon_dev *edev; > + > + edev = extcon_get_edev_by_phandle(hcd->self.controller, 0); > + if (IS_ERR(edev)) > + return PTR_ERR(edev); > + > + retval = extcon_get_cable_state(edev, "USB-HOST"); > + if (!retval) { > + dev_err(hcd->self.controller, > + "OTG B-cable plugged in, host driver won't > load\n"); > + return -EINVAL; > + } else if (retval < 0) > + return retval; > + } > + > if (IS_ENABLED(CONFIG_USB_PHY) && !hcd->usb_phy) { > struct usb_phy *phy = usb_get_phy_dev(hcd->self.controller, > 0); > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body > of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at > http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html