ALSA: oxygen: add XIO2001 initialization
authorClemens Ladisch <clemens@ladisch.de>
Fri, 16 Jan 2015 21:15:43 +0000 (22:15 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 16 Jan 2015 21:44:36 +0000 (22:44 +0100)
Configure the XIO2001 bridge on PCI Express cards so that it does less
needless prefetching.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/oxygen/oxygen_lib.c

index ab47c1ca21c49a71c5e567f8e9395c1e30919bb3..ffff3b25fd73ffe6f473b548964a69beeb0894d0 100644 (file)
@@ -319,11 +319,12 @@ static void oxygen_restore_eeprom(struct oxygen *chip,
 
 static void configure_pcie_bridge(struct pci_dev *pci)
 {
-       enum { PEX811X, PI7C9X110 };
+       enum { PEX811X, PI7C9X110, XIO2001 };
        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 },
+               { PCI_VDEVICE(TI, 0x8240), .driver_data = XIO2001 },
                { }
        };
        struct pci_dev *bridge;
@@ -357,6 +358,14 @@ static void configure_pcie_bridge(struct pci_dev *pci)
                tmp |= 1;       /* park the PCI arbiter to the sound chip */
                pci_write_config_dword(bridge, 0x40, tmp);
                break;
+
+       case XIO2001: /* Texas Instruments XIO2001 PCIe/PCI bridge */
+               pci_read_config_dword(bridge, 0xe8, &tmp);
+               tmp &= ~0xf;    /* request length limit: 64 bytes */
+               tmp &= ~(0xf << 8);
+               tmp |= 1 << 8;  /* request count limit: one buffer */
+               pci_write_config_dword(bridge, 0xe8, tmp);
+               break;
        }
 }