pfc-r8a7790.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /*
  2. * arch/arm/cpu/armv7/rmobile/pfc-r8a7790.h
  3. *
  4. * Copyright (C) 2013 Renesas Electronics Corporation
  5. *
  6. * SPDX-License-Identifier: GPL-2.0
  7. */
  8. #ifndef __PFC_R8A7790_H__
  9. #define __PFC_R8A7790_H__
  10. #include <sh_pfc.h>
  11. #include <asm/gpio.h>
  12. #define CPU_32_PORT(fn, pfx, sfx) \
  13. PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \
  14. PORT_10(fn, pfx##2, sfx), PORT_1(fn, pfx##30, sfx), \
  15. PORT_1(fn, pfx##31, sfx)
  16. #define CPU_32_PORT2(fn, pfx, sfx) \
  17. PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \
  18. PORT_10(fn, pfx##2, sfx)
  19. #if defined(CONFIG_R8A7790)
  20. #define CPU_32_PORT1(fn, pfx, sfx) \
  21. PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \
  22. PORT_10(fn, pfx##2, sfx) \
  23. /* GP_0_0_DATA -> GP_5_31_DATA (except for GP1[30],GP1[31],GP2[30],GP2[31]) */
  24. #define CPU_ALL_PORT(fn, pfx, sfx) \
  25. CPU_32_PORT(fn, pfx##_0_, sfx), \
  26. CPU_32_PORT1(fn, pfx##_1_, sfx), \
  27. CPU_32_PORT2(fn, pfx##_2_, sfx), \
  28. CPU_32_PORT(fn, pfx##_3_, sfx), \
  29. CPU_32_PORT(fn, pfx##_4_, sfx), \
  30. CPU_32_PORT(fn, pfx##_5_, sfx)
  31. #elif defined(CONFIG_R8A7791)
  32. #define CPU_32_PORT1(fn, pfx, sfx) \
  33. PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \
  34. PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx), \
  35. PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx), \
  36. PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx)
  37. /*
  38. * GP_0_0_DATA -> GP_7_25_DATA
  39. * (except for GP1[26],GP1[27],GP1[28],GP1[29]),GP1[30]),GP1[31]
  40. * GP7[26],GP7[27],GP7[28],GP7[29]),GP7[30]),GP7[31])
  41. */
  42. #define CPU_ALL_PORT(fn, pfx, sfx) \
  43. CPU_32_PORT(fn, pfx##_0_, sfx), \
  44. CPU_32_PORT1(fn, pfx##_1_, sfx), \
  45. CPU_32_PORT(fn, pfx##_2_, sfx), \
  46. CPU_32_PORT(fn, pfx##_3_, sfx), \
  47. CPU_32_PORT(fn, pfx##_4_, sfx), \
  48. CPU_32_PORT(fn, pfx##_5_, sfx), \
  49. CPU_32_PORT(fn, pfx##_6_, sfx), \
  50. CPU_32_PORT1(fn, pfx##_7_, sfx)
  51. #elif defined(CONFIG_R8A7792)
  52. /*
  53. * GP_0_0_DATA -> GP_11_29_DATA
  54. * (except for GP0[29..31],GP1[23..31],GP3[28..31],GP4[17..31],GP5[17..31]
  55. * GP6[17..31],GP7[17..31],GP8[17..31],GP9[17..31],GP11[30..31])
  56. */
  57. #define CPU_32_PORT0_28(fn, pfx, sfx) \
  58. PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \
  59. PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx), \
  60. PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx), \
  61. PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx), \
  62. PORT_1(fn, pfx##26, sfx), PORT_1(fn, pfx##27, sfx), \
  63. PORT_1(fn, pfx##28, sfx)
  64. #define CPU_32_PORT0_22(fn, pfx, sfx) \
  65. PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \
  66. PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx), \
  67. PORT_1(fn, pfx##22, sfx)
  68. #define CPU_32_PORT0_27(fn, pfx, sfx) \
  69. PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \
  70. PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx), \
  71. PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx), \
  72. PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx), \
  73. PORT_1(fn, pfx##26, sfx), PORT_1(fn, pfx##27, sfx)
  74. #define CPU_32_PORT0_16(fn, pfx, sfx) \
  75. PORT_10(fn, pfx, sfx), \
  76. PORT_1(fn, pfx##10, sfx),PORT_1(fn, pfx##11, sfx), \
  77. PORT_1(fn, pfx##12, sfx), PORT_1(fn, pfx##13, sfx), \
  78. PORT_1(fn, pfx##14, sfx), PORT_1(fn, pfx##15, sfx), \
  79. PORT_1(fn, pfx##16, sfx)
  80. #define CPU_ALL_PORT(fn, pfx, sfx) \
  81. CPU_32_PORT0_28(fn, pfx##_0_, sfx), \
  82. CPU_32_PORT0_22(fn, pfx##_1_, sfx), \
  83. CPU_32_PORT(fn, pfx##_2_, sfx), \
  84. CPU_32_PORT0_27(fn, pfx##_3_, sfx), \
  85. CPU_32_PORT0_16(fn, pfx##_4_, sfx), \
  86. CPU_32_PORT0_16(fn, pfx##_5_, sfx), \
  87. CPU_32_PORT0_16(fn, pfx##_6_, sfx), \
  88. CPU_32_PORT0_16(fn, pfx##_7_, sfx), \
  89. CPU_32_PORT0_16(fn, pfx##_8_, sfx), \
  90. CPU_32_PORT0_16(fn, pfx##_9_, sfx), \
  91. CPU_32_PORT(fn, pfx##_10_, sfx), \
  92. CPU_32_PORT2(fn, pfx##_11_, sfx)
  93. #else
  94. #error "NO support"
  95. #endif
  96. #define _GP_GPIO(pfx, sfx) PINMUX_GPIO(GPIO_GP##pfx, GP##pfx##_DATA)
  97. #define _GP_DATA(pfx, sfx) PINMUX_DATA(GP##pfx##_DATA, GP##pfx##_FN, \
  98. GP##pfx##_IN, GP##pfx##_OUT)
  99. #define _GP_INOUTSEL(pfx, sfx) GP##pfx##_IN, GP##pfx##_OUT
  100. #define _GP_INDT(pfx, sfx) GP##pfx##_DATA
  101. #define GP_ALL(str) CPU_ALL_PORT(_PORT_ALL, GP, str)
  102. #define PINMUX_GPIO_GP_ALL() CPU_ALL_PORT(_GP_GPIO, , unused)
  103. #define PINMUX_DATA_GP_ALL() CPU_ALL_PORT(_GP_DATA, , unused)
  104. #define PORT_10_REV(fn, pfx, sfx) \
  105. PORT_1(fn, pfx##9, sfx), PORT_1(fn, pfx##8, sfx), \
  106. PORT_1(fn, pfx##7, sfx), PORT_1(fn, pfx##6, sfx), \
  107. PORT_1(fn, pfx##5, sfx), PORT_1(fn, pfx##4, sfx), \
  108. PORT_1(fn, pfx##3, sfx), PORT_1(fn, pfx##2, sfx), \
  109. PORT_1(fn, pfx##1, sfx), PORT_1(fn, pfx##0, sfx)
  110. #define CPU_32_PORT_REV(fn, pfx, sfx) \
  111. PORT_1(fn, pfx##31, sfx), PORT_1(fn, pfx##30, sfx), \
  112. PORT_10_REV(fn, pfx##2, sfx), PORT_10_REV(fn, pfx##1, sfx), \
  113. PORT_10_REV(fn, pfx, sfx)
  114. #define GP_INOUTSEL(bank) CPU_32_PORT_REV(_GP_INOUTSEL, _##bank##_, unused)
  115. #define GP_INDT(bank) CPU_32_PORT_REV(_GP_INDT, _##bank##_, unused)
  116. #define PINMUX_IPSR_DATA(ipsr, fn) PINMUX_DATA(fn##_MARK, FN_##ipsr, FN_##fn)
  117. #define PINMUX_IPSR_MODSEL_DATA(ipsr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##ms, \
  118. FN_##ipsr, FN_##fn)
  119. #endif /* __PFC_R8A7790_H__ */