ALSA: ctxfi: Fallback DMA mask to 32bit
[firefly-linux-kernel-4.4.55.git] / sound / pci / ctxfi / cthw20k2.c
index 9dc2950e1ab7466974be04588a1c5bbe7c7175c5..d86678c2a9571b6d30526140033c9139cedbbbec 100644 (file)
 #include "cthw20k2.h"
 #include "ct20k2reg.h"
 
-#if BITS_PER_LONG == 32
-#define CT_XFI_DMA_MASK                DMA_BIT_MASK(32) /* 32 bit PTE */
-#else
-#define CT_XFI_DMA_MASK                DMA_BIT_MASK(64) /* 64 bit PTE */
-#endif
-
 struct hw20k2 {
        struct hw hw;
        /* for i2c */
@@ -2029,19 +2023,18 @@ static int hw_card_start(struct hw *hw)
        int err = 0;
        struct pci_dev *pci = hw->pci;
        unsigned int gctl;
+       const unsigned int dma_bits = BITS_PER_LONG;
 
        err = pci_enable_device(pci);
        if (err < 0)
                return err;
 
        /* Set DMA transfer mask */
-       if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
-           dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
-               dev_err(hw->card->dev,
-                       "architecture does not support PCI busmaster DMA with mask 0x%llx\n",
-                       CT_XFI_DMA_MASK);
-               err = -ENXIO;
-               goto error1;
+       if (!dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
+               dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
+       } else {
+               dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
+               dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));
        }
 
        if (!hw->io_base) {