0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/init.h>
0011 #include <linux/of_device.h>
0012 #include <linux/platform_device.h>
0013 #include <linux/regmap.h>
0014
0015 #include "berlin.h"
0016
0017 static const struct berlin_desc_group as370_soc_pinctrl_groups[] = {
0018 BERLIN_PINCTRL_GROUP("I2S1_BCLKIO", 0x0, 0x3, 0x00,
0019 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0020 BERLIN_PINCTRL_FUNCTION(0x1, "i2s1"),
0021 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0022 BERLIN_PINCTRL_GROUP("I2S1_LRCKIO", 0x0, 0x3, 0x03,
0023 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0024 BERLIN_PINCTRL_FUNCTION(0x1, "i2s1"),
0025 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0026 BERLIN_PINCTRL_GROUP("I2S1_DO0", 0x0, 0x3, 0x06,
0027 BERLIN_PINCTRL_FUNCTION(0x0, "por"),
0028 BERLIN_PINCTRL_FUNCTION(0x1, "i2s1"),
0029 BERLIN_PINCTRL_FUNCTION(0x3, "gpio"),
0030 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0031 BERLIN_PINCTRL_GROUP("I2S1_DO1", 0x0, 0x3, 0x09,
0032 BERLIN_PINCTRL_FUNCTION(0x0, "por"),
0033 BERLIN_PINCTRL_FUNCTION(0x1, "i2s1"),
0034 BERLIN_PINCTRL_FUNCTION(0x3, "gpio"),
0035 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0036 BERLIN_PINCTRL_GROUP("I2S1_DO2", 0x0, 0x3, 0x0c,
0037 BERLIN_PINCTRL_FUNCTION(0x0, "por"),
0038 BERLIN_PINCTRL_FUNCTION(0x1, "i2s1"),
0039 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0040 BERLIN_PINCTRL_FUNCTION(0x3, "gpio"),
0041 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0042 BERLIN_PINCTRL_GROUP("I2S1_DO3", 0x0, 0x3, 0x0f,
0043 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0044 BERLIN_PINCTRL_FUNCTION(0x1, "i2s1"),
0045 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0046 BERLIN_PINCTRL_FUNCTION(0x3, "spdifib"),
0047 BERLIN_PINCTRL_FUNCTION(0x4, "spdifo"),
0048 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0049 BERLIN_PINCTRL_GROUP("I2S1_MCLK", 0x0, 0x3, 0x12,
0050 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0051 BERLIN_PINCTRL_FUNCTION(0x1, "i2s1"),
0052 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0053 BERLIN_PINCTRL_GROUP("I2S2_BCLKIO", 0x0, 0x3, 0x15,
0054 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0055 BERLIN_PINCTRL_FUNCTION(0x1, "i2s2"),
0056 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0057 BERLIN_PINCTRL_GROUP("I2S2_LRCKIO", 0x0, 0x3, 0x18,
0058 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0059 BERLIN_PINCTRL_FUNCTION(0x1, "i2s2"),
0060 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0061 BERLIN_PINCTRL_GROUP("I2S2_DI0", 0x0, 0x3, 0x1b,
0062 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0063 BERLIN_PINCTRL_FUNCTION(0x1, "i2s2"),
0064 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0065 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0066 BERLIN_PINCTRL_GROUP("I2S2_DI1", 0x4, 0x3, 0x00,
0067 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0068 BERLIN_PINCTRL_FUNCTION(0x1, "i2s2"),
0069 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0070 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0071 BERLIN_PINCTRL_GROUP("I2S2_DI2", 0x4, 0x3, 0x03,
0072 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0073 BERLIN_PINCTRL_FUNCTION(0x1, "i2s2"),
0074 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0075 BERLIN_PINCTRL_FUNCTION(0x3, "spdific"),
0076 BERLIN_PINCTRL_FUNCTION(0x4, "spdifo"),
0077 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0078 BERLIN_PINCTRL_GROUP("I2S2_DI3", 0x4, 0x3, 0x06,
0079 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0080 BERLIN_PINCTRL_FUNCTION(0x1, "i2s2"),
0081 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0082 BERLIN_PINCTRL_FUNCTION(0x3, "spdifia"),
0083 BERLIN_PINCTRL_FUNCTION(0x4, "spdifo"),
0084 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0085 BERLIN_PINCTRL_GROUP("PDM_CLKO", 0x4, 0x3, 0x09,
0086 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0087 BERLIN_PINCTRL_FUNCTION(0x1, "pdm"),
0088 BERLIN_PINCTRL_FUNCTION(0x2, "i2s2"),
0089 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0090 BERLIN_PINCTRL_GROUP("PDM_DI0", 0x4, 0x3, 0x0c,
0091 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0092 BERLIN_PINCTRL_FUNCTION(0x1, "pdm"),
0093 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0094 BERLIN_PINCTRL_GROUP("PDM_DI1", 0x4, 0x3, 0x0f,
0095 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0096 BERLIN_PINCTRL_FUNCTION(0x1, "pdm"),
0097 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0098 BERLIN_PINCTRL_GROUP("PDM_DI2", 0x4, 0x3, 0x12,
0099 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0100 BERLIN_PINCTRL_FUNCTION(0x1, "pdm"),
0101 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0102 BERLIN_PINCTRL_FUNCTION(0x3, "spdifid"),
0103 BERLIN_PINCTRL_FUNCTION(0x4, "spdifo"),
0104 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0105 BERLIN_PINCTRL_GROUP("PDM_DI3", 0x4, 0x3, 0x15,
0106 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0107 BERLIN_PINCTRL_FUNCTION(0x1, "pdm"),
0108 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0109 BERLIN_PINCTRL_FUNCTION(0x3, "spdifi"),
0110 BERLIN_PINCTRL_FUNCTION(0x4, "spdifo"),
0111 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0112 BERLIN_PINCTRL_GROUP("NAND_IO0", 0x4, 0x3, 0x18,
0113 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0114 BERLIN_PINCTRL_FUNCTION(0x1, "emmc"),
0115 BERLIN_PINCTRL_FUNCTION(0x4, "pcie0")),
0116 BERLIN_PINCTRL_GROUP("NAND_IO1", 0x4, 0x3, 0x1b,
0117 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0118 BERLIN_PINCTRL_FUNCTION(0x1, "emmc"),
0119 BERLIN_PINCTRL_FUNCTION(0x4, "pcie0")),
0120 BERLIN_PINCTRL_GROUP("NAND_IO2", 0x8, 0x3, 0x00,
0121 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0122 BERLIN_PINCTRL_FUNCTION(0x1, "emmc"),
0123 BERLIN_PINCTRL_FUNCTION(0x4, "pcie1")),
0124 BERLIN_PINCTRL_GROUP("NAND_IO3", 0x8, 0x3, 0x03,
0125 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0126 BERLIN_PINCTRL_FUNCTION(0x1, "emmc"),
0127 BERLIN_PINCTRL_FUNCTION(0x4, "pcie1")),
0128 BERLIN_PINCTRL_GROUP("NAND_IO4", 0x8, 0x3, 0x06,
0129 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0130 BERLIN_PINCTRL_FUNCTION(0x1, "emmc")),
0131 BERLIN_PINCTRL_GROUP("NAND_IO5", 0x8, 0x3, 0x09,
0132 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0133 BERLIN_PINCTRL_FUNCTION(0x1, "emmc")),
0134 BERLIN_PINCTRL_GROUP("NAND_IO6", 0x8, 0x3, 0x0c,
0135 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0136 BERLIN_PINCTRL_FUNCTION(0x1, "emmc")),
0137 BERLIN_PINCTRL_GROUP("NAND_IO7", 0x8, 0x3, 0x0f,
0138 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0139 BERLIN_PINCTRL_FUNCTION(0x1, "emmc")),
0140 BERLIN_PINCTRL_GROUP("NAND_ALE", 0x8, 0x3, 0x12,
0141 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0142 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0143 BERLIN_PINCTRL_FUNCTION(0x3, "gpio")),
0144 BERLIN_PINCTRL_GROUP("NAND_CLE", 0x8, 0x3, 0x15,
0145 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0146 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0147 BERLIN_PINCTRL_FUNCTION(0x3, "gpio")),
0148 BERLIN_PINCTRL_GROUP("NAND_WEn", 0x8, 0x3, 0x18,
0149 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0150 BERLIN_PINCTRL_FUNCTION(0x3, "gpio")),
0151 BERLIN_PINCTRL_GROUP("NAND_REn", 0x8, 0x3, 0x1b,
0152 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0153 BERLIN_PINCTRL_FUNCTION(0x3, "gpio")),
0154 BERLIN_PINCTRL_GROUP("NAND_WPn", 0xc, 0x3, 0x00,
0155 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0156 BERLIN_PINCTRL_FUNCTION(0x1, "emmc"),
0157 BERLIN_PINCTRL_FUNCTION(0x3, "gpio")),
0158 BERLIN_PINCTRL_GROUP("NAND_CEn", 0xc, 0x3, 0x03,
0159 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0160 BERLIN_PINCTRL_FUNCTION(0x1, "emmc"),
0161 BERLIN_PINCTRL_FUNCTION(0x3, "gpio")),
0162 BERLIN_PINCTRL_GROUP("NAND_RDY", 0xc, 0x3, 0x06,
0163 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0164 BERLIN_PINCTRL_FUNCTION(0x1, "emmc"),
0165 BERLIN_PINCTRL_FUNCTION(0x3, "gpio")),
0166 BERLIN_PINCTRL_GROUP("SPI1_SS0n", 0xc, 0x3, 0x09,
0167 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
0168 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0169 BERLIN_PINCTRL_GROUP("SPI1_SS1n", 0xc, 0x3, 0x0c,
0170 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
0171 BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0172 BERLIN_PINCTRL_FUNCTION(0x3, "pwm")),
0173 BERLIN_PINCTRL_GROUP("SPI1_SS2n", 0xc, 0x3, 0x0f,
0174 BERLIN_PINCTRL_FUNCTION(0x0, "uart0"),
0175 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"),
0176 BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0177 BERLIN_PINCTRL_FUNCTION(0x3, "pwm")),
0178 BERLIN_PINCTRL_GROUP("SPI1_SS3n", 0xc, 0x3, 0x12,
0179 BERLIN_PINCTRL_FUNCTION(0x0, "uart0"),
0180 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"),
0181 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0182 BERLIN_PINCTRL_GROUP("SPI1_SCLK", 0xc, 0x3, 0x15,
0183 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
0184 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
0185 BERLIN_PINCTRL_FUNCTION(0x3, "pwm")),
0186 BERLIN_PINCTRL_GROUP("SPI1_SDO", 0xc, 0x3, 0x18,
0187 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
0188 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
0189 BERLIN_PINCTRL_FUNCTION(0x3, "pwm")),
0190 BERLIN_PINCTRL_GROUP("SPI1_SDI", 0xc, 0x3, 0x1b,
0191 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
0192 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0193 BERLIN_PINCTRL_GROUP("USB0_DRV_VBUS", 0x10, 0x3, 0x00,
0194 BERLIN_PINCTRL_FUNCTION(0x0, "usb0"),
0195 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
0196 BERLIN_PINCTRL_FUNCTION(0x3, "refclko")),
0197 BERLIN_PINCTRL_GROUP("TW1_SCL", 0x10, 0x3, 0x03,
0198 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0199 BERLIN_PINCTRL_FUNCTION(0x1, "tw1")),
0200 BERLIN_PINCTRL_GROUP("TW1_SDA", 0x10, 0x3, 0x06,
0201 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0202 BERLIN_PINCTRL_FUNCTION(0x1, "tw1")),
0203 BERLIN_PINCTRL_GROUP("TW0_SCL", 0x10, 0x3, 0x09,
0204 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0205 BERLIN_PINCTRL_FUNCTION(0x1, "tw0")),
0206 BERLIN_PINCTRL_GROUP("TW0_SDA", 0x10, 0x3, 0x0c,
0207 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0208 BERLIN_PINCTRL_FUNCTION(0x1, "tw0")),
0209 BERLIN_PINCTRL_GROUP("TMS", 0x10, 0x3, 0x0f,
0210 BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
0211 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
0212 BERLIN_PINCTRL_FUNCTION(0x4, "pwm")),
0213 BERLIN_PINCTRL_GROUP("TDI", 0x10, 0x3, 0x12,
0214 BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
0215 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
0216 BERLIN_PINCTRL_FUNCTION(0x4, "pwm")),
0217 BERLIN_PINCTRL_GROUP("TDO", 0x10, 0x3, 0x15,
0218 BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
0219 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
0220 BERLIN_PINCTRL_FUNCTION(0x4, "pwm")),
0221 BERLIN_PINCTRL_GROUP("PWM6", 0x10, 0x3, 0x18,
0222 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0223 BERLIN_PINCTRL_FUNCTION(0x1, "pwm")),
0224 BERLIN_PINCTRL_GROUP("PWM7", 0x10, 0x3, 0x1b,
0225 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0226 BERLIN_PINCTRL_FUNCTION(0x1, "pwm")),
0227 BERLIN_PINCTRL_GROUP("PWM0", 0x14, 0x3, 0x00,
0228 BERLIN_PINCTRL_FUNCTION(0x0, "por"),
0229 BERLIN_PINCTRL_FUNCTION(0x1, "pwm"),
0230 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0231 BERLIN_PINCTRL_GROUP("PWM1", 0x14, 0x3, 0x03,
0232 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0233 BERLIN_PINCTRL_FUNCTION(0x1, "pwm")),
0234 BERLIN_PINCTRL_GROUP("PWM2", 0x14, 0x3, 0x06,
0235 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0236 BERLIN_PINCTRL_FUNCTION(0x1, "pwm")),
0237 BERLIN_PINCTRL_GROUP("PWM3", 0x14, 0x3, 0x09,
0238 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0239 BERLIN_PINCTRL_FUNCTION(0x1, "pwm")),
0240 BERLIN_PINCTRL_GROUP("PWM4", 0x14, 0x3, 0x0c,
0241 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0242 BERLIN_PINCTRL_FUNCTION(0x1, "pwm")),
0243 BERLIN_PINCTRL_GROUP("PWM5", 0x14, 0x3, 0x0f,
0244 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0245 BERLIN_PINCTRL_FUNCTION(0x1, "pwm")),
0246 BERLIN_PINCTRL_GROUP("URT1_RTSn", 0x14, 0x3, 0x12,
0247 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0248 BERLIN_PINCTRL_FUNCTION(0x1, "uart1"),
0249 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0250 BERLIN_PINCTRL_FUNCTION(0x3, "tw1a"),
0251 BERLIN_PINCTRL_FUNCTION(0x4, "aio"),
0252 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0253 BERLIN_PINCTRL_GROUP("URT1_CTSn", 0x14, 0x3, 0x15,
0254 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0255 BERLIN_PINCTRL_FUNCTION(0x1, "uart1"),
0256 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
0257 BERLIN_PINCTRL_FUNCTION(0x3, "tw1a"),
0258 BERLIN_PINCTRL_FUNCTION(0x4, "aio"),
0259 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0260 BERLIN_PINCTRL_GROUP("URT1_RXD", 0x14, 0x3, 0x18,
0261 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0262 BERLIN_PINCTRL_FUNCTION(0x1, "uart1"),
0263 BERLIN_PINCTRL_FUNCTION(0x4, "aio"),
0264 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0265 BERLIN_PINCTRL_GROUP("URT1_TXD", 0x14, 0x3, 0x1b,
0266 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0267 BERLIN_PINCTRL_FUNCTION(0x1, "uart1"),
0268 BERLIN_PINCTRL_FUNCTION(0x4, "aio"),
0269 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0270 BERLIN_PINCTRL_GROUP("I2S3_DI", 0x18, 0x3, 0x00,
0271 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0272 BERLIN_PINCTRL_FUNCTION(0x1, "i2s3"),
0273 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0274 BERLIN_PINCTRL_GROUP("I2S3_DO", 0x18, 0x3, 0x03,
0275 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0276 BERLIN_PINCTRL_FUNCTION(0x1, "i2s3"),
0277 BERLIN_PINCTRL_FUNCTION(0x5, "phy")),
0278 BERLIN_PINCTRL_GROUP("I2S3_BCLKIO", 0x18, 0x3, 0x06,
0279 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0280 BERLIN_PINCTRL_FUNCTION(0x1, "i2s3"),
0281 BERLIN_PINCTRL_FUNCTION(0x5, "clk")),
0282 BERLIN_PINCTRL_GROUP("I2S3_LRCKIO", 0x18, 0x3, 0x09,
0283 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0284 BERLIN_PINCTRL_FUNCTION(0x1, "i2s3")),
0285 BERLIN_PINCTRL_GROUP("SD0_DAT0", 0x18, 0x3, 0x0c,
0286 BERLIN_PINCTRL_FUNCTION(0x0, "cpupll"),
0287 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0288 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0289 BERLIN_PINCTRL_GROUP("SD0_DAT1", 0x18, 0x3, 0x0f,
0290 BERLIN_PINCTRL_FUNCTION(0x0, "syspll"),
0291 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0292 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0293 BERLIN_PINCTRL_GROUP("SD0_CLK", 0x18, 0x3, 0x12,
0294 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0295 BERLIN_PINCTRL_FUNCTION(0x1, "sd0")),
0296 BERLIN_PINCTRL_GROUP("SD0_DAT2", 0x18, 0x3, 0x15,
0297 BERLIN_PINCTRL_FUNCTION(0x0, "mempll"),
0298 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0299 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0300 BERLIN_PINCTRL_GROUP("SD0_DAT3", 0x18, 0x3, 0x18,
0301 BERLIN_PINCTRL_FUNCTION(0x0, "apll0"),
0302 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0303 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0304 BERLIN_PINCTRL_GROUP("SD0_CMD", 0x18, 0x3, 0x1b,
0305 BERLIN_PINCTRL_FUNCTION(0x0, "apll1"),
0306 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0307 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0308 BERLIN_PINCTRL_GROUP("SD0_CDn", 0x1c, 0x3, 0x00,
0309 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0310 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0311 BERLIN_PINCTRL_FUNCTION(0x3, "pwm")),
0312 BERLIN_PINCTRL_GROUP("SD0_WP", 0x1c, 0x3, 0x03,
0313 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0314 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0315 BERLIN_PINCTRL_FUNCTION(0x3, "pwm")),
0316 };
0317
0318 static const struct berlin_pinctrl_desc as370_soc_pinctrl_data = {
0319 .groups = as370_soc_pinctrl_groups,
0320 .ngroups = ARRAY_SIZE(as370_soc_pinctrl_groups),
0321 };
0322
0323 static const struct of_device_id as370_pinctrl_match[] = {
0324 {
0325 .compatible = "syna,as370-soc-pinctrl",
0326 .data = &as370_soc_pinctrl_data,
0327 },
0328 {}
0329 };
0330
0331 static int as370_pinctrl_probe(struct platform_device *pdev)
0332 {
0333 const struct of_device_id *match =
0334 of_match_device(as370_pinctrl_match, &pdev->dev);
0335 struct regmap_config *rmconfig;
0336 struct regmap *regmap;
0337 struct resource *res;
0338 void __iomem *base;
0339
0340 rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL);
0341 if (!rmconfig)
0342 return -ENOMEM;
0343
0344 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
0345 base = devm_ioremap_resource(&pdev->dev, res);
0346 if (IS_ERR(base))
0347 return PTR_ERR(base);
0348
0349 rmconfig->reg_bits = 32,
0350 rmconfig->val_bits = 32,
0351 rmconfig->reg_stride = 4,
0352 rmconfig->max_register = resource_size(res);
0353
0354 regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig);
0355 if (IS_ERR(regmap))
0356 return PTR_ERR(regmap);
0357
0358 return berlin_pinctrl_probe_regmap(pdev, match->data, regmap);
0359 }
0360
0361 static struct platform_driver as370_pinctrl_driver = {
0362 .probe = as370_pinctrl_probe,
0363 .driver = {
0364 .name = "as370-pinctrl",
0365 .of_match_table = as370_pinctrl_match,
0366 },
0367 };
0368 builtin_platform_driver(as370_pinctrl_driver);