diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp index f778a9ef8d..c69fd31c1f 100644 --- a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp +++ b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp @@ -37,6 +37,7 @@ #define PCI_VENDOR_ATI 0x1002 #define PCI_VENDOR_AMD 0x1022 #define PCI_VENDOR_CREATIVE 0x1102 +#define PCI_VENDOR_CMEDIA 0x13f6 #define PCI_VENDOR_INTEL 0x8086 #define PCI_VENDOR_NVIDIA 0x10de #define PCI_VENDOR_VMWARE 0x15ad @@ -46,6 +47,7 @@ #define HDA_QUIRK_SNOOP 0x0001 #define HDA_QUIRK_NO_MSI 0x0002 #define HDA_QUIRK_NO_CORBRP_RESET_ACK 0x0004 +#define HDA_QUIRK_NOTCSEL 0x0008 static const struct { @@ -92,17 +94,18 @@ static const struct { { PCI_VENDOR_INTEL, 0xa2f0, HDA_QUIRK_SNOOP }, { PCI_VENDOR_INTEL, 0xa348, HDA_QUIRK_SNOOP }, { PCI_VENDOR_INTEL, 0xa3f0, HDA_QUIRK_SNOOP }, - { PCI_VENDOR_ATI, 0x437b, HDA_QUIRK_SNOOP }, - { PCI_VENDOR_ATI, 0x4383, HDA_QUIRK_SNOOP }, - { PCI_VENDOR_AMD, 0x157a, HDA_QUIRK_SNOOP }, - { PCI_VENDOR_AMD, 0x780d, HDA_QUIRK_SNOOP }, - { PCI_VENDOR_AMD, 0x1457, HDA_QUIRK_SNOOP }, - { PCI_VENDOR_AMD, 0x1487, HDA_QUIRK_SNOOP }, - { PCI_VENDOR_AMD, 0x15e3, HDA_QUIRK_SNOOP }, + { PCI_VENDOR_ATI, 0x437b, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL }, + { PCI_VENDOR_ATI, 0x4383, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL }, + { PCI_VENDOR_AMD, 0x157a, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL }, + { PCI_VENDOR_AMD, 0x780d, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL }, + { PCI_VENDOR_AMD, 0x1457, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL }, + { PCI_VENDOR_AMD, 0x1487, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL }, + { PCI_VENDOR_AMD, 0x15e3, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL }, // Enable snooping for Nvidia, right now for all their hda-devices, // but only based on guessing. { PCI_VENDOR_NVIDIA, PCI_ALL_DEVICES, HDA_QUIRK_SNOOP | HDA_QUIRK_NO_MSI | HDA_QUIRK_NO_CORBRP_RESET_ACK }, + { PCI_VENDOR_CMEDIA, 0x5011, HDA_QUIRK_NO_MSI }, { PCI_VENDOR_CREATIVE, 0x0010, HDA_QUIRK_NO_MSI }, { PCI_VENDOR_CREATIVE, 0x0012, HDA_QUIRK_NO_MSI }, { PCI_VENDOR_VMWARE, PCI_ALL_DEVICES, HDA_QUIRK_NO_CORBRP_RESET_ACK }, @@ -1060,7 +1063,10 @@ hda_hw_init(hda_controller* controller) goto no_irq; // TCSEL is reset to TC0 (clear 0-2 bits) - update_pci_register(controller, PCI_HDA_TCSEL, PCI_HDA_TCSEL_MASK, 0, 1); + if ((quirks & HDA_QUIRK_NOTCSEL) == 0) { + update_pci_register(controller, PCI_HDA_TCSEL, PCI_HDA_TCSEL_MASK, 0, + 1); + } controller->dma_snooping = false;