Though card didn't support HPI,someone could use the send_hpi_cmd().
Then maybe didn't work fine.
Because card->ext_csd.hpi_cmd didn't set.
So if card didn't support hpi, return the waring message.

And CMD12's flags is MMC_RSP_R1B.

Signed-off-by: Jaehoon Chung <[email protected]>
Signed-off-by: Kyungmin Park <[email protected]>
---
Changelog v2:
        - Fixed typo and removed the flags variable.

 drivers/mmc/core/mmc_ops.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
index 4d41fa9..30f45be 100644
--- a/drivers/mmc/core/mmc_ops.c
+++ b/drivers/mmc/core/mmc_ops.c
@@ -553,18 +553,22 @@ int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status)
 {
        struct mmc_command cmd = {0};
        unsigned int opcode;
-       unsigned int flags;
        int err;
 
+       if (!card->ext_csd.hpi) {
+               pr_warning("%s: Card didn't support HPI command\n",
+                               mmc_hostname(card->host));
+               return -EINVAL;
+       }
+
        opcode = card->ext_csd.hpi_cmd;
        if (opcode == MMC_STOP_TRANSMISSION)
-               flags = MMC_RSP_R1 | MMC_CMD_AC;
+               cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
        else if (opcode == MMC_SEND_STATUS)
-               flags = MMC_RSP_R1 | MMC_CMD_AC;
+               cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
 
        cmd.opcode = opcode;
        cmd.arg = card->rca << 16 | 1;
-       cmd.flags = flags;
        cmd.cmd_timeout_ms = card->ext_csd.out_of_int_time;
 
        err = mmc_wait_for_cmd(card->host, &cmd, 0);
-- 
1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to