From: Sandeep Singh <sandeep.si...@amd.com>

The following commit cause a regression on ATI chipsets.
'commit e788787ef4f9 ("usb:xhci:Add quirk for Certain
failing HP keyboard on reset after resume")'

This causes pinfo->smbus_dev to be wrongly set to NULL on
systems with the ATI chipset that this function checks for first.

Added conditional check for AMD chipsets to avoid the overwriting
pinfo->smbus_dev.

Reported-by: Ben Hutchings <b...@decadent.org.uk>
Signed-off-by: Sandeep Singh <sandeep.si...@amd.com>
Signed-off-by: Shyam Sundar S K <shyam-sundar....@amd.com>
cc: Nehal Shah <nehal-bakulchandra.s...@amd.com>
---
 drivers/usb/host/pci-quirks.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index 5f4ca78..58b9685 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -142,29 +142,30 @@ static int amd_chipset_sb_type_init(struct 
amd_chipset_info *pinfo)
                        pinfo->sb_type.gen = AMD_CHIPSET_SB700;
                else if (rev >= 0x40 && rev <= 0x4f)
                        pinfo->sb_type.gen = AMD_CHIPSET_SB800;
-       }
-       pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
-                                         0x145c, NULL);
-       if (pinfo->smbus_dev) {
-               pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
        } else {
                pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
                                PCI_DEVICE_ID_AMD_HUDSON2_SMBUS, NULL);
 
-               if (!pinfo->smbus_dev) {
-                       pinfo->sb_type.gen = NOT_AMD_CHIPSET;
-                       return 0;
+               if (pinfo->smbus_dev) {
+                       rev = pinfo->smbus_dev->revision;
+                       if (rev >= 0x11 && rev <= 0x14)
+                               pinfo->sb_type.gen = AMD_CHIPSET_HUDSON2;
+                       else if (rev >= 0x15 && rev <= 0x18)
+                               pinfo->sb_type.gen = AMD_CHIPSET_BOLTON;
+                       else if (rev >= 0x39 && rev <= 0x3a)
+                               pinfo->sb_type.gen = AMD_CHIPSET_YANGTZE;
+               } else {
+                       pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
+                                                         0x145c, NULL);
+                       if (pinfo->smbus_dev) {
+                               rev = pinfo->smbus_dev->revision;
+                               pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
+                       } else {
+                               pinfo->sb_type.gen = NOT_AMD_CHIPSET;
+                               return 0;
+                       }
                }
-
-               rev = pinfo->smbus_dev->revision;
-               if (rev >= 0x11 && rev <= 0x14)
-                       pinfo->sb_type.gen = AMD_CHIPSET_HUDSON2;
-               else if (rev >= 0x15 && rev <= 0x18)
-                       pinfo->sb_type.gen = AMD_CHIPSET_BOLTON;
-               else if (rev >= 0x39 && rev <= 0x3a)
-                       pinfo->sb_type.gen = AMD_CHIPSET_YANGTZE;
        }
-
        pinfo->sb_type.rev = rev;
        return 1;
 }
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to