On Thu, Apr 12, 2018 at 10:15:41PM +0800, Kai-Heng Feng wrote:
@@ -1711,6 +1745,11 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci, if (err < 0) return err;
- if (check_dell_switchable_gfx(pci)) {
pci_disable_device(pci);
Now looking at it again... This code disables all ATI and NVIDIA sound cards available in any Dell System (laptop or AIO) if system says that SG is enabled, right?
It means that also any external ATI or NVIDIA PCI card with audio device connected to Thunderbolt (e.g. via PCI <--> TB bridge) is always unconditionally disabled too?
I never thought of this case, thanks for bringing this up. Do you have any suggestion to check if it connects to the system via Thunderbolt?
Just use pci_is_thunderbolt_attached(), introduced by 8531e283bee6, like this:
if (check_dell_switchable_gfx(pci) && !pci_is_thunderbolt_attached(pci))
- /* Only need to check for Dell laptops and AIOs */
- if (!dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "Dell System", NULL) ||
!(dmi_match(DMI_CHASSIS_TYPE, "10") ||
dmi_match(DMI_CHASSIS_TYPE, "13")) ||
!(pdev->vendor == PCI_VENDOR_ID_ATI ||
pdev->vendor == PCI_VENDOR_ID_NVIDIA))
return false;
It sure would be nice if someone could add macros for the chassis type to include/linux/dmi.h so that we don't have to use these magic numbers everywhere:
$ git grep -l DMI_CHASSIS_TYPE drivers/firmware/dmi-id.c drivers/firmware/dmi_scan.c drivers/input/keyboard/atkbd.c drivers/input/serio/i8042-x86ia64io.h drivers/platform/x86/asus-wmi.c drivers/platform/x86/dell-laptop.c drivers/platform/x86/samsung-laptop.c include/linux/mod_devicetable.h scripts/mod/file2alias.c
Thanks,
Lukas