diff options
| -rw-r--r-- | drivers/mmc/host/msm_sdcc.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/mmc/host/msm_sdcc.c b/drivers/mmc/host/msm_sdcc.c index 977932a4bf4b..f4f7883271f0 100644 --- a/drivers/mmc/host/msm_sdcc.c +++ b/drivers/mmc/host/msm_sdcc.c | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <linux/log2.h> | 26 | #include <linux/log2.h> |
| 27 | #include <linux/mmc/host.h> | 27 | #include <linux/mmc/host.h> |
| 28 | #include <linux/mmc/card.h> | 28 | #include <linux/mmc/card.h> |
| 29 | #include <linux/mmc/sdio.h> | ||
| 29 | #include <linux/clk.h> | 30 | #include <linux/clk.h> |
| 30 | #include <linux/scatterlist.h> | 31 | #include <linux/scatterlist.h> |
| 31 | #include <linux/platform_device.h> | 32 | #include <linux/platform_device.h> |
| @@ -355,6 +356,16 @@ msmsdcc_start_data(struct msmsdcc_host *host, struct mmc_data *data) | |||
| 355 | } | 356 | } |
| 356 | } | 357 | } |
| 357 | 358 | ||
| 359 | static int | ||
| 360 | snoop_cccr_abort(struct mmc_command *cmd) | ||
| 361 | { | ||
| 362 | if ((cmd->opcode == 52) && | ||
| 363 | (cmd->arg & 0x80000000) && | ||
| 364 | (((cmd->arg >> 9) & 0x1ffff) == SDIO_CCCR_ABORT)) | ||
| 365 | return 1; | ||
| 366 | return 0; | ||
| 367 | } | ||
| 368 | |||
| 358 | static void | 369 | static void |
| 359 | msmsdcc_start_command(struct msmsdcc_host *host, struct mmc_command *cmd, u32 c) | 370 | msmsdcc_start_command(struct msmsdcc_host *host, struct mmc_command *cmd, u32 c) |
| 360 | { | 371 | { |
| @@ -381,6 +392,9 @@ msmsdcc_start_command(struct msmsdcc_host *host, struct mmc_command *cmd, u32 c) | |||
| 381 | if (cmd == cmd->mrq->stop) | 392 | if (cmd == cmd->mrq->stop) |
| 382 | c |= MCI_CSPM_MCIABORT; | 393 | c |= MCI_CSPM_MCIABORT; |
| 383 | 394 | ||
| 395 | if (snoop_cccr_abort(cmd)) | ||
| 396 | c |= MCI_CSPM_MCIABORT; | ||
| 397 | |||
| 384 | host->curr.cmd = cmd; | 398 | host->curr.cmd = cmd; |
| 385 | 399 | ||
| 386 | host->stats.cmds++; | 400 | host->stats.cmds++; |
