mt_gpio.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #ifndef _MT_GPIO_H_
  2. #define _MT_GPIO_H_
  3. #include <kernel/mutex.h>
  4. #include <debug.h>
  5. #include <platform/mt_typedefs.h>
  6. #if (!defined(MACH_FPGA))
  7. #include <cust_gpio_usage.h>
  8. #endif
  9. #include <platform/gpio_const.h>
  10. mutex_t gpio_mutex;
  11. /*----------------------------------------------------------------------------*/
  12. // Error Code No.
  13. #define RSUCCESS 0
  14. #define ERACCESS 1
  15. #define ERINVAL 2
  16. #define ERWRAPPER 3
  17. /*----------------------------------------------------------------------------*/
  18. #ifndef s32
  19. #define s32 signed int
  20. #endif
  21. #ifndef s64
  22. #define s64 signed long long
  23. #endif
  24. /*----------------------------------------------------------------------------*/
  25. #define MAX_GPIO_PIN (MT_GPIO_BASE_MAX)
  26. /******************************************************************************
  27. * Enumeration for GPIO pin
  28. ******************************************************************************/
  29. /* GPIO MODE CONTROL VALUE*/
  30. typedef enum {
  31. GPIO_MODE_UNSUPPORTED = -1,
  32. GPIO_MODE_GPIO = 0,
  33. GPIO_MODE_00 = 0,
  34. GPIO_MODE_01 = 1,
  35. GPIO_MODE_02 = 2,
  36. GPIO_MODE_03 = 3,
  37. GPIO_MODE_04 = 4,
  38. GPIO_MODE_05 = 5,
  39. GPIO_MODE_06 = 6,
  40. GPIO_MODE_07 = 7,
  41. GPIO_MODE_MAX,
  42. GPIO_MODE_DEFAULT = GPIO_MODE_01,
  43. } GPIO_MODE;
  44. /*----------------------------------------------------------------------------*/
  45. /* GPIO DIRECTION */
  46. typedef enum {
  47. GPIO_DIR_UNSUPPORTED = -1,
  48. GPIO_DIR_IN = 0,
  49. GPIO_DIR_OUT = 1,
  50. GPIO_DIR_MAX,
  51. GPIO_DIR_DEFAULT = GPIO_DIR_IN,
  52. } GPIO_DIR;
  53. /*----------------------------------------------------------------------------*/
  54. /* GPIO PULL ENABLE*/
  55. typedef enum {
  56. GPIO_PULL_EN_UNSUPPORTED = -1,
  57. GPIO_PULL_DISABLE = 0,
  58. GPIO_PULL_ENABLE = 1,
  59. GPIO_PULL_EN_MAX,
  60. GPIO_PULL_EN_DEFAULT = GPIO_PULL_ENABLE,
  61. } GPIO_PULL_EN;
  62. /*----------------------------------------------------------------------------*/
  63. /* GPIO SMT*/
  64. typedef enum {
  65. GPIO_SMT_UNSUPPORTED = -1,
  66. GPIO_SMT_DISABLE = 0,
  67. GPIO_SMT_ENABLE = 1,
  68. GPIO_SMT_MAX,
  69. GPIO_SMT_DEFAULT = GPIO_SMT_ENABLE,
  70. } GPIO_SMT;
  71. /*----------------------------------------------------------------------------*/
  72. /* GPIO IES*/
  73. typedef enum {
  74. GPIO_IES_UNSUPPORTED = -1,
  75. GPIO_IES_DISABLE = 0,
  76. GPIO_IES_ENABLE = 1,
  77. GPIO_IES_MAX,
  78. GPIO_IES_DEFAULT = GPIO_IES_ENABLE,
  79. } GPIO_IES;
  80. /*----------------------------------------------------------------------------*/
  81. /* GPIO PULL-UP/PULL-DOWN*/
  82. typedef enum {
  83. GPIO_PULL_UNSUPPORTED = -1,
  84. GPIO_PULL_DOWN = 0,
  85. GPIO_PULL_UP = 1,
  86. GPIO_PULL_MAX,
  87. GPIO_PULL_DEFAULT = GPIO_PULL_DOWN
  88. } GPIO_PULL;
  89. /*----------------------------------------------------------------------------*/
  90. /* GPIO OUTPUT */
  91. typedef enum {
  92. GPIO_OUT_UNSUPPORTED = -1,
  93. GPIO_OUT_ZERO = 0,
  94. GPIO_OUT_ONE = 1,
  95. GPIO_OUT_MAX,
  96. GPIO_OUT_DEFAULT = GPIO_OUT_ZERO,
  97. GPIO_DATA_OUT_DEFAULT = GPIO_OUT_ZERO, /*compatible with DCT*/
  98. } GPIO_OUT;
  99. /*----------------------------------------------------------------------------*/
  100. /* GPIO INPUT */
  101. typedef enum {
  102. GPIO_IN_UNSUPPORTED = -1,
  103. GPIO_IN_ZERO = 0,
  104. GPIO_IN_ONE = 1,
  105. GPIO_IN_MAX,
  106. } GPIO_IN;
  107. /*----------------------------------------------------------------------------*/
  108. /* GPIO POWER*/
  109. typedef enum {
  110. GPIO_VIO28 = 0,
  111. GPIO_VIO18 = 1,
  112. GPIO_GPIO_VIO18 = 2,
  113. GPIO_MSDC_VMC = 3,
  114. GPIO_VIO_MAX,
  115. } GPIO_POWER;
  116. /*----------------------------------------------------------------------------*/
  117. typedef struct {
  118. unsigned int val;
  119. unsigned int set;
  120. unsigned int rst;
  121. unsigned int _align1;
  122. } VAL_REGS;
  123. /*----------------------------------------------------------------------------*/
  124. typedef struct {
  125. VAL_REGS dir[7]; /*0x0000 ~ 0x006F: 112 bytes*/
  126. unsigned char rsv00[144]; /*0x00E0 ~ 0x00FF: 32 bytes*/
  127. VAL_REGS dout[7]; /*0x0400 ~ 0x04DF: 224 bytes*/
  128. unsigned char rsv04[144]; /*0x04B0 ~ 0x04FF: 32 bytes*/
  129. VAL_REGS din[7]; /*0x0500 ~ 0x05DF: 224 bytes*/
  130. unsigned char rsv05[144]; /*0x05E0 ~ 0x05FF: 32 bytes*/
  131. VAL_REGS mode[21]; /*0x0600 ~ 0x08AF: 688 bytes*/
  132. } GPIO_REGS;
  133. /*----------------------------------------------------------------------------*/
  134. typedef struct {
  135. unsigned int no : 16;
  136. unsigned int mode : 3;
  137. unsigned int pullsel: 1;
  138. unsigned int din : 1;
  139. unsigned int dout : 1;
  140. unsigned int pullen : 1;
  141. unsigned int dir : 1;
  142. unsigned int dinv : 1;
  143. unsigned int _align : 7;
  144. } GPIO_CFG;
  145. /******************************************************************************
  146. * GPIO Driver interface
  147. ******************************************************************************/
  148. /*direction*/
  149. S32 mt_set_gpio_dir(u32 pin, u32 dir);
  150. S32 mt_get_gpio_dir(u32 pin);
  151. /*pull enable*/
  152. S32 mt_set_gpio_pull_enable(u32 pin, u32 enable);
  153. S32 mt_get_gpio_pull_enable(u32 pin);
  154. /*pull select*/
  155. S32 mt_set_gpio_pull_select(u32 pin, u32 select);
  156. S32 mt_get_gpio_pull_select(u32 pin);
  157. /*schmitt trigger*/
  158. S32 mt_set_gpio_smt(u32 pin, u32 enable);
  159. S32 mt_get_gpio_smt(u32 pin);
  160. /*IES*/
  161. S32 mt_set_gpio_ies(u32 pin, u32 enable);
  162. S32 mt_get_gpio_ies(u32 pin);
  163. /*data inversion*/
  164. //S32 mt_set_gpio_inversion(u32 pin, u32 enable);
  165. //S32 mt_get_gpio_inversion(u32 pin);
  166. /*input/output*/
  167. S32 mt_set_gpio_out(u32 pin, u32 output);
  168. S32 mt_get_gpio_out(u32 pin);
  169. S32 mt_get_gpio_in(u32 pin);
  170. /*mode control*/
  171. S32 mt_set_gpio_mode(u32 pin, u32 mode);
  172. S32 mt_get_gpio_mode(u32 pin);
  173. /*misc functions for protect GPIO*/
  174. //void mt_gpio_unlock_init(int all);
  175. void mt_gpio_set_default(void);
  176. void mt_gpio_dump(void);
  177. void mt_gpio_load(GPIO_REGS *regs);
  178. void mt_gpio_checkpoint_save(void);
  179. void mt_gpio_checkpoint_compare(void);
  180. void mt_gpio_set_default_dump(void);
  181. #endif //_MT_GPIO_H_