mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 08:02:30 +00:00
usb: Create link files between child device and usb port device.
To show the relationship between usb port and child device, add link file "port" under usb device's sysfs directoy and "device" under usb port device's sysfs directory. They are linked to each other. Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Lan Tianyu <tianyu.lan@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
cef7468caf
commit
fde2638031
1 changed files with 26 additions and 0 deletions
|
@ -1989,6 +1989,14 @@ void usb_disconnect(struct usb_device **pdev)
|
||||||
usb_disable_device(udev, 0);
|
usb_disable_device(udev, 0);
|
||||||
usb_hcd_synchronize_unlinks(udev);
|
usb_hcd_synchronize_unlinks(udev);
|
||||||
|
|
||||||
|
if (udev->parent) {
|
||||||
|
struct usb_port *port_dev =
|
||||||
|
hdev_to_hub(udev->parent)->ports[udev->portnum - 1];
|
||||||
|
|
||||||
|
sysfs_remove_link(&udev->dev.kobj, "port");
|
||||||
|
sysfs_remove_link(&port_dev->dev.kobj, "device");
|
||||||
|
}
|
||||||
|
|
||||||
usb_remove_ep_devs(&udev->ep0);
|
usb_remove_ep_devs(&udev->ep0);
|
||||||
usb_unlock_device(udev);
|
usb_unlock_device(udev);
|
||||||
|
|
||||||
|
@ -2281,6 +2289,24 @@ int usb_new_device(struct usb_device *udev)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Create link files between child device and usb port device. */
|
||||||
|
if (udev->parent) {
|
||||||
|
struct usb_port *port_dev =
|
||||||
|
hdev_to_hub(udev->parent)->ports[udev->portnum - 1];
|
||||||
|
|
||||||
|
err = sysfs_create_link(&udev->dev.kobj,
|
||||||
|
&port_dev->dev.kobj, "port");
|
||||||
|
if (err)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
err = sysfs_create_link(&port_dev->dev.kobj,
|
||||||
|
&udev->dev.kobj, "device");
|
||||||
|
if (err) {
|
||||||
|
sysfs_remove_link(&udev->dev.kobj, "port");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
(void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
|
(void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
|
||||||
usb_mark_last_busy(udev);
|
usb_mark_last_busy(udev);
|
||||||
pm_runtime_put_sync_autosuspend(&udev->dev);
|
pm_runtime_put_sync_autosuspend(&udev->dev);
|
||||||
|
|
Loading…
Reference in a new issue