pinctrl-mt7620.c (12667B)
1// SPDX-License-Identifier: GPL-2.0-only 2 3#include <asm/mach-ralink/ralink_regs.h> 4#include <asm/mach-ralink/mt7620.h> 5#include <linux/module.h> 6#include <linux/platform_device.h> 7#include <linux/of.h> 8#include "pinctrl-ralink.h" 9 10#define MT7620_GPIO_MODE_UART0_SHIFT 2 11#define MT7620_GPIO_MODE_UART0_MASK 0x7 12#define MT7620_GPIO_MODE_UART0(x) ((x) << MT7620_GPIO_MODE_UART0_SHIFT) 13#define MT7620_GPIO_MODE_UARTF 0x0 14#define MT7620_GPIO_MODE_PCM_UARTF 0x1 15#define MT7620_GPIO_MODE_PCM_I2S 0x2 16#define MT7620_GPIO_MODE_I2S_UARTF 0x3 17#define MT7620_GPIO_MODE_PCM_GPIO 0x4 18#define MT7620_GPIO_MODE_GPIO_UARTF 0x5 19#define MT7620_GPIO_MODE_GPIO_I2S 0x6 20#define MT7620_GPIO_MODE_GPIO 0x7 21 22#define MT7620_GPIO_MODE_NAND 0 23#define MT7620_GPIO_MODE_SD 1 24#define MT7620_GPIO_MODE_ND_SD_GPIO 2 25#define MT7620_GPIO_MODE_ND_SD_MASK 0x3 26#define MT7620_GPIO_MODE_ND_SD_SHIFT 18 27 28#define MT7620_GPIO_MODE_PCIE_RST 0 29#define MT7620_GPIO_MODE_PCIE_REF 1 30#define MT7620_GPIO_MODE_PCIE_GPIO 2 31#define MT7620_GPIO_MODE_PCIE_MASK 0x3 32#define MT7620_GPIO_MODE_PCIE_SHIFT 16 33 34#define MT7620_GPIO_MODE_WDT_RST 0 35#define MT7620_GPIO_MODE_WDT_REF 1 36#define MT7620_GPIO_MODE_WDT_GPIO 2 37#define MT7620_GPIO_MODE_WDT_MASK 0x3 38#define MT7620_GPIO_MODE_WDT_SHIFT 21 39 40#define MT7620_GPIO_MODE_MDIO 0 41#define MT7620_GPIO_MODE_MDIO_REFCLK 1 42#define MT7620_GPIO_MODE_MDIO_GPIO 2 43#define MT7620_GPIO_MODE_MDIO_MASK 0x3 44#define MT7620_GPIO_MODE_MDIO_SHIFT 7 45 46#define MT7620_GPIO_MODE_I2C 0 47#define MT7620_GPIO_MODE_UART1 5 48#define MT7620_GPIO_MODE_RGMII1 9 49#define MT7620_GPIO_MODE_RGMII2 10 50#define MT7620_GPIO_MODE_SPI 11 51#define MT7620_GPIO_MODE_SPI_REF_CLK 12 52#define MT7620_GPIO_MODE_WLED 13 53#define MT7620_GPIO_MODE_JTAG 15 54#define MT7620_GPIO_MODE_EPHY 15 55#define MT7620_GPIO_MODE_PA 20 56 57static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) }; 58static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) }; 59static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) }; 60static struct ralink_pmx_func mdio_func[] = { 61 FUNC("mdio", MT7620_GPIO_MODE_MDIO, 22, 2), 62 FUNC("refclk", MT7620_GPIO_MODE_MDIO_REFCLK, 22, 2), 63}; 64static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 24, 12) }; 65static struct ralink_pmx_func refclk_func[] = { FUNC("spi refclk", 0, 37, 3) }; 66static struct ralink_pmx_func ephy_func[] = { FUNC("ephy", 0, 40, 5) }; 67static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 60, 12) }; 68static struct ralink_pmx_func wled_func[] = { FUNC("wled", 0, 72, 1) }; 69static struct ralink_pmx_func pa_func[] = { FUNC("pa", 0, 18, 4) }; 70static struct ralink_pmx_func uartf_func[] = { 71 FUNC("uartf", MT7620_GPIO_MODE_UARTF, 7, 8), 72 FUNC("pcm uartf", MT7620_GPIO_MODE_PCM_UARTF, 7, 8), 73 FUNC("pcm i2s", MT7620_GPIO_MODE_PCM_I2S, 7, 8), 74 FUNC("i2s uartf", MT7620_GPIO_MODE_I2S_UARTF, 7, 8), 75 FUNC("pcm gpio", MT7620_GPIO_MODE_PCM_GPIO, 11, 4), 76 FUNC("gpio uartf", MT7620_GPIO_MODE_GPIO_UARTF, 7, 4), 77 FUNC("gpio i2s", MT7620_GPIO_MODE_GPIO_I2S, 7, 4), 78}; 79static struct ralink_pmx_func wdt_func[] = { 80 FUNC("wdt rst", 0, 17, 1), 81 FUNC("wdt refclk", 0, 17, 1), 82 }; 83static struct ralink_pmx_func pcie_rst_func[] = { 84 FUNC("pcie rst", MT7620_GPIO_MODE_PCIE_RST, 36, 1), 85 FUNC("pcie refclk", MT7620_GPIO_MODE_PCIE_REF, 36, 1) 86}; 87static struct ralink_pmx_func nd_sd_func[] = { 88 FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15), 89 FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13) 90}; 91 92static struct ralink_pmx_group mt7620a_pinmux_data[] = { 93 GRP("i2c", i2c_func, 1, MT7620_GPIO_MODE_I2C), 94 GRP("uartf", uartf_func, MT7620_GPIO_MODE_UART0_MASK, 95 MT7620_GPIO_MODE_UART0_SHIFT), 96 GRP("spi", spi_func, 1, MT7620_GPIO_MODE_SPI), 97 GRP("uartlite", uartlite_func, 1, MT7620_GPIO_MODE_UART1), 98 GRP_G("wdt", wdt_func, MT7620_GPIO_MODE_WDT_MASK, 99 MT7620_GPIO_MODE_WDT_GPIO, MT7620_GPIO_MODE_WDT_SHIFT), 100 GRP_G("mdio", mdio_func, MT7620_GPIO_MODE_MDIO_MASK, 101 MT7620_GPIO_MODE_MDIO_GPIO, MT7620_GPIO_MODE_MDIO_SHIFT), 102 GRP("rgmii1", rgmii1_func, 1, MT7620_GPIO_MODE_RGMII1), 103 GRP("spi refclk", refclk_func, 1, MT7620_GPIO_MODE_SPI_REF_CLK), 104 GRP_G("pcie", pcie_rst_func, MT7620_GPIO_MODE_PCIE_MASK, 105 MT7620_GPIO_MODE_PCIE_GPIO, MT7620_GPIO_MODE_PCIE_SHIFT), 106 GRP_G("nd_sd", nd_sd_func, MT7620_GPIO_MODE_ND_SD_MASK, 107 MT7620_GPIO_MODE_ND_SD_GPIO, MT7620_GPIO_MODE_ND_SD_SHIFT), 108 GRP("rgmii2", rgmii2_func, 1, MT7620_GPIO_MODE_RGMII2), 109 GRP("wled", wled_func, 1, MT7620_GPIO_MODE_WLED), 110 GRP("ephy", ephy_func, 1, MT7620_GPIO_MODE_EPHY), 111 GRP("pa", pa_func, 1, MT7620_GPIO_MODE_PA), 112 { 0 } 113}; 114 115static struct ralink_pmx_func pwm1_func_mt76x8[] = { 116 FUNC("sdxc d6", 3, 19, 1), 117 FUNC("utif", 2, 19, 1), 118 FUNC("gpio", 1, 19, 1), 119 FUNC("pwm1", 0, 19, 1), 120}; 121 122static struct ralink_pmx_func pwm0_func_mt76x8[] = { 123 FUNC("sdxc d7", 3, 18, 1), 124 FUNC("utif", 2, 18, 1), 125 FUNC("gpio", 1, 18, 1), 126 FUNC("pwm0", 0, 18, 1), 127}; 128 129static struct ralink_pmx_func uart2_func_mt76x8[] = { 130 FUNC("sdxc d5 d4", 3, 20, 2), 131 FUNC("pwm", 2, 20, 2), 132 FUNC("gpio", 1, 20, 2), 133 FUNC("uart2", 0, 20, 2), 134}; 135 136static struct ralink_pmx_func uart1_func_mt76x8[] = { 137 FUNC("sw_r", 3, 45, 2), 138 FUNC("pwm", 2, 45, 2), 139 FUNC("gpio", 1, 45, 2), 140 FUNC("uart1", 0, 45, 2), 141}; 142 143static struct ralink_pmx_func i2c_func_mt76x8[] = { 144 FUNC("-", 3, 4, 2), 145 FUNC("debug", 2, 4, 2), 146 FUNC("gpio", 1, 4, 2), 147 FUNC("i2c", 0, 4, 2), 148}; 149 150static struct ralink_pmx_func refclk_func_mt76x8[] = { FUNC("refclk", 0, 37, 1) }; 151static struct ralink_pmx_func perst_func_mt76x8[] = { FUNC("perst", 0, 36, 1) }; 152static struct ralink_pmx_func wdt_func_mt76x8[] = { FUNC("wdt", 0, 38, 1) }; 153static struct ralink_pmx_func spi_func_mt76x8[] = { FUNC("spi", 0, 7, 4) }; 154 155static struct ralink_pmx_func sd_mode_func_mt76x8[] = { 156 FUNC("jtag", 3, 22, 8), 157 FUNC("utif", 2, 22, 8), 158 FUNC("gpio", 1, 22, 8), 159 FUNC("sdxc", 0, 22, 8), 160}; 161 162static struct ralink_pmx_func uart0_func_mt76x8[] = { 163 FUNC("-", 3, 12, 2), 164 FUNC("-", 2, 12, 2), 165 FUNC("gpio", 1, 12, 2), 166 FUNC("uart0", 0, 12, 2), 167}; 168 169static struct ralink_pmx_func i2s_func_mt76x8[] = { 170 FUNC("antenna", 3, 0, 4), 171 FUNC("pcm", 2, 0, 4), 172 FUNC("gpio", 1, 0, 4), 173 FUNC("i2s", 0, 0, 4), 174}; 175 176static struct ralink_pmx_func spi_cs1_func_mt76x8[] = { 177 FUNC("-", 3, 6, 1), 178 FUNC("refclk", 2, 6, 1), 179 FUNC("gpio", 1, 6, 1), 180 FUNC("spi cs1", 0, 6, 1), 181}; 182 183static struct ralink_pmx_func spis_func_mt76x8[] = { 184 FUNC("pwm_uart2", 3, 14, 4), 185 FUNC("utif", 2, 14, 4), 186 FUNC("gpio", 1, 14, 4), 187 FUNC("spis", 0, 14, 4), 188}; 189 190static struct ralink_pmx_func gpio_func_mt76x8[] = { 191 FUNC("pcie", 3, 11, 1), 192 FUNC("refclk", 2, 11, 1), 193 FUNC("gpio", 1, 11, 1), 194 FUNC("gpio", 0, 11, 1), 195}; 196 197static struct ralink_pmx_func p4led_kn_func_mt76x8[] = { 198 FUNC("jtag", 3, 30, 1), 199 FUNC("utif", 2, 30, 1), 200 FUNC("gpio", 1, 30, 1), 201 FUNC("p4led_kn", 0, 30, 1), 202}; 203 204static struct ralink_pmx_func p3led_kn_func_mt76x8[] = { 205 FUNC("jtag", 3, 31, 1), 206 FUNC("utif", 2, 31, 1), 207 FUNC("gpio", 1, 31, 1), 208 FUNC("p3led_kn", 0, 31, 1), 209}; 210 211static struct ralink_pmx_func p2led_kn_func_mt76x8[] = { 212 FUNC("jtag", 3, 32, 1), 213 FUNC("utif", 2, 32, 1), 214 FUNC("gpio", 1, 32, 1), 215 FUNC("p2led_kn", 0, 32, 1), 216}; 217 218static struct ralink_pmx_func p1led_kn_func_mt76x8[] = { 219 FUNC("jtag", 3, 33, 1), 220 FUNC("utif", 2, 33, 1), 221 FUNC("gpio", 1, 33, 1), 222 FUNC("p1led_kn", 0, 33, 1), 223}; 224 225static struct ralink_pmx_func p0led_kn_func_mt76x8[] = { 226 FUNC("jtag", 3, 34, 1), 227 FUNC("rsvd", 2, 34, 1), 228 FUNC("gpio", 1, 34, 1), 229 FUNC("p0led_kn", 0, 34, 1), 230}; 231 232static struct ralink_pmx_func wled_kn_func_mt76x8[] = { 233 FUNC("rsvd", 3, 35, 1), 234 FUNC("rsvd", 2, 35, 1), 235 FUNC("gpio", 1, 35, 1), 236 FUNC("wled_kn", 0, 35, 1), 237}; 238 239static struct ralink_pmx_func p4led_an_func_mt76x8[] = { 240 FUNC("jtag", 3, 39, 1), 241 FUNC("utif", 2, 39, 1), 242 FUNC("gpio", 1, 39, 1), 243 FUNC("p4led_an", 0, 39, 1), 244}; 245 246static struct ralink_pmx_func p3led_an_func_mt76x8[] = { 247 FUNC("jtag", 3, 40, 1), 248 FUNC("utif", 2, 40, 1), 249 FUNC("gpio", 1, 40, 1), 250 FUNC("p3led_an", 0, 40, 1), 251}; 252 253static struct ralink_pmx_func p2led_an_func_mt76x8[] = { 254 FUNC("jtag", 3, 41, 1), 255 FUNC("utif", 2, 41, 1), 256 FUNC("gpio", 1, 41, 1), 257 FUNC("p2led_an", 0, 41, 1), 258}; 259 260static struct ralink_pmx_func p1led_an_func_mt76x8[] = { 261 FUNC("jtag", 3, 42, 1), 262 FUNC("utif", 2, 42, 1), 263 FUNC("gpio", 1, 42, 1), 264 FUNC("p1led_an", 0, 42, 1), 265}; 266 267static struct ralink_pmx_func p0led_an_func_mt76x8[] = { 268 FUNC("jtag", 3, 43, 1), 269 FUNC("rsvd", 2, 43, 1), 270 FUNC("gpio", 1, 43, 1), 271 FUNC("p0led_an", 0, 43, 1), 272}; 273 274static struct ralink_pmx_func wled_an_func_mt76x8[] = { 275 FUNC("rsvd", 3, 44, 1), 276 FUNC("rsvd", 2, 44, 1), 277 FUNC("gpio", 1, 44, 1), 278 FUNC("wled_an", 0, 44, 1), 279}; 280 281#define MT76X8_GPIO_MODE_MASK 0x3 282 283#define MT76X8_GPIO_MODE_P4LED_KN 58 284#define MT76X8_GPIO_MODE_P3LED_KN 56 285#define MT76X8_GPIO_MODE_P2LED_KN 54 286#define MT76X8_GPIO_MODE_P1LED_KN 52 287#define MT76X8_GPIO_MODE_P0LED_KN 50 288#define MT76X8_GPIO_MODE_WLED_KN 48 289#define MT76X8_GPIO_MODE_P4LED_AN 42 290#define MT76X8_GPIO_MODE_P3LED_AN 40 291#define MT76X8_GPIO_MODE_P2LED_AN 38 292#define MT76X8_GPIO_MODE_P1LED_AN 36 293#define MT76X8_GPIO_MODE_P0LED_AN 34 294#define MT76X8_GPIO_MODE_WLED_AN 32 295#define MT76X8_GPIO_MODE_PWM1 30 296#define MT76X8_GPIO_MODE_PWM0 28 297#define MT76X8_GPIO_MODE_UART2 26 298#define MT76X8_GPIO_MODE_UART1 24 299#define MT76X8_GPIO_MODE_I2C 20 300#define MT76X8_GPIO_MODE_REFCLK 18 301#define MT76X8_GPIO_MODE_PERST 16 302#define MT76X8_GPIO_MODE_WDT 14 303#define MT76X8_GPIO_MODE_SPI 12 304#define MT76X8_GPIO_MODE_SDMODE 10 305#define MT76X8_GPIO_MODE_UART0 8 306#define MT76X8_GPIO_MODE_I2S 6 307#define MT76X8_GPIO_MODE_CS1 4 308#define MT76X8_GPIO_MODE_SPIS 2 309#define MT76X8_GPIO_MODE_GPIO 0 310 311static struct ralink_pmx_group mt76x8_pinmux_data[] = { 312 GRP_G("pwm1", pwm1_func_mt76x8, MT76X8_GPIO_MODE_MASK, 313 1, MT76X8_GPIO_MODE_PWM1), 314 GRP_G("pwm0", pwm0_func_mt76x8, MT76X8_GPIO_MODE_MASK, 315 1, MT76X8_GPIO_MODE_PWM0), 316 GRP_G("uart2", uart2_func_mt76x8, MT76X8_GPIO_MODE_MASK, 317 1, MT76X8_GPIO_MODE_UART2), 318 GRP_G("uart1", uart1_func_mt76x8, MT76X8_GPIO_MODE_MASK, 319 1, MT76X8_GPIO_MODE_UART1), 320 GRP_G("i2c", i2c_func_mt76x8, MT76X8_GPIO_MODE_MASK, 321 1, MT76X8_GPIO_MODE_I2C), 322 GRP("refclk", refclk_func_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK), 323 GRP("perst", perst_func_mt76x8, 1, MT76X8_GPIO_MODE_PERST), 324 GRP("wdt", wdt_func_mt76x8, 1, MT76X8_GPIO_MODE_WDT), 325 GRP("spi", spi_func_mt76x8, 1, MT76X8_GPIO_MODE_SPI), 326 GRP_G("sdmode", sd_mode_func_mt76x8, MT76X8_GPIO_MODE_MASK, 327 1, MT76X8_GPIO_MODE_SDMODE), 328 GRP_G("uart0", uart0_func_mt76x8, MT76X8_GPIO_MODE_MASK, 329 1, MT76X8_GPIO_MODE_UART0), 330 GRP_G("i2s", i2s_func_mt76x8, MT76X8_GPIO_MODE_MASK, 331 1, MT76X8_GPIO_MODE_I2S), 332 GRP_G("spi cs1", spi_cs1_func_mt76x8, MT76X8_GPIO_MODE_MASK, 333 1, MT76X8_GPIO_MODE_CS1), 334 GRP_G("spis", spis_func_mt76x8, MT76X8_GPIO_MODE_MASK, 335 1, MT76X8_GPIO_MODE_SPIS), 336 GRP_G("gpio", gpio_func_mt76x8, MT76X8_GPIO_MODE_MASK, 337 1, MT76X8_GPIO_MODE_GPIO), 338 GRP_G("wled_an", wled_an_func_mt76x8, MT76X8_GPIO_MODE_MASK, 339 1, MT76X8_GPIO_MODE_WLED_AN), 340 GRP_G("p0led_an", p0led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK, 341 1, MT76X8_GPIO_MODE_P0LED_AN), 342 GRP_G("p1led_an", p1led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK, 343 1, MT76X8_GPIO_MODE_P1LED_AN), 344 GRP_G("p2led_an", p2led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK, 345 1, MT76X8_GPIO_MODE_P2LED_AN), 346 GRP_G("p3led_an", p3led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK, 347 1, MT76X8_GPIO_MODE_P3LED_AN), 348 GRP_G("p4led_an", p4led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK, 349 1, MT76X8_GPIO_MODE_P4LED_AN), 350 GRP_G("wled_kn", wled_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK, 351 1, MT76X8_GPIO_MODE_WLED_KN), 352 GRP_G("p0led_kn", p0led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK, 353 1, MT76X8_GPIO_MODE_P0LED_KN), 354 GRP_G("p1led_kn", p1led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK, 355 1, MT76X8_GPIO_MODE_P1LED_KN), 356 GRP_G("p2led_kn", p2led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK, 357 1, MT76X8_GPIO_MODE_P2LED_KN), 358 GRP_G("p3led_kn", p3led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK, 359 1, MT76X8_GPIO_MODE_P3LED_KN), 360 GRP_G("p4led_kn", p4led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK, 361 1, MT76X8_GPIO_MODE_P4LED_KN), 362 { 0 } 363}; 364 365static int mt7620_pinctrl_probe(struct platform_device *pdev) 366{ 367 if (is_mt76x8()) 368 return ralink_pinctrl_init(pdev, mt76x8_pinmux_data); 369 else 370 return ralink_pinctrl_init(pdev, mt7620a_pinmux_data); 371} 372 373static const struct of_device_id mt7620_pinctrl_match[] = { 374 { .compatible = "ralink,mt7620-pinctrl" }, 375 {} 376}; 377MODULE_DEVICE_TABLE(of, mt7620_pinctrl_match); 378 379static struct platform_driver mt7620_pinctrl_driver = { 380 .probe = mt7620_pinctrl_probe, 381 .driver = { 382 .name = "mt7620-pinctrl", 383 .of_match_table = mt7620_pinctrl_match, 384 }, 385}; 386 387static int __init mt7620_pinctrl_init(void) 388{ 389 return platform_driver_register(&mt7620_pinctrl_driver); 390} 391core_initcall_sync(mt7620_pinctrl_init);