mt_gpio.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2015. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. */
  31. #ifndef _MT_GPIO_H_
  32. #define _MT_GPIO_H_
  33. /* #include <kernel/mutex.h> */
  34. #include <debug.h>
  35. #include <platform/mt_typedefs.h>
  36. #if (!defined(MACH_FPGA)) && (!defined(USE_DTB_NO_DWS))
  37. #include <cust_gpio_usage.h>
  38. #endif
  39. #include <platform/gpio_const.h>
  40. /*#define FPGA_SIMULATION*/
  41. /*#define SELF_TEST*/
  42. #ifdef FPGA_SIMULATION
  43. /* GPIO address */
  44. #define GPIO_BASE (0x10005000)/* IOCFG_BASE */
  45. #define IOCFG_LT_BASE (0x10002000)/* IOCFG_1_BASE */
  46. #define IOCFG_LM_BASE (0x10002200)/* IOCFG_2_BASE */
  47. #define IOCFG_LB_BASE (0x10002400)/* IOCFG_3_BASE */
  48. #define IOCFG_BL_BASE (0x10002600)/* IOCFG_4_BASE */
  49. #define IOCFG_RR_BASE (0x10002800)/* IOCFG_5_BASE */
  50. #define IOCFG_RB_BASE (0x10002A00)/* IOCFG_6_BASE */
  51. #define IOCFG_RT_BASE (0x10002C00)/* IOCFG_7_BASE */
  52. #endif
  53. /*----------------------------------------------------------------------------*/
  54. // Error Code No.
  55. #define RSUCCESS 0
  56. #define ERACCESS 1
  57. #define ERINVAL 2
  58. #define ERWRAPPER 3
  59. /*------------------------------------------------------------------------------*/
  60. /* mutex_t gpio_mutex; *//* delete by xuexi as it needn't now */
  61. /******************************************************************************
  62. * Enumeration for GPIO pin
  63. ******************************************************************************/
  64. typedef enum {
  65. GPIO_DRV_UNSUPPORTED = -1,
  66. GPIO_DRV0 = 0x00,
  67. GPIO_DRV1 = 0x01,
  68. GPIO_DRV2 = 0x10,
  69. GPIO_DRV3 = 0x11,
  70. GPIO_DRV4 = 0x100,
  71. GPIO_DRV5 = 0x101,
  72. GPIO_DRV6 = 0x110,
  73. GPIO_DRV7 = 0x111,
  74. } GPIO_DRV;
  75. /* GPIO MODE CONTROL VALUE*/
  76. typedef enum {
  77. GPIO_MODE_UNSUPPORTED = -1,
  78. GPIO_MODE_GPIO = 0,
  79. GPIO_MODE_00 = 0,
  80. GPIO_MODE_01 = 1,
  81. GPIO_MODE_02 = 2,
  82. GPIO_MODE_03 = 3,
  83. GPIO_MODE_04 = 4,
  84. GPIO_MODE_05 = 5,
  85. GPIO_MODE_06 = 6,
  86. GPIO_MODE_07 = 7,
  87. GPIO_MODE_MAX,
  88. GPIO_MODE_DEFAULT = GPIO_MODE_01,
  89. } GPIO_MODE;
  90. /*----------------------------------------------------------------------------*/
  91. /* GPIO DIRECTION */
  92. typedef enum {
  93. GPIO_DIR_UNSUPPORTED = -1,
  94. GPIO_DIR_IN = 0,
  95. GPIO_DIR_OUT = 1,
  96. GPIO_DIR_MAX,
  97. GPIO_DIR_DEFAULT = GPIO_DIR_IN,
  98. } GPIO_DIR;
  99. /*----------------------------------------------------------------------------*/
  100. /* GPIO PULL ENABLE*/
  101. typedef enum {
  102. GPIO_PULL_EN_UNSUPPORTED = -1,
  103. GPIO_NOPULLUP = -4,
  104. GPIO_NOPULLDOWN = -5,
  105. GPIO_PULL_DISABLE = 0,
  106. GPIO_PULL_ENABLE = 1,
  107. GPIO_PULL_EN_MAX,
  108. GPIO_PULL_EN_DEFAULT = GPIO_PULL_ENABLE,
  109. } GPIO_PULL_EN;
  110. /*----------------------------------------------------------------------------*/
  111. /* GPIO SMT*/
  112. typedef enum {
  113. GPIO_SMT_UNSUPPORTED = -1,
  114. GPIO_SMT_DISABLE = 0,
  115. GPIO_SMT_ENABLE = 1,
  116. GPIO_SMT_MAX,
  117. GPIO_SMT_DEFAULT = GPIO_SMT_ENABLE,
  118. } GPIO_SMT;
  119. /*----------------------------------------------------------------------------*/
  120. /* GPIO IES*/
  121. typedef enum {
  122. GPIO_IES_UNSUPPORTED = -1,
  123. GPIO_IES_DISABLE = 0,
  124. GPIO_IES_ENABLE = 1,
  125. GPIO_IES_MAX,
  126. GPIO_IES_DEFAULT = GPIO_IES_ENABLE,
  127. } GPIO_IES;
  128. /*----------------------------------------------------------------------------*/
  129. /* GPIO PULL-UP/PULL-DOWN*/
  130. typedef enum {
  131. GPIO_PULL_UNSUPPORTED = -1,
  132. GPIO_PULL_DOWN = 0,
  133. GPIO_PULL_UP = 1,
  134. GPIO_NO_PULL = 2,
  135. GPIO_PULL_MAX,
  136. GPIO_PULL_DEFAULT = GPIO_PULL_DOWN
  137. } GPIO_PULL;
  138. /*----------------------------------------------------------------------------*/
  139. /* GPIO OUTPUT */
  140. typedef enum {
  141. GPIO_OUT_UNSUPPORTED = -1,
  142. GPIO_OUT_ZERO = 0,
  143. GPIO_OUT_ONE = 1,
  144. GPIO_OUT_MAX,
  145. GPIO_OUT_DEFAULT = GPIO_OUT_ZERO,
  146. GPIO_DATA_OUT_DEFAULT = GPIO_OUT_ZERO, /*compatible with DCT*/
  147. } GPIO_OUT;
  148. /*----------------------------------------------------------------------------*/
  149. /* GPIO INPUT */
  150. typedef enum {
  151. GPIO_IN_UNSUPPORTED = -1,
  152. GPIO_IN_ZERO = 0,
  153. GPIO_IN_ONE = 1,
  154. GPIO_IN_MAX,
  155. } GPIO_IN;
  156. /*----------------------------------------------------------------------------*/
  157. /* GPIO POWER*/
  158. typedef enum {
  159. GPIO_VIO28 = 0,
  160. GPIO_VIO18 = 1,
  161. GPIO_GPIO_VIO18 = 2,
  162. GPIO_VMC = 3,
  163. GPIO_VSIM = 4,
  164. GPIO_VIO_MAX,
  165. } GPIO_POWER;
  166. /*----------------------------------------------------------------------------*/
  167. typedef struct {
  168. unsigned int val;
  169. unsigned int set;
  170. unsigned int rst;
  171. unsigned int _align1;
  172. } VAL_REGS;
  173. /*----------------------------------------------------------------------------*/
  174. typedef struct {
  175. VAL_REGS dir[16];/* 0x0000 ~ 0x00FF: 256 bytes */
  176. VAL_REGS dout[16];/* 0x0100 ~ 0x01FF: 256 bytes */
  177. VAL_REGS din[16];/* 0x0200 ~ 0x02FF: 256 bytes */
  178. VAL_REGS mode[33];/* 0x0300 ~ 0x0510: 528 bytes */
  179. } GPIO_REGS;
  180. /*----------------------------------------------------------------------------*/
  181. typedef struct {
  182. unsigned int no : 16;
  183. unsigned int mode : 3;
  184. unsigned int pullsel: 1;
  185. unsigned int din : 1;
  186. unsigned int dout : 1;
  187. unsigned int pullen : 1;
  188. unsigned int dir : 1;
  189. unsigned int dinv : 1;
  190. unsigned int _align : 7;
  191. } GPIO_CFG;
  192. /******************************************************************************
  193. * GPIO Driver interface
  194. ******************************************************************************/
  195. /*direction*/
  196. S32 mt_set_gpio_dir(u32 pin, u32 dir);
  197. S32 mt_get_gpio_dir(u32 pin);
  198. /*pull enable*/
  199. S32 mt_set_gpio_pull_enable(u32 pin, u32 enable);
  200. S32 mt_get_gpio_pull_enable(u32 pin);
  201. /*pull select*/
  202. S32 mt_set_gpio_pull_select(u32 pin, u32 select);
  203. S32 mt_get_gpio_pull_select(u32 pin);
  204. /*schmitt trigger*/
  205. S32 mt_set_gpio_smt(u32 pin, u32 enable);
  206. S32 mt_get_gpio_smt(u32 pin);
  207. /*IES*/
  208. S32 mt_set_gpio_ies(u32 pin, u32 enable);
  209. S32 mt_get_gpio_ies(u32 pin);
  210. /*input/output*/
  211. S32 mt_set_gpio_out(u32 pin, u32 output);
  212. S32 mt_get_gpio_out(u32 pin);
  213. S32 mt_get_gpio_in(u32 pin);
  214. /*mode control*/
  215. S32 mt_set_gpio_mode(u32 pin, u32 mode);
  216. S32 mt_get_gpio_mode(u32 pin);
  217. /*driving control*/
  218. S32 mt_set_gpio_drving(u32 pin, GPIO_DRV driving);
  219. S32 mt_get_gpio_drving(u32 pin);
  220. /*misc functions for protect GPIO*/
  221. void mt_gpio_set_default(void);
  222. void mt_gpio_dump(void);
  223. void mt_gpio_load(GPIO_REGS *regs);
  224. void mt_gpio_checkpoint_save(void);
  225. void mt_gpio_checkpoint_compare(void);
  226. void mt_gpio_set_default_dump(void);
  227. /*Special request for reading input value high, low, floating*/
  228. S32 mt_get_gpio_value(int gpio);
  229. #endif //_MT_GPIO_H_