diff options
| -rw-r--r-- | sound/pci/oxygen/oxygen_lib.c | 17 | 
1 files changed, 16 insertions, 1 deletions
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c index d10cc6ee1a6..e5ebe56fb0c 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,  static void configure_pcie_bridge(struct pci_dev *pci)  { -	enum { PI7C9X110 }; +	enum { PEX811X, PI7C9X110 };  	static const struct pci_device_id bridge_ids[] = { +		{ PCI_VDEVICE(PLX, 0x8111), .driver_data = PEX811X }, +		{ PCI_VDEVICE(PLX, 0x8112), .driver_data = PEX811X },  		{ PCI_DEVICE(0x12d8, 0xe110), .driver_data = PI7C9X110 },  		{ }  	}; @@ -328,6 +330,19 @@ static void configure_pcie_bridge(struct pci_dev *pci)  		return;  	switch (id->driver_data) { +	case PEX811X:	/* PLX PEX8111/PEX8112 PCIe/PCI bridge */ +		pci_read_config_dword(bridge, 0x48, &tmp); +		tmp |= 1;	/* enable blind prefetching */ +		tmp |= 1 << 11;	/* enable beacon generation */ +		pci_write_config_dword(bridge, 0x48, tmp); + +		pci_write_config_dword(bridge, 0x84, 0x0c); +		pci_read_config_dword(bridge, 0x88, &tmp); +		tmp &= ~(7 << 27); +		tmp |= 2 << 27;	/* set prefetch size to 128 bytes */ +		pci_write_config_dword(bridge, 0x88, tmp); +		break; +  	case PI7C9X110:	/* Pericom PI7C9X110 PCIe/PCI bridge */  		pci_read_config_dword(bridge, 0x40, &tmp);  		tmp |= 1;	/* park the PCI arbiter to the sound chip */  |