summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorQuinn Jensen <quinn.jensen@freescale.com>2007-04-04 17:27:11 -0600
committerroot <root@traveler.zdomain.com>2007-04-04 17:27:11 -0600
commit84c9cba34effb4f3b877af7480d39309558377ab (patch)
treeb327f497a3f9190fbbe5afc67472e9d46a45e3d9 /include
parent1bffbab8aa9bd0e67fd85738f6548ab74d80a009 (diff)
Adds MMC/SD and SDIO driver support for MX27 and MX31 to the Linux
kernel. http://www.bitshrine.org/gpp/linux-2.6.19.2-mx-drivers_mmc.patch
Diffstat (limited to 'include')
-rw-r--r--include/linux/mmc/card.h3
-rw-r--r--include/linux/mmc/host.h4
-rw-r--r--include/linux/mmc/mmc.h3
-rw-r--r--include/linux/mmc/protocol.h72
4 files changed, 82 insertions, 0 deletions
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index 991a37382a22..cfb8963864cb 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -62,6 +62,7 @@ struct mmc_card {
#define MMC_STATE_BAD (1<<2) /* unrecognised device */
#define MMC_STATE_SDCARD (1<<3) /* is an SD card */
#define MMC_STATE_READONLY (1<<4) /* card is read-only */
+#define MMC_STATE_SDIOCARD (1<<5) /* is an SDIO card */
u32 raw_cid[4]; /* raw card CID */
u32 raw_csd[4]; /* raw card CSD */
u32 raw_scr[2]; /* raw card SCR */
@@ -74,12 +75,14 @@ struct mmc_card {
#define mmc_card_dead(c) ((c)->state & MMC_STATE_DEAD)
#define mmc_card_bad(c) ((c)->state & MMC_STATE_BAD)
#define mmc_card_sd(c) ((c)->state & MMC_STATE_SDCARD)
+#define mmc_card_sdio(c) ((c)->state & MMC_STATE_SDIOCARD)
#define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY)
#define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT)
#define mmc_card_set_dead(c) ((c)->state |= MMC_STATE_DEAD)
#define mmc_card_set_bad(c) ((c)->state |= MMC_STATE_BAD)
#define mmc_card_set_sd(c) ((c)->state |= MMC_STATE_SDCARD)
+#define mmc_card_set_sdio(c) ((c)->state |= MMC_STATE_SDIOCARD)
#define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
#define mmc_card_name(c) ((c)->cid.prod_name)
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 587264a58d56..3139c834d330 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -87,6 +87,9 @@ struct mmc_host {
#define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */
#define MMC_CAP_MULTIWRITE (1 << 1) /* Can accurately report bytes sent to card on error */
#define MMC_CAP_BYTEBLOCK (1 << 2) /* Can do non-log2 block sizes */
+#define MMC_CAP_SDIO (1 << 3) /* Can the host support SDIO */
+
+ unsigned int sdio_irq;
/* host specific block data */
unsigned int max_seg_size; /* see blk_queue_max_segment_size */
@@ -102,6 +105,7 @@ struct mmc_host {
unsigned int mode; /* current card mode of host */
#define MMC_MODE_MMC 0
#define MMC_MODE_SD 1
+#define MMC_MODE_SDIO 2
struct list_head cards; /* devices attached to this host */
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index a3594dfd6963..5bceeacff12f 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -32,6 +32,7 @@ struct mmc_command {
#define MMC_CMD_BC (2 << 5)
#define MMC_CMD_BCR (3 << 5)
+#define MMC_KEEP_CLK_RUN (1 << 31)
/*
* These are the response types, and correspond to valid bit
* patterns of the above flags. One additional valid pattern
@@ -42,6 +43,8 @@ struct mmc_command {
#define MMC_RSP_R1B (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
#define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
#define MMC_RSP_R3 (MMC_RSP_PRESENT)
+#define MMC_RSP_R4 (MMC_RSP_PRESENT)
+#define MMC_RSP_R5 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
#define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC)
#define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE))
diff --git a/include/linux/mmc/protocol.h b/include/linux/mmc/protocol.h
index 08dec8d9e703..521e2e61cc26 100644
--- a/include/linux/mmc/protocol.h
+++ b/include/linux/mmc/protocol.h
@@ -2,6 +2,7 @@
* Header for MultiMediaCard (MMC)
*
* Copyright 2002 Hewlett-Packard Company
+ * SDIO support Copyright 2006 Freescale Semiconductor, Inc.
*
* Use consistent with the GNU GPL is permitted,
* provided that this copyright notice is
@@ -39,6 +40,9 @@
#define MMC_STOP_TRANSMISSION 12 /* ac R1b */
#define MMC_SEND_STATUS 13 /* ac [31:16] RCA R1 */
#define MMC_GO_INACTIVE_STATE 15 /* ac [31:16] RCA */
+#define SD_IO_SEND_OP_COND 5 /* bcr [31:0] OCR R4 */
+#define SD_IO_RW_DIRECT 52 /* R5 */
+#define SD_IO_RW_EXTENDED 53 /* R5 */
/* class 2 */
#define MMC_SET_BLOCKLEN 16 /* ac [31:0] block len R1 */
@@ -87,6 +91,19 @@
#define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */
#define SD_APP_SEND_SCR 51 /* adtc R1 */
+#define IO_RW_DIRECT_ARG(rw,raw,fn,reg,dat) \
+ ( ((rw & 0x1) << 31) | ((raw & 0x1) << 27) | ((fn & 0x7) << 28) | \
+ ((reg & 0x1FFFF) << 9) | (dat & 0xFF) )
+
+#define IO_RW_EXTENDED_ARG(rw,mode,inc,fn,reg,cnt) \
+ ( ((rw & 0x1) << 31) | ((mode & 0x1) << 27) | ((inc & 0x1) << 26) | \
+ ((fn & 0x7) << 28) | ((reg & 0x1FFFF) << 9) | (cnt & 0x1FF) )
+
+#define SDIO_RW_READ 0
+#define SDIO_RW_WRITE 1
+#define SDIO_RW_RD_A_WR 1
+#define SDIO_RW_INC 1
+
/*
MMC status in R1
Type
@@ -126,6 +143,13 @@
#define R1_READY_FOR_DATA (1 << 8) /* sx, a */
#define R1_APP_CMD (1 << 5) /* sr, c */
+#define R4_NUM_IO_FUNC(x) ((x >> 28) & 0x7)
+#define R4_OCR(x) (x & 0x00FFFF00)
+#define R4_MEM_PRESENT (1 << 27)
+#define R4_CARD_READY (1 << 31)
+
+#define R5_DATA(x) (x & 0xFF)
+
/* These are unpacked versions of the actual responses */
struct _mmc_csd {
@@ -237,6 +261,33 @@ struct _mmc_csd {
#define CSD_SPEC_VER_2 2 /* Implements system specification 2.0 - 2.2 */
#define CSD_SPEC_VER_3 3 /* Implements system specification 3.1 */
+/*
+ * Card Command Classes (CCC)
+ */
+#define CCC_BASIC (1<<0) /* (0) Basic protocol functions */
+ /* (CMD0,1,2,3,4,7,9,10,12,13,15) */
+#define CCC_STREAM_READ (1<<1) /* (1) Stream read commands */
+ /* (CMD11) */
+#define CCC_BLOCK_READ (1<<2) /* (2) Block read commands */
+ /* (CMD16,17,18) */
+#define CCC_STREAM_WRITE (1<<3) /* (3) Stream write commands */
+ /* (CMD20) */
+#define CCC_BLOCK_WRITE (1<<4) /* (4) Block write commands */
+ /* (CMD16,24,25,26,27) */
+#define CCC_ERASE (1<<5) /* (5) Ability to erase blocks */
+ /* (CMD32,33,34,35,36,37,38,39) */
+#define CCC_WRITE_PROT (1<<6) /* (6) Able to write protect blocks */
+ /* (CMD28,29,30) */
+#define CCC_LOCK_CARD (1<<7) /* (7) Able to lock down card */
+ /* (CMD16,CMD42) */
+#define CCC_APP_SPEC (1<<8) /* (8) Application specific */
+ /* (CMD55,56,57,ACMD*) */
+#define CCC_IO_MODE (1<<9) /* (9) I/O mode */
+ /* (CMD5,39,40,52,53) */
+#define CCC_SWITCH (1<<10) /* (10) High speed switch */
+ /* (CMD6,34,35,36,37,50) */
+ /* (11) Reserved */
+ /* (CMD?) */
/*
* SD bus widths
@@ -244,5 +295,26 @@ struct _mmc_csd {
#define SD_BUS_WIDTH_1 0
#define SD_BUS_WIDTH_4 2
+/*
+ * SDIO CCCR register definitions
+ */
+#define CCCR_SDIO_REV 0
+#define CCCR_SD_REV 1
+#define CCCR_IO_ENABLE 2
+#define CCCR_IO_READY 3
+#define CCCR_INT_ENABLE 4
+#define CCCR_INT_PEND 5
+#define CCCR_IO_ABORT 6
+#define CCCR_BUS_CTRL 7
+#define CCCR_CARD_CAP 8
+#define CCCR_CIS_PTR 9
+#define CCCR_BUS_SUSP 0x0C
+#define CCCR_FUNC_SEL 0x0D
+#define CCCR_EXEC_FLAGS 0x0E
+#define CCCR_READY_FLAGS 0x0F
+#define CCCR_FN0_BLK_SZ0 0x10
+#define CCCR_FN0_BLK_SZ1 0x11
+#define CCCR_PWR_CTRL 0x12
+
#endif /* MMC_MMC_PROTOCOL_H */