Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6b422b8 authored by Sandeep Singh's avatar Sandeep Singh Committed by Greg Kroah-Hartman
Browse files

usb:xhci:Fix regression when ATI chipsets detected



The following commit cause a regression on ATI chipsets.
'commit e788787e ("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: default avatarBen Hutchings <ben@decadent.org.uk>
Fixes: e788787e ("usb:xhci:Add quirk for Certain
failing HP keyboard on reset after resume")
cc: Nehal Shah <Nehal-bakulchandra.Shah@amd.com>
cc: <stable@vger.kernel.org>
Signed-off-by: default avatarSandeep Singh <Sandeep.Singh@amd.com>
Signed-off-by: default avatarShyam Sundar S K <Shyam-sundar.S-k@amd.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent de3af5bf
Loading
Loading
Loading
Loading
+18 −17
Original line number Diff line number Diff line
@@ -142,20 +142,11 @@ 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;
@@ -163,8 +154,18 @@ static int amd_chipset_sb_type_init(struct amd_chipset_info *pinfo)
				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;
			}
		}
	}

	pinfo->sb_type.rev = rev;
	return 1;
}