]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/mmc/host/at91_mci.c
Merge branch 'omap-fixes'
[linux-2.6-omap-h63xx.git] / drivers / mmc / host / at91_mci.c
index 6915f40ac8ab4c293775563ed932a95d326bbbdb..e556d42cc45a755597e435e54e21235113611505 100644 (file)
@@ -621,12 +621,21 @@ static void at91_mci_send_command(struct at91mci_host *host, struct mmc_command
                                if (cpu_is_at91sam9260 () || cpu_is_at91sam9263())
                                        if (host->total_length < 12)
                                                host->total_length = 12;
-                               host->buffer = dma_alloc_coherent(NULL,
-                                               host->total_length,
-                                               &host->physical_address, GFP_KERNEL);
+
+                               host->buffer = kmalloc(host->total_length, GFP_KERNEL);
+                               if (!host->buffer) {
+                                       pr_debug("Can't alloc tx buffer\n");
+                                       cmd->error = -ENOMEM;
+                                       mmc_request_done(host->mmc, host->request);
+                                       return;
+                               }
 
                                at91_mci_sg_to_dma(host, data);
 
+                               host->physical_address = dma_map_single(NULL,
+                                               host->buffer, host->total_length,
+                                               DMA_TO_DEVICE);
+
                                pr_debug("Transmitting %d bytes\n", host->total_length);
 
                                at91_mci_write(host, ATMEL_PDC_TPR, host->physical_address);
@@ -694,7 +703,10 @@ static void at91_mci_completed_command(struct at91mci_host *host, unsigned int s
        cmd->resp[3] = at91_mci_read(host, AT91_MCI_RSPR(3));
 
        if (host->buffer) {
-               dma_free_coherent(NULL, host->total_length, host->buffer, host->physical_address);
+               dma_unmap_single(NULL,
+                               host->physical_address, host->total_length,
+                               DMA_TO_DEVICE);
+               kfree(host->buffer);
                host->buffer = NULL;
        }
 
@@ -1076,6 +1088,8 @@ static int __init at91_mci_probe(struct platform_device *pdev)
                goto fail0;
        }
 
+       setup_timer(&host->timer, at91_timeout_timer, (unsigned long)host);
+
        platform_set_drvdata(pdev, mmc);
 
        /*
@@ -1089,8 +1103,6 @@ static int __init at91_mci_probe(struct platform_device *pdev)
 
        mmc_add_host(mmc);
 
-       setup_timer(&host->timer, at91_timeout_timer, (unsigned long)host);
-
        /*
         * monitor card insertion/removal if we can
         */