diff options
author | Quinn Jensen <quinn.jensen@freescale.com> | 2007-04-04 17:27:11 -0600 |
---|---|---|
committer | root <root@traveler.zdomain.com> | 2007-04-04 17:27:11 -0600 |
commit | 84c9cba34effb4f3b877af7480d39309558377ab (patch) | |
tree | b327f497a3f9190fbbe5afc67472e9d46a45e3d9 /include | |
parent | 1bffbab8aa9bd0e67fd85738f6548ab74d80a009 (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.h | 3 | ||||
-rw-r--r-- | include/linux/mmc/host.h | 4 | ||||
-rw-r--r-- | include/linux/mmc/mmc.h | 3 | ||||
-rw-r--r-- | include/linux/mmc/protocol.h | 72 |
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 */ |