Re: [PATCH v2 05/22] doc: dt-binding: usb: add otg related properties

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Thu, Jun 11, 2015 at 05:55:57PM +0300, Roger Quadros wrote:
> > > drivers/usb/core/hub.c
> > > 
> > > static int usb_enumerate_device_otg(struct usb_device *udev)
> > > {
> > > 	int err = 0;
> > > 
> > > #ifdef	CONFIG_USB_OTG
> > > 	/*
> > > 	 * OTG-aware devices on OTG-capable root hubs may be able to use SRP,
> > > 	 * to wake us after we've powered off VBUS; and HNP, switching roles
> > > 	 * "host" to "peripheral".  The OTG descriptor helps figure this out.
> > > 	 */
> > > 	if (!udev->bus->is_b_host
> > > 			&& udev->config
> > > 			&& udev->parent == udev->bus->root_hub) {
> > > 		struct usb_otg_descriptor	*desc = NULL;
> > > 		struct usb_bus			*bus = udev->bus;
> > > 
> > > 		/* descriptor may appear anywhere in config */
> > > 		if (__usb_get_extra_descriptor (udev->rawdescriptors[0],
> > > 					le16_to_cpu(udev->config[0].desc.wTotalLength),
> > > 					USB_DT_OTG, (void **) &desc) == 0) {
> > > 			if (desc->bmAttributes & USB_OTG_HNP) {
> > > 				unsigned		port1 = udev->portnum;
> > > 
> > > 				dev_info(&udev->dev,
> > > 					"Dual-Role OTG device on %sHNP port\n",
> > > 					(port1 == bus->otg_port)
> > > 						? "" : "non-");
> > > 
> > > 				/* enable HNP before suspend, it's simpler */
> > > 				if (port1 == bus->otg_port)
> > > 					bus->b_hnp_enable = 1;
> > > 				err = usb_control_msg(udev,
> > > 					usb_sndctrlpipe(udev, 0),
> > > 					USB_REQ_SET_FEATURE, 0,
> > > 					bus->b_hnp_enable
> > > 						? USB_DEVICE_B_HNP_ENABLE
> > > 						: USB_DEVICE_A_ALT_HNP_SUPPORT,
> > > 					0, NULL, 0, USB_CTRL_SET_TIMEOUT);
> > > 
> > > We're sending out this control request even if this host port is not OTG.
> > > Isn't that wrong?
> > 
> > So send USB_DEVICE_A_ALT_HNP_SUPPORT request.
> > This is correct in OTG 1.x, its intention is to remind the user who is
> > connecting the HNP capable OTG device to a non-OTG port, He can change
> > to another port of this machine which is a OTG port(with HNP).
> 
> I didn't understand.
> If CONFIG_USB_OTG is enabled doesn't mean that this USB host port is OTG host.
Yes, only CONFIG_USB_OTG enabled doesn't mean that this USB host port
is a OTG port, there are might multiple usb host ports, but only one
is a OTG port.
> So it should not send any OTG specific request to device. Right?
Non-otg port(in OTG 1.x protocol) + OTG 1.x device, should send,
otherwise, should not send.

So the code you pasted here was right only for OTG 1.x, I assume
OTG 2.0 has not been released when it was designed. But now it's
out of date, it's wrong if you connect a OTG 2.0 device. 

> 
> > 
> > > 
> > > 				if (err < 0) {
> > > 					/* OTG MESSAGE: report errors here,
> > > 					 * customize to match your product.
> > > 					 */
> > > 					dev_info(&udev->dev,
> > > 						"can't set HNP mode: %d\n",
> > > 						err);
> > > 					bus->b_hnp_enable = 0;
> > > 				}
> > > 
> > > Instead it should be moved inside the if (port1 == bus->otg_port) condition.
> > 
> > Nope, as I explained above, this is really too detailed OTG protocol:)
> > > 
> > > 			}
> > > 		}
> > > 	}
> > > #endif
> > > 	return err;
> > > }
> > > 
> 
> cheers,
> -roger
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux