pinctrl-pxa25x.c 8.8 KB

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