xd_port.h 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #ifndef _H_XD_PORT_COMMON
  2. #define _H_XD_PORT_COMMON
  3. #include <asm/types.h>
  4. #include <asm/io.h>
  5. #include <asm/arch/am_regs.h>
  6. #include <asm/drivers/cardreader/card_io.h>
  7. //Following I/O configurations are just for default case if no any known PCB defined
  8. #define XD_IO_EXTERNAL
  9. //Port operation for XD BUS
  10. //write it as such form that could be replaced by function later if needed
  11. #ifdef XD_IO_EXTERNAL
  12. extern unsigned XD_DAT_OUTPUT_EN_REG;
  13. extern unsigned XD_DAT0_7_OUTPUT_EN_MASK;
  14. extern unsigned XD_DAT_INPUT_REG;
  15. extern unsigned XD_DAT_OUTPUT_REG;
  16. extern unsigned XD_DAT0_7_INPUT_MASK;
  17. extern unsigned XD_DAT0_7_OUTPUT_MASK;
  18. extern unsigned XD_DAT_INPUT_OFFSET;
  19. extern unsigned XD_DAT_OUTPUT_OFFSET;
  20. extern unsigned XD_RB_OUTPUT_EN_REG;
  21. extern unsigned XD_RB_OUTPUT_EN_MASK;
  22. extern unsigned XD_RB_INPUT_REG;
  23. extern unsigned XD_RB_INPUT_MASK;
  24. extern unsigned XD_RE_OUTPUT_EN_REG;
  25. extern unsigned XD_RE_OUTPUT_EN_MASK;
  26. extern unsigned XD_RE_OUTPUT_REG;
  27. extern unsigned XD_RE_OUTPUT_MASK;
  28. extern unsigned XD_CE_OUTPUT_EN_REG;
  29. extern unsigned XD_CE_OUTPUT_EN_MASK;
  30. extern unsigned XD_CE_OUTPUT_REG;
  31. extern unsigned XD_CE_OUTPUT_MASK;
  32. extern unsigned XD_ALE_OUTPUT_EN_REG;
  33. extern unsigned XD_ALE_OUTPUT_EN_MASK;
  34. extern unsigned XD_ALE_OUTPUT_REG;
  35. extern unsigned XD_ALE_OUTPUT_MASK;
  36. extern unsigned XD_CLE_OUTPUT_EN_REG;
  37. extern unsigned XD_CLE_OUTPUT_EN_MASK;
  38. extern unsigned XD_CLE_OUTPUT_REG;
  39. extern unsigned XD_CLE_OUTPUT_MASK;
  40. extern unsigned XD_WE_OUTPUT_EN_REG;
  41. extern unsigned XD_WE_OUTPUT_EN_MASK;
  42. extern unsigned XD_WE_OUTPUT_REG;
  43. extern unsigned XD_WE_OUTPUT_MASK;
  44. extern unsigned XD_WP_OUTPUT_EN_REG;
  45. extern unsigned XD_WP_OUTPUT_EN_MASK;
  46. extern unsigned XD_WP_OUTPUT_REG;
  47. extern unsigned XD_WP_OUTPUT_MASK;
  48. extern unsigned XD_INS_OUTPUT_EN_REG;
  49. extern unsigned XD_INS_OUTPUT_EN_MASK;
  50. extern unsigned XD_INS_INPUT_REG;
  51. extern unsigned XD_INS_INPUT_MASK;
  52. extern unsigned XD_PWR_OUTPUT_EN_REG;
  53. extern unsigned XD_PWR_OUTPUT_EN_MASK;
  54. extern unsigned XD_PWR_OUTPUT_REG;
  55. extern unsigned XD_PWR_OUTPUT_MASK;
  56. extern unsigned XD_PWR_EN_LEVEL;
  57. #define XD_POWER_CONTROL
  58. extern unsigned XD_WORK_MODE;
  59. //extern void (*xd_power_register)(int power_on);
  60. //extern int (*xd_ins_register)(void);
  61. //extern void (*xd_io_release_register)(void);
  62. void xd_gpio_enable(void);
  63. #else //XD_IO_EXTERNAL
  64. #define XD_DAT_OUTPUT_EN_REG CARD_GPIO_ENABLE
  65. #define XD_DAT0_7_OUTPUT_EN_MASK PREG_IO_9_16_MASK
  66. #define XD_DAT_INPUT_REG CARD_GPIO_INPUT
  67. #define XD_DAT_OUTPUT_REG CARD_GPIO_OUTPUT
  68. #define XD_DAT0_7_INPUT_MASK PREG_IO_9_16_MASK
  69. #define XD_DAT0_7_OUTPUT_MASK PREG_IO_9_16_MASK
  70. #define XD_DAT_INPUT_OFFSET 9
  71. #define XD_DAT_OUTPUT_OFFSET 9
  72. #define XD_RB_OUTPUT_EN_REG CARD_GPIO_ENABLE
  73. #define XD_RB_OUTPUT_EN_MASK PREG_IO_6_MASK
  74. #define XD_RB_INPUT_REG CARD_GPIO_INPUT
  75. #define XD_RB_INPUT_MASK PREG_IO_6_MASK
  76. #define XD_RE_OUTPUT_EN_REG CARD_GPIO_ENABLE
  77. #define XD_RE_OUTPUT_EN_MASK PREG_IO_18_MASK
  78. #define XD_RE_OUTPUT_REG CARD_GPIO_OUTPUT
  79. #define XD_RE_OUTPUT_MASK PREG_IO_18_MASK
  80. #define XD_CE_OUTPUT_EN_REG CARD_GPIO_ENABLE
  81. #define XD_CE_OUTPUT_EN_MASK PREG_IO_17_MASK
  82. #define XD_CE_OUTPUT_REG CARD_GPIO_OUTPUT
  83. #define XD_CE_OUTPUT_MASK PREG_IO_17_MASK
  84. #define XD_ALE_OUTPUT_EN_REG CARD_GPIO_ENABLE
  85. #define XD_ALE_OUTPUT_EN_MASK PREG_IO_1_MASK
  86. #define XD_ALE_OUTPUT_REG CARD_GPIO_OUTPUT
  87. #define XD_ALE_OUTPUT_MASK PREG_IO_1_MASK
  88. #define XD_CLE_OUTPUT_EN_REG CARD_GPIO_ENABLE
  89. #define XD_CLE_OUTPUT_EN_MASK PREG_IO_2_MASK
  90. #define XD_CLE_OUTPUT_REG CARD_GPIO_OUTPUT
  91. #define XD_CLE_OUTPUT_MASK PREG_IO_2_MASK
  92. #define XD_WE_OUTPUT_EN_REG CARD_GPIO_ENABLE
  93. #define XD_WE_OUTPUT_EN_MASK PREG_IO_19_MASK
  94. #define XD_WE_OUTPUT_REG CARD_GPIO_OUTPUT
  95. #define XD_WE_OUTPUT_MASK PREG_IO_19_MASK
  96. #define XD_WP_OUTPUT_EN_REG CARD_GPIO_ENABLE
  97. #define XD_WP_OUTPUT_EN_MASK PREG_IO_22_MASK
  98. #define XD_WP_OUTPUT_REG CARD_GPIO_OUTPUT
  99. #define XD_WP_OUTPUT_MASK PREG_IO_22_MASK
  100. #define XD_INS_OUTPUT_EN_REG CARD_GPIO_ENABLE
  101. #define XD_INS_OUTPUT_EN_MASK PREG_IO_20_MASK
  102. #define XD_INS_INPUT_REG CARD_GPIO_INPUT
  103. #define XD_INS_INPUT_MASK PREG_IO_20_MASK
  104. #define XD_PWR_OUTPUT_EN_REG CARD_GPIO_ENABLE
  105. #define XD_PWR_OUTPUT_EN_MASK PREG_IO_23_MASK
  106. #define XD_PWR_OUTPUT_REG CARD_GPIO_OUTPUT
  107. #define XD_PWR_OUTPUT_MASK PREG_IO_23_MASK
  108. #define XD_PWR_EN_LEVEL 0
  109. #define XD_WORK_MODE CARD_SW_MODE
  110. #define xd_gpio_enable() {CLEAR_PERIPHS_REG_BITS(PERIPHS_PIN_MUX_2, 0x3F);CLEAR_PERIPHS_REG_BITS(SDIO_MULT_CONFIG, (1));}
  111. #endif //XD_IO_EXTERNAL
  112. extern int i_GPIO_timer;
  113. #define xd_set_dat0_7_input() {(*(volatile unsigned *)XD_DAT_OUTPUT_EN_REG) |= XD_DAT0_7_OUTPUT_EN_MASK; for(i_GPIO_timer=0;i_GPIO_timer<15;i_GPIO_timer++);}
  114. #define xd_set_dat0_7_output() {(*(volatile unsigned *)XD_DAT_OUTPUT_EN_REG) &= (~XD_DAT0_7_OUTPUT_EN_MASK);}
  115. #define xd_set_dat0_7_value(data) {(*(volatile unsigned *)XD_DAT_OUTPUT_REG) = (((*(volatile unsigned *)XD_DAT_OUTPUT_REG) & (~XD_DAT0_7_OUTPUT_MASK)) | (data << XD_DAT_OUTPUT_OFFSET));}
  116. #define xd_get_dat0_7_value() (((*(volatile unsigned *)XD_DAT_INPUT_REG) & XD_DAT0_7_INPUT_MASK) >> XD_DAT_INPUT_OFFSET)
  117. #define xd_set_rb_input() {(*(volatile unsigned *)XD_RB_OUTPUT_EN_REG) |= XD_RB_OUTPUT_EN_MASK; for(i_GPIO_timer=0;i_GPIO_timer<15;i_GPIO_timer++);}
  118. #define xd_get_rb_value() ((*(volatile unsigned *)XD_RB_INPUT_REG & XD_RB_INPUT_MASK)?1:0)
  119. #define xd_set_re_output() {(*(volatile unsigned *)XD_RE_OUTPUT_EN_REG) &= (~XD_RE_OUTPUT_EN_MASK);}
  120. #define xd_set_re_high() {(*(volatile unsigned *)XD_RE_OUTPUT_REG) |= XD_RE_OUTPUT_MASK;}
  121. #define xd_set_re_low() {(*(volatile unsigned *)XD_RE_OUTPUT_REG) &= (~XD_RE_OUTPUT_MASK);}
  122. #define xd_set_ce_output() {(*(volatile unsigned *)XD_CE_OUTPUT_EN_REG) &= (~XD_CE_OUTPUT_EN_MASK);}
  123. #define xd_set_ce_high() {(*(volatile unsigned *)XD_CE_OUTPUT_REG) |= XD_CE_OUTPUT_MASK;}
  124. #define xd_set_ce_low() {(*(volatile unsigned *)XD_CE_OUTPUT_REG) &= (~XD_CE_OUTPUT_MASK);}
  125. #define xd_set_ale_output() {(*(volatile unsigned *)XD_ALE_OUTPUT_EN_REG) &= (~XD_ALE_OUTPUT_EN_MASK);}
  126. #define xd_set_ale_high() {(*(volatile unsigned *)XD_ALE_OUTPUT_REG) |= XD_ALE_OUTPUT_MASK;}
  127. #define xd_set_ale_low() {(*(volatile unsigned *)XD_ALE_OUTPUT_REG) &= (~XD_ALE_OUTPUT_MASK);}
  128. #define xd_set_cle_output() {(*(volatile unsigned *)XD_CLE_OUTPUT_EN_REG) &= (~XD_CLE_OUTPUT_EN_MASK);}
  129. #define xd_set_cle_high() {(*(volatile unsigned *)XD_CLE_OUTPUT_REG) |= XD_CLE_OUTPUT_MASK;}
  130. #define xd_set_cle_low() {(*(volatile unsigned *)XD_CLE_OUTPUT_REG) &= (~XD_CLE_OUTPUT_MASK);}
  131. #define xd_set_we_output() {(*(volatile unsigned *)XD_WE_OUTPUT_EN_REG) &= (~XD_WE_OUTPUT_EN_MASK);}
  132. #define xd_set_we_high() {(*(volatile unsigned *)XD_WE_OUTPUT_REG) |= XD_WE_OUTPUT_MASK;}
  133. #define xd_set_we_low() {(*(volatile unsigned *)XD_WE_OUTPUT_REG) &= (~XD_WE_OUTPUT_MASK);}
  134. #define xd_set_wp_output() {(*(volatile unsigned *)XD_WP_OUTPUT_EN_REG) &= (~XD_WP_OUTPUT_EN_MASK);}
  135. #define xd_set_wp_high() {(*(volatile unsigned *)XD_WP_OUTPUT_REG) |= XD_WP_OUTPUT_MASK;}
  136. #define xd_set_wp_low() {(*(volatile unsigned *)XD_WP_OUTPUT_REG) &= (~XD_WP_OUTPUT_MASK);}
  137. #define xd_set_ins_input() {(*(volatile unsigned *)XD_INS_OUTPUT_EN_REG) |= XD_INS_OUTPUT_EN_MASK; for(i_GPIO_timer=0;i_GPIO_timer<15;i_GPIO_timer++);}
  138. #define xd_get_ins_value() (((*(volatile unsigned *)XD_INS_INPUT_REG) & XD_INS_INPUT_MASK)?1:0)
  139. #define XD_POWER_CONTROL
  140. #ifdef XD_POWER_CONTROL
  141. #define xd_set_enable() {(*(volatile unsigned *)XD_PWR_OUTPUT_EN_REG) &= (~XD_PWR_OUTPUT_EN_MASK); if(XD_PWR_EN_LEVEL){*(volatile unsigned *)XD_PWR_OUTPUT_REG |= XD_PWR_OUTPUT_MASK;} else {*(volatile unsigned *)XD_PWR_OUTPUT_REG &= ~XD_PWR_OUTPUT_MASK;}}
  142. #define xd_set_disable() {(*(volatile unsigned *)XD_PWR_OUTPUT_EN_REG) &= (~XD_PWR_OUTPUT_EN_MASK); if(XD_PWR_EN_LEVEL){*(volatile unsigned *)XD_PWR_OUTPUT_REG &= ~XD_PWR_OUTPUT_MASK;} else {*(volatile unsigned *)XD_PWR_OUTPUT_REG |= XD_PWR_OUTPUT_MASK;}}
  143. #endif /* */
  144. #endif //_H_XD_PORT_COMMON