]> git.hungrycats.org Git - linux/commitdiff
[MMC] MMC_RSP_xxx combined response types.
authorRussell King <rmk@flint.arm.linux.org.uk>
Mon, 6 Sep 2004 20:36:50 +0000 (21:36 +0100)
committerRussell King <rmk@flint.arm.linux.org.uk>
Mon, 6 Sep 2004 20:36:50 +0000 (21:36 +0100)
Create a set of MMC_RSP_xxx definitions which correspond to the
response type we expect at a high level.  These are created from
a set of flags; a MMC host driver can either interpret the flags
as the high level response type, or the low level individual
flags.

drivers/mmc/mmc.c
drivers/mmc/mmc_block.c
include/linux/mmc/mmc.h

index 962b6ae4d4eec29a029f0703a8b6b3c1ffc7bd85..01c8d9959b423ff8f8b0964befb0278f2dfd123f 100644 (file)
@@ -213,7 +213,7 @@ int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card)
 
                cmd.opcode = MMC_SELECT_CARD;
                cmd.arg = card->rca << 16;
-               cmd.flags = MMC_RSP_SHORT | MMC_RSP_CRC;
+               cmd.flags = MMC_RSP_R1;
 
                err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
        }
@@ -431,7 +431,7 @@ static int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
 
        cmd.opcode = MMC_SEND_OP_COND;
        cmd.arg = ocr;
-       cmd.flags = MMC_RSP_SHORT;
+       cmd.flags = MMC_RSP_R3;
 
        for (i = 100; i; i--) {
                err = mmc_wait_for_cmd(host, &cmd, 0);
@@ -469,7 +469,7 @@ static void mmc_discover_cards(struct mmc_host *host)
 
                cmd.opcode = MMC_ALL_SEND_CID;
                cmd.arg = 0;
-               cmd.flags = MMC_RSP_LONG | MMC_RSP_CRC;
+               cmd.flags = MMC_RSP_R2;
 
                err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
                if (err == MMC_ERR_TIMEOUT) {
@@ -498,7 +498,7 @@ static void mmc_discover_cards(struct mmc_host *host)
 
                cmd.opcode = MMC_SET_RELATIVE_ADDR;
                cmd.arg = card->rca << 16;
-               cmd.flags = MMC_RSP_SHORT | MMC_RSP_CRC;
+               cmd.flags = MMC_RSP_R1;
 
                err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
                if (err != MMC_ERR_NONE)
@@ -519,7 +519,7 @@ static void mmc_read_csds(struct mmc_host *host)
 
                cmd.opcode = MMC_SEND_CSD;
                cmd.arg = card->rca << 16;
-               cmd.flags = MMC_RSP_LONG | MMC_RSP_CRC;
+               cmd.flags = MMC_RSP_R2;
 
                err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
                if (err != MMC_ERR_NONE) {
@@ -567,7 +567,7 @@ static void mmc_check_cards(struct mmc_host *host)
 
                cmd.opcode = MMC_SEND_STATUS;
                cmd.arg = card->rca << 16;
-               cmd.flags = MMC_RSP_SHORT | MMC_RSP_CRC;
+               cmd.flags = MMC_RSP_R1;
 
                err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
                if (err == MMC_ERR_NONE)
index 281995925c25b5866a2779b48c9ae8ef4c839218..ac9dbfa1d2cc08d9fac6306ad7fc4f67fcd51764 100644 (file)
@@ -179,7 +179,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
                brq.mrq.data = &brq.data;
 
                brq.cmd.arg = req->sector << 9;
-               brq.cmd.flags = MMC_RSP_SHORT | MMC_RSP_CRC;
+               brq.cmd.flags = MMC_RSP_R1;
                brq.data.req = req;
                brq.data.timeout_ns = card->csd.tacc_ns * 10;
                brq.data.timeout_clks = card->csd.tacc_clks * 10;
@@ -187,14 +187,14 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
                brq.data.blocks = req->nr_sectors >> (md->block_bits - 9);
                brq.stop.opcode = MMC_STOP_TRANSMISSION;
                brq.stop.arg = 0;
-               brq.stop.flags = MMC_RSP_SHORT | MMC_RSP_CRC | MMC_RSP_BUSY;
+               brq.stop.flags = MMC_RSP_R1B;
 
                if (rq_data_dir(req) == READ) {
                        brq.cmd.opcode = brq.data.blocks > 1 ? MMC_READ_MULTIPLE_BLOCK : MMC_READ_SINGLE_BLOCK;
                        brq.data.flags |= MMC_DATA_READ;
                } else {
                        brq.cmd.opcode = MMC_WRITE_BLOCK;
-                       brq.cmd.flags |= MMC_RSP_BUSY;
+                       brq.cmd.flags = MMC_RSP_R1B;
                        brq.data.flags |= MMC_DATA_WRITE;
                        brq.data.blocks = 1;
                }
@@ -224,7 +224,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
 
                        cmd.opcode = MMC_SEND_STATUS;
                        cmd.arg = card->rca << 16;
-                       cmd.flags = MMC_RSP_SHORT | MMC_RSP_CRC;
+                       cmd.flags = MMC_RSP_R1;
                        err = mmc_wait_for_cmd(card->host, &cmd, 5);
                        if (err) {
                                printk(KERN_ERR "%s: error %d requesting status\n",
@@ -351,7 +351,7 @@ mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card)
        mmc_card_claim_host(card);
        cmd.opcode = MMC_SET_BLOCKLEN;
        cmd.arg = 1 << card->csd.read_blkbits;
-       cmd.flags = MMC_RSP_SHORT | MMC_RSP_CRC;
+       cmd.flags = MMC_RSP_R1;
        err = mmc_wait_for_cmd(card->host, &cmd, 5);
        mmc_card_release_host(card);
 
index 1b83c2d6456141283ac6bd4d0f97c49e30649c7e..c288ae6a4f0c59f7cc43baefd164e24a57d09ee6 100644 (file)
@@ -28,6 +28,16 @@ struct mmc_command {
 #define MMC_RSP_CRC    (1 << 3)                /* expect valid crc */
 #define MMC_RSP_BUSY   (1 << 4)                /* card may send busy */
 
+/*
+ * These are the response types, and correspond to valid bit
+ * patterns of the above flags.  One additional valid pattern
+ * is all zeros, which means we don't expect a response.
+ */
+#define MMC_RSP_R1     (MMC_RSP_SHORT|MMC_RSP_CRC)
+#define MMC_RSP_R1B    (MMC_RSP_SHORT|MMC_RSP_CRC|MMC_RSP_BUSY)
+#define MMC_RSP_R2     (MMC_RSP_LONG|MMC_RSP_CRC)
+#define MMC_RSP_R3     (MMC_RSP_SHORT)
+
        unsigned int            retries;        /* max number of retries */
        unsigned int            error;          /* command error */