u32 value;
        u32 addrext;
        u32 trans = ring->dev->dma.translation;
+       bool parity = ring->dev->dma.parity;
 
        if (ring->tx) {
                if (ring->type == B43_DMA_64BIT) {
                        value = B43_DMA64_TXENABLE;
                        value |= (addrext << B43_DMA64_TXADDREXT_SHIFT)
                            & B43_DMA64_TXADDREXT_MASK;
+                       if (!parity)
+                               value |= B43_DMA64_TXPARITYDISABLE;
                        b43_dma_write(ring, B43_DMA64_TXCTL, value);
                        b43_dma_write(ring, B43_DMA64_TXRINGLO,
                                      (ringbase & 0xFFFFFFFF));
                        value = B43_DMA32_TXENABLE;
                        value |= (addrext << B43_DMA32_TXADDREXT_SHIFT)
                            & B43_DMA32_TXADDREXT_MASK;
+                       if (!parity)
+                               value |= B43_DMA32_TXPARITYDISABLE;
                        b43_dma_write(ring, B43_DMA32_TXCTL, value);
                        b43_dma_write(ring, B43_DMA32_TXRING,
                                      (ringbase & ~SSB_DMA_TRANSLATION_MASK)
                        value |= B43_DMA64_RXENABLE;
                        value |= (addrext << B43_DMA64_RXADDREXT_SHIFT)
                            & B43_DMA64_RXADDREXT_MASK;
+                       if (!parity)
+                               value |= B43_DMA64_RXPARITYDISABLE;
                        b43_dma_write(ring, B43_DMA64_RXCTL, value);
                        b43_dma_write(ring, B43_DMA64_RXRINGLO,
                                      (ringbase & 0xFFFFFFFF));
                        value |= B43_DMA32_RXENABLE;
                        value |= (addrext << B43_DMA32_RXADDREXT_SHIFT)
                            & B43_DMA32_RXADDREXT_MASK;
+                       if (!parity)
+                               value |= B43_DMA32_RXPARITYDISABLE;
                        b43_dma_write(ring, B43_DMA32_RXCTL, value);
                        b43_dma_write(ring, B43_DMA32_RXRING,
                                      (ringbase & ~SSB_DMA_TRANSLATION_MASK)
 #endif
        }
 
+       dma->parity = true;
+#ifdef CONFIG_B43_BCMA
+       /* TODO: find out which SSB devices need disabling parity */
+       if (dev->dev->bus_type == B43_BUS_BCMA)
+               dma->parity = false;
+#endif
+
        err = -ENOMEM;
        /* setup TX DMA channels. */
        dma->tx_ring_AC_BK = b43_setup_dmaring(dev, 0, 1, type);
 
 #define                B43_DMA32_TXSUSPEND                     0x00000002
 #define                B43_DMA32_TXLOOPBACK            0x00000004
 #define                B43_DMA32_TXFLUSH                       0x00000010
+#define                B43_DMA32_TXPARITYDISABLE               0x00000800
 #define                B43_DMA32_TXADDREXT_MASK                0x00030000
 #define                B43_DMA32_TXADDREXT_SHIFT               16
 #define B43_DMA32_TXRING                               0x04
 #define                B43_DMA32_RXFROFF_MASK          0x000000FE
 #define                B43_DMA32_RXFROFF_SHIFT         1
 #define                B43_DMA32_RXDIRECTFIFO          0x00000100
+#define                B43_DMA32_RXPARITYDISABLE               0x00000800
 #define                B43_DMA32_RXADDREXT_MASK                0x00030000
 #define                B43_DMA32_RXADDREXT_SHIFT               16
 #define B43_DMA32_RXRING                               0x14
 #define                B43_DMA64_TXSUSPEND                     0x00000002
 #define                B43_DMA64_TXLOOPBACK            0x00000004
 #define                B43_DMA64_TXFLUSH                       0x00000010
+#define                B43_DMA64_TXPARITYDISABLE               0x00000800
 #define                B43_DMA64_TXADDREXT_MASK                0x00030000
 #define                B43_DMA64_TXADDREXT_SHIFT               16
 #define B43_DMA64_TXINDEX                              0x04
 #define                B43_DMA64_RXFROFF_MASK          0x000000FE
 #define                B43_DMA64_RXFROFF_SHIFT         1
 #define                B43_DMA64_RXDIRECTFIFO          0x00000100
+#define                B43_DMA64_RXPARITYDISABLE               0x00000800
 #define                B43_DMA64_RXADDREXT_MASK                0x00030000
 #define                B43_DMA64_RXADDREXT_SHIFT               16
 #define B43_DMA64_RXINDEX                              0x24