aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core
diff options
context:
space:
mode:
authorLan Tianyu <tianyu.lan@intel.com>2013-01-19 12:53:33 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-01-20 19:10:46 -0500
commitfde26380315d7d57816efc143b7924c82dba764d (patch)
treefd715e34b12903d40f0f30b7c8b7359ab8e31826 /drivers/usb/core
parentcef7468caff29d3333fba4d0ececd82063ce80d5 (diff)
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>
Diffstat (limited to 'drivers/usb/core')
-rw-r--r--drivers/usb/core/hub.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index f6ff1302f343..cfdd4eecc5a9 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1989,6 +1989,14 @@ void usb_disconnect(struct usb_device **pdev)
1989 usb_disable_device(udev, 0); 1989 usb_disable_device(udev, 0);
1990 usb_hcd_synchronize_unlinks(udev); 1990 usb_hcd_synchronize_unlinks(udev);
1991 1991
1992 if (udev->parent) {
1993 struct usb_port *port_dev =
1994 hdev_to_hub(udev->parent)->ports[udev->portnum - 1];
1995
1996 sysfs_remove_link(&udev->dev.kobj, "port");
1997 sysfs_remove_link(&port_dev->dev.kobj, "device");
1998 }
1999
1992 usb_remove_ep_devs(&udev->ep0); 2000 usb_remove_ep_devs(&udev->ep0);
1993 usb_unlock_device(udev); 2001 usb_unlock_device(udev);
1994 2002
@@ -2281,6 +2289,24 @@ int usb_new_device(struct usb_device *udev)
2281 goto fail; 2289 goto fail;
2282 } 2290 }
2283 2291
2292 /* Create link files between child device and usb port device. */
2293 if (udev->parent) {
2294 struct usb_port *port_dev =
2295 hdev_to_hub(udev->parent)->ports[udev->portnum - 1];
2296
2297 err = sysfs_create_link(&udev->dev.kobj,
2298 &port_dev->dev.kobj, "port");
2299 if (err)
2300 goto fail;
2301
2302 err = sysfs_create_link(&port_dev->dev.kobj,
2303 &udev->dev.kobj, "device");
2304 if (err) {
2305 sysfs_remove_link(&udev->dev.kobj, "port");
2306 goto fail;
2307 }
2308 }
2309
2284 (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev); 2310 (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
2285 usb_mark_last_busy(udev); 2311 usb_mark_last_busy(udev);
2286 pm_runtime_put_sync_autosuspend(&udev->dev); 2312 pm_runtime_put_sync_autosuspend(&udev->dev);