On Mon, 19 Mar 2012, Lan Tianyu wrote: > The usb port is a device in the acpi table but it's not in the linux > usb subsystem. USB hub port doesn't have struct device. So the acpi > glue framework only can cover the usb port connected with usb device > and store the acpi handle to struct device.archdata.acpi_handle. This > patch gets the hub port's acpi_handle and store it in the port's platform_data > to resolve no attached device no binding problem. The acpi method "_UPC" > and "_PLD" can be accessed without attached device. > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -1238,6 +1238,7 @@ static int hub_configure(struct usb_hub *hub, > hub->indicator [0] = INDICATOR_CYCLE; > > hub_activate(hub, HUB_INIT); > + usb_acpi_bind_hub_ports(hdev, hub->descriptor->bNbrPorts); Use hdev->maxchild instead of hub->descriptor->bNbrPorts. > @@ -105,6 +114,33 @@ static struct acpi_bus_type usb_acpi_bus = { > .find_device = usb_acpi_find_device, > }; > > +int usb_acpi_bind_hub_ports(struct usb_device *hdev, int portnum) Don't pass portnum as an argument; use hdev->maxchild instead. > +{ > + acpi_handle hub_handle = NULL; > + acpi_handle port_handle = NULL; > + struct device *dev = &hdev->dev; > + int i; > + > + hub_handle = DEVICE_ACPI_HANDLE(dev); > + if (!hub_handle) > + return -ENODEV; > + > + /** > + * The usb hub port is not a device in the usb subsystem but it is a device > + * in the acpi table. Store it's acpi handle in the platform data of usb s/it's/its/ "its" is a possessive pronoun, but "it's" is a contraction of "it is" or "it has". Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html