pinctrl-pxa25x.c 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Marvell PXA25x family pin control
  4. *
  5. * Copyright (C) 2016 Robert Jarzmik
  6. */
  7. #include <linux/module.h>
  8. #include <linux/platform_device.h>
  9. #include <linux/of.h>
  10. #include <linux/of_device.h>
  11. #include <linux/pinctrl/pinctrl.h>
  12. #include "pinctrl-pxa2xx.h"
  13. static const struct pxa_desc_pin pxa25x_pins[] = {
  14. PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)),
  15. PXA_GPIO_PIN(PXA_PINCTRL_PIN(1),
  16. PXA_FUNCTION(0, 1, "GP_RST")),
  17. PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)),
  18. PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)),
  19. PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)),
  20. PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)),
  21. PXA_GPIO_PIN(PXA_PINCTRL_PIN(6),
  22. PXA_FUNCTION(1, 1, "MMCCLK")),
  23. PXA_GPIO_PIN(PXA_PINCTRL_PIN(7),
  24. PXA_FUNCTION(1, 1, "48_MHz")),
  25. PXA_GPIO_PIN(PXA_PINCTRL_PIN(8),
  26. PXA_FUNCTION(1, 1, "MMCCS0")),
  27. PXA_GPIO_PIN(PXA_PINCTRL_PIN(9),
  28. PXA_FUNCTION(1, 1, "MMCCS1")),
  29. PXA_GPIO_PIN(PXA_PINCTRL_PIN(10),
  30. PXA_FUNCTION(1, 1, "RTCCLK")),
  31. PXA_GPIO_PIN(PXA_PINCTRL_PIN(11),
  32. PXA_FUNCTION(1, 1, "3_6_MHz")),
  33. PXA_GPIO_PIN(PXA_PINCTRL_PIN(12),
  34. PXA_FUNCTION(1, 1, "32_kHz")),
  35. PXA_GPIO_PIN(PXA_PINCTRL_PIN(13),
  36. PXA_FUNCTION(1, 2, "MBGNT")),
  37. PXA_GPIO_PIN(PXA_PINCTRL_PIN(14),
  38. PXA_FUNCTION(0, 1, "MBREQ")),
  39. PXA_GPIO_PIN(PXA_PINCTRL_PIN(15),
  40. PXA_FUNCTION(1, 2, "nCS_1")),
  41. PXA_GPIO_PIN(PXA_PINCTRL_PIN(16),
  42. PXA_FUNCTION(1, 2, "PWM0")),
  43. PXA_GPIO_PIN(PXA_PINCTRL_PIN(17),
  44. PXA_FUNCTION(1, 2, "PWM1")),
  45. PXA_GPIO_PIN(PXA_PINCTRL_PIN(18),
  46. PXA_FUNCTION(0, 1, "RDY")),
  47. PXA_GPIO_PIN(PXA_PINCTRL_PIN(19),
  48. PXA_FUNCTION(0, 1, "DREQ[1]")),
  49. PXA_GPIO_PIN(PXA_PINCTRL_PIN(20),
  50. PXA_FUNCTION(0, 1, "DREQ[0]")),
  51. PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)),
  52. PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)),
  53. PXA_GPIO_PIN(PXA_PINCTRL_PIN(23),
  54. PXA_FUNCTION(1, 2, "SCLK")),
  55. PXA_GPIO_PIN(PXA_PINCTRL_PIN(24),
  56. PXA_FUNCTION(1, 2, "SFRM")),
  57. PXA_GPIO_PIN(PXA_PINCTRL_PIN(25),
  58. PXA_FUNCTION(1, 2, "TXD")),
  59. PXA_GPIO_PIN(PXA_PINCTRL_PIN(26),
  60. PXA_FUNCTION(0, 1, "RXD")),
  61. PXA_GPIO_PIN(PXA_PINCTRL_PIN(27),
  62. PXA_FUNCTION(0, 1, "EXTCLK")),
  63. PXA_GPIO_PIN(PXA_PINCTRL_PIN(28),
  64. PXA_FUNCTION(0, 1, "BITCLK"),
  65. PXA_FUNCTION(0, 2, "BITCLK"),
  66. PXA_FUNCTION(1, 1, "BITCLK")),
  67. PXA_GPIO_PIN(PXA_PINCTRL_PIN(29),
  68. PXA_FUNCTION(0, 1, "SDATA_IN0"),
  69. PXA_FUNCTION(0, 2, "SDATA_IN")),
  70. PXA_GPIO_PIN(PXA_PINCTRL_PIN(30),
  71. PXA_FUNCTION(1, 1, "SDATA_OUT"),
  72. PXA_FUNCTION(1, 2, "SDATA_OUT")),
  73. PXA_GPIO_PIN(PXA_PINCTRL_PIN(31),
  74. PXA_FUNCTION(1, 1, "SYNC"),
  75. PXA_FUNCTION(1, 2, "SYNC")),
  76. PXA_GPIO_PIN(PXA_PINCTRL_PIN(32),
  77. PXA_FUNCTION(0, 1, "SDATA_IN1"),
  78. PXA_FUNCTION(1, 1, "SYSCLK")),
  79. PXA_GPIO_PIN(PXA_PINCTRL_PIN(33),
  80. PXA_FUNCTION(1, 2, "nCS[5]")),
  81. PXA_GPIO_PIN(PXA_PINCTRL_PIN(34),
  82. PXA_FUNCTION(0, 1, "FFRXD"),
  83. PXA_FUNCTION(1, 2, "MMCCS0")),
  84. PXA_GPIO_PIN(PXA_PINCTRL_PIN(35),
  85. PXA_FUNCTION(0, 1, "CTS")),
  86. PXA_GPIO_PIN(PXA_PINCTRL_PIN(36),
  87. PXA_FUNCTION(0, 1, "DCD")),
  88. PXA_GPIO_PIN(PXA_PINCTRL_PIN(37),
  89. PXA_FUNCTION(0, 1, "DSR")),
  90. PXA_GPIO_PIN(PXA_PINCTRL_PIN(38),
  91. PXA_FUNCTION(0, 1, "RI")),
  92. PXA_GPIO_PIN(PXA_PINCTRL_PIN(39),
  93. PXA_FUNCTION(1, 1, "MMCC1"),
  94. PXA_FUNCTION(1, 2, "FFTXD")),
  95. PXA_GPIO_PIN(PXA_PINCTRL_PIN(40),
  96. PXA_FUNCTION(1, 2, "DTR")),
  97. PXA_GPIO_PIN(PXA_PINCTRL_PIN(41),
  98. PXA_FUNCTION(1, 2, "RTS")),
  99. PXA_GPIO_PIN(PXA_PINCTRL_PIN(42),
  100. PXA_FUNCTION(0, 1, "BTRXD"),
  101. PXA_FUNCTION(0, 3, "HWRXD")),
  102. PXA_GPIO_PIN(PXA_PINCTRL_PIN(43),
  103. PXA_FUNCTION(1, 2, "BTTXD"),
  104. PXA_FUNCTION(1, 3, "HWTXD")),
  105. PXA_GPIO_PIN(PXA_PINCTRL_PIN(44),
  106. PXA_FUNCTION(0, 1, "BTCTS"),
  107. PXA_FUNCTION(0, 3, "HWCTS")),
  108. PXA_GPIO_PIN(PXA_PINCTRL_PIN(45),
  109. PXA_FUNCTION(1, 2, "BTRTS"),
  110. PXA_FUNCTION(1, 3, "HWRTS")),
  111. PXA_GPIO_PIN(PXA_PINCTRL_PIN(46),
  112. PXA_FUNCTION(0, 1, "ICP_RXD"),
  113. PXA_FUNCTION(0, 2, "RXD")),
  114. PXA_GPIO_PIN(PXA_PINCTRL_PIN(47),
  115. PXA_FUNCTION(1, 1, "TXD"),
  116. PXA_FUNCTION(1, 2, "ICP_TXD")),
  117. PXA_GPIO_PIN(PXA_PINCTRL_PIN(48),
  118. PXA_FUNCTION(1, 1, "HWTXD"),
  119. PXA_FUNCTION(1, 2, "nPOE")),
  120. PXA_GPIO_PIN(PXA_PINCTRL_PIN(49),
  121. PXA_FUNCTION(0, 1, "HWRXD"),
  122. PXA_FUNCTION(1, 2, "nPWE")),
  123. PXA_GPIO_PIN(PXA_PINCTRL_PIN(50),
  124. PXA_FUNCTION(0, 1, "HWCTS"),
  125. PXA_FUNCTION(1, 2, "nPIOR")),
  126. PXA_GPIO_PIN(PXA_PINCTRL_PIN(51),
  127. PXA_FUNCTION(1, 1, "HWRTS"),
  128. PXA_FUNCTION(1, 2, "nPIOW")),
  129. PXA_GPIO_PIN(PXA_PINCTRL_PIN(52),
  130. PXA_FUNCTION(1, 2, "nPCE[1]")),
  131. PXA_GPIO_PIN(PXA_PINCTRL_PIN(53),
  132. PXA_FUNCTION(1, 1, "MMCCLK"),
  133. PXA_FUNCTION(1, 2, "nPCE[2]")),
  134. PXA_GPIO_PIN(PXA_PINCTRL_PIN(54),
  135. PXA_FUNCTION(1, 1, "MMCCLK"),
  136. PXA_FUNCTION(1, 2, "nPSKTSEL")),
  137. PXA_GPIO_PIN(PXA_PINCTRL_PIN(55),
  138. PXA_FUNCTION(1, 2, "nPREG")),
  139. PXA_GPIO_PIN(PXA_PINCTRL_PIN(56),
  140. PXA_FUNCTION(0, 1, "nPWAIT")),
  141. PXA_GPIO_PIN(PXA_PINCTRL_PIN(57),
  142. PXA_FUNCTION(0, 1, "nIOIS16")),
  143. PXA_GPIO_PIN(PXA_PINCTRL_PIN(58),
  144. PXA_FUNCTION(1, 2, "LDD<0>")),
  145. PXA_GPIO_PIN(PXA_PINCTRL_PIN(59),
  146. PXA_FUNCTION(1, 2, "LDD<1>")),
  147. PXA_GPIO_PIN(PXA_PINCTRL_PIN(60),
  148. PXA_FUNCTION(1, 2, "LDD<2>")),
  149. PXA_GPIO_PIN(PXA_PINCTRL_PIN(61),
  150. PXA_FUNCTION(1, 2, "LDD<3>")),
  151. PXA_GPIO_PIN(PXA_PINCTRL_PIN(62),
  152. PXA_FUNCTION(1, 2, "LDD<4>")),
  153. PXA_GPIO_PIN(PXA_PINCTRL_PIN(63),
  154. PXA_FUNCTION(1, 2, "LDD<5>")),
  155. PXA_GPIO_PIN(PXA_PINCTRL_PIN(64),
  156. PXA_FUNCTION(1, 2, "LDD<6>")),
  157. PXA_GPIO_PIN(PXA_PINCTRL_PIN(65),
  158. PXA_FUNCTION(1, 2, "LDD<7>")),
  159. PXA_GPIO_PIN(PXA_PINCTRL_PIN(66),
  160. PXA_FUNCTION(0, 1, "MBREQ"),
  161. PXA_FUNCTION(1, 2, "LDD<8>")),
  162. PXA_GPIO_PIN(PXA_PINCTRL_PIN(67),
  163. PXA_FUNCTION(1, 1, "MMCCS0"),
  164. PXA_FUNCTION(1, 2, "LDD<9>")),
  165. PXA_GPIO_PIN(PXA_PINCTRL_PIN(68),
  166. PXA_FUNCTION(1, 1, "MMCCS1"),
  167. PXA_FUNCTION(1, 2, "LDD<10>")),
  168. PXA_GPIO_PIN(PXA_PINCTRL_PIN(69),
  169. PXA_FUNCTION(1, 1, "MMCCLK"),
  170. PXA_FUNCTION(1, 2, "LDD<11>")),
  171. PXA_GPIO_PIN(PXA_PINCTRL_PIN(70),
  172. PXA_FUNCTION(1, 1, "RTCCLK"),
  173. PXA_FUNCTION(1, 2, "LDD<12>")),
  174. PXA_GPIO_PIN(PXA_PINCTRL_PIN(71),
  175. PXA_FUNCTION(1, 1, "3_6_MHz"),
  176. PXA_FUNCTION(1, 2, "LDD<13>")),
  177. PXA_GPIO_PIN(PXA_PINCTRL_PIN(72),
  178. PXA_FUNCTION(1, 1, "32_kHz"),
  179. PXA_FUNCTION(1, 2, "LDD<14>")),
  180. PXA_GPIO_PIN(PXA_PINCTRL_PIN(73),
  181. PXA_FUNCTION(1, 1, "MBGNT"),
  182. PXA_FUNCTION(1, 2, "LDD<15>")),
  183. PXA_GPIO_PIN(PXA_PINCTRL_PIN(74),
  184. PXA_FUNCTION(1, 2, "LCD_FCLK")),
  185. PXA_GPIO_PIN(PXA_PINCTRL_PIN(75),
  186. PXA_FUNCTION(1, 2, "LCD_LCLK")),
  187. PXA_GPIO_PIN(PXA_PINCTRL_PIN(76),
  188. PXA_FUNCTION(1, 2, "LCD_PCLK")),
  189. PXA_GPIO_PIN(PXA_PINCTRL_PIN(77),
  190. PXA_FUNCTION(1, 2, "LCD_ACBIAS")),
  191. PXA_GPIO_PIN(PXA_PINCTRL_PIN(78),
  192. PXA_FUNCTION(1, 2, "nCS<2>")),
  193. PXA_GPIO_PIN(PXA_PINCTRL_PIN(79),
  194. PXA_FUNCTION(1, 2, "nCS<3>")),
  195. PXA_GPIO_PIN(PXA_PINCTRL_PIN(80),
  196. PXA_FUNCTION(1, 2, "nCS<4>")),
  197. PXA_GPIO_PIN(PXA_PINCTRL_PIN(81),
  198. PXA_FUNCTION(0, 1, "NSSPSCLK"),
  199. PXA_FUNCTION(1, 1, "NSSPSCLK")),
  200. PXA_GPIO_PIN(PXA_PINCTRL_PIN(82),
  201. PXA_FUNCTION(0, 1, "NSSPSFRM"),
  202. PXA_FUNCTION(1, 1, "NSSPSFRM")),
  203. PXA_GPIO_PIN(PXA_PINCTRL_PIN(83),
  204. PXA_FUNCTION(0, 2, "NSSPRXD"),
  205. PXA_FUNCTION(1, 1, "NSSPTXD")),
  206. PXA_GPIO_PIN(PXA_PINCTRL_PIN(84),
  207. PXA_FUNCTION(0, 2, "NSSPRXD"),
  208. PXA_FUNCTION(1, 1, "NSSPTXD")),
  209. };
  210. static int pxa25x_pinctrl_probe(struct platform_device *pdev)
  211. {
  212. int ret, i;
  213. void __iomem *base_af[8];
  214. void __iomem *base_dir[4];
  215. void __iomem *base_sleep[4];
  216. base_af[0] = devm_platform_ioremap_resource(pdev, 0);
  217. if (IS_ERR(base_af[0]))
  218. return PTR_ERR(base_af[0]);
  219. base_dir[0] = devm_platform_ioremap_resource(pdev, 1);
  220. if (IS_ERR(base_dir[0]))
  221. return PTR_ERR(base_dir[0]);
  222. base_dir[3] = devm_platform_ioremap_resource(pdev, 2);
  223. if (IS_ERR(base_dir[3]))
  224. return PTR_ERR(base_dir[3]);
  225. base_sleep[0] = devm_platform_ioremap_resource(pdev, 3);
  226. if (IS_ERR(base_sleep[0]))
  227. return PTR_ERR(base_sleep[0]);
  228. for (i = 0; i < ARRAY_SIZE(base_af); i++)
  229. base_af[i] = base_af[0] + sizeof(base_af[0]) * i;
  230. for (i = 0; i < 3; i++)
  231. base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i;
  232. for (i = 0; i < ARRAY_SIZE(base_sleep); i++)
  233. base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i;
  234. ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins),
  235. base_af, base_dir, base_sleep);
  236. return ret;
  237. }
  238. static const struct of_device_id pxa25x_pinctrl_match[] = {
  239. { .compatible = "marvell,pxa25x-pinctrl", },
  240. {}
  241. };
  242. MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
  243. static struct platform_driver pxa25x_pinctrl_driver = {
  244. .probe = pxa25x_pinctrl_probe,
  245. .driver = {
  246. .name = "pxa25x-pinctrl",
  247. .of_match_table = pxa25x_pinctrl_match,
  248. },
  249. };
  250. module_platform_driver(pxa25x_pinctrl_driver);
  251. MODULE_AUTHOR("Robert Jarzmik <[email protected]>");
  252. MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
  253. MODULE_LICENSE("GPL v2");