Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'fixes' of git://git.infradead.org/users/vkoul/slave-dma

Pull slave-dmaengine fixes from Vinod Koul:
"We have three small fixes.

First one from Andy reverts the devm_request irq as we need to ensure
the tasklet is killed after irq is freed, so we need to do free irq in
our code. Other two from Arnd are fixing the compilation issue in
omap and sa11x0 drivers with ARM randconfigs"

* 'fixes' of git://git.infradead.org/users/vkoul/slave-dma:
dmaengine: sa11x0: remove broken #ifdef
dmaengine: omap: hide filter_fn for built-in drivers
dmaengine: dw: went back to plain {request,free}_irq() calls

+7 -10
+6 -5
drivers/dma/dw/core.c
··· 1548 1548 /* Disable BLOCK interrupts as well */ 1549 1549 channel_clear_bit(dw, MASK.BLOCK, dw->all_chan_mask); 1550 1550 1551 - err = devm_request_irq(chip->dev, chip->irq, dw_dma_interrupt, 1552 - IRQF_SHARED, "dw_dmac", dw); 1553 - if (err) 1554 - return err; 1555 - 1556 1551 /* Create a pool of consistent memory blocks for hardware descriptors */ 1557 1552 dw->desc_pool = dmam_pool_create("dw_dmac_desc_pool", chip->dev, 1558 1553 sizeof(struct dw_desc), 4, 0); ··· 1557 1562 } 1558 1563 1559 1564 tasklet_init(&dw->tasklet, dw_dma_tasklet, (unsigned long)dw); 1565 + 1566 + err = request_irq(chip->irq, dw_dma_interrupt, IRQF_SHARED, 1567 + "dw_dmac", dw); 1568 + if (err) 1569 + return err; 1560 1570 1561 1571 INIT_LIST_HEAD(&dw->dma.channels); 1562 1572 for (i = 0; i < nr_channels; i++) { ··· 1667 1667 dw_dma_off(dw); 1668 1668 dma_async_device_unregister(&dw->dma); 1669 1669 1670 + free_irq(chip->irq, dw); 1670 1671 tasklet_kill(&dw->tasklet); 1671 1672 1672 1673 list_for_each_entry_safe(dwc, _dwc, &dw->dma.channels,
-4
drivers/dma/sa11x0-dma.c
··· 113 113 struct sa11x0_dma_desc *txd_load; 114 114 unsigned sg_done; 115 115 struct sa11x0_dma_desc *txd_done; 116 - #ifdef CONFIG_PM_SLEEP 117 116 u32 dbs[2]; 118 117 u32 dbt[2]; 119 118 u32 dcsr; 120 - #endif 121 119 }; 122 120 123 121 struct sa11x0_dma_dev { ··· 982 984 return 0; 983 985 } 984 986 985 - #ifdef CONFIG_PM_SLEEP 986 987 static int sa11x0_dma_suspend(struct device *dev) 987 988 { 988 989 struct sa11x0_dma_dev *d = dev_get_drvdata(dev); ··· 1051 1054 1052 1055 return 0; 1053 1056 } 1054 - #endif 1055 1057 1056 1058 static const struct dev_pm_ops sa11x0_dma_pm_ops = { 1057 1059 .suspend_noirq = sa11x0_dma_suspend,
+1 -1
include/linux/omap-dma.h
··· 10 10 11 11 struct dma_chan; 12 12 13 - #if defined(CONFIG_DMA_OMAP) || defined(CONFIG_DMA_OMAP_MODULE) 13 + #if defined(CONFIG_DMA_OMAP) || (defined(CONFIG_DMA_OMAP_MODULE) && defined(MODULE)) 14 14 bool omap_dma_filter_fn(struct dma_chan *, void *); 15 15 #else 16 16 static inline bool omap_dma_filter_fn(struct dma_chan *c, void *d)