diff options
author | Jaehoon Chung <jh80.chung@samsung.com> | 2011-10-18 01:26:42 -0400 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2011-10-26 16:32:29 -0400 |
commit | eb0d8f135b6730d6d0324a064664d121334290e7 (patch) | |
tree | 74876f5d20163bb5e9b185d9357237e1f22a2262 /drivers/mmc/core/mmc_ops.c | |
parent | 881d1c25f765938a95def5afe39486ce39f9fc96 (diff) |
mmc: core: support HPI send command
HPI command is defined in eMMC4.41.
This feature is important for eMMC4.5 devices.
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/core/mmc_ops.c')
-rw-r--r-- | drivers/mmc/core/mmc_ops.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c index 4e11d56b3f70..007863eea4fb 100644 --- a/drivers/mmc/core/mmc_ops.c +++ b/drivers/mmc/core/mmc_ops.c | |||
@@ -547,3 +547,34 @@ int mmc_bus_test(struct mmc_card *card, u8 bus_width) | |||
547 | err = mmc_send_bus_test(card, card->host, MMC_BUS_TEST_R, width); | 547 | err = mmc_send_bus_test(card, card->host, MMC_BUS_TEST_R, width); |
548 | return err; | 548 | return err; |
549 | } | 549 | } |
550 | |||
551 | int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status) | ||
552 | { | ||
553 | struct mmc_command cmd = {0}; | ||
554 | unsigned int opcode; | ||
555 | unsigned int flags; | ||
556 | int err; | ||
557 | |||
558 | opcode = card->ext_csd.hpi_cmd; | ||
559 | if (opcode == MMC_STOP_TRANSMISSION) | ||
560 | flags = MMC_RSP_R1 | MMC_CMD_AC; | ||
561 | else if (opcode == MMC_SEND_STATUS) | ||
562 | flags = MMC_RSP_R1 | MMC_CMD_AC; | ||
563 | |||
564 | cmd.opcode = opcode; | ||
565 | cmd.arg = card->rca << 16 | 1; | ||
566 | cmd.flags = flags; | ||
567 | cmd.cmd_timeout_ms = card->ext_csd.out_of_int_time; | ||
568 | |||
569 | err = mmc_wait_for_cmd(card->host, &cmd, 0); | ||
570 | if (err) { | ||
571 | pr_warn("%s: error %d interrupting operation. " | ||
572 | "HPI command response %#x\n", mmc_hostname(card->host), | ||
573 | err, cmd.resp[0]); | ||
574 | return err; | ||
575 | } | ||
576 | if (status) | ||
577 | *status = cmd.resp[0]; | ||
578 | |||
579 | return 0; | ||
580 | } | ||