|
|
@@ -1294,18 +1294,27 @@ static void pch_free_dma_buf(struct pch_spi_board_data *board_dat,
|
|
|
dma->rx_buf_virt, dma->rx_buf_dma);
|
|
|
}
|
|
|
|
|
|
-static void pch_alloc_dma_buf(struct pch_spi_board_data *board_dat,
|
|
|
+static int pch_alloc_dma_buf(struct pch_spi_board_data *board_dat,
|
|
|
struct pch_spi_data *data)
|
|
|
{
|
|
|
struct pch_spi_dma_ctrl *dma;
|
|
|
+ int ret;
|
|
|
|
|
|
dma = &data->dma;
|
|
|
+ ret = 0;
|
|
|
/* Get Consistent memory for Tx DMA */
|
|
|
dma->tx_buf_virt = dma_alloc_coherent(&board_dat->pdev->dev,
|
|
|
PCH_BUF_SIZE, &dma->tx_buf_dma, GFP_KERNEL);
|
|
|
+ if (!dma->tx_buf_virt)
|
|
|
+ ret = -ENOMEM;
|
|
|
+
|
|
|
/* Get Consistent memory for Rx DMA */
|
|
|
dma->rx_buf_virt = dma_alloc_coherent(&board_dat->pdev->dev,
|
|
|
PCH_BUF_SIZE, &dma->rx_buf_dma, GFP_KERNEL);
|
|
|
+ if (!dma->rx_buf_virt)
|
|
|
+ ret = -ENOMEM;
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int pch_spi_pd_probe(struct platform_device *plat_dev)
|
|
|
@@ -1382,7 +1391,9 @@ static int pch_spi_pd_probe(struct platform_device *plat_dev)
|
|
|
|
|
|
if (use_dma) {
|
|
|
dev_info(&plat_dev->dev, "Use DMA for data transfers\n");
|
|
|
- pch_alloc_dma_buf(board_dat, data);
|
|
|
+ ret = pch_alloc_dma_buf(board_dat, data);
|
|
|
+ if (ret)
|
|
|
+ goto err_spi_register_master;
|
|
|
}
|
|
|
|
|
|
ret = spi_register_master(master);
|