omap_hsmmc: add erase capability
Subsystems (2)
PATCH 17/24 omap_hsmmc: add erase capability
From: Adrian Hunter <[email protected]>
Disable the data (busy) timeout for erases and set the MMC_CAP_ERASE capability.
Signed-off-by Adrian Hunter <[email protected]>
Acked-by Jens Axboe <[email protected]>
Cc Kyungmin Park <[email protected]>
Cc Madhusudhan Chikkature <[email protected]>
Cc Christoph Hellwig <[email protected]>
Cc Ben Gardiner <[email protected]>
Cc <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
---
drivers/mmc/host/omap_hsmmc.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
drivers/mmc/host/omap_hsmmc.c renamed from drivers/mmc/host/omap_hsmmc.c~omap_hsmmc-add-erase-capability +10 -3
@@ -28,6 +28,7 @@#include <linux/clk.h> #include <linux/mmc/host.h> #include <linux/mmc/core.h> +#include <linux/mmc/mmc.h> #include <linux/io.h> #include <linux/semaphore.h> #include <linux/gpio.h>
@@ -78,6 +79,7 @@#define INT_EN_MASK 0x307F0033#define BWR_ENABLE (1 << 4)#define BRR_ENABLE (1 << 5) +#define DTO_ENABLE (1 << 20)#define INIT_STREAM (1 << 1)#define DP_SELECT (1 << 21)#define DDIR (1 << 4)
@@ -523,7 +525,8 @@ static void omap_hsmmc_stop_clock(structdev_dbg (mmc_dev (host->mmc),"MMC Clock is not stoped\n" ); } -static void omap_hsmmc_enable_irq (struct omap_hsmmc_host *host) +static void omap_hsmmc_enable_irq (struct omap_hsmmc_host *host, +struct mmc_command *cmd) {unsigned int irq_mask;
@@ -532,6 +535,10 @@ static void omap_hsmmc_enable_irq(structelse irq_mask =INT_EN_MASK ; +/* Disable timeout for erases */ +if (cmd->opcode ==MMC_ERASE ) + irq_mask &= ~DTO_ENABLE ; +OMAP_HSMMC_WRITE (host->base,STAT ,STAT_CLEAR );OMAP_HSMMC_WRITE (host->base,ISE , irq_mask);OMAP_HSMMC_WRITE (host->base,IE , irq_mask);
@@ -782,7 +789,7 @@ omap_hsmmc_start_command(struct omap_hsm mmc_hostname(host->mmc), cmd->opcode, cmd->arg); host->cmd = cmd; -omap_hsmmc_enable_irq (host); +omap_hsmmc_enable_irq (host, cmd); host->response_busy =0 ;if (cmd->flags &MMC_RSP_PRESENT ) {
@@ -2107,7 +2114,7 @@ static int __init omap_hsmmc_probe(struc mmc->max_seg_size = mmc->max_req_size; mmc->caps |=MMC_CAP_MMC_HIGHSPEED |MMC_CAP_SD_HIGHSPEED | -MMC_CAP_WAIT_WHILE_BUSY ; +MMC_CAP_WAIT_WHILE_BUSY |MMC_CAP_ERASE ;switch (mmc_slot (host).wires) {case 8 :
_