card_io.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #ifndef __CARD_IO_H
  2. #define __CARD_IO_H
  3. #include <mach/am_regs.h>
  4. #include <linux/types.h>
  5. /**
  6. * @file card_io.h
  7. * @addtogroup Card
  8. */
  9. /*@{*/
  10. /** Card module */
  11. typedef enum _Card_Module {
  12. CARD_MODULE_CF,
  13. CARD_MODULE_SD_MMC,
  14. CARD_MODULE_INAND,
  15. CARD_MODULE_MS_MSPRO,
  16. CARD_MODULE_MS2,
  17. CARD_MODULE_XD,
  18. CARD_MODULE_SM
  19. } Card_Module_t;
  20. #define MAX_CARD_UNIT (CARD_MODULE_SM+1)
  21. /** Card config */
  22. typedef struct _Card_Config {
  23. int cf_enabled;
  24. int sd_mmc_enabled;
  25. int inand_enabled;
  26. int ms_mspro_enabled;
  27. int ms2_enabled;
  28. int xd_enabled;
  29. int sm_enabled;
  30. int sd_wifi_enable;
  31. } Card_Config_t;
  32. typedef enum _SDIO_Pad_Type {
  33. SDIO_CARD_7_12,
  34. SDIO_CARD_13_19,
  35. SDIO_CARD_20_25,
  36. SDIO_CARD_4_5_16,
  37. SDIO_CARD_2_3_16,
  38. SDIO_A_GPIOX_0_3,
  39. SDIO_B_CARD_0_5,
  40. SDIO_C_BOOT_0_3,
  41. SDIO_GPIOA_0_5,
  42. SDIO_GPIOA_9_14,
  43. SDIO_GPIOB_2_7,
  44. SDIO_GPIOE_6_11,
  45. SDHC_CARD_0_5, //SDHC-B
  46. SDHC_BOOT_0_11, //SDHC-C
  47. SDHC_GPIOX_0_9, //SDHC-A
  48. SDXC_CARD_0_5, //SDXC-B
  49. SDXC_BOOT_0_11, //SDXC-C
  50. SDXC_GPIOX_0_9 //SDXC-A
  51. } SDIO_Pad_Type_t;
  52. typedef enum _Card_Work_Mode {
  53. CARD_HW_MODE,
  54. CARD_SW_MODE
  55. } Card_Work_Mode_t;
  56. struct aml_card_info {
  57. char *name; /* card name */
  58. Card_Work_Mode_t work_mode; /* work mode select*/
  59. SDIO_Pad_Type_t io_pad_type; /* hw io pin pad */
  60. unsigned card_ins_en_reg;
  61. unsigned card_ins_en_mask;
  62. unsigned card_ins_input_reg;
  63. unsigned card_ins_input_mask;
  64. unsigned card_power_en_reg;
  65. unsigned card_power_en_mask;
  66. unsigned card_power_output_reg;
  67. unsigned card_power_output_mask;
  68. unsigned char card_power_en_lev;
  69. unsigned card_wp_en_reg;
  70. unsigned card_wp_en_mask;
  71. unsigned card_wp_input_reg;
  72. unsigned card_wp_input_mask;
  73. void (*card_extern_init)(void);
  74. /*for inand partition: struct mtd_partition, easy porting from nand*/
  75. struct mtd_partition *partitions;
  76. unsigned int nr_partitions;
  77. };
  78. struct aml_card_platform {
  79. u8 card_num;
  80. struct aml_card_info *card_info;
  81. };
  82. struct card_partition {
  83. char *name; /* identifier string */
  84. uint64_t size; /* partition size */
  85. uint64_t offset; /* offset within the memory card space */
  86. uint32_t mask_flags; /* master card flags to mask out for this partition */
  87. };
  88. #define CARD_PIN_MUX_0 0x202C
  89. /// Muxing contorl
  90. #define CARD_PIN_MUX_1 0x202D
  91. /// Muxing contorl
  92. #define CARD_PIN_MUX_2 0x202E
  93. /// Muxing contorl
  94. #define CARD_PIN_MUX_3 0x202F
  95. /// Muxing contorl
  96. #define CARD_PIN_MUX_4 0x2030
  97. #define CARD_PIN_MUX_5 0x2031
  98. #define CARD_PIN_MUX_6 0x2032
  99. #define CARD_PIN_MUX_7 0x2033
  100. #define CARD_PIN_MUX_8 0x2034
  101. #define CARD_PIN_MUX_9 0x2035
  102. #define CARD_PIN_MUX_10 0x2036
  103. #define CARD_PIN_MUX_11 0x2037
  104. #define CARD_PIN_MUX_12 0x2038
  105. #define CARD_GPIO_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO5_EN_N)
  106. #define CARD_GPIO_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO5_O)
  107. #define CARD_GPIO_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO5_I)
  108. #define BOOT_GPIO_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO3_EN_N)
  109. #define BOOT_GPIO_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO3_O)
  110. #define BOOT_GPIO_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO3_I)
  111. #define EGPIO_GPIOA_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO0_EN_N)
  112. #define EGPIO_GPIOA_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO0_O)
  113. #define EGPIO_GPIOA_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO0_I)
  114. #define EGPIO_GPIOB_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO1_EN_N)
  115. #define EGPIO_GPIOB_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO1_O)
  116. #define EGPIO_GPIOB_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO1_I)
  117. #define EGPIO_GPIOC_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO2_EN_N)
  118. #define EGPIO_GPIOC_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO2_O)
  119. #define EGPIO_GPIOC_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO2_I)
  120. #define EGPIO_GPIOD_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO2_EN_N)
  121. #define EGPIO_GPIOD_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO2_O)
  122. #define EGPIO_GPIOD_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO2_I)
  123. #define EGPIO_GPIOE_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO4_EN_N)
  124. #define EGPIO_GPIOE_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO4_O)
  125. #define EGPIO_GPIOE_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO4_I)
  126. #define EGPIO_GPIOX_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO4_EN_N)
  127. #define EGPIO_GPIOX_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO4_O)
  128. #define EGPIO_GPIOX_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO4_I)
  129. #define EGPIO_GPIOY_ENABLE CBUS_REG_ADDR(PREG_PAD_GPIO5_EN_N)
  130. #define EGPIO_GPIOY_OUTPUT CBUS_REG_ADDR(PREG_PAD_GPIO5_O)
  131. #define EGPIO_GPIOY_INPUT CBUS_REG_ADDR(PREG_PAD_GPIO5_I)
  132. #define EGPIO_GPIOAO_ENABLE AOBUS_REG_ADDR(AO_GPIO_O_EN_N)
  133. #define EGPIO_GPIOAO_OUTPUT AOBUS_REG_ADDR(AO_GPIO_O_EN_N)
  134. #define EGPIO_GPIOAO_INPUT AOBUS_REG_ADDR(AO_GPIO_I)
  135. //JTAG group
  136. #define JTAG_GPIO_ENABLE CBUS_REG_ADDR(PREG_JTAG_GPIO_ADDR)
  137. #define JTAG_GPIO_OUTPUT CBUS_REG_ADDR(PREG_JTAG_GPIO_ADDR)
  138. #define JTAG_GPIO_INPUT CBUS_REG_ADDR(PREG_JTAG_GPIO_ADDR)
  139. #define TMS_MASK_ENABLE 0x00000002L
  140. #define TDI_MASK_ENABLE 0x00000004L
  141. #define TCK_MASK_ENABLE 0x00000001L
  142. #define TDO_MASK_ENABLE 0x00000008L
  143. #define TEST_N_MASK_ENABLE 0x00010000L
  144. #define TMS_MASK_OUTPUT 0x00000020L
  145. #define TDI_MASK_OUTPUT 0x00000040L
  146. #define TCK_MASK_OUTPUT 0x00000010L
  147. #define TDO_MASK_OUTPUT 0x00000080L
  148. #define TEST_N_MASK_OUTPUT 0x00100000L
  149. #define TMS_MASK_INPUT 0x00000200L
  150. #define TDI_MASK_INPUT 0x00000400L
  151. #define TCK_MASK_INPUT 0x00000100L
  152. #define TDO_MASK_INPUT 0x00000800L
  153. #define PREG_IO_0_MASK 0x00000001L
  154. #define PREG_IO_1_MASK 0x00000002L
  155. #define PREG_IO_2_MASK 0x00000004L
  156. #define PREG_IO_3_MASK 0x00000008L
  157. #define PREG_IO_4_MASK 0x00000010L
  158. #define PREG_IO_5_MASK 0x00000020L
  159. #define PREG_IO_6_MASK 0x00000040L
  160. #define PREG_IO_7_MASK 0x00000080L
  161. #define PREG_IO_8_MASK 0x00000100L
  162. #define PREG_IO_9_MASK 0x00000200L
  163. #define PREG_IO_10_MASK 0x00000400L
  164. #define PREG_IO_11_MASK 0x00000800L
  165. #define PREG_IO_12_MASK 0x00001000L
  166. #define PREG_IO_13_MASK 0x00002000L
  167. #define PREG_IO_14_MASK 0x00004000L
  168. #define PREG_IO_15_MASK 0x00008000L
  169. #define PREG_IO_16_MASK 0x00010000L
  170. #define PREG_IO_17_MASK 0x00020000L
  171. #define PREG_IO_18_MASK 0x00040000L
  172. #define PREG_IO_19_MASK 0x00080000L
  173. #define PREG_IO_20_MASK 0x00100000L
  174. #define PREG_IO_21_MASK 0x00200000L
  175. #define PREG_IO_22_MASK 0x00400000L
  176. #define PREG_IO_23_MASK 0x00800000L
  177. #define PREG_IO_24_MASK 0x01000000L
  178. #define PREG_IO_25_MASK 0x02000000L
  179. #define PREG_IO_26_MASK 0x04000000L
  180. #define PREG_IO_27_MASK 0x08000000L
  181. #define PREG_IO_28_MASK 0x10000000L
  182. #define PREG_IO_29_MASK 0x20000000L
  183. #define PREG_IO_30_MASK 0x40000000L
  184. #define PREG_IO_31_MASK 0x80000000L
  185. #define PREG_IO_0_3_MASK 0x0000000FL
  186. #define PREG_IO_2_5_MASK 0x0000003CL
  187. #define PREG_IO_4_7_MASK 0x000000F0L
  188. #define PREG_IO_0_7_MASK 0x000000FFL
  189. #define PREG_IO_8_11_MASK 0x00000F00L
  190. #define PREG_IO_8_15_MASK 0x0000FF00L
  191. #define PREG_IO_9_16_MASK 0x0001FE00L
  192. #define PREG_IO_10_13_MASK 0x00003c00L
  193. #define PREG_IO_12_15_MASK 0x0000F000L
  194. #define PREG_IO_13_16_MASK 0x0001E000L
  195. #define PREG_IO_14_17_MASK 0x0003C000L
  196. #define PREG_IO_17_20_MASK 0x001E0000L
  197. #define PREG_IO_22_25_MASK 0x03C00000L
  198. #define PREG_IO_23_26_MASK 0x07800000L
  199. #define PREG_IO_24_27_MASK 0x0F000000L
  200. #define PREG_IO_22_29_MASK 0x3FC00000L
  201. #define CARD_HW_MODE 0
  202. #define CARD_SW_MODE 1
  203. #define XD_NAND_MODE 2
  204. #define CARD_SLOT_4_1 0
  205. #define CARD_SLOT_DISJUNCT 1
  206. #define ATA_DEV_SLEEP 0
  207. #define ATA_DEV_RECOVER 1
  208. #define SDIO_NO_INT 0
  209. #define SDIO_IF_INT 1
  210. #define SDIO_CMD_INT 2
  211. #define SDIO_SOFT_INT 3
  212. #define SDIO_TIMEOUT_INT 4
  213. #endif //__CARD_IO_H