|
@@ -1047,6 +1047,7 @@ static int atmel_spi_remove(struct platform_device *pdev)
|
|
|
struct spi_master *master = platform_get_drvdata(pdev);
|
|
|
struct atmel_spi *as = spi_master_get_devdata(master);
|
|
|
struct spi_message *msg;
|
|
|
+ struct spi_transfer *xfer;
|
|
|
|
|
|
/* reset the hardware and block queue progress */
|
|
|
spin_lock_irq(&as->lock);
|
|
@@ -1058,9 +1059,10 @@ static int atmel_spi_remove(struct platform_device *pdev)
|
|
|
|
|
|
/* Terminate remaining queued transfers */
|
|
|
list_for_each_entry(msg, &as->queue, queue) {
|
|
|
- /* REVISIT unmapping the dma is a NOP on ARM and AVR32
|
|
|
- * but we shouldn't depend on that...
|
|
|
- */
|
|
|
+ list_for_each_entry(xfer, &msg->transfers, transfer_list) {
|
|
|
+ if (!msg->is_dma_mapped)
|
|
|
+ atmel_spi_dma_unmap_xfer(master, xfer);
|
|
|
+ }
|
|
|
msg->status = -ESHUTDOWN;
|
|
|
msg->complete(msg->context);
|
|
|
}
|