usb: host: ehci-sys: delete useless bus_to_hcd conversion
authorPeter Chen <peter.chen@freescale.com>
Mon, 17 Aug 2015 02:23:03 +0000 (10:23 +0800)
committerBen Hutchings <ben@decadent.org.uk>
Tue, 13 Oct 2015 02:46:06 +0000 (03:46 +0100)
commit 0521cfd06e1ebcd575e7ae36aab068b38df23850 upstream.

The ehci platform device's drvdata is the pointer of struct usb_hcd
already, so we doesn't need to call bus_to_hcd conversion again.

Signed-off-by: Peter Chen <peter.chen@freescale.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[bwh: Backported to 3.2: Unfortunately some EHCI platform sub-drivers
 point drvdata to a private structure, so only create and remove the
 attributes if drvdata has been set as expected.]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/usb/host/ehci-sysfs.c

index 14ced00..ddaaead 100644 (file)
@@ -29,7 +29,7 @@ static ssize_t show_companion(struct device *dev,
        int                     count = PAGE_SIZE;
        char                    *ptr = buf;
 
-       ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
+       ehci = hcd_to_ehci(dev_get_drvdata(dev));
        nports = HCS_N_PORTS(ehci->hcs_params);
 
        for (index = 0; index < nports; ++index) {
@@ -54,7 +54,7 @@ static ssize_t store_companion(struct device *dev,
        struct ehci_hcd         *ehci;
        int                     portnum, new_owner;
 
-       ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
+       ehci = hcd_to_ehci(dev_get_drvdata(dev));
        new_owner = PORT_OWNER;         /* Owned by companion */
        if (sscanf(buf, "%d", &portnum) != 1)
                return -EINVAL;
@@ -85,7 +85,7 @@ static ssize_t show_uframe_periodic_max(struct device *dev,
        struct ehci_hcd         *ehci;
        int                     n;
 
-       ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
+       ehci = hcd_to_ehci(dev_get_drvdata(dev));
        n = scnprintf(buf, PAGE_SIZE, "%d\n", ehci->uframe_periodic_max);
        return n;
 }
@@ -102,7 +102,7 @@ static ssize_t store_uframe_periodic_max(struct device *dev,
        unsigned long           flags;
        ssize_t                 ret;
 
-       ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
+       ehci = hcd_to_ehci(dev_get_drvdata(dev));
        if (kstrtouint(buf, 0, &uframe_periodic_max) < 0)
                return -EINVAL;
 
@@ -167,6 +167,9 @@ static inline int create_sysfs_files(struct ehci_hcd *ehci)
        struct device   *controller = ehci_to_hcd(ehci)->self.controller;
        int     i = 0;
 
+       if (dev_get_drvdata(controller) != ehci_to_hcd(ehci))
+               return 0;
+
        /* with integrated TT there is no companion! */
        if (!ehci_is_TDI(ehci))
                i = device_create_file(controller, &dev_attr_companion);
@@ -182,6 +185,9 @@ static inline void remove_sysfs_files(struct ehci_hcd *ehci)
 {
        struct device   *controller = ehci_to_hcd(ehci)->self.controller;
 
+       if (dev_get_drvdata(controller) != ehci_to_hcd(ehci))
+               return;
+
        /* with integrated TT there is no companion! */
        if (!ehci_is_TDI(ehci))
                device_remove_file(controller, &dev_attr_companion);