Commit fde26380 authored by Lan Tianyu's avatar Lan Tianyu Committed by Greg Kroah-Hartman

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: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarLan Tianyu <tianyu.lan@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cef7468c
...@@ -1989,6 +1989,14 @@ void usb_disconnect(struct usb_device **pdev) ...@@ -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) ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment