aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/oxygen/oxygen_lib.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c
index d10cc6ee1a68..e5ebe56fb0c5 100644
--- a/sound/pci/oxygen/oxygen_lib.c
+++ b/sound/pci/oxygen/oxygen_lib.c
@@ -310,8 +310,10 @@ static void oxygen_restore_eeprom(struct oxygen *chip,
310 310
311static void configure_pcie_bridge(struct pci_dev *pci) 311static void configure_pcie_bridge(struct pci_dev *pci)
312{ 312{
313 enum { PI7C9X110 }; 313 enum { PEX811X, PI7C9X110 };
314 static const struct pci_device_id bridge_ids[] = { 314 static const struct pci_device_id bridge_ids[] = {
315 { PCI_VDEVICE(PLX, 0x8111), .driver_data = PEX811X },
316 { PCI_VDEVICE(PLX, 0x8112), .driver_data = PEX811X },
315 { PCI_DEVICE(0x12d8, 0xe110), .driver_data = PI7C9X110 }, 317 { PCI_DEVICE(0x12d8, 0xe110), .driver_data = PI7C9X110 },
316 { } 318 { }
317 }; 319 };
@@ -328,6 +330,19 @@ static void configure_pcie_bridge(struct pci_dev *pci)
328 return; 330 return;
329 331
330 switch (id->driver_data) { 332 switch (id->driver_data) {
333 case PEX811X: /* PLX PEX8111/PEX8112 PCIe/PCI bridge */
334 pci_read_config_dword(bridge, 0x48, &tmp);
335 tmp |= 1; /* enable blind prefetching */
336 tmp |= 1 << 11; /* enable beacon generation */
337 pci_write_config_dword(bridge, 0x48, tmp);
338
339 pci_write_config_dword(bridge, 0x84, 0x0c);
340 pci_read_config_dword(bridge, 0x88, &tmp);
341 tmp &= ~(7 << 27);
342 tmp |= 2 << 27; /* set prefetch size to 128 bytes */
343 pci_write_config_dword(bridge, 0x88, tmp);
344 break;
345
331 case PI7C9X110: /* Pericom PI7C9X110 PCIe/PCI bridge */ 346 case PI7C9X110: /* Pericom PI7C9X110 PCIe/PCI bridge */
332 pci_read_config_dword(bridge, 0x40, &tmp); 347 pci_read_config_dword(bridge, 0x40, &tmp);
333 tmp |= 1; /* park the PCI arbiter to the sound chip */ 348 tmp |= 1; /* park the PCI arbiter to the sound chip */