git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
usb: xhci: Fix panic if disconnect
[pandora-kernel.git]
/
drivers
/
usb
/
host
/
ehci-sysfs.c
diff --git
a/drivers/usb/host/ehci-sysfs.c
b/drivers/usb/host/ehci-sysfs.c
index
14ced00
..
ddaaead
100644
(file)
--- a/
drivers/usb/host/ehci-sysfs.c
+++ b/
drivers/usb/host/ehci-sysfs.c
@@
-29,7
+29,7
@@
static ssize_t show_companion(struct device *dev,
int count = PAGE_SIZE;
char *ptr = buf;
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) {
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;
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;
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;
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;
}
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;
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;
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;
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);
/* 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;
{
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);
/* with integrated TT there is no companion! */
if (!ehci_is_TDI(ehci))
device_remove_file(controller, &dev_attr_companion);