aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordavem <davem>2001-12-16 07:53:13 +0000
committerdavem <davem>2001-12-16 07:53:13 +0000
commitc6858b1a2d38255db140bb36f06025c4e9a73db8 (patch)
tree10a7116939fb0644426b9bfef21591c24ccca19a
parent36ff809c6e7cc2674ec6aa9a9b173bd94234bc32 (diff)
downloadnetdev-vger-cvs-c6858b1a2d38255db140bb36f06025c4e9a73db8.tar.gz
Trident DMA mask fix for the mainline.
-rw-r--r--drivers/sound/trident.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/sound/trident.c b/drivers/sound/trident.c
index aabd8adc6..c68f78547 100644
--- a/drivers/sound/trident.c
+++ b/drivers/sound/trident.c
@@ -187,6 +187,7 @@
#define TRIDENT_STATE_MAGIC 0x63657373 /* "cess" */
#define TRIDENT_DMA_MASK 0x3fffffff /* DMA buffer mask for pci_alloc_consist */
+#define ALI_DMA_MASK 0xffffffff /* ALI Tridents lack the 30-bit limitation */
#define NR_HW_CH 32
@@ -3948,13 +3949,20 @@ static int __init trident_probe(struct pci_dev *pci_dev, const struct pci_device
u16 temp;
struct pci_dev *pci_dev_m1533 = NULL;
int rc = -ENODEV;
+ u64 dma_mask;
if (pci_enable_device(pci_dev))
goto out;
- if (pci_set_dma_mask(pci_dev, TRIDENT_DMA_MASK)) {
+ if (pci_dev->device == PCI_DEVICE_ID_ALI_5451)
+ dma_mask = ALI_DMA_MASK;
+ else
+ dma_mask = TRIDENT_DMA_MASK;
+ if (pci_set_dma_mask(pci_dev, dma_mask)) {
printk(KERN_ERR "trident: architecture does not support"
- " 30bit PCI busmaster DMA\n");
+ " %s PCI busmaster DMA\n",
+ pci_dev->device == PCI_DEVICE_ID_ALI_5451 ?
+ "32-bit" : "30-bit");
goto out;
}
pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &revision);