> > > > /** > > * usb_enumerate_device_otg - FIXME (usbcore-internal) @@ -2261,21 > > +2259,6 @@ static int usb_enumerate_device_otg(struct usb_device *udev) > > } > > } > > } > > - > > - if (!is_targeted(udev)) { > > - > > - /* Maybe it can talk to us, though we can't talk to it. > > - * (Includes HNP test device.) > > - */ > > - if (udev->bus->b_hnp_enable || udev->bus->is_b_host) { > > - err = usb_port_suspend(udev, PMSG_SUSPEND); > > - if (err < 0) > > - dev_dbg(&udev->dev, "HNP fail, %d\n", err); > > - } > > - err = -ENOTSUPP; > > If I did not miss anything then I see an issue if above hunk is removed. > > Suppose, there is an OTG B device which is not supported by host, then > the above hunk was suspending the bus so that B device can get a chance > to become host. By removing above hunk, how do we cater this scenario? > > ~Pratyush > > PS: All other changes of the series seems fine to me. > Thanks, Pratyush, I will change the code like below to cover this case. + if (IS_ENABLED(CONFIG_USB_OTG_WHITELIST) && hcd->tpl_support && + !is_targeted(udev) && IS_ENABLED(CONFIG_USB_OTG)) { + /* Maybe it can talk to us, though we can't talk to it. + * (Includes HNP test device.) + */ + if (udev->bus->b_hnp_enable || udev->bus->is_b_host) { + err = usb_port_suspend(udev, PMSG_AUTO_SUSPEND); + if (err < 0) + dev_dbg(&udev->dev, "HNP fail, %d\n", err); + } + return -ENOTSUPP; + } + Peter > > - goto fail; > > - } > > -fail: > > #endif > > return err; > > } > > @@ -2319,6 +2302,9 @@ static int usb_enumerate_device(struct usb_device > *udev) > > if (err < 0) > > return err; > > > > + if (!is_targeted(udev)) > > + return -ENOTSUPP; > > + > > usb_detect_interface_quirks(udev); > > > > return 0; > > diff --git a/drivers/usb/core/otg_whitelist.h > > b/drivers/usb/core/otg_whitelist.h > > index e8cdce5..4d6a134 100644 > > --- a/drivers/usb/core/otg_whitelist.h > > +++ b/drivers/usb/core/otg_whitelist.h > > @@ -10,8 +10,8 @@ > > */ > > > > /* > > - * This OTG Whitelist is the OTG "Targeted Peripheral List". It > > should > > - * mostly use of USB_DEVICE() or USB_DEVICE_VER() entries.. > > + * This OTG and Embedded Host Whitelist is "Targeted Peripheral List". > > + * It should mostly use of USB_DEVICE() or USB_DEVICE_VER() entries.. > > * > > * YOU _SHOULD_ CHANGE THIS LIST TO MATCH YOUR PRODUCT AND ITS TESTING! > > */ > > @@ -49,9 +49,9 @@ static struct usb_device_id whitelist_table [] = { > > static int is_targeted(struct usb_device *dev) { > > struct usb_device_id *id = whitelist_table; > > + struct usb_hcd *hcd = bus_to_hcd(dev->bus); > > > > - /* possible in developer configs only! */ > > - if (!dev->bus->otg_port) > > + if (!IS_ENABLED(CONFIG_USB_OTG_WHITELIST) || !hcd->tpl_support) > > return 1; > > > > /* HNP test device is _never_ targeted (see OTG spec 6.6.6) */ @@ > > -99,14 +99,12 @@ static int is_targeted(struct usb_device *dev) > > /* add other match criteria here ... */ > > > > > > - /* OTG MESSAGE: report errors here, customize to match your product > */ > > - dev_err(&dev->dev, "device v%04x p%04x is not supported\n", > > - le16_to_cpu(dev->descriptor.idVendor), > > - le16_to_cpu(dev->descriptor.idProduct)); > > -#ifdef CONFIG_USB_OTG_WHITELIST > > + /* > > + * Required error message for OTG & EH compliance test, > > + * customize it to match your product > > + */ > > + dev_err(&dev->dev, "unsupported device\n"); > > + > > return 0; > > -#else > > - return 1; > > -#endif > > } > > > > -- > > 1.7.9.5 > > > > -- > > 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