Skip to content

Commit

Permalink
usb: Create link files between child device and usb port device.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Lan Tianyu authored and Greg Kroah-Hartman committed Jan 21, 2013
1 parent cef7468 commit fde2638
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions drivers/usb/core/hub.c
Original file line number Diff line number Diff line change
Expand Up @@ -1989,6 +1989,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);

Expand Down Expand Up @@ -2281,6 +2289,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);
Expand Down

0 comments on commit fde2638

Please sign in to comment.