Re: [RFC PATCH 2/2] USB: Set usb port's DevicerRemovable according acpi information in EHCI

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

 



On Tue, 21 Aug 2012, Lan Tianyu wrote:

> From: "Signed-off-by: Lan Tianyu" <tianyu.lan@xxxxxxxxx>

What happened here?  That's not right.

> ACPI provide "_PLD" and "_UPC" aml methods to describe usb port
> visibility and connectability. This patch is to use those information
> to set usb port's DeviceRemovable.

By the way, what tree are these patches based on?  None of the new 
hub-port stuff seems to be in Greg's USB tree yet.

> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index 65c91300..4c631d3 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -1560,6 +1560,10 @@ static int hub_configure(struct usb_hub *hub,
>  			dev_err(hub->intfdev,
>  				"couldn't create port%d device.\n", i + 1);
>  
> +	/*  Get hub descripor again to sync port's DeviceRemovable
> +	 *  after the usb port devices being created.
> +	 */
> +	get_hub_descriptor(hdev, hub->descriptor);

Why is this needed?  Do you have any reason to think the hub descriptor 
has changed since the first time we retrieved it?


> diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
> index c788022..0a3bb05 100644
> --- a/drivers/usb/host/ehci-hub.c
> +++ b/drivers/usb/host/ehci-hub.c
> @@ -636,6 +636,7 @@ ehci_hub_descriptor (
>  	struct usb_hub_descriptor	*desc
>  ) {
>  	int		ports = HCS_N_PORTS (ehci->hcs_params);
> +	int		i;
>  	u16		temp;
>  
>  	desc->bDescriptorType = 0x29;
> @@ -648,7 +649,14 @@ ehci_hub_descriptor (
>  
>  	/* two bitmaps:  ports removable, and usb 1.0 legacy PortPwrCtrlMask */
>  	memset(&desc->u.hs.DeviceRemovable[0], 0, temp);
> -	memset(&desc->u.hs.DeviceRemovable[temp], 0xff, temp);
> +	memset(&desc->u.hs.DeviceRemovable[temp], 0xff, ltemp);

What is ltemp?  Did you really mean to change this line?

> +
> +	for (i = 1; i <= ports; i++) {
> +		if (usb_get_hub_port_connect_type(hcd->self.root_hub, i);
> +				== USB_PORT_CONNECT_TYPE_HARD_WIRED)
> +			desc->u.hs.DeviceRemovable[ports/8] |= 1 << (i%8);

You have "ports/8" where it should be "i/8".

> +	}
> +
>  
>  	temp = 0x0008;			/* per-port overcurrent reporting */
>  	if (HCS_PPC (ehci->hcs_params))

Alan Stern

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