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
This commit is contained in:
Коммит
c949ddf9eb
|
@ -1548,11 +1548,6 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
|
|||
/* Disable BLOCK interrupts as well */
|
||||
channel_clear_bit(dw, MASK.BLOCK, dw->all_chan_mask);
|
||||
|
||||
err = devm_request_irq(chip->dev, chip->irq, dw_dma_interrupt,
|
||||
IRQF_SHARED, "dw_dmac", dw);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* Create a pool of consistent memory blocks for hardware descriptors */
|
||||
dw->desc_pool = dmam_pool_create("dw_dmac_desc_pool", chip->dev,
|
||||
sizeof(struct dw_desc), 4, 0);
|
||||
|
@ -1563,6 +1558,11 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
|
|||
|
||||
tasklet_init(&dw->tasklet, dw_dma_tasklet, (unsigned long)dw);
|
||||
|
||||
err = request_irq(chip->irq, dw_dma_interrupt, IRQF_SHARED,
|
||||
"dw_dmac", dw);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
INIT_LIST_HEAD(&dw->dma.channels);
|
||||
for (i = 0; i < nr_channels; i++) {
|
||||
struct dw_dma_chan *dwc = &dw->chan[i];
|
||||
|
@ -1667,6 +1667,7 @@ int dw_dma_remove(struct dw_dma_chip *chip)
|
|||
dw_dma_off(dw);
|
||||
dma_async_device_unregister(&dw->dma);
|
||||
|
||||
free_irq(chip->irq, dw);
|
||||
tasklet_kill(&dw->tasklet);
|
||||
|
||||
list_for_each_entry_safe(dwc, _dwc, &dw->dma.channels,
|
||||
|
|
|
@ -113,11 +113,9 @@ struct sa11x0_dma_phy {
|
|||
struct sa11x0_dma_desc *txd_load;
|
||||
unsigned sg_done;
|
||||
struct sa11x0_dma_desc *txd_done;
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
u32 dbs[2];
|
||||
u32 dbt[2];
|
||||
u32 dcsr;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct sa11x0_dma_dev {
|
||||
|
@ -984,7 +982,6 @@ static int sa11x0_dma_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int sa11x0_dma_suspend(struct device *dev)
|
||||
{
|
||||
struct sa11x0_dma_dev *d = dev_get_drvdata(dev);
|
||||
|
@ -1054,7 +1051,6 @@ static int sa11x0_dma_resume(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct dev_pm_ops sa11x0_dma_pm_ops = {
|
||||
.suspend_noirq = sa11x0_dma_suspend,
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
struct dma_chan;
|
||||
|
||||
#if defined(CONFIG_DMA_OMAP) || defined(CONFIG_DMA_OMAP_MODULE)
|
||||
#if defined(CONFIG_DMA_OMAP) || (defined(CONFIG_DMA_OMAP_MODULE) && defined(MODULE))
|
||||
bool omap_dma_filter_fn(struct dma_chan *, void *);
|
||||
#else
|
||||
static inline bool omap_dma_filter_fn(struct dma_chan *c, void *d)
|
||||
|
|
Загрузка…
Ссылка в новой задаче