Re: [PATCH v2 1/1] usb: core: hub: controller driver name may be NULL

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

 



On Wed, 19 Jul 2017, Peter Chen wrote:

> The controller driver may be NULL if the controller device
> is the middle device between platform device and roothub.
> This middle device may not need a device driver due to all
> hardware control can be at platform device driver, this
> platform device is usually a dual-role USB controller device.
> 
> The benefit of using this middle device is we can keep both
> controller device's private data (known as struct usb_hcd)
> for USB core use, and platform device's private data for
> platform driver use.
> 
> Signed-off-by: Peter Chen <peter.chen@xxxxxxx>
> ---
> Changes for v2:
> - Simplify the code per Alan's suggestion

Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>

>  drivers/usb/core/hub.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index 4ee2a6a..acba56b 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -4383,6 +4383,7 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
>  	enum usb_device_speed	oldspeed = udev->speed;
>  	const char		*speed;
>  	int			devnum = udev->devnum;
> +	const char		*driver_name;
>  
>  	/* root hub ports have a slightly longer reset period
>  	 * (from USB 2.0 spec, section 7.1.7.5)
> @@ -4450,11 +4451,23 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
>  	else
>  		speed = usb_speed_string(udev->speed);
>  
> +	/*
> +	 * The controller driver may be NULL if the controller device
> +	 * is the middle device between platform device and roothub.
> +	 * This middle device may not need a device driver due to
> +	 * all hardware control can be at platform device driver, this
> +	 * platform device is usually a dual-role USB controller device.
> +	 */
> +	if (udev->bus->controller->driver)
> +		driver_name = udev->bus->controller->driver->name;
> +	else
> +		driver_name = udev->bus->sysdev->driver->name;
> +
>  	if (udev->speed < USB_SPEED_SUPER)
>  		dev_info(&udev->dev,
>  				"%s %s USB device number %d using %s\n",
>  				(udev->config) ? "reset" : "new", speed,
> -				devnum, udev->bus->controller->driver->name);
> +				devnum, driver_name);
>  
>  	/* Set up TT records, if needed  */
>  	if (hdev->tt) {
> @@ -4586,7 +4599,7 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
>  						"%s SuperSpeed%s USB device number %d using %s\n",
>  						(udev->config) ? "reset" : "new",
>  					 (udev->speed == USB_SPEED_SUPER_PLUS) ? "Plus" : "",
> -						devnum, udev->bus->controller->driver->name);
> +					 devnum, driver_name);
>  			}
>  
>  			/* cope with hardware quirkiness:
> 

--
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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux