spi: spi_register_controller(): free bus id on error paths
[linux-2.6-microblaze.git] / drivers / spi / spi-atmel.c
index 56f0ca3..013458c 100644 (file)
@@ -514,26 +514,19 @@ static int atmel_spi_configure_dma(struct spi_master *master,
        master->dma_tx = dma_request_chan(dev, "tx");
        if (IS_ERR(master->dma_tx)) {
                err = PTR_ERR(master->dma_tx);
-               if (err == -EPROBE_DEFER) {
-                       dev_warn(dev, "no DMA channel available at the moment\n");
-                       goto error_clear;
-               }
-               dev_err(dev,
-                       "DMA TX channel not available, SPI unable to use DMA\n");
-               err = -EBUSY;
+               if (err != -EPROBE_DEFER)
+                       dev_err(dev, "No TX DMA channel, DMA is disabled\n");
                goto error_clear;
        }
 
-       /*
-        * No reason to check EPROBE_DEFER here since we have already requested
-        * tx channel. If it fails here, it's for another reason.
-        */
-       master->dma_rx = dma_request_slave_channel(dev, "rx");
-
-       if (!master->dma_rx) {
-               dev_err(dev,
-                       "DMA RX channel not available, SPI unable to use DMA\n");
-               err = -EBUSY;
+       master->dma_rx = dma_request_chan(dev, "rx");
+       if (IS_ERR(master->dma_rx)) {
+               err = PTR_ERR(master->dma_rx);
+               /*
+                * No reason to check EPROBE_DEFER here since we have already
+                * requested tx channel.
+                */
+               dev_err(dev, "No RX DMA channel, DMA is disabled\n");
                goto error;
        }
 
@@ -548,7 +541,7 @@ static int atmel_spi_configure_dma(struct spi_master *master,
 
        return 0;
 error:
-       if (master->dma_rx)
+       if (!IS_ERR(master->dma_rx))
                dma_release_channel(master->dma_rx);
        if (!IS_ERR(master->dma_tx))
                dma_release_channel(master->dma_tx);