pinctrl-pxa25x.c 9.2 KB

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