diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-11-20 16:53:21 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-11-20 16:53:21 -0500 |
| commit | ba721d318b24154eb7806a8673d3fc030fd39f7e (patch) | |
| tree | bb83fc812e726882b8bbf62579872ae8b8e8ace3 /drivers/usb/host | |
| parent | 0ca4b6b00113b064c080d26d803d0d7c80fb5dc8 (diff) | |
| parent | 5091b58751d9bf51e92aa9e07f3332dcacc2af1c (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
USB: ACE1001 patch for cp2101.c
USB: usbmon: fix read(2)
USB: gadget rndis: send notifications
USB: gadget rndis: stop windows self-immolation
USB: storage: update unusual_devs entries for Nokia 5300 and 5310
USB: storage: updates unusual_devs entry for the Nokia 6300
usb: musb: fix bug in musb_schedule
USB: fix SB700 usb subsystem hang bug
Diffstat (limited to 'drivers/usb/host')
| -rw-r--r-- | drivers/usb/host/ehci-pci.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index c46a58f9181d..9d0ea573aef6 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
| @@ -66,6 +66,8 @@ static int ehci_pci_setup(struct usb_hcd *hcd) | |||
| 66 | { | 66 | { |
| 67 | struct ehci_hcd *ehci = hcd_to_ehci(hcd); | 67 | struct ehci_hcd *ehci = hcd_to_ehci(hcd); |
| 68 | struct pci_dev *pdev = to_pci_dev(hcd->self.controller); | 68 | struct pci_dev *pdev = to_pci_dev(hcd->self.controller); |
| 69 | struct pci_dev *p_smbus; | ||
| 70 | u8 rev; | ||
| 69 | u32 temp; | 71 | u32 temp; |
| 70 | int retval; | 72 | int retval; |
| 71 | 73 | ||
| @@ -166,6 +168,25 @@ static int ehci_pci_setup(struct usb_hcd *hcd) | |||
| 166 | pci_write_config_byte(pdev, 0x4b, tmp | 0x20); | 168 | pci_write_config_byte(pdev, 0x4b, tmp | 0x20); |
| 167 | } | 169 | } |
| 168 | break; | 170 | break; |
| 171 | case PCI_VENDOR_ID_ATI: | ||
| 172 | /* SB700 old version has a bug in EHCI controller, | ||
| 173 | * which causes usb devices lose response in some cases. | ||
| 174 | */ | ||
| 175 | if (pdev->device == 0x4396) { | ||
| 176 | p_smbus = pci_get_device(PCI_VENDOR_ID_ATI, | ||
| 177 | PCI_DEVICE_ID_ATI_SBX00_SMBUS, | ||
| 178 | NULL); | ||
| 179 | if (!p_smbus) | ||
| 180 | break; | ||
| 181 | rev = p_smbus->revision; | ||
| 182 | if ((rev == 0x3a) || (rev == 0x3b)) { | ||
| 183 | u8 tmp; | ||
| 184 | pci_read_config_byte(pdev, 0x53, &tmp); | ||
| 185 | pci_write_config_byte(pdev, 0x53, tmp | (1<<3)); | ||
| 186 | } | ||
| 187 | pci_dev_put(p_smbus); | ||
| 188 | } | ||
| 189 | break; | ||
| 169 | } | 190 | } |
| 170 | 191 | ||
| 171 | ehci_reset(ehci); | 192 | ehci_reset(ehci); |
