desc = dmaengine_prep_slave_sg(dma_chan, data->sg, sg_len, dir_slave,
                                       DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
 
-       if (desc) {
-               desc->callback = bcm2835_dma_complete;
-               desc->callback_param = host;
-               host->dma_desc = desc;
-               host->dma_chan = dma_chan;
-               host->dma_dir = dir_data;
+       if (!desc) {
+               dma_unmap_sg(dma_chan->device->dev, data->sg, sg_len, dir_data);
+               return;
        }
+
+       desc->callback = bcm2835_dma_complete;
+       desc->callback_param = host;
+       host->dma_desc = desc;
+       host->dma_chan = dma_chan;
+       host->dma_dir = dir_data;
 }
 
 static void bcm2835_start_dma(struct bcm2835_host *host)