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