tizen 2.4 release
[kernel/u-boot-tm1.git] / drivers / yp_mmc / sdio_core.h
1 /*********************************************************************\r
2  ** File Name:          sdio_pal.h\r
3  ** Author:                     yanping.xie\r
4  ** DATE:                       09/05/2013\r
5  ** Copyright:                  2004 Spreadtrum, Incoporated. All Rights Reserved.\r
6  ** Description:                This file describe operation of sdio host.\r
7  *********************************************************************\r
8
9  *********************************************************************\r
10  **                               Edit History                                                                                   **\r
11  ** ------------------------------------------------------------------------- **\r
12  ** DATE                                NAME                            DESCRIPTION\r
13  ** 09/05/2013          ypxie                           Create.\r
14  ********************************************************************/\r
15  #ifndef __SDIO_CORE_H_\r
16 #define __SDIO_CORE_H_\r
17 \r
18 typedef enum sdio_slot_e_tag\r
19 {\r
20         SDIO_SLOT_0                                                     = 0,                            /* SDIO0 : S1 */\r
21         SDIO_SLOT_1                                                     = 1,                            /* SDIO0 : S2 */\r
22         SDIO_SLOT_2                                                     = 2,                            /* SDIO0 : SLAVE */\r
23         SDIO_SLOT_3                                                     = 3,                            /* SDIO1 : S1 */\r
24         SDIO_SLOT_4                                                     = 4,                            /* SDIO1 : S2 */\r
25         SDIO_SLOT_5                                                     = 5,                            /* SDIO1 : SLAVEv */\r
26         SDIO_SLOT_6                                                     = 6,                            /* SDIO2 : S1 */\r
27         SDIO_SLOT_7                                                     = 7,                            /* SDIO2 : S2 */\r
28         SDIO_SLOT_8                                                     = 8,                            /* SDIO2 : SLAVE */\r
29         SDIO_SLOT_9                                                     = 9,                            /* SDIO3 : S1 (emmc)*/\r
30         SDIO_SLOT_10                                            = 10,                   /* SDIO3 : S2 */\r
31         SDIO_SLOT_11                                            = 11,                   /* SDIO3 : SLAVE */\r
32         SDIO_SLOT_MAX\r
33 } sdio_slot_e;\r
34 \r
35 typedef enum sdio_volt_e_tag\r
36 {\r
37         VOL_1_2                                                         = 1200,\r
38         VOL_1_3                                                         = 1300,\r
39         VOL_1_5                                                         = 1500,\r
40         VOL_1_8                                                         = 1800,\r
41         VOL_2_5                                                         = 2500,\r
42         VOL_2_8                                                         = 2800,\r
43         VOL_3_0                                                         = 3000,\r
44         VOL_RES\r
45 } sdio_vol_e;\r
46 \r
47 typedef enum sdio_type_e_tag\r
48 {\r
49         SDIO_TYPE_SD                                            = 0,\r
50         SDIO_TYPE_WIFI                                          = 1,\r
51         SDIO_TYPE_MASTER                                        = 2,\r
52         SDIO_TYPE_MMC                                           = 3,\r
53         SDIO_TYPE_UNKOWN\r
54 } sdio_type_e;\r
55 \r
56 /* used for sd clock */\r
57 #define SDIO_CLK_400K                                   400000\r
58 #define SDIO_CLK_13M                                            13000000\r
59 #define SDIO_CLK_26M                                            26000000\r
60 #define SDIO_CLK_52M                                            52000000\r
61 #define SDIO_CLK_104M                                   104000000\r
62 #define SDIO_CLK_200M                                   200000000\r
63 \r
64 \r
65 typedef enum sdio_pal_cmd_tag\r
66 {\r
67         // cmdindex,rsp,transmode , MS:master & slave\r
68         CMD0_GO_IDLE_STATE,                                     /* MMC, SD, MS */\r
69         CMD1_SEND_OP_COND,                                      /* MMC */\r
70         CMD2_ALL_SEND_CID,                                      /* MMC, SD */\r
71         CMD3_SET_RELATIVE_ADDR_SD,                      /* SD */\r
72         CMD3_SET_RELATIVE_ADDR,                 /* MMC */\r
73         CMD4_SET_DSR,\r
74         CMD5_SLEEP_AWAKE,                                       /* MMC, MS */\r
75         CMD6_SWITCH,                                            /* MMC */\r
76         CMD7_SELECT_CARD_SD,                            /* MMC, SD, MS */\r
77         CMD7_SELECT_CARD,                                       /* MMC */\r
78         CMD8_SEND_IF_COND_SD,                           /* SD */\r
79         CMD8_SEND_IF_COND,                                      /* MMC */\r
80         CMD9_SEND_CSD,                                          /* MMC, SD */\r
81         CMD10_SEND_CID,                                         /* MMC, SD */\r
82         CMD11_READ_DAT_UNTIL_STOP,                      /* SD */\r
83         CMD11_READ_DAT_UNTIL_STOP_AUT12,        /* SD */\r
84         CMD12_STOP_TRANSMISSION,                        /* MMC, SD */\r
85         CMD13_SEND_STATUS,                                      /* MMC, SD */\r
86         CMD14_BUS_TEST_R,                                       /* MMC */\r
87         CMD15_GO_INACTIVE_STATE,\r
88         CMD16_SET_BLOCKLEN,                                     /* MMC, SD */\r
89         CMD17_READ_SINGLE_BLOCK,                        /* MMC, SD */\r
90         CMD18_READ_MULTIPLE_BLOCK,                      /* MMC, SD */\r
91         CMD18_READ_MULTIPLE_BLOCK_AUT12,        /* MMC, SD */\r
92         CMD19_SEND_TUNING_BLOCK,                        /* MMC, SD */\r
93         CMD20_WRITE_DAT_UNTIL_STOP,             /* SD */\r
94         CMD20_WRITE_DAT_UNTIL_STOP_AUT12,       /* SD */\r
95         CMD21_SEND_TUNING_BLOCK_HS200,          /* MMC */\r
96         CMD23_SET_BLOCK_COUNT,                          /* MMC, SD */\r
97         CMD24_WRITE_BLOCK,                                      /* MMC, SD */\r
98         CMD25_WRITE_MULTIPLE_BLOCK,             /* MMC, SD */\r
99         CMD25_WRITE_MULTIPLE_BLOCK_AUT12,       /* MMC, SD */\r
100         CMD26_PROGRAM_CID,                                      /* MMC */\r
101         CMD27_PROGRAM_CSD,                              /* MMC, SD */\r
102         CMD28_SET_WRITE_PROT,                           /* MMC, SD */\r
103         CMD29_CLR_WRITE_PROT,                           /* MMC, SD */\r
104         CMD30_SEND_WRITE_PROT,                          /* MMC, SD */\r
105         CMD31_SEND_WRITE_PROT_TYPE,             /* MMC */\r
106         CMD32_ERASE_WR_BLK_START,                       /* SD */\r
107         CMD33_ERASE_WR_BLK_END,                 /* SD */\r
108         CMD35_ERASE_GROUP_START,                        /* MMC */\r
109         CMD36_ERASE_GROUP_END,                          /* MMC */\r
110         CMD38_ERASE,                                            /* MMC, SD */\r
111         CMD39_FAST_IO,                                          /* MMC */\r
112         CMD40_GO_IRQ_STATE,                             /* MMC */\r
113         CMD42_LOCK_UNLOCK_SD,                           /* SD */\r
114         CMD42_LOCK_UNLOCK_MMC,                  /* MMC */\r
115         CMD55_APP_CMD,                                          /* MMC, SD */\r
116         CMD56_GEN_CMD_SD,                                       /* SD */\r
117         CMD56_GEN_CMD_MMC,                              /* MMC */\r
118         ACMD6_SET_BUS_WIDTH,                            /* SD */\r
119         ACMD13_SD_STATUS,                                       /* SD */\r
120         ACMD22_SEND_NUM_WR_BLCOKS,              /* SD */\r
121         ACMD23_SET_WR_BLK_ERASE_COUNT,  /* SD */\r
122         ACMD41_SD_SEND_OP_COND,                 /* SD */\r
123         ACMD42_SET_CLR_CARD_DETECT,             /* SD */\r
124         ACMD51_SEND_SCR,                                        /* SD */\r
125         ACMD6_SET_EXT_CSD,\r
126 \r
127         CMD52_IO_RW_DIRECT,                             /* MS */\r
128         CMD53_READ_BYTES,                                       /* MS */\r
129         CMD53_READ_BLOCKS,                                      /* MS */\r
130         CMD53_WRITE_BYTES,                                      /* MS */\r
131         CMD53_WRITE_BLOCKS,                             /* MS */\r
132 \r
133         CMD_MAX\r
134 } sdio_cmd_e;\r
135 \r
136 //typedef void (*sdio_call_back)(uint32 msg, uint32 slot_no);\r
137 \r
138 typedef struct sdio_pal_handle_t_tag\r
139 {\r
140         volatile sdio_reg_ptr                                   host_cfg;                               /* base address */\r
141         uint32                                                          slot_no;                                /* slot no */\r
142         sdio_type_e                                                     sdio_type;                      /* sdio type */\r
143         uint32                                                          sdio_version;                   /* sdio version */\r
144 \r
145 //      sdio_call_back                                                  sig_call_back;\r
146         volatile uint32                                                 card_event;
147 //      volatile uint32                                                 card_err_code;\r
148 \r
149         uint32                                                          base_clock;                     /* base clock */\r
150         uint32                                                          sd_clock;                               /* used clock */\r
151         sdio_speedmode_e                                                spd_mode;\r
152         sdio_buswidth_e                                         bus_width;                      /* bus width */\r
153 \r
154         uint16                                                          rca;                                    /* card RCA */\r
155         uint32                                                          block_len;                      /* block length */\r
156 } sdio_pal_t, *sdio_pal_ptr;\r
157 \r
158 typedef enum 
159 {
160         SDIO_DMA_IN = 1,
161         SDIO_DMA_OUT,
162         SDIO_DMA_BIDIRECTIONAL
163 } sdio_dma_dir_e;\r
164 \r
165 typedef struct sdio_data_param_t_tag\r
166 {
167         uint8*                                                          data_buf;\r
168         uint32                                                          blk_len;\r
169         uint32                                                          blk_num;\r
170         sdio_dma_dir_e                                          direction;\r
171 } sdio_data_param_t;\r
172 \r
173 typedef enum sdio_pal_err_e_tag\r
174 {
175         ERR_NONE                                                        = 0,\r
176         ERR_CMD_TIMEOUT                                 = BIT_0,\r
177         ERR_CMD_CRC                                             = BIT_1,\r
178         ERR_CMD_END_BIT                                 = BIT_2,\r
179         ERR_CMD_INDEX                                           = BIT_3,\r
180         ERR_DATA_TIMEOUT                                        = BIT_4,\r
181         ERR_DATA_CRC                                            = BIT_5,\r
182         ERR_DATA_END_BIT                                        = BIT_6,\r
183         ERR_CUR_LIMIT                                           = BIT_7,\r
184         ERR_AUTO_CMD12                                          = BIT_8,\r
185         ERR_TRGT_RSP                                            = BIT_9,\r
186         ERR_BAD_PARAM                                           = BIT_10                                /* software error */\r
187 } sdio_pal_err_e;\r
188 \r
189 #endif /* __SDIO_CORE_H_ */