git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
drivers
/
usb
/
host
/
ohci-pci.c
diff --git
a/drivers/usb/host/ohci-pci.c
b/drivers/usb/host/ohci-pci.c
index
73d9aee
..
b611582
100644
(file)
--- a/
drivers/usb/host/ohci-pci.c
+++ b/
drivers/usb/host/ohci-pci.c
@@
-35,9
+35,8
@@
ohci_pci_reset (struct usb_hcd *hcd)
{
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
{
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
- ohci->regs = hcd->regs;
- ohci->next_statechange = jiffies;
- return hc_reset (ohci);
+ ohci_hcd_init (ohci);
+ return ohci_init (ohci);
}
static int __devinit
}
static int __devinit
@@
-46,11
+45,6
@@
ohci_pci_start (struct usb_hcd *hcd)
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
int ret;
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
int ret;
- ohci->hcca = dma_alloc_coherent (hcd->self.controller,
- sizeof *ohci->hcca, &ohci->hcca_dma, 0);
- if (!ohci->hcca)
- return -ENOMEM;
-
if(hcd->self.controller && hcd->self.controller->bus == &pci_bus_type) {
struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
if(hcd->self.controller && hcd->self.controller->bus == &pci_bus_type) {
struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
@@
-61,6
+55,7
@@
ohci_pci_start (struct usb_hcd *hcd)
&& pdev->device == 0x740c) {
ohci->flags = OHCI_QUIRK_AMD756;
ohci_info (ohci, "AMD756 erratum 4 workaround\n");
&& pdev->device == 0x740c) {
ohci->flags = OHCI_QUIRK_AMD756;
ohci_info (ohci, "AMD756 erratum 4 workaround\n");
+ // also somewhat erratum 10 (suspend/resume issues)
}
/* FIXME for some of the early AMD 760 southbridges, OHCI
}
/* FIXME for some of the early AMD 760 southbridges, OHCI
@@
-92,25
+87,16
@@
ohci_pci_start (struct usb_hcd *hcd)
ohci_info (ohci, "Using NSC SuperIO setup\n");
}
}
ohci_info (ohci, "Using NSC SuperIO setup\n");
}
}
-
- }
-
- memset (ohci->hcca, 0, sizeof (struct ohci_hcca));
- if ((ret = ohci_mem_init (ohci)) < 0) {
- ohci_stop (hcd);
- return ret;
}
}
- if (hc_start (ohci) < 0) {
+ /* NOTE: there may have already been a first reset, to
+ * keep bios/smm irqs from making trouble
+ */
+ if ((ret = ohci_run (ohci)) < 0) {
ohci_err (ohci, "can't start\n");
ohci_stop (hcd);
ohci_err (ohci, "can't start\n");
ohci_stop (hcd);
- return
-EBUSY
;
+ return
ret
;
}
}
- create_debug_files (ohci);
-
-#ifdef DEBUG
- ohci_dump (ohci, 1);
-#endif
return 0;
}
return 0;
}
@@
-121,25
+107,22
@@
static int ohci_pci_suspend (struct usb_hcd *hcd, u32 state)
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
/* suspend root hub, hoping it keeps power during suspend */
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
/* suspend root hub, hoping it keeps power during suspend */
-
while
(time_before (jiffies, ohci->next_statechange))
+
if
(time_before (jiffies, ohci->next_statechange))
msleep (100);
#ifdef CONFIG_USB_SUSPEND
(void) usb_suspend_device (hcd->self.root_hub, state);
#else
msleep (100);
#ifdef CONFIG_USB_SUSPEND
(void) usb_suspend_device (hcd->self.root_hub, state);
#else
-
down (&hcd->self.root_hub->serialize
);
+
usb_lock_device (hcd->self.root_hub
);
(void) ohci_hub_suspend (hcd);
(void) ohci_hub_suspend (hcd);
- u
p (&hcd->self.root_hub->serialize
);
+ u
sb_unlock_device (hcd->self.root_hub
);
#endif
/* let things settle down a bit */
msleep (100);
#ifdef CONFIG_PMAC_PBOOK
#endif
/* let things settle down a bit */
msleep (100);
#ifdef CONFIG_PMAC_PBOOK
- if (_machine == _MACH_Pmac)
- disable_irq ((to_pci_dev(hcd->self.controller))->irq);
-
- {
+ if (_machine == _MACH_Pmac) {
struct device_node *of_node;
/* Disable USB PAD & cell clock */
struct device_node *of_node;
/* Disable USB PAD & cell clock */
@@
-147,7
+130,7
@@
static int ohci_pci_suspend (struct usb_hcd *hcd, u32 state)
if (of_node)
pmac_call_feature(PMAC_FTR_USB_ENABLE, of_node, 0, 0);
}
if (of_node)
pmac_call_feature(PMAC_FTR_USB_ENABLE, of_node, 0, 0);
}
-#endif
+#endif
/* CONFIG_PMAC_PBOOK */
return 0;
}
return 0;
}
@@
-158,7
+141,7
@@
static int ohci_pci_resume (struct usb_hcd *hcd)
int retval = 0;
#ifdef CONFIG_PMAC_PBOOK
int retval = 0;
#ifdef CONFIG_PMAC_PBOOK
- {
+
if (_machine == _MACH_Pmac)
{
struct device_node *of_node;
/* Re-enable USB PAD & cell clock */
struct device_node *of_node;
/* Re-enable USB PAD & cell clock */
@@
-166,27
+149,20
@@
static int ohci_pci_resume (struct usb_hcd *hcd)
if (of_node)
pmac_call_feature (PMAC_FTR_USB_ENABLE, of_node, 0, 1);
}
if (of_node)
pmac_call_feature (PMAC_FTR_USB_ENABLE, of_node, 0, 1);
}
-#endif
+#endif
/* CONFIG_PMAC_PBOOK */
/* resume root hub */
/* resume root hub */
-
while
(time_before (jiffies, ohci->next_statechange))
+
if
(time_before (jiffies, ohci->next_statechange))
msleep (100);
#ifdef CONFIG_USB_SUSPEND
/* get extra cleanup even if remote wakeup isn't in use */
retval = usb_resume_device (hcd->self.root_hub);
#else
msleep (100);
#ifdef CONFIG_USB_SUSPEND
/* get extra cleanup even if remote wakeup isn't in use */
retval = usb_resume_device (hcd->self.root_hub);
#else
-
down (&hcd->self.root_hub->serialize
);
+
usb_lock_device (hcd->self.root_hub
);
retval = ohci_hub_resume (hcd);
retval = ohci_hub_resume (hcd);
- u
p (&hcd->self.root_hub->serialize
);
+ u
sb_unlock_device (hcd->self.root_hub
);
#endif
#endif
- if (retval == 0) {
- hcd->self.controller->power.power_state = 0;
-#ifdef CONFIG_PMAC_PBOOK
- if (_machine == _MACH_Pmac)
- enable_irq (to_pci_dev(hcd->self.controller)->irq);
-#endif
- }
return retval;
}
return retval;
}
@@
-197,6
+173,8
@@
static int ohci_pci_resume (struct usb_hcd *hcd)
static const struct hc_driver ohci_pci_hc_driver = {
.description = hcd_name,
static const struct hc_driver ohci_pci_hc_driver = {
.description = hcd_name,
+ .product_desc = "OHCI Host Controller",
+ .hcd_priv_size = sizeof(struct ohci_hcd),
/*
* generic hardware linkage
/*
* generic hardware linkage
@@
-215,12
+193,6
@@
static const struct hc_driver ohci_pci_hc_driver = {
#endif
.stop = ohci_stop,
#endif
.stop = ohci_stop,
- /*
- * memory lifecycle (except per-request)
- */
- .hcd_alloc = ohci_hcd_alloc,
- .hcd_free = ohci_hcd_free,
-
/*
* managing i/o requests and associated device resources
*/
/*
* managing i/o requests and associated device resources
*/
@@
-279,7
+251,7
@@
static int __init ohci_hcd_pci_init (void)
pr_debug ("%s: block sizes: ed %Zd td %Zd\n", hcd_name,
sizeof (struct ed), sizeof (struct td));
pr_debug ("%s: block sizes: ed %Zd td %Zd\n", hcd_name,
sizeof (struct ed), sizeof (struct td));
- return pci_
module_init
(&ohci_pci_driver);
+ return pci_
register_driver
(&ohci_pci_driver);
}
module_init (ohci_hcd_pci_init);
}
module_init (ohci_hcd_pci_init);