Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b37a05069b9ab9fb1e52393a3448d710c50c54d5
Commit:     b37a05069b9ab9fb1e52393a3448d710c50c54d5
Parent:     d198f101989d9bb950327f0d043f6203bb862343
Author:     Alex Dubov <[EMAIL PROTECTED]>
AuthorDate: Wed Nov 14 23:55:36 2007 +1100
Committer:  Pierre Ossman <[EMAIL PROTECTED]>
CommitDate: Wed Nov 21 18:42:45 2007 +0100

    tifm_sd: handle non-power-of-2 block sizes
    
    It is possible to handle arbitrary block sizes with tifm card reader by
    conditionally switching to PIO in case such block has to be delivered. At
    the beginning of each request, DMA is either disabled (non-power-of-2 block
    size) or set to load time user preference.
    
    Signed-off-by: Alex Dubov <[EMAIL PROTECTED]>
    Signed-off-by: Pierre Ossman <[EMAIL PROTECTED]>
---
 drivers/mmc/host/tifm_sd.c |   18 +++++++-----------
 1 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/drivers/mmc/host/tifm_sd.c b/drivers/mmc/host/tifm_sd.c
index c11a3d2..20d5c7b 100644
--- a/drivers/mmc/host/tifm_sd.c
+++ b/drivers/mmc/host/tifm_sd.c
@@ -16,7 +16,6 @@
 #include <linux/mmc/host.h>
 #include <linux/highmem.h>
 #include <linux/scatterlist.h>
-#include <linux/log2.h>
 #include <asm/io.h>
 
 #define DRIVER_NAME "tifm_sd"
@@ -638,17 +637,15 @@ static void tifm_sd_request(struct mmc_host *mmc, struct 
mmc_request *mrq)
                goto err_out;
        }
 
-       if (mrq->data && !is_power_of_2(mrq->data->blksz)) {
-               printk(KERN_ERR "%s: Unsupported block size (%d bytes)\n",
-                       sock->dev.bus_id, mrq->data->blksz);
-               mrq->cmd->error = -EINVAL;
-               goto err_out;
-       }
-
        host->cmd_flags = 0;
        host->block_pos = 0;
        host->sg_pos = 0;
 
+       if (mrq->data && !is_power_of_2(mrq->data->blksz))
+               host->no_dma = 1;
+       else
+               host->no_dma = no_dma ? 1 : 0;
+
        if (r_data) {
                tifm_sd_set_data_timeout(host, r_data);
 
@@ -676,7 +673,7 @@ static void tifm_sd_request(struct mmc_host *mmc, struct 
mmc_request *mrq)
                                            : PCI_DMA_FROMDEVICE)) {
                                printk(KERN_ERR "%s : scatterlist map failed\n",
                                       sock->dev.bus_id);
-                               spin_unlock_irqrestore(&sock->lock, flags);
+                               mrq->cmd->error = -ENOMEM;
                                goto err_out;
                        }
                        host->sg_len = tifm_map_sg(sock, r_data->sg,
@@ -692,7 +689,7 @@ static void tifm_sd_request(struct mmc_host *mmc, struct 
mmc_request *mrq)
                                              r_data->flags & MMC_DATA_WRITE
                                              ? PCI_DMA_TODEVICE
                                              : PCI_DMA_FROMDEVICE);
-                               spin_unlock_irqrestore(&sock->lock, flags);
+                               mrq->cmd->error = -ENOMEM;
                                goto err_out;
                        }
 
@@ -966,7 +963,6 @@ static int tifm_sd_probe(struct tifm_dev *sock)
                return -ENOMEM;
 
        host = mmc_priv(mmc);
-       host->no_dma = no_dma;
        tifm_set_drvdata(sock, mmc);
        host->dev = sock;
        host->timeout_jiffies = msecs_to_jiffies(1000);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to