soc_gpio.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /*
  2. * Copyright (c) 2019 Actions Semiconductor Co., Ltd
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file GPIO/PINMUX configuration macros for Actions SoC
  8. */
  9. #ifndef _ACTIONS_SOC_GPIO_H_
  10. #define _ACTIONS_SOC_GPIO_H_
  11. #include <device.h>
  12. /** @brief This enum defines the normal GPIO port.
  13. * The platform supports a total of 78 GPIO pins with various functionality.
  14. *
  15. */
  16. typedef enum {
  17. GPIO_0 = 0, /**< GPIO pin0. */
  18. GPIO_1 = 1, /**< GPIO pin1. */
  19. GPIO_2 = 2, /**< GPIO pin2. */
  20. GPIO_3 = 3, /**< GPIO pin3. */
  21. GPIO_4 = 4, /**< GPIO pin4. */
  22. GPIO_5 = 5, /**< GPIO pin5. */
  23. GPIO_6 = 6, /**< GPIO pin6. */
  24. GPIO_7 = 7, /**< GPIO pin7. */
  25. GPIO_8 = 8, /**< GPIO pin8. */
  26. GPIO_9 = 9, /**< GPIO pin9. */
  27. GPIO_10 = 10, /**< GPIO pin10. */
  28. GPIO_11 = 11, /**< GPIO pin11. */
  29. GPIO_12 = 12, /**< GPIO pin12. */
  30. GPIO_13 = 13, /**< GPIO pin13. */
  31. GPIO_14 = 14, /**< GPIO pin14. */
  32. GPIO_15 = 15, /**< GPIO pin15. */
  33. GPIO_16 = 16, /**< GPIO pin16. */
  34. GPIO_17 = 17, /**< GPIO pin17. */
  35. GPIO_18 = 18, /**< GPIO pin18. */
  36. GPIO_19 = 19, /**< GPIO pin19. */
  37. GPIO_20 = 20, /**< GPIO pin20. */
  38. GPIO_21 = 21, /**< GPIO pin21. */
  39. GPIO_22 = 22, /**< GPIO pin22. */
  40. GPIO_23 = 23, /**< GPIO pin23. */
  41. GPIO_24 = 24, /**< GPIO pin24. */
  42. GPIO_25 = 25, /**< GPIO pin25. */
  43. GPIO_26 = 26, /**< GPIO pin26. */
  44. GPIO_27 = 27, /**< GPIO pin27. */
  45. GPIO_28 = 28, /**< GPIO pin28. */
  46. GPIO_29 = 29, /**< GPIO pin29. */
  47. GPIO_30 = 30, /**< GPIO pin30. */
  48. GPIO_31 = 31, /**< GPIO pin31. */
  49. GPIO_32 = 32, /**< GPIO pin32. */
  50. GPIO_33 = 33, /**< GPIO pin33. */
  51. GPIO_34 = 34, /**< GPIO pin34. */
  52. GPIO_35 = 35, /**< GPIO pin35. */
  53. GPIO_36 = 36, /**< GPIO pin36. */
  54. GPIO_37 = 37, /**< GPIO pin37. */
  55. GPIO_38 = 38, /**< GPIO pin38. */
  56. GPIO_39 = 39, /**< GPIO pin39. */
  57. GPIO_40 = 40, /**< GPIO pin40. */
  58. GPIO_41 = 41, /**< GPIO pin41. */
  59. GPIO_42 = 42, /**< GPIO pin42. */
  60. GPIO_43 = 43, /**< GPIO pin43. */
  61. GPIO_44 = 44, /**< GPIO pin44. */
  62. GPIO_45 = 45, /**< GPIO pin45. */
  63. GPIO_46 = 46, /**< GPIO pin46. */
  64. GPIO_47 = 47, /**< GPIO pin47. */
  65. GPIO_48 = 48, /**< GPIO pin48. */
  66. GPIO_49 = 49, /**< GPIO pin49. */
  67. GPIO_50 = 50, /**< GPIO pin50. */
  68. GPIO_51 = 51, /**< GPIO pin51. */
  69. GPIO_52 = 52, /**< GPIO pin52. */
  70. GPIO_53 = 53, /**< GPIO pin53. */
  71. GPIO_54 = 54, /**< GPIO pin54. */
  72. GPIO_55 = 55, /**< GPIO pin55. */
  73. GPIO_56 = 56, /**< GPIO pin56. */
  74. GPIO_57 = 57, /**< GPIO pin57. */
  75. GPIO_58 = 58, /**< GPIO pin58. */
  76. GPIO_59 = 59, /**< GPIO pin59. */
  77. GPIO_60 = 60, /**< GPIO pin60. */
  78. GPIO_61 = 61, /**< GPIO pin61. */
  79. GPIO_62 = 62, /**< GPIO pin62. */
  80. GPIO_63 = 63, /**< GPIO pin63. */
  81. GPIO_64 = 64, /**< GPIO pin64. */
  82. GPIO_65 = 65, /**< GPIO pin65. */
  83. GPIO_66 = 66, /**< GPIO pin66. */
  84. GPIO_67 = 67, /**< GPIO pin67. */
  85. GPIO_68 = 68, /**< GPIO pin68. */
  86. GPIO_69 = 69, /**< GPIO pin69. */
  87. GPIO_70 = 70, /**< GPIO pin70. */
  88. GPIO_71 = 71, /**< GPIO pin71. */
  89. GPIO_72 = 72, /**< GPIO pin72. */
  90. GPIO_73 = 73, /**< GPIO pin73. */
  91. GPIO_74 = 74, /**< GPIO pin74. */
  92. GPIO_75 = 75, /**< GPIO pin75. */
  93. GPIO_76 = 76, /**< GPIO pin76. */
  94. GPIO_77 = 77, /**< GPIO pin77. */
  95. GPIO_MAX_PIN_NUM /**< The total number of GPIO pins (invalid GPIO pin number). */
  96. } gpio_pin_e;
  97. /** @brief This enum defines the WIO port.
  98. * The platform supports a total of 4 WIO pins with various functionality.
  99. *
  100. */
  101. typedef enum {
  102. WIO_0 = 0, /**< WIO pin0. */
  103. WIO_1 = 1, /**< WIO pin1. */
  104. WIO_2 = 2, /**< WIO pin2. */
  105. WIO_3 = 3, /**< WIO pin3. */
  106. GPIO_WIO_MAX_PIN_NUM /**< The total number of WIO pins (invalid WIO pin number). */
  107. } wio_pin_e;
  108. #define GPIO_MAX_GROUPS (((GPIO_MAX_PIN_NUM) + 31) / 32)
  109. #define GPIO_MAX_IRQ_GRP 3
  110. #define GPIO_MAX_INT_PIN_NUM 64
  111. #define GPIO_WIO_REG_BASE (GPIO_REG_BASE + 0x300)
  112. #define GPIO_CTL0 0x0
  113. #define GPIO_ODAT0 0x200
  114. #define GPIO_BSR0 0x210
  115. #define GPIO_BRR0 0x220
  116. #define GPIO_IDAT0 0x230
  117. #define GPIO_IRQ_PD0 0x240
  118. #define JTAG_CTL 0x40068400
  119. #define SC_SWEN_SHIFT 12
  120. #define SC_SWMAP_SHIFT 8
  121. #define JTAG_CTL_SC_SWEN(x) ((x) << SC_SWEN_SHIFT)
  122. #define JTAG_CTL_SC_SWMAP(x) ((x) << SC_SWMAP_SHIFT)
  123. #define GPIO_REG_CTL(base, pin) ((base) + GPIO_CTL0 + (pin) * 4)
  124. #define GPIO_REG_ODAT(base, pin) ((base) + GPIO_ODAT0 + (pin) / 32 * 4)
  125. #define GPIO_REG_IDAT(base, pin) ((base) + GPIO_IDAT0 + (pin) / 32 * 4)
  126. #define GPIO_REG_BSR(base, pin) ((base) + GPIO_BSR0 + (pin) / 32 * 4)
  127. #define GPIO_REG_BRR(base, pin) ((base) + GPIO_BRR0 + (pin) / 32 * 4)
  128. #define GPIO_REG_IRQ_PD(base, pin) ((base) + GPIO_IRQ_PD0 + (pin) / 32 * 4)
  129. #define GPIO_BIT(pin) (1 << ((pin) % 32))
  130. #define GPION_CTL(n) GPIO_REG_CTL(GPIO_REG_BASE,n)
  131. #define GPION_ODAT(n) GPIO_REG_ODAT(GPIO_REG_BASE,n)
  132. #define GPION_IDAT(n) GPIO_REG_IDAT(GPIO_REG_BASE,n)
  133. #define GPION_BSR(n) GPIO_REG_BSR(GPIO_REG_BASE,n)
  134. #define GPION_BRR(n) GPIO_REG_BRR(GPIO_REG_BASE,n)
  135. #define GPION_IRQ_PD(n) GPIO_REG_IRQ_PD(GPIO_REG_BASE,n)
  136. #define WIO_REG_CTL(pin) (GPIO_WIO_REG_BASE + (pin) * 4)
  137. #define WIO_CTL_INT_PD_SHIFT (24)
  138. #define WIO_CTL_INT_PD_MASK (1 << WIO_CTL_INT_PD_SHIFT)
  139. #define GPIO_CTL_MFP_SHIFT (0)
  140. #define GPIO_CTL_MFP_MASK (0x1f << GPIO_CTL_MFP_SHIFT)
  141. #define GPIO_CTL_MFP_GPIO (0x0 << GPIO_CTL_MFP_SHIFT)
  142. #define GPIO_CTL_SMIT (0x1 << 5)
  143. #define GPIO_CTL_GPIO_OUTEN (0x1 << 6)
  144. #define GPIO_CTL_GPIO_INEN (0x1 << 7)
  145. #define GPIO_CTL_PULL_MASK (0xf << 8)
  146. #define GPIO_CTL_PULLUP_STRONG (0x1 << 8)
  147. #define GPIO_CTL_PULLDOWN (0x1 << 9)
  148. #define GPIO_CTL_PULLUP (0x1 << 11)
  149. #define GPIO_CTL_PADDRV_SHIFT (12)
  150. #define GPIO_CTL_PADDRV_LEVEL(x) ((x) << GPIO_CTL_PADDRV_SHIFT)
  151. #define GPIO_CTL_PADDRV_MASK GPIO_CTL_PADDRV_LEVEL(0x7)
  152. #define GPIO_CTL_INTC_EN (0x1 << 20)
  153. #define GPIO_CTL_INC_TRIGGER_SHIFT (21)
  154. #define GPIO_CTL_INC_TRIGGER(x) ((x) << GPIO_CTL_INC_TRIGGER_SHIFT)
  155. #define GPIO_CTL_INC_TRIGGER_MASK GPIO_CTL_INC_TRIGGER(0x7)
  156. #define GPIO_CTL_INC_TRIGGER_RISING_EDGE GPIO_CTL_INC_TRIGGER(0x0)
  157. #define GPIO_CTL_INC_TRIGGER_FALLING_EDGE GPIO_CTL_INC_TRIGGER(0x1)
  158. #define GPIO_CTL_INC_TRIGGER_DUAL_EDGE GPIO_CTL_INC_TRIGGER(0x2)
  159. #define GPIO_CTL_INC_TRIGGER_HIGH_LEVEL GPIO_CTL_INC_TRIGGER(0x3)
  160. #define GPIO_CTL_INC_TRIGGER_LOW_LEVEL GPIO_CTL_INC_TRIGGER(0x4)
  161. #define GPIO_CTL_INTC_MASK (0x1 << 25)
  162. #define PINMUX_MODE_MASK (GPIO_CTL_MFP_MASK | \
  163. GPIO_CTL_PULL_MASK | GPIO_CTL_PADDRV_MASK | \
  164. GPIO_CTL_SMIT)
  165. static inline void soc_gpio_output(uint32_t pin, uint32_t val)
  166. {
  167. /* set gpio value */
  168. if (val) {
  169. sys_write32(GPIO_BIT(pin), GPION_BSR(pin));
  170. } else {
  171. sys_write32(GPIO_BIT(pin), GPION_BRR(pin));
  172. }
  173. /* config gpio output */
  174. sys_write32(0x3840, GPION_CTL(pin));
  175. }
  176. #endif /* _ACTIONS_SOC_GPIO_H_ */