pinctrl-exynos-arm64.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. // SPDX-License-Identifier: GPL-2.0+
  2. //
  3. // Exynos ARMv8 specific support for Samsung pinctrl/gpiolib driver
  4. // with eint support.
  5. //
  6. // Copyright (c) 2012 Samsung Electronics Co., Ltd.
  7. // http://www.samsung.com
  8. // Copyright (c) 2012 Linaro Ltd
  9. // http://www.linaro.org
  10. // Copyright (c) 2017 Krzysztof Kozlowski <krzk@kernel.org>
  11. //
  12. // This file contains the Samsung Exynos specific information required by the
  13. // the Samsung pinctrl/gpiolib driver. It also includes the implementation of
  14. // external gpio and wakeup interrupt support.
  15. #include <linux/slab.h>
  16. #include <linux/soc/samsung/exynos-regs-pmu.h>
  17. #include "pinctrl-samsung.h"
  18. #include "pinctrl-exynos.h"
  19. static const struct samsung_pin_bank_type bank_type_off = {
  20. .fld_width = { 4, 1, 2, 2, 2, 2, },
  21. .reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
  22. };
  23. static const struct samsung_pin_bank_type bank_type_alive = {
  24. .fld_width = { 4, 1, 2, 2, },
  25. .reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
  26. };
  27. /* Exynos5433 has the 4bit widths for PINCFG_TYPE_DRV bitfields. */
  28. static const struct samsung_pin_bank_type exynos5433_bank_type_off = {
  29. .fld_width = { 4, 1, 2, 4, 2, 2, },
  30. .reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
  31. };
  32. static const struct samsung_pin_bank_type exynos5433_bank_type_alive = {
  33. .fld_width = { 4, 1, 2, 4, },
  34. .reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
  35. };
  36. /* Pad retention control code for accessing PMU regmap */
  37. static atomic_t exynos_shared_retention_refcnt;
  38. /* pin banks of exynos5433 pin-controller - ALIVE */
  39. static const struct samsung_pin_bank_data exynos5433_pin_banks0[] __initconst = {
  40. /* Must start with EINTG banks, ordered by EINT group number. */
  41. EXYNOS5433_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
  42. EXYNOS5433_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
  43. EXYNOS5433_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
  44. EXYNOS5433_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
  45. EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004, 1),
  46. EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008, 1),
  47. EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c, 1),
  48. EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010, 1),
  49. EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014, 1),
  50. };
  51. /* pin banks of exynos5433 pin-controller - AUD */
  52. static const struct samsung_pin_bank_data exynos5433_pin_banks1[] __initconst = {
  53. /* Must start with EINTG banks, ordered by EINT group number. */
  54. EXYNOS5433_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
  55. EXYNOS5433_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
  56. };
  57. /* pin banks of exynos5433 pin-controller - CPIF */
  58. static const struct samsung_pin_bank_data exynos5433_pin_banks2[] __initconst = {
  59. /* Must start with EINTG banks, ordered by EINT group number. */
  60. EXYNOS5433_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00),
  61. };
  62. /* pin banks of exynos5433 pin-controller - eSE */
  63. static const struct samsung_pin_bank_data exynos5433_pin_banks3[] __initconst = {
  64. /* Must start with EINTG banks, ordered by EINT group number. */
  65. EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00),
  66. };
  67. /* pin banks of exynos5433 pin-controller - FINGER */
  68. static const struct samsung_pin_bank_data exynos5433_pin_banks4[] __initconst = {
  69. /* Must start with EINTG banks, ordered by EINT group number. */
  70. EXYNOS5433_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00),
  71. };
  72. /* pin banks of exynos5433 pin-controller - FSYS */
  73. static const struct samsung_pin_bank_data exynos5433_pin_banks5[] __initconst = {
  74. /* Must start with EINTG banks, ordered by EINT group number. */
  75. EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00),
  76. EXYNOS5433_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04),
  77. EXYNOS5433_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08),
  78. EXYNOS5433_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c),
  79. EXYNOS5433_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10),
  80. EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14),
  81. };
  82. /* pin banks of exynos5433 pin-controller - IMEM */
  83. static const struct samsung_pin_bank_data exynos5433_pin_banks6[] __initconst = {
  84. /* Must start with EINTG banks, ordered by EINT group number. */
  85. EXYNOS5433_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00),
  86. };
  87. /* pin banks of exynos5433 pin-controller - NFC */
  88. static const struct samsung_pin_bank_data exynos5433_pin_banks7[] __initconst = {
  89. /* Must start with EINTG banks, ordered by EINT group number. */
  90. EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
  91. };
  92. /* pin banks of exynos5433 pin-controller - PERIC */
  93. static const struct samsung_pin_bank_data exynos5433_pin_banks8[] __initconst = {
  94. /* Must start with EINTG banks, ordered by EINT group number. */
  95. EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00),
  96. EXYNOS5433_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04),
  97. EXYNOS5433_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08),
  98. EXYNOS5433_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c),
  99. EXYNOS5433_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10),
  100. EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14),
  101. EXYNOS5433_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18),
  102. EXYNOS5433_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c),
  103. EXYNOS5433_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20),
  104. EXYNOS5433_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24),
  105. EXYNOS5433_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28),
  106. EXYNOS5433_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c),
  107. EXYNOS5433_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30),
  108. EXYNOS5433_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34),
  109. EXYNOS5433_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38),
  110. EXYNOS5433_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c),
  111. EXYNOS5433_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
  112. };
  113. /* pin banks of exynos5433 pin-controller - TOUCH */
  114. static const struct samsung_pin_bank_data exynos5433_pin_banks9[] __initconst = {
  115. /* Must start with EINTG banks, ordered by EINT group number. */
  116. EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
  117. };
  118. /* PMU pin retention groups registers for Exynos5433 (without audio & fsys) */
  119. static const u32 exynos5433_retention_regs[] = {
  120. EXYNOS5433_PAD_RETENTION_TOP_OPTION,
  121. EXYNOS5433_PAD_RETENTION_UART_OPTION,
  122. EXYNOS5433_PAD_RETENTION_EBIA_OPTION,
  123. EXYNOS5433_PAD_RETENTION_EBIB_OPTION,
  124. EXYNOS5433_PAD_RETENTION_SPI_OPTION,
  125. EXYNOS5433_PAD_RETENTION_MIF_OPTION,
  126. EXYNOS5433_PAD_RETENTION_USBXTI_OPTION,
  127. EXYNOS5433_PAD_RETENTION_BOOTLDO_OPTION,
  128. EXYNOS5433_PAD_RETENTION_UFS_OPTION,
  129. EXYNOS5433_PAD_RETENTION_FSYSGENIO_OPTION,
  130. };
  131. static const struct samsung_retention_data exynos5433_retention_data __initconst = {
  132. .regs = exynos5433_retention_regs,
  133. .nr_regs = ARRAY_SIZE(exynos5433_retention_regs),
  134. .value = EXYNOS_WAKEUP_FROM_LOWPWR,
  135. .refcnt = &exynos_shared_retention_refcnt,
  136. .init = exynos_retention_init,
  137. };
  138. /* PMU retention control for audio pins can be tied to audio pin bank */
  139. static const u32 exynos5433_audio_retention_regs[] = {
  140. EXYNOS5433_PAD_RETENTION_AUD_OPTION,
  141. };
  142. static const struct samsung_retention_data exynos5433_audio_retention_data __initconst = {
  143. .regs = exynos5433_audio_retention_regs,
  144. .nr_regs = ARRAY_SIZE(exynos5433_audio_retention_regs),
  145. .value = EXYNOS_WAKEUP_FROM_LOWPWR,
  146. .init = exynos_retention_init,
  147. };
  148. /* PMU retention control for mmc pins can be tied to fsys pin bank */
  149. static const u32 exynos5433_fsys_retention_regs[] = {
  150. EXYNOS5433_PAD_RETENTION_MMC0_OPTION,
  151. EXYNOS5433_PAD_RETENTION_MMC1_OPTION,
  152. EXYNOS5433_PAD_RETENTION_MMC2_OPTION,
  153. };
  154. static const struct samsung_retention_data exynos5433_fsys_retention_data __initconst = {
  155. .regs = exynos5433_fsys_retention_regs,
  156. .nr_regs = ARRAY_SIZE(exynos5433_fsys_retention_regs),
  157. .value = EXYNOS_WAKEUP_FROM_LOWPWR,
  158. .init = exynos_retention_init,
  159. };
  160. /*
  161. * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes
  162. * ten gpio/pin-mux/pinconfig controllers.
  163. */
  164. static const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
  165. {
  166. /* pin-controller instance 0 data */
  167. .pin_banks = exynos5433_pin_banks0,
  168. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks0),
  169. .eint_wkup_init = exynos_eint_wkup_init,
  170. .suspend = exynos_pinctrl_suspend,
  171. .resume = exynos_pinctrl_resume,
  172. .nr_ext_resources = 1,
  173. .retention_data = &exynos5433_retention_data,
  174. }, {
  175. /* pin-controller instance 1 data */
  176. .pin_banks = exynos5433_pin_banks1,
  177. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks1),
  178. .eint_gpio_init = exynos_eint_gpio_init,
  179. .suspend = exynos_pinctrl_suspend,
  180. .resume = exynos_pinctrl_resume,
  181. .retention_data = &exynos5433_audio_retention_data,
  182. }, {
  183. /* pin-controller instance 2 data */
  184. .pin_banks = exynos5433_pin_banks2,
  185. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks2),
  186. .eint_gpio_init = exynos_eint_gpio_init,
  187. .suspend = exynos_pinctrl_suspend,
  188. .resume = exynos_pinctrl_resume,
  189. .retention_data = &exynos5433_retention_data,
  190. }, {
  191. /* pin-controller instance 3 data */
  192. .pin_banks = exynos5433_pin_banks3,
  193. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks3),
  194. .eint_gpio_init = exynos_eint_gpio_init,
  195. .suspend = exynos_pinctrl_suspend,
  196. .resume = exynos_pinctrl_resume,
  197. .retention_data = &exynos5433_retention_data,
  198. }, {
  199. /* pin-controller instance 4 data */
  200. .pin_banks = exynos5433_pin_banks4,
  201. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks4),
  202. .eint_gpio_init = exynos_eint_gpio_init,
  203. .suspend = exynos_pinctrl_suspend,
  204. .resume = exynos_pinctrl_resume,
  205. .retention_data = &exynos5433_retention_data,
  206. }, {
  207. /* pin-controller instance 5 data */
  208. .pin_banks = exynos5433_pin_banks5,
  209. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks5),
  210. .eint_gpio_init = exynos_eint_gpio_init,
  211. .suspend = exynos_pinctrl_suspend,
  212. .resume = exynos_pinctrl_resume,
  213. .retention_data = &exynos5433_fsys_retention_data,
  214. }, {
  215. /* pin-controller instance 6 data */
  216. .pin_banks = exynos5433_pin_banks6,
  217. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks6),
  218. .eint_gpio_init = exynos_eint_gpio_init,
  219. .suspend = exynos_pinctrl_suspend,
  220. .resume = exynos_pinctrl_resume,
  221. .retention_data = &exynos5433_retention_data,
  222. }, {
  223. /* pin-controller instance 7 data */
  224. .pin_banks = exynos5433_pin_banks7,
  225. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks7),
  226. .eint_gpio_init = exynos_eint_gpio_init,
  227. .suspend = exynos_pinctrl_suspend,
  228. .resume = exynos_pinctrl_resume,
  229. .retention_data = &exynos5433_retention_data,
  230. }, {
  231. /* pin-controller instance 8 data */
  232. .pin_banks = exynos5433_pin_banks8,
  233. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks8),
  234. .eint_gpio_init = exynos_eint_gpio_init,
  235. .suspend = exynos_pinctrl_suspend,
  236. .resume = exynos_pinctrl_resume,
  237. .retention_data = &exynos5433_retention_data,
  238. }, {
  239. /* pin-controller instance 9 data */
  240. .pin_banks = exynos5433_pin_banks9,
  241. .nr_banks = ARRAY_SIZE(exynos5433_pin_banks9),
  242. .eint_gpio_init = exynos_eint_gpio_init,
  243. .suspend = exynos_pinctrl_suspend,
  244. .resume = exynos_pinctrl_resume,
  245. .retention_data = &exynos5433_retention_data,
  246. },
  247. };
  248. const struct samsung_pinctrl_of_match_data exynos5433_of_data __initconst = {
  249. .ctrl = exynos5433_pin_ctrl,
  250. .num_ctrl = ARRAY_SIZE(exynos5433_pin_ctrl),
  251. };
  252. /* pin banks of exynos7 pin-controller - ALIVE */
  253. static const struct samsung_pin_bank_data exynos7_pin_banks0[] __initconst = {
  254. /* Must start with EINTG banks, ordered by EINT group number. */
  255. EXYNOS_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
  256. EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
  257. EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
  258. EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
  259. };
  260. /* pin banks of exynos7 pin-controller - BUS0 */
  261. static const struct samsung_pin_bank_data exynos7_pin_banks1[] __initconst = {
  262. /* Must start with EINTG banks, ordered by EINT group number. */
  263. EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00),
  264. EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc0", 0x04),
  265. EXYNOS_PIN_BANK_EINTG(2, 0x040, "gpc1", 0x08),
  266. EXYNOS_PIN_BANK_EINTG(6, 0x060, "gpc2", 0x0c),
  267. EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpc3", 0x10),
  268. EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14),
  269. EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18),
  270. EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpd2", 0x1c),
  271. EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpd4", 0x20),
  272. EXYNOS_PIN_BANK_EINTG(4, 0x120, "gpd5", 0x24),
  273. EXYNOS_PIN_BANK_EINTG(6, 0x140, "gpd6", 0x28),
  274. EXYNOS_PIN_BANK_EINTG(3, 0x160, "gpd7", 0x2c),
  275. EXYNOS_PIN_BANK_EINTG(2, 0x180, "gpd8", 0x30),
  276. EXYNOS_PIN_BANK_EINTG(2, 0x1a0, "gpg0", 0x34),
  277. EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpg3", 0x38),
  278. };
  279. /* pin banks of exynos7 pin-controller - NFC */
  280. static const struct samsung_pin_bank_data exynos7_pin_banks2[] __initconst = {
  281. /* Must start with EINTG banks, ordered by EINT group number. */
  282. EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
  283. };
  284. /* pin banks of exynos7 pin-controller - TOUCH */
  285. static const struct samsung_pin_bank_data exynos7_pin_banks3[] __initconst = {
  286. /* Must start with EINTG banks, ordered by EINT group number. */
  287. EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
  288. };
  289. /* pin banks of exynos7 pin-controller - FF */
  290. static const struct samsung_pin_bank_data exynos7_pin_banks4[] __initconst = {
  291. /* Must start with EINTG banks, ordered by EINT group number. */
  292. EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpg4", 0x00),
  293. };
  294. /* pin banks of exynos7 pin-controller - ESE */
  295. static const struct samsung_pin_bank_data exynos7_pin_banks5[] __initconst = {
  296. /* Must start with EINTG banks, ordered by EINT group number. */
  297. EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpv7", 0x00),
  298. };
  299. /* pin banks of exynos7 pin-controller - FSYS0 */
  300. static const struct samsung_pin_bank_data exynos7_pin_banks6[] __initconst = {
  301. /* Must start with EINTG banks, ordered by EINT group number. */
  302. EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpr4", 0x00),
  303. };
  304. /* pin banks of exynos7 pin-controller - FSYS1 */
  305. static const struct samsung_pin_bank_data exynos7_pin_banks7[] __initconst = {
  306. /* Must start with EINTG banks, ordered by EINT group number. */
  307. EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpr0", 0x00),
  308. EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpr1", 0x04),
  309. EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpr2", 0x08),
  310. EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpr3", 0x0c),
  311. };
  312. /* pin banks of exynos7 pin-controller - BUS1 */
  313. static const struct samsung_pin_bank_data exynos7_pin_banks8[] __initconst = {
  314. /* Must start with EINTG banks, ordered by EINT group number. */
  315. EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpf0", 0x00),
  316. EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpf1", 0x04),
  317. EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf2", 0x08),
  318. EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpf3", 0x0c),
  319. EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpf4", 0x10),
  320. EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpf5", 0x14),
  321. EXYNOS_PIN_BANK_EINTG(5, 0x0e0, "gpg1", 0x18),
  322. EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpg2", 0x1c),
  323. EXYNOS_PIN_BANK_EINTG(6, 0x120, "gph1", 0x20),
  324. EXYNOS_PIN_BANK_EINTG(3, 0x140, "gpv6", 0x24),
  325. };
  326. static const struct samsung_pin_bank_data exynos7_pin_banks9[] __initconst = {
  327. /* Must start with EINTG banks, ordered by EINT group number. */
  328. EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
  329. EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
  330. };
  331. static const struct samsung_pin_ctrl exynos7_pin_ctrl[] __initconst = {
  332. {
  333. /* pin-controller instance 0 Alive data */
  334. .pin_banks = exynos7_pin_banks0,
  335. .nr_banks = ARRAY_SIZE(exynos7_pin_banks0),
  336. .eint_wkup_init = exynos_eint_wkup_init,
  337. }, {
  338. /* pin-controller instance 1 BUS0 data */
  339. .pin_banks = exynos7_pin_banks1,
  340. .nr_banks = ARRAY_SIZE(exynos7_pin_banks1),
  341. .eint_gpio_init = exynos_eint_gpio_init,
  342. }, {
  343. /* pin-controller instance 2 NFC data */
  344. .pin_banks = exynos7_pin_banks2,
  345. .nr_banks = ARRAY_SIZE(exynos7_pin_banks2),
  346. .eint_gpio_init = exynos_eint_gpio_init,
  347. }, {
  348. /* pin-controller instance 3 TOUCH data */
  349. .pin_banks = exynos7_pin_banks3,
  350. .nr_banks = ARRAY_SIZE(exynos7_pin_banks3),
  351. .eint_gpio_init = exynos_eint_gpio_init,
  352. }, {
  353. /* pin-controller instance 4 FF data */
  354. .pin_banks = exynos7_pin_banks4,
  355. .nr_banks = ARRAY_SIZE(exynos7_pin_banks4),
  356. .eint_gpio_init = exynos_eint_gpio_init,
  357. }, {
  358. /* pin-controller instance 5 ESE data */
  359. .pin_banks = exynos7_pin_banks5,
  360. .nr_banks = ARRAY_SIZE(exynos7_pin_banks5),
  361. .eint_gpio_init = exynos_eint_gpio_init,
  362. }, {
  363. /* pin-controller instance 6 FSYS0 data */
  364. .pin_banks = exynos7_pin_banks6,
  365. .nr_banks = ARRAY_SIZE(exynos7_pin_banks6),
  366. .eint_gpio_init = exynos_eint_gpio_init,
  367. }, {
  368. /* pin-controller instance 7 FSYS1 data */
  369. .pin_banks = exynos7_pin_banks7,
  370. .nr_banks = ARRAY_SIZE(exynos7_pin_banks7),
  371. .eint_gpio_init = exynos_eint_gpio_init,
  372. }, {
  373. /* pin-controller instance 8 BUS1 data */
  374. .pin_banks = exynos7_pin_banks8,
  375. .nr_banks = ARRAY_SIZE(exynos7_pin_banks8),
  376. .eint_gpio_init = exynos_eint_gpio_init,
  377. }, {
  378. /* pin-controller instance 9 AUD data */
  379. .pin_banks = exynos7_pin_banks9,
  380. .nr_banks = ARRAY_SIZE(exynos7_pin_banks9),
  381. .eint_gpio_init = exynos_eint_gpio_init,
  382. },
  383. };
  384. const struct samsung_pinctrl_of_match_data exynos7_of_data __initconst = {
  385. .ctrl = exynos7_pin_ctrl,
  386. .num_ctrl = ARRAY_SIZE(exynos7_pin_ctrl),
  387. };