]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mtd: rawnand: sunxi: Use dma_request_chan() instead dma_request_slave_channel()
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Thu, 27 Feb 2020 12:37:46 +0000 (14:37 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 11 Mar 2020 15:17:54 +0000 (16:17 +0100)
dma_request_slave_channel() is a wrapper on top of dma_request_chan()
eating up the error code.

By using dma_request_chan() directly the driver can support deferred
probing against DMA.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20200227123749.24064-5-peter.ujfalusi@ti.com
drivers/mtd/nand/raw/sunxi_nand.c

index 6ede3934a5f4ac1237d48b02e58327b436a3737f..5f3e40b79fb1698f8c92cdddb04b44fdf5622077 100644 (file)
@@ -2123,8 +2123,16 @@ static int sunxi_nfc_probe(struct platform_device *pdev)
        if (ret)
                goto out_ahb_reset_reassert;
 
-       nfc->dmac = dma_request_slave_channel(dev, "rxtx");
-       if (nfc->dmac) {
+       nfc->dmac = dma_request_chan(dev, "rxtx");
+       if (IS_ERR(nfc->dmac)) {
+               ret = PTR_ERR(nfc->dmac);
+               if (ret == -EPROBE_DEFER)
+                       goto out_ahb_reset_reassert;
+
+               /* Ignore errors to fall back to PIO mode */
+               dev_warn(dev, "failed to request rxtx DMA channel: %d\n", ret);
+               nfc->dmac = NULL;
+       } else {
                struct dma_slave_config dmac_cfg = { };
 
                dmac_cfg.src_addr = r->start + nfc->caps->reg_io_data;
@@ -2138,9 +2146,6 @@ static int sunxi_nfc_probe(struct platform_device *pdev)
                if (nfc->caps->extra_mbus_conf)
                        writel(readl(nfc->regs + NFC_REG_CTL) |
                               NFC_DMA_TYPE_NORMAL, nfc->regs + NFC_REG_CTL);
-
-       } else {
-               dev_warn(dev, "failed to request rxtx DMA channel\n");
        }
 
        platform_set_drvdata(pdev, nfc);