mmc: core: warn when card doesn't support HPI
authorJaehoon Chung <jh80.chung@samsung.com>
Sun, 11 Mar 2012 23:57:27 +0000 (08:57 +0900)
committerChris Ball <cjb@laptop.org>
Tue, 27 Mar 2012 16:20:12 +0000 (12:20 -0400)
Someone could use send_hpi_cmd() on a card that doesn't advertise support
for HPI.  Then maybe didn't work fine.  Because card->ext_csd.hpi_cmd
didn't set.  So if card didn't support hpi, return the warning message.

And CMD12's flags is MMC_RSP_R1B.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/core/mmc_ops.c

index 4d41fa984c9344d007a1df43898f25a18c0a4e91..69370f494e054f7951d287bba8b1d570510dc33d 100644 (file)
@@ -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);