pinctrl-sg2002.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Sophgo SG2002 SoC pinctrl driver.
  4. *
  5. * Copyright (C) 2024 Inochi Amaoto <inochiama@outlook.com>
  6. *
  7. * This file is generated from vendor pinout definition.
  8. */
  9. #include <linux/module.h>
  10. #include <linux/platform_device.h>
  11. #include <linux/of.h>
  12. #include <linux/pinctrl/pinctrl.h>
  13. #include <linux/pinctrl/pinmux.h>
  14. #include <dt-bindings/pinctrl/pinctrl-sg2002.h>
  15. #include "pinctrl-cv18xx.h"
  16. enum SG2002_POWER_DOMAIN {
  17. VDD18A_MIPI = 0,
  18. VDD18A_USB_PLL_ETH = 1,
  19. VDDIO_RTC = 2,
  20. VDDIO_SD0_EMMC = 3,
  21. VDDIO_SD1 = 4
  22. };
  23. static const char *const sg2002_power_domain_desc[] = {
  24. [VDD18A_MIPI] = "VDD18A_MIPI",
  25. [VDD18A_USB_PLL_ETH] = "VDD18A_USB_PLL_ETH",
  26. [VDDIO_RTC] = "VDDIO_RTC",
  27. [VDDIO_SD0_EMMC] = "VDDIO_SD0_EMMC",
  28. [VDDIO_SD1] = "VDDIO_SD1",
  29. };
  30. static int sg2002_get_pull_up(const struct sophgo_pin *sp, const u32 *psmap)
  31. {
  32. const struct cv1800_pin *pin = sophgo_to_cv1800_pin(sp);
  33. u32 pstate = psmap[pin->power_domain];
  34. enum cv1800_pin_io_type type = cv1800_pin_io_type(pin);
  35. if (type == IO_TYPE_1V8_ONLY)
  36. return 79000;
  37. if (type == IO_TYPE_1V8_OR_3V3) {
  38. if (pstate == PIN_POWER_STATE_1V8)
  39. return 60000;
  40. if (pstate == PIN_POWER_STATE_3V3)
  41. return 60000;
  42. return -EINVAL;
  43. }
  44. return -ENOTSUPP;
  45. }
  46. static int sg2002_get_pull_down(const struct sophgo_pin *sp, const u32 *psmap)
  47. {
  48. const struct cv1800_pin *pin = sophgo_to_cv1800_pin(sp);
  49. u32 pstate = psmap[pin->power_domain];
  50. enum cv1800_pin_io_type type = cv1800_pin_io_type(pin);
  51. if (type == IO_TYPE_1V8_ONLY)
  52. return 87000;
  53. if (type == IO_TYPE_1V8_OR_3V3) {
  54. if (pstate == PIN_POWER_STATE_1V8)
  55. return 61000;
  56. if (pstate == PIN_POWER_STATE_3V3)
  57. return 62000;
  58. return -EINVAL;
  59. }
  60. return -ENOTSUPP;
  61. }
  62. static const u32 sg2002_1v8_oc_map[] = {
  63. 12800,
  64. 25300,
  65. 37400,
  66. 49000
  67. };
  68. static const u32 sg2002_18od33_1v8_oc_map[] = {
  69. 7800,
  70. 11700,
  71. 15500,
  72. 19200,
  73. 23000,
  74. 26600,
  75. 30200,
  76. 33700
  77. };
  78. static const u32 sg2002_18od33_3v3_oc_map[] = {
  79. 5500,
  80. 8200,
  81. 10800,
  82. 13400,
  83. 16100,
  84. 18700,
  85. 21200,
  86. 23700
  87. };
  88. static const u32 sg2002_eth_oc_map[] = {
  89. 15700,
  90. 17800
  91. };
  92. static int sg2002_get_oc_map(const struct sophgo_pin *sp, const u32 *psmap,
  93. const u32 **map)
  94. {
  95. const struct cv1800_pin *pin = sophgo_to_cv1800_pin(sp);
  96. enum cv1800_pin_io_type type = cv1800_pin_io_type(pin);
  97. u32 pstate = psmap[pin->power_domain];
  98. if (type == IO_TYPE_1V8_ONLY) {
  99. *map = sg2002_1v8_oc_map;
  100. return ARRAY_SIZE(sg2002_1v8_oc_map);
  101. }
  102. if (type == IO_TYPE_1V8_OR_3V3) {
  103. if (pstate == PIN_POWER_STATE_1V8) {
  104. *map = sg2002_18od33_1v8_oc_map;
  105. return ARRAY_SIZE(sg2002_18od33_1v8_oc_map);
  106. } else if (pstate == PIN_POWER_STATE_3V3) {
  107. *map = sg2002_18od33_3v3_oc_map;
  108. return ARRAY_SIZE(sg2002_18od33_3v3_oc_map);
  109. }
  110. }
  111. if (type == IO_TYPE_ETH) {
  112. *map = sg2002_eth_oc_map;
  113. return ARRAY_SIZE(sg2002_eth_oc_map);
  114. }
  115. return -ENOTSUPP;
  116. }
  117. static const u32 sg2002_1v8_schmitt_map[] = {
  118. 0,
  119. 970000,
  120. 1040000
  121. };
  122. static const u32 sg2002_18od33_1v8_schmitt_map[] = {
  123. 0,
  124. 1070000
  125. };
  126. static const u32 sg2002_18od33_3v3_schmitt_map[] = {
  127. 0,
  128. 1100000
  129. };
  130. static int sg2002_get_schmitt_map(const struct sophgo_pin *sp, const u32 *psmap,
  131. const u32 **map)
  132. {
  133. const struct cv1800_pin *pin = sophgo_to_cv1800_pin(sp);
  134. enum cv1800_pin_io_type type = cv1800_pin_io_type(pin);
  135. u32 pstate = psmap[pin->power_domain];
  136. if (type == IO_TYPE_1V8_ONLY) {
  137. *map = sg2002_1v8_schmitt_map;
  138. return ARRAY_SIZE(sg2002_1v8_schmitt_map);
  139. }
  140. if (type == IO_TYPE_1V8_OR_3V3) {
  141. if (pstate == PIN_POWER_STATE_1V8) {
  142. *map = sg2002_18od33_1v8_schmitt_map;
  143. return ARRAY_SIZE(sg2002_18od33_1v8_schmitt_map);
  144. } else if (pstate == PIN_POWER_STATE_3V3) {
  145. *map = sg2002_18od33_3v3_schmitt_map;
  146. return ARRAY_SIZE(sg2002_18od33_3v3_schmitt_map);
  147. }
  148. }
  149. return -ENOTSUPP;
  150. }
  151. static const struct sophgo_vddio_cfg_ops sg2002_vddio_cfg_ops = {
  152. .get_pull_up = sg2002_get_pull_up,
  153. .get_pull_down = sg2002_get_pull_down,
  154. .get_oc_map = sg2002_get_oc_map,
  155. .get_schmitt_map = sg2002_get_schmitt_map,
  156. };
  157. static const struct pinctrl_pin_desc sg2002_pins[] = {
  158. PINCTRL_PIN(PIN_AUD_AINL_MIC, "AUD_AINL_MIC"),
  159. PINCTRL_PIN(PIN_AUD_AOUTR, "AUD_AOUTR"),
  160. PINCTRL_PIN(PIN_SD0_CLK, "SD0_CLK"),
  161. PINCTRL_PIN(PIN_SD0_CMD, "SD0_CMD"),
  162. PINCTRL_PIN(PIN_SD0_D0, "SD0_D0"),
  163. PINCTRL_PIN(PIN_SD0_D1, "SD0_D1"),
  164. PINCTRL_PIN(PIN_SD0_D2, "SD0_D2"),
  165. PINCTRL_PIN(PIN_SD0_D3, "SD0_D3"),
  166. PINCTRL_PIN(PIN_SD0_CD, "SD0_CD"),
  167. PINCTRL_PIN(PIN_SD0_PWR_EN, "SD0_PWR_EN"),
  168. PINCTRL_PIN(PIN_SPK_EN, "SPK_EN"),
  169. PINCTRL_PIN(PIN_UART0_TX, "UART0_TX"),
  170. PINCTRL_PIN(PIN_UART0_RX, "UART0_RX"),
  171. PINCTRL_PIN(PIN_EMMC_DAT2, "EMMC_DAT2"),
  172. PINCTRL_PIN(PIN_EMMC_CLK, "EMMC_CLK"),
  173. PINCTRL_PIN(PIN_EMMC_DAT0, "EMMC_DAT0"),
  174. PINCTRL_PIN(PIN_EMMC_DAT3, "EMMC_DAT3"),
  175. PINCTRL_PIN(PIN_EMMC_CMD, "EMMC_CMD"),
  176. PINCTRL_PIN(PIN_EMMC_DAT1, "EMMC_DAT1"),
  177. PINCTRL_PIN(PIN_JTAG_CPU_TMS, "JTAG_CPU_TMS"),
  178. PINCTRL_PIN(PIN_JTAG_CPU_TCK, "JTAG_CPU_TCK"),
  179. PINCTRL_PIN(PIN_IIC0_SCL, "IIC0_SCL"),
  180. PINCTRL_PIN(PIN_IIC0_SDA, "IIC0_SDA"),
  181. PINCTRL_PIN(PIN_AUX0, "AUX0"),
  182. PINCTRL_PIN(PIN_GPIO_ZQ, "GPIO_ZQ"),
  183. PINCTRL_PIN(PIN_PWR_VBAT_DET, "PWR_VBAT_DET"),
  184. PINCTRL_PIN(PIN_PWR_RSTN, "PWR_RSTN"),
  185. PINCTRL_PIN(PIN_PWR_SEQ1, "PWR_SEQ1"),
  186. PINCTRL_PIN(PIN_PWR_SEQ2, "PWR_SEQ2"),
  187. PINCTRL_PIN(PIN_PWR_WAKEUP0, "PWR_WAKEUP0"),
  188. PINCTRL_PIN(PIN_PWR_BUTTON1, "PWR_BUTTON1"),
  189. PINCTRL_PIN(PIN_XTAL_XIN, "XTAL_XIN"),
  190. PINCTRL_PIN(PIN_PWR_GPIO0, "PWR_GPIO0"),
  191. PINCTRL_PIN(PIN_PWR_GPIO1, "PWR_GPIO1"),
  192. PINCTRL_PIN(PIN_PWR_GPIO2, "PWR_GPIO2"),
  193. PINCTRL_PIN(PIN_SD1_D3, "SD1_D3"),
  194. PINCTRL_PIN(PIN_SD1_D2, "SD1_D2"),
  195. PINCTRL_PIN(PIN_SD1_D1, "SD1_D1"),
  196. PINCTRL_PIN(PIN_SD1_D0, "SD1_D0"),
  197. PINCTRL_PIN(PIN_SD1_CMD, "SD1_CMD"),
  198. PINCTRL_PIN(PIN_SD1_CLK, "SD1_CLK"),
  199. PINCTRL_PIN(PIN_PWM0_BUCK, "PWM0_BUCK"),
  200. PINCTRL_PIN(PIN_ADC1, "ADC1"),
  201. PINCTRL_PIN(PIN_USB_VBUS_DET, "USB_VBUS_DET"),
  202. PINCTRL_PIN(PIN_ETH_TXP, "ETH_TXP"),
  203. PINCTRL_PIN(PIN_ETH_TXM, "ETH_TXM"),
  204. PINCTRL_PIN(PIN_ETH_RXP, "ETH_RXP"),
  205. PINCTRL_PIN(PIN_ETH_RXM, "ETH_RXM"),
  206. PINCTRL_PIN(PIN_GPIO_RTX, "GPIO_RTX"),
  207. PINCTRL_PIN(PIN_MIPIRX4N, "MIPIRX4N"),
  208. PINCTRL_PIN(PIN_MIPIRX4P, "MIPIRX4P"),
  209. PINCTRL_PIN(PIN_MIPIRX3N, "MIPIRX3N"),
  210. PINCTRL_PIN(PIN_MIPIRX3P, "MIPIRX3P"),
  211. PINCTRL_PIN(PIN_MIPIRX2N, "MIPIRX2N"),
  212. PINCTRL_PIN(PIN_MIPIRX2P, "MIPIRX2P"),
  213. PINCTRL_PIN(PIN_MIPIRX1N, "MIPIRX1N"),
  214. PINCTRL_PIN(PIN_MIPIRX1P, "MIPIRX1P"),
  215. PINCTRL_PIN(PIN_MIPIRX0N, "MIPIRX0N"),
  216. PINCTRL_PIN(PIN_MIPIRX0P, "MIPIRX0P"),
  217. PINCTRL_PIN(PIN_MIPI_TXM2, "MIPI_TXM2"),
  218. PINCTRL_PIN(PIN_MIPI_TXP2, "MIPI_TXP2"),
  219. PINCTRL_PIN(PIN_MIPI_TXM1, "MIPI_TXM1"),
  220. PINCTRL_PIN(PIN_MIPI_TXP1, "MIPI_TXP1"),
  221. PINCTRL_PIN(PIN_MIPI_TXM0, "MIPI_TXM0"),
  222. PINCTRL_PIN(PIN_MIPI_TXP0, "MIPI_TXP0"),
  223. };
  224. static const struct cv1800_pin sg2002_pin_data[ARRAY_SIZE(sg2002_pins)] = {
  225. CV1800_FUNC_PIN(PIN_AUD_AINL_MIC, VDD18A_MIPI,
  226. IO_TYPE_AUDIO,
  227. CV1800_PINCONF_AREA_SYS, 0x1bc, 5),
  228. CV1800_FUNC_PIN(PIN_AUD_AOUTR, VDD18A_MIPI,
  229. IO_TYPE_AUDIO,
  230. CV1800_PINCONF_AREA_SYS, 0x1c8, 6),
  231. CV1800_GENERAL_PIN(PIN_SD0_CLK, VDDIO_SD0_EMMC,
  232. IO_TYPE_1V8_OR_3V3,
  233. CV1800_PINCONF_AREA_SYS, 0x01c, 7,
  234. CV1800_PINCONF_AREA_SYS, 0xa00),
  235. CV1800_GENERAL_PIN(PIN_SD0_CMD, VDDIO_SD0_EMMC,
  236. IO_TYPE_1V8_OR_3V3,
  237. CV1800_PINCONF_AREA_SYS, 0x020, 7,
  238. CV1800_PINCONF_AREA_SYS, 0xa04),
  239. CV1800_GENERAL_PIN(PIN_SD0_D0, VDDIO_SD0_EMMC,
  240. IO_TYPE_1V8_OR_3V3,
  241. CV1800_PINCONF_AREA_SYS, 0x024, 7,
  242. CV1800_PINCONF_AREA_SYS, 0xa08),
  243. CV1800_GENERAL_PIN(PIN_SD0_D1, VDDIO_SD0_EMMC,
  244. IO_TYPE_1V8_OR_3V3,
  245. CV1800_PINCONF_AREA_SYS, 0x028, 7,
  246. CV1800_PINCONF_AREA_SYS, 0xa0c),
  247. CV1800_GENERAL_PIN(PIN_SD0_D2, VDDIO_SD0_EMMC,
  248. IO_TYPE_1V8_OR_3V3,
  249. CV1800_PINCONF_AREA_SYS, 0x02c, 7,
  250. CV1800_PINCONF_AREA_SYS, 0xa10),
  251. CV1800_GENERAL_PIN(PIN_SD0_D3, VDDIO_SD0_EMMC,
  252. IO_TYPE_1V8_OR_3V3,
  253. CV1800_PINCONF_AREA_SYS, 0x030, 7,
  254. CV1800_PINCONF_AREA_SYS, 0xa14),
  255. CV1800_GENERAL_PIN(PIN_SD0_CD, VDDIO_SD0_EMMC,
  256. IO_TYPE_1V8_OR_3V3,
  257. CV1800_PINCONF_AREA_SYS, 0x034, 3,
  258. CV1800_PINCONF_AREA_SYS, 0x900),
  259. CV1800_GENERAL_PIN(PIN_SD0_PWR_EN, VDDIO_SD0_EMMC,
  260. IO_TYPE_1V8_OR_3V3,
  261. CV1800_PINCONF_AREA_SYS, 0x038, 3,
  262. CV1800_PINCONF_AREA_SYS, 0x904),
  263. CV1800_GENERAL_PIN(PIN_SPK_EN, VDDIO_SD0_EMMC,
  264. IO_TYPE_1V8_OR_3V3,
  265. CV1800_PINCONF_AREA_SYS, 0x03c, 3,
  266. CV1800_PINCONF_AREA_SYS, 0x908),
  267. CV1800_GENERAL_PIN(PIN_UART0_TX, VDDIO_SD0_EMMC,
  268. IO_TYPE_1V8_OR_3V3,
  269. CV1800_PINCONF_AREA_SYS, 0x040, 7,
  270. CV1800_PINCONF_AREA_SYS, 0x90c),
  271. CV1800_GENERAL_PIN(PIN_UART0_RX, VDDIO_SD0_EMMC,
  272. IO_TYPE_1V8_OR_3V3,
  273. CV1800_PINCONF_AREA_SYS, 0x044, 7,
  274. CV1800_PINCONF_AREA_SYS, 0x910),
  275. CV1800_GENERAL_PIN(PIN_EMMC_DAT2, VDDIO_SD0_EMMC,
  276. IO_TYPE_1V8_OR_3V3,
  277. CV1800_PINCONF_AREA_SYS, 0x04c, 3,
  278. CV1800_PINCONF_AREA_SYS, 0x918),
  279. CV1800_GENERAL_PIN(PIN_EMMC_CLK, VDDIO_SD0_EMMC,
  280. IO_TYPE_1V8_OR_3V3,
  281. CV1800_PINCONF_AREA_SYS, 0x050, 3,
  282. CV1800_PINCONF_AREA_SYS, 0x91c),
  283. CV1800_GENERAL_PIN(PIN_EMMC_DAT0, VDDIO_SD0_EMMC,
  284. IO_TYPE_1V8_OR_3V3,
  285. CV1800_PINCONF_AREA_SYS, 0x054, 3,
  286. CV1800_PINCONF_AREA_SYS, 0x920),
  287. CV1800_GENERAL_PIN(PIN_EMMC_DAT3, VDDIO_SD0_EMMC,
  288. IO_TYPE_1V8_OR_3V3,
  289. CV1800_PINCONF_AREA_SYS, 0x058, 3,
  290. CV1800_PINCONF_AREA_SYS, 0x924),
  291. CV1800_GENERAL_PIN(PIN_EMMC_CMD, VDDIO_SD0_EMMC,
  292. IO_TYPE_1V8_OR_3V3,
  293. CV1800_PINCONF_AREA_SYS, 0x05c, 3,
  294. CV1800_PINCONF_AREA_SYS, 0x928),
  295. CV1800_GENERAL_PIN(PIN_EMMC_DAT1, VDDIO_SD0_EMMC,
  296. IO_TYPE_1V8_OR_3V3,
  297. CV1800_PINCONF_AREA_SYS, 0x060, 3,
  298. CV1800_PINCONF_AREA_SYS, 0x92c),
  299. CV1800_GENERAL_PIN(PIN_JTAG_CPU_TMS, VDDIO_SD0_EMMC,
  300. IO_TYPE_1V8_OR_3V3,
  301. CV1800_PINCONF_AREA_SYS, 0x064, 7,
  302. CV1800_PINCONF_AREA_SYS, 0x930),
  303. CV1800_GENERAL_PIN(PIN_JTAG_CPU_TCK, VDDIO_SD0_EMMC,
  304. IO_TYPE_1V8_OR_3V3,
  305. CV1800_PINCONF_AREA_SYS, 0x068, 7,
  306. CV1800_PINCONF_AREA_SYS, 0x934),
  307. CV1800_GENERAL_PIN(PIN_IIC0_SCL, VDDIO_SD0_EMMC,
  308. IO_TYPE_1V8_OR_3V3,
  309. CV1800_PINCONF_AREA_SYS, 0x070, 7,
  310. CV1800_PINCONF_AREA_SYS, 0x93c),
  311. CV1800_GENERAL_PIN(PIN_IIC0_SDA, VDDIO_SD0_EMMC,
  312. IO_TYPE_1V8_OR_3V3,
  313. CV1800_PINCONF_AREA_SYS, 0x074, 7,
  314. CV1800_PINCONF_AREA_SYS, 0x940),
  315. CV1800_GENERAL_PIN(PIN_AUX0, VDDIO_SD0_EMMC,
  316. IO_TYPE_1V8_OR_3V3,
  317. CV1800_PINCONF_AREA_SYS, 0x078, 7,
  318. CV1800_PINCONF_AREA_SYS, 0x944),
  319. CV1800_GENERAL_PIN(PIN_GPIO_ZQ, VDDIO_RTC,
  320. IO_TYPE_1V8_ONLY,
  321. CV1800_PINCONF_AREA_SYS, 0x1d0, 4,
  322. CV1800_PINCONF_AREA_RTC, 0x0e0),
  323. CV1800_GENERAL_PIN(PIN_PWR_VBAT_DET, VDDIO_RTC,
  324. IO_TYPE_1V8_ONLY,
  325. CV1800_PINCONF_AREA_SYS, 0x07c, 0,
  326. CV1800_PINCONF_AREA_RTC, 0x000),
  327. CV1800_GENERAL_PIN(PIN_PWR_RSTN, VDDIO_RTC,
  328. IO_TYPE_1V8_ONLY,
  329. CV1800_PINCONF_AREA_SYS, 0x080, 0,
  330. CV1800_PINCONF_AREA_RTC, 0x004),
  331. CV1800_GENERAL_PIN(PIN_PWR_SEQ1, VDDIO_RTC,
  332. IO_TYPE_1V8_ONLY,
  333. CV1800_PINCONF_AREA_SYS, 0x084, 3,
  334. CV1800_PINCONF_AREA_RTC, 0x008),
  335. CV1800_GENERAL_PIN(PIN_PWR_SEQ2, VDDIO_RTC,
  336. IO_TYPE_1V8_ONLY,
  337. CV1800_PINCONF_AREA_SYS, 0x088, 3,
  338. CV1800_PINCONF_AREA_RTC, 0x00c),
  339. CV1800_GENERAL_PIN(PIN_PWR_WAKEUP0, VDDIO_RTC,
  340. IO_TYPE_1V8_ONLY,
  341. CV1800_PINCONF_AREA_SYS, 0x090, 7,
  342. CV1800_PINCONF_AREA_RTC, 0x018),
  343. CV1800_GENERAL_PIN(PIN_PWR_BUTTON1, VDDIO_RTC,
  344. IO_TYPE_1V8_ONLY,
  345. CV1800_PINCONF_AREA_SYS, 0x098, 7,
  346. CV1800_PINCONF_AREA_RTC, 0x020),
  347. CV1800_GENERAL_PIN(PIN_XTAL_XIN, VDDIO_RTC,
  348. IO_TYPE_1V8_ONLY,
  349. CV1800_PINCONF_AREA_SYS, 0x0a0, 0,
  350. CV1800_PINCONF_AREA_RTC, 0x028),
  351. CV1800_GENERAL_PIN(PIN_PWR_GPIO0, VDDIO_RTC,
  352. IO_TYPE_1V8_ONLY,
  353. CV1800_PINCONF_AREA_SYS, 0x0a4, 4,
  354. CV1800_PINCONF_AREA_RTC, 0x02c),
  355. CV1800_GENERAL_PIN(PIN_PWR_GPIO1, VDDIO_RTC,
  356. IO_TYPE_1V8_ONLY,
  357. CV1800_PINCONF_AREA_SYS, 0x0a8, 7,
  358. CV1800_PINCONF_AREA_RTC, 0x030),
  359. CV1800_GENERAL_PIN(PIN_PWR_GPIO2, VDDIO_RTC,
  360. IO_TYPE_1V8_ONLY,
  361. CV1800_PINCONF_AREA_SYS, 0x0ac, 7,
  362. CV1800_PINCONF_AREA_RTC, 0x034),
  363. CV1800_GENERAL_PIN(PIN_SD1_D3, VDDIO_SD1,
  364. IO_TYPE_1V8_OR_3V3,
  365. CV1800_PINCONF_AREA_SYS, 0x0d0, 7,
  366. CV1800_PINCONF_AREA_RTC, 0x058),
  367. CV1800_GENERAL_PIN(PIN_SD1_D2, VDDIO_SD1,
  368. IO_TYPE_1V8_OR_3V3,
  369. CV1800_PINCONF_AREA_SYS, 0x0d4, 7,
  370. CV1800_PINCONF_AREA_RTC, 0x05c),
  371. CV1800_GENERAL_PIN(PIN_SD1_D1, VDDIO_SD1,
  372. IO_TYPE_1V8_OR_3V3,
  373. CV1800_PINCONF_AREA_SYS, 0x0d8, 7,
  374. CV1800_PINCONF_AREA_RTC, 0x060),
  375. CV1800_GENERAL_PIN(PIN_SD1_D0, VDDIO_SD1,
  376. IO_TYPE_1V8_OR_3V3,
  377. CV1800_PINCONF_AREA_SYS, 0x0dc, 7,
  378. CV1800_PINCONF_AREA_RTC, 0x064),
  379. CV1800_GENERAL_PIN(PIN_SD1_CMD, VDDIO_SD1,
  380. IO_TYPE_1V8_OR_3V3,
  381. CV1800_PINCONF_AREA_SYS, 0x0e0, 7,
  382. CV1800_PINCONF_AREA_RTC, 0x068),
  383. CV1800_GENERAL_PIN(PIN_SD1_CLK, VDDIO_SD1,
  384. IO_TYPE_1V8_OR_3V3,
  385. CV1800_PINCONF_AREA_SYS, 0x0e4, 7,
  386. CV1800_PINCONF_AREA_RTC, 0x06c),
  387. CV1800_GENERAL_PIN(PIN_PWM0_BUCK, VDD18A_USB_PLL_ETH,
  388. IO_TYPE_1V8_ONLY,
  389. CV1800_PINCONF_AREA_SYS, 0x0ec, 3,
  390. CV1800_PINCONF_AREA_SYS, 0x804),
  391. CV1800_GENERAL_PIN(PIN_ADC1, VDD18A_USB_PLL_ETH,
  392. IO_TYPE_1V8_ONLY,
  393. CV1800_PINCONF_AREA_SYS, 0x0f8, 4,
  394. CV1800_PINCONF_AREA_SYS, 0x810),
  395. CV1800_GENERAL_PIN(PIN_USB_VBUS_DET, VDD18A_USB_PLL_ETH,
  396. IO_TYPE_1V8_ONLY,
  397. CV1800_PINCONF_AREA_SYS, 0x108, 5,
  398. CV1800_PINCONF_AREA_SYS, 0x820),
  399. CV1800_FUNC_PIN(PIN_ETH_TXP, VDD18A_USB_PLL_ETH,
  400. IO_TYPE_ETH,
  401. CV1800_PINCONF_AREA_SYS, 0x124, 7),
  402. CV1800_FUNC_PIN(PIN_ETH_TXM, VDD18A_USB_PLL_ETH,
  403. IO_TYPE_ETH,
  404. CV1800_PINCONF_AREA_SYS, 0x128, 7),
  405. CV1800_FUNC_PIN(PIN_ETH_RXP, VDD18A_USB_PLL_ETH,
  406. IO_TYPE_ETH,
  407. CV1800_PINCONF_AREA_SYS, 0x12c, 7),
  408. CV1800_FUNC_PIN(PIN_ETH_RXM, VDD18A_USB_PLL_ETH,
  409. IO_TYPE_ETH,
  410. CV1800_PINCONF_AREA_SYS, 0x130, 7),
  411. CV1800_GENERAL_PIN(PIN_GPIO_RTX, VDD18A_USB_PLL_ETH,
  412. IO_TYPE_1V8_ONLY,
  413. CV1800_PINCONF_AREA_SYS, 0x1cc, 5,
  414. CV1800_PINCONF_AREA_SYS, 0xc8c),
  415. CV1800_GENERATE_PIN_MUX2(PIN_MIPIRX4N, VDD18A_MIPI,
  416. IO_TYPE_1V8_ONLY,
  417. CV1800_PINCONF_AREA_SYS, 0x16c, 7,
  418. CV1800_PINCONF_AREA_SYS, 0x120, 7,
  419. CV1800_PINCONF_AREA_SYS, 0xc38),
  420. CV1800_GENERATE_PIN_MUX2(PIN_MIPIRX4P, VDD18A_MIPI,
  421. IO_TYPE_1V8_ONLY,
  422. CV1800_PINCONF_AREA_SYS, 0x170, 7,
  423. CV1800_PINCONF_AREA_SYS, 0x11c, 7,
  424. CV1800_PINCONF_AREA_SYS, 0xc3c),
  425. CV1800_GENERATE_PIN_MUX2(PIN_MIPIRX3N, VDD18A_MIPI,
  426. IO_TYPE_1V8_ONLY,
  427. CV1800_PINCONF_AREA_SYS, 0x174, 7,
  428. CV1800_PINCONF_AREA_SYS, 0x114, 7,
  429. CV1800_PINCONF_AREA_SYS, 0xc40),
  430. CV1800_GENERATE_PIN_MUX2(PIN_MIPIRX3P, VDD18A_MIPI,
  431. IO_TYPE_1V8_ONLY,
  432. CV1800_PINCONF_AREA_SYS, 0x178, 7,
  433. CV1800_PINCONF_AREA_SYS, 0x118, 7,
  434. CV1800_PINCONF_AREA_SYS, 0xc44),
  435. CV1800_GENERAL_PIN(PIN_MIPIRX2N, VDD18A_MIPI,
  436. IO_TYPE_1V8_ONLY,
  437. CV1800_PINCONF_AREA_SYS, 0x17c, 7,
  438. CV1800_PINCONF_AREA_SYS, 0xc48),
  439. CV1800_GENERAL_PIN(PIN_MIPIRX2P, VDD18A_MIPI,
  440. IO_TYPE_1V8_ONLY,
  441. CV1800_PINCONF_AREA_SYS, 0x180, 7,
  442. CV1800_PINCONF_AREA_SYS, 0xc4c),
  443. CV1800_GENERAL_PIN(PIN_MIPIRX1N, VDD18A_MIPI,
  444. IO_TYPE_1V8_ONLY,
  445. CV1800_PINCONF_AREA_SYS, 0x184, 7,
  446. CV1800_PINCONF_AREA_SYS, 0xc50),
  447. CV1800_GENERAL_PIN(PIN_MIPIRX1P, VDD18A_MIPI,
  448. IO_TYPE_1V8_ONLY,
  449. CV1800_PINCONF_AREA_SYS, 0x188, 7,
  450. CV1800_PINCONF_AREA_SYS, 0xc54),
  451. CV1800_GENERAL_PIN(PIN_MIPIRX0N, VDD18A_MIPI,
  452. IO_TYPE_1V8_ONLY,
  453. CV1800_PINCONF_AREA_SYS, 0x18c, 7,
  454. CV1800_PINCONF_AREA_SYS, 0xc58),
  455. CV1800_GENERAL_PIN(PIN_MIPIRX0P, VDD18A_MIPI,
  456. IO_TYPE_1V8_ONLY,
  457. CV1800_PINCONF_AREA_SYS, 0x190, 7,
  458. CV1800_PINCONF_AREA_SYS, 0xc5c),
  459. CV1800_GENERAL_PIN(PIN_MIPI_TXM2, VDD18A_MIPI,
  460. IO_TYPE_1V8_ONLY,
  461. CV1800_PINCONF_AREA_SYS, 0x1a4, 7,
  462. CV1800_PINCONF_AREA_SYS, 0xc70),
  463. CV1800_GENERAL_PIN(PIN_MIPI_TXP2, VDD18A_MIPI,
  464. IO_TYPE_1V8_ONLY,
  465. CV1800_PINCONF_AREA_SYS, 0x1a8, 7,
  466. CV1800_PINCONF_AREA_SYS, 0xc74),
  467. CV1800_GENERAL_PIN(PIN_MIPI_TXM1, VDD18A_MIPI,
  468. IO_TYPE_1V8_ONLY,
  469. CV1800_PINCONF_AREA_SYS, 0x1ac, 7,
  470. CV1800_PINCONF_AREA_SYS, 0xc78),
  471. CV1800_GENERAL_PIN(PIN_MIPI_TXP1, VDD18A_MIPI,
  472. IO_TYPE_1V8_ONLY,
  473. CV1800_PINCONF_AREA_SYS, 0x1b0, 7,
  474. CV1800_PINCONF_AREA_SYS, 0xc7c),
  475. CV1800_GENERAL_PIN(PIN_MIPI_TXM0, VDD18A_MIPI,
  476. IO_TYPE_1V8_ONLY,
  477. CV1800_PINCONF_AREA_SYS, 0x1b4, 7,
  478. CV1800_PINCONF_AREA_SYS, 0xc80),
  479. CV1800_GENERAL_PIN(PIN_MIPI_TXP0, VDD18A_MIPI,
  480. IO_TYPE_1V8_ONLY,
  481. CV1800_PINCONF_AREA_SYS, 0x1b8, 7,
  482. CV1800_PINCONF_AREA_SYS, 0xc84),
  483. };
  484. static const struct sophgo_pinctrl_data sg2002_pindata = {
  485. .pins = sg2002_pins,
  486. .pindata = sg2002_pin_data,
  487. .pdnames = sg2002_power_domain_desc,
  488. .vddio_ops = &sg2002_vddio_cfg_ops,
  489. .cfg_ops = &cv1800_cfg_ops,
  490. .pctl_ops = &cv1800_pctrl_ops,
  491. .pmx_ops = &cv1800_pmx_ops,
  492. .pconf_ops = &cv1800_pconf_ops,
  493. .npins = ARRAY_SIZE(sg2002_pins),
  494. .npds = ARRAY_SIZE(sg2002_power_domain_desc),
  495. .pinsize = sizeof(struct cv1800_pin),
  496. };
  497. static const struct of_device_id sg2002_pinctrl_ids[] = {
  498. { .compatible = "sophgo,sg2002-pinctrl", .data = &sg2002_pindata },
  499. { }
  500. };
  501. MODULE_DEVICE_TABLE(of, sg2002_pinctrl_ids);
  502. static struct platform_driver sg2002_pinctrl_driver = {
  503. .probe = sophgo_pinctrl_probe,
  504. .driver = {
  505. .name = "sg2002-pinctrl",
  506. .suppress_bind_attrs = true,
  507. .of_match_table = sg2002_pinctrl_ids,
  508. },
  509. };
  510. module_platform_driver(sg2002_pinctrl_driver);
  511. MODULE_DESCRIPTION("Pinctrl driver for the SG2002 series SoC");
  512. MODULE_LICENSE("GPL");