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.

Signed-off-by: Lan Tianyu <tianyu....@intel.com>
---
 drivers/usb/core/hub.c |   26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 7a893b0..05bdb04 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1978,6 +1978,14 @@ void usb_disconnect(struct usb_device **pdev)
        usb_disable_device(udev, 0);
        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_unlock_device(udev);
 
@@ -2270,6 +2278,24 @@ int usb_new_device(struct usb_device *udev)
                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);
        usb_mark_last_busy(udev);
        pm_runtime_put_sync_autosuspend(&udev->dev);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to