summaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-rockchip.c
diff options
context:
space:
mode:
authorShawn Lin <shawn.lin@rock-chips.com>2016-03-09 09:11:32 +0100
committerMark Brown <broonie@kernel.org>2016-03-09 10:10:18 +0100
commit61cadcf46cfdb9f7eec70527968c2b91e9823786 (patch)
tree0f150c8bbba7b6a890c0cb8530d5448a0926ae35 /drivers/spi/spi-rockchip.c
parentspi: rockchip: migrate to dmaengine_terminate_async (diff)
downloadlinux-61cadcf46cfdb9f7eec70527968c2b91e9823786.tar.xz
linux-61cadcf46cfdb9f7eec70527968c2b91e9823786.zip
spi: rockchip: check requesting dma channel with EPROBE_DEFER
Let's defer probing the driver if the return value of dma_request_slave_channel is ERR_PTR(-EPROBE_DEFER) instead of disabling dma capability directly. Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/spi/spi-rockchip.c')
-rw-r--r--drivers/spi/spi-rockchip.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
index b6b8a0bb5b2f..795fd191faa7 100644
--- a/drivers/spi/spi-rockchip.c
+++ b/drivers/spi/spi-rockchip.c
@@ -730,8 +730,14 @@ static int rockchip_spi_probe(struct platform_device *pdev)
master->handle_err = rockchip_spi_handle_err;
rs->dma_tx.ch = dma_request_slave_channel(rs->dev, "tx");
- if (!rs->dma_tx.ch)
+ if (IS_ERR_OR_NULL(rs->dma_tx.ch)) {
+ /* Check tx to see if we need defer probing driver */
+ if (PTR_ERR(rs->dma_tx.ch) == -EPROBE_DEFER) {
+ ret = -EPROBE_DEFER;
+ goto err_get_fifo_len;
+ }
dev_warn(rs->dev, "Failed to request TX DMA channel\n");
+ }
rs->dma_rx.ch = dma_request_slave_channel(rs->dev, "rx");
if (!rs->dma_rx.ch) {