Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Marvell Berlin BG2Q pinctrl driver
0004  *
0005  * Copyright (C) 2014 Marvell Technology Group Ltd.
0006  *
0007  * Antoine Ténart <antoine.tenart@free-electrons.com>
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 berlin2q_soc_pinctrl_groups[] = {
0018     /* G */
0019     BERLIN_PINCTRL_GROUP("G0", 0x18, 0x3, 0x00,
0020             BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0021             BERLIN_PINCTRL_FUNCTION(0x1, "mmc"),
0022             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0023     BERLIN_PINCTRL_GROUP("G1", 0x18, 0x3, 0x03,
0024             BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0025             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0026     BERLIN_PINCTRL_GROUP("G2", 0x18, 0x3, 0x06,
0027             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0028             BERLIN_PINCTRL_FUNCTION(0x2, "arc"),
0029             BERLIN_PINCTRL_FUNCTION(0x3, "lvds")),
0030     BERLIN_PINCTRL_GROUP("G3", 0x18, 0x3, 0x09,
0031             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0032             BERLIN_PINCTRL_FUNCTION(0x2, "i2s2"),
0033             BERLIN_PINCTRL_FUNCTION(0x3, "lvds")),
0034     BERLIN_PINCTRL_GROUP("G4", 0x18, 0x3, 0x0c,
0035             BERLIN_PINCTRL_FUNCTION(0x0, "pll"),
0036             BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0037             BERLIN_PINCTRL_FUNCTION(0x2, "rgmii"),
0038             BERLIN_PINCTRL_FUNCTION(0x3, "gpio"),
0039             BERLIN_PINCTRL_FUNCTION(0x5, "sata_dbg"),
0040             BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0041             BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0042     BERLIN_PINCTRL_GROUP("G5", 0x18, 0x3, 0x0f,
0043             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0044             BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0045             BERLIN_PINCTRL_FUNCTION(0x2, "rgmii"),
0046             BERLIN_PINCTRL_FUNCTION(0x5, "sata_dbg"),
0047             BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0048             BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0049     BERLIN_PINCTRL_GROUP("G6", 0x18, 0x3, 0x12,
0050             BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
0051             BERLIN_PINCTRL_FUNCTION(0x1, "twsi0"),
0052             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0053     BERLIN_PINCTRL_GROUP("G7", 0x18, 0x3, 0x15,
0054             BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
0055             BERLIN_PINCTRL_FUNCTION(0x1, "twsi1"),
0056             BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0057             BERLIN_PINCTRL_FUNCTION(0x3, "eddc")),
0058     BERLIN_PINCTRL_GROUP("G8", 0x18, 0x3, 0x18,
0059             BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* CLK/SDI/SDO */
0060             BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0061     BERLIN_PINCTRL_GROUP("G9", 0x18, 0x3, 0x1b,
0062             BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n/SS1n */
0063             BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
0064             BERLIN_PINCTRL_FUNCTION(0x5, "sata")),
0065     BERLIN_PINCTRL_GROUP("G10", 0x1c, 0x3, 0x00,
0066             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0067             BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS2n */
0068             BERLIN_PINCTRL_FUNCTION(0x3, "i2s0"),
0069             BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
0070             BERLIN_PINCTRL_FUNCTION(0x5, "sata")),
0071     BERLIN_PINCTRL_GROUP("G11", 0x1c, 0x3, 0x03,
0072             BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
0073             BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS3n */
0074             BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0075             BERLIN_PINCTRL_FUNCTION(0x3, "i2s1"),
0076             BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
0077             BERLIN_PINCTRL_FUNCTION(0x5, "sata")),
0078     BERLIN_PINCTRL_GROUP("G12", 0x1c, 0x3, 0x06,
0079             BERLIN_PINCTRL_FUNCTION(0x0, "agc"),
0080             BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0081     BERLIN_PINCTRL_GROUP("G13", 0x1c, 0x3, 0x09,
0082             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0083             BERLIN_PINCTRL_FUNCTION(0x1, "sts1"),
0084             BERLIN_PINCTRL_FUNCTION(0x2, "rgmii"),
0085             BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0086             BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0087     BERLIN_PINCTRL_GROUP("G14", 0x1c, 0x3, 0x0c,
0088             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0089             BERLIN_PINCTRL_FUNCTION(0x1, "sts0"),
0090             BERLIN_PINCTRL_FUNCTION(0x4, "sts1"),
0091             BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0092             BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0093     BERLIN_PINCTRL_GROUP("G15", 0x1c, 0x3, 0x0f,
0094             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0095             BERLIN_PINCTRL_FUNCTION(0x1, "sts0"),
0096             BERLIN_PINCTRL_FUNCTION(0x4, "sts1"),
0097             BERLIN_PINCTRL_FUNCTION(0x5, "vdac"),
0098             BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0099             BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0100     BERLIN_PINCTRL_GROUP("G16", 0x1c, 0x3, 0x12,
0101             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0102             BERLIN_PINCTRL_FUNCTION(0x1, "sts0"),
0103             BERLIN_PINCTRL_FUNCTION(0x4, "sts1"),
0104             BERLIN_PINCTRL_FUNCTION(0x5, "osco"),
0105             BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0106             BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0107     BERLIN_PINCTRL_GROUP("G17", 0x1c, 0x3, 0x15,
0108             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0109             BERLIN_PINCTRL_FUNCTION(0x2, "rgmii"),
0110             BERLIN_PINCTRL_FUNCTION(0x3, "spdif"),
0111             BERLIN_PINCTRL_FUNCTION(0x4, "sts1"),
0112             BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0113             BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0114     BERLIN_PINCTRL_GROUP("G18", 0x1c, 0x3, 0x18,
0115             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0116             BERLIN_PINCTRL_FUNCTION(0x2, "rgmii"),
0117             BERLIN_PINCTRL_FUNCTION(0x3, "i2s2"),
0118             BERLIN_PINCTRL_FUNCTION(0x4, "sts1")),
0119     BERLIN_PINCTRL_GROUP("G19", 0x1c, 0x3, 0x1b,
0120             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0121             BERLIN_PINCTRL_FUNCTION(0x2, "rgmii"),
0122             BERLIN_PINCTRL_FUNCTION(0x3, "i2s3"),
0123             BERLIN_PINCTRL_FUNCTION(0x4, "sts1"),
0124             BERLIN_PINCTRL_FUNCTION(0x5, "osco")),
0125     BERLIN_PINCTRL_GROUP("G20", 0x20, 0x3, 0x00,
0126             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0127             BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0128             BERLIN_PINCTRL_FUNCTION(0x3, "demod"),
0129             /*
0130              * Mode 0x4 mux usb2_dbg *and* usb3_dbg:
0131              * add two functions so it can be used with other groups
0132              * within the same subnode in the device tree
0133              */
0134             BERLIN_PINCTRL_FUNCTION(0x4, "usb2_dbg"),
0135             BERLIN_PINCTRL_FUNCTION(0x4, "usb3_dbg")),
0136     BERLIN_PINCTRL_GROUP("G21", 0x20, 0x3, 0x03,
0137             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0138             BERLIN_PINCTRL_FUNCTION(0x1, "sts2"),
0139             BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0140             BERLIN_PINCTRL_FUNCTION(0x3, "demod")),
0141     BERLIN_PINCTRL_GROUP("G22", 0x20, 0x3, 0x06,
0142             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0143             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0144     BERLIN_PINCTRL_GROUP("G23", 0x20, 0x3, 0x09,
0145             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0146             BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0147             BERLIN_PINCTRL_FUNCTION(0x3, "avif"),
0148             BERLIN_PINCTRL_FUNCTION(0x4, "usb2_dbg")),
0149     BERLIN_PINCTRL_GROUP("G24", 0x20, 0x3, 0x0c,
0150             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0151             BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0152             BERLIN_PINCTRL_FUNCTION(0x3, "demod"),
0153             BERLIN_PINCTRL_FUNCTION(0x4, "usb2_dbg")),
0154     BERLIN_PINCTRL_GROUP("G25", 0x20, 0x3, 0x0f,
0155             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0156             BERLIN_PINCTRL_FUNCTION(0x1, "vga"),
0157             BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0158             BERLIN_PINCTRL_FUNCTION(0x3, "avif"),
0159             BERLIN_PINCTRL_FUNCTION(0x4, "usb2_dbg")),
0160     BERLIN_PINCTRL_GROUP("G26", 0x20, 0x3, 0x12,
0161             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0162             BERLIN_PINCTRL_FUNCTION(0x1, "lvds"),
0163             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0164     BERLIN_PINCTRL_GROUP("G27", 0x20, 0x3, 0x15,
0165             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0166             BERLIN_PINCTRL_FUNCTION(0x1, "agc"),
0167             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0168     BERLIN_PINCTRL_GROUP("G28", 0x20, 0x3, 0x18,
0169             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0170             BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
0171             BERLIN_PINCTRL_FUNCTION(0x3, "avif"),
0172             BERLIN_PINCTRL_FUNCTION(0x4, "usb2_dbg")),
0173     BERLIN_PINCTRL_GROUP("G29", 0x20, 0x3, 0x1b,
0174             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0175             BERLIN_PINCTRL_FUNCTION(0x1, "scrd0"),
0176             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0177     BERLIN_PINCTRL_GROUP("G30", 0x24, 0x3, 0x00,
0178             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0179             BERLIN_PINCTRL_FUNCTION(0x1, "scrd1"),
0180             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0181     BERLIN_PINCTRL_GROUP("G31", 0x24, 0x3, 0x03,
0182             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0183             BERLIN_PINCTRL_FUNCTION(0x1, "sd1"),
0184             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0185     BERLIN_PINCTRL_GROUP("G32", 0x24, 0x3, 0x06,
0186             BERLIN_PINCTRL_FUNCTION(0x0, "cam"),
0187             BERLIN_PINCTRL_FUNCTION(0x1, "sd1"),
0188             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0189     /* GAV */
0190     BERLIN_PINCTRL_GROUP("GAV0", 0x24, 0x3, 0x09,
0191             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0192             BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
0193             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0194             BERLIN_PINCTRL_FUNCTION(0x4, "lvds")),
0195     BERLIN_PINCTRL_GROUP("GAV1", 0x24, 0x3, 0x0c,
0196             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0197             BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
0198             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0199             BERLIN_PINCTRL_FUNCTION(0x4, "vga")),
0200     BERLIN_PINCTRL_GROUP("GAV2", 0x24, 0x3, 0x0f,
0201             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0202             BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
0203             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0204             BERLIN_PINCTRL_FUNCTION(0x3, "i2s3"),
0205             BERLIN_PINCTRL_FUNCTION(0x4, "pdm"),
0206             BERLIN_PINCTRL_FUNCTION(0x6, "adac")),
0207     BERLIN_PINCTRL_GROUP("GAV3", 0x24, 0x3, 0x12,
0208             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0209             BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
0210             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0211             BERLIN_PINCTRL_FUNCTION(0x3, "i2s3"),
0212             BERLIN_PINCTRL_FUNCTION(0x6, "adac")),
0213     BERLIN_PINCTRL_GROUP("GAV4", 0x24, 0x3, 0x15,
0214             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0215             BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
0216             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0217             BERLIN_PINCTRL_FUNCTION(0x4, "i2s1"),
0218             BERLIN_PINCTRL_FUNCTION(0x6, "adac")),
0219     BERLIN_PINCTRL_GROUP("GAV5", 0x24, 0x3, 0x18,
0220             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0221             BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
0222             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0223             BERLIN_PINCTRL_FUNCTION(0x4, "spdif")),
0224     BERLIN_PINCTRL_GROUP("GAV6", 0x24, 0x3, 0x1b,
0225             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0226             BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
0227             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0228             BERLIN_PINCTRL_FUNCTION(0x4, "i2s2")),
0229     BERLIN_PINCTRL_GROUP("GAV7", 0x28, 0x3, 0x00,
0230             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0231             BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
0232             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0233             BERLIN_PINCTRL_FUNCTION(0x4, "i2s3")),
0234     BERLIN_PINCTRL_GROUP("GAV8", 0x28, 0x3, 0x03,
0235             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0236             BERLIN_PINCTRL_FUNCTION(0x1, "dv0"),
0237             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0238             BERLIN_PINCTRL_FUNCTION(0x4, "pwm")),
0239     BERLIN_PINCTRL_GROUP("GAV9", 0x28, 0x3, 0x06,
0240             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0241             BERLIN_PINCTRL_FUNCTION(0x1, "dv0"),
0242             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0243             BERLIN_PINCTRL_FUNCTION(0x4, "pwm")),
0244     BERLIN_PINCTRL_GROUP("GAV10", 0x28, 0x3, 0x09,
0245             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0246             BERLIN_PINCTRL_FUNCTION(0x1, "dv0"),
0247             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0248             BERLIN_PINCTRL_FUNCTION(0x4, "agc")),
0249     BERLIN_PINCTRL_GROUP("GAV11", 0x28, 0x3, 0x0c,
0250             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0251             BERLIN_PINCTRL_FUNCTION(0x1, "dv0"),
0252             BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
0253             BERLIN_PINCTRL_FUNCTION(0x3, "i2s0"),
0254             BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
0255             BERLIN_PINCTRL_FUNCTION(0x5, "vclki")),
0256     BERLIN_PINCTRL_GROUP("GAV12", 0x28, 0x3, 0x0f,
0257             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0258             BERLIN_PINCTRL_FUNCTION(0x1, "i2s2"),
0259             BERLIN_PINCTRL_FUNCTION(0x2, "i2s1")),
0260     BERLIN_PINCTRL_GROUP("GAV13", 0x28, 0x3, 0x12,
0261             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0262             BERLIN_PINCTRL_FUNCTION(0x1, "i2s2")),
0263     BERLIN_PINCTRL_GROUP("GAV14", 0x28, 0x3, 0x15,
0264             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0265             BERLIN_PINCTRL_FUNCTION(0x1, "i2s2"),
0266             BERLIN_PINCTRL_FUNCTION(0x2, "i2s1")),
0267     BERLIN_PINCTRL_GROUP("GAV15", 0x28, 0x3, 0x18,
0268             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0269             BERLIN_PINCTRL_FUNCTION(0x1, "i2s1"),
0270             BERLIN_PINCTRL_FUNCTION(0x6, "dac_dbg")),
0271     BERLIN_PINCTRL_GROUP("GAV16", 0x28, 0x3, 0x1b,
0272             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0273             BERLIN_PINCTRL_FUNCTION(0x1, "i2s0"),
0274             BERLIN_PINCTRL_FUNCTION(0x2, "i2s1"),
0275             BERLIN_PINCTRL_FUNCTION(0x4, "i2s3"),
0276             BERLIN_PINCTRL_FUNCTION(0x5, "pdm"),
0277             BERLIN_PINCTRL_FUNCTION(0x6, "dac_dbg")),
0278     BERLIN_PINCTRL_GROUP("GAV17", 0x2c, 0x3, 0x00,
0279             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0280             BERLIN_PINCTRL_FUNCTION(0x1, "i2s0"),
0281             BERLIN_PINCTRL_FUNCTION(0x2, "i2s1"),
0282             BERLIN_PINCTRL_FUNCTION(0x3, "pwm"),
0283             BERLIN_PINCTRL_FUNCTION(0x4, "i2s3"),
0284             BERLIN_PINCTRL_FUNCTION(0x5, "pdm"),
0285             BERLIN_PINCTRL_FUNCTION(0x6, "dac_dbg")),
0286     BERLIN_PINCTRL_GROUP("GAV18", 0x2c, 0x3, 0x03,
0287             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0288             BERLIN_PINCTRL_FUNCTION(0x1, "spdif"),
0289             BERLIN_PINCTRL_FUNCTION(0x2, "arc")),
0290     BERLIN_PINCTRL_GROUP("GAV19", 0x2c, 0x3, 0x06,
0291             BERLIN_PINCTRL_FUNCTION(0x0, "avio"),
0292             BERLIN_PINCTRL_FUNCTION(0x1, "spdif"),
0293             BERLIN_PINCTRL_FUNCTION(0x4, "i2s3"),
0294             BERLIN_PINCTRL_FUNCTION(0x5, "pdm")),
0295 };
0296 
0297 static const struct berlin_desc_group berlin2q_sysmgr_pinctrl_groups[] = {
0298     /* GSM */
0299     BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00,
0300             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0301             BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS0n */
0302             BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
0303     BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02,
0304             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0305             BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS1n */
0306             BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
0307     BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04,
0308             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0309             BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS2n/SS3n */
0310             BERLIN_PINCTRL_FUNCTION(0x2, "eddc")),
0311     BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06,
0312             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0313             BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* CLK/SDO */
0314             BERLIN_PINCTRL_FUNCTION(0x2, "eddc")),
0315     BERLIN_PINCTRL_GROUP("GSM4", 0x40, 0x1, 0x08,
0316             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0317             BERLIN_PINCTRL_FUNCTION(0x1, "hdmi")),
0318     BERLIN_PINCTRL_GROUP("GSM5", 0x40, 0x1, 0x09,
0319             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0320             BERLIN_PINCTRL_FUNCTION(0x1, "hdmi")),
0321     BERLIN_PINCTRL_GROUP("GSM6", 0x40, 0x1, 0x0a,
0322             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0323             BERLIN_PINCTRL_FUNCTION(0x1, "hdmi")),
0324     BERLIN_PINCTRL_GROUP("GSM7", 0x40, 0x1, 0x0b,
0325             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0326             BERLIN_PINCTRL_FUNCTION(0x1, "hdmi")),
0327     BERLIN_PINCTRL_GROUP("GSM8", 0x40, 0x1, 0x0c,
0328             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0329             BERLIN_PINCTRL_FUNCTION(0x1, "hdmi")),
0330     BERLIN_PINCTRL_GROUP("GSM9", 0x40, 0x1, 0x0d,
0331             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0332             BERLIN_PINCTRL_FUNCTION(0x1, "hdmi")),
0333     BERLIN_PINCTRL_GROUP("GSM10", 0x40, 0x1, 0x0e,
0334             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0335             BERLIN_PINCTRL_FUNCTION(0x1, "led")),
0336     BERLIN_PINCTRL_GROUP("GSM11", 0x40, 0x1, 0x0f,
0337             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0338             BERLIN_PINCTRL_FUNCTION(0x1, "led")),
0339     BERLIN_PINCTRL_GROUP("GSM12", 0x40, 0x2, 0x10,
0340             BERLIN_PINCTRL_FUNCTION(0x0, "uart0"), /* RX/TX */
0341             BERLIN_PINCTRL_FUNCTION(0x1, "irda0"),
0342             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0343     BERLIN_PINCTRL_GROUP("GSM13", 0x40, 0x2, 0x12,
0344             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0345             BERLIN_PINCTRL_FUNCTION(0x1, "uart0"), /* CTS/RTS */
0346             BERLIN_PINCTRL_FUNCTION(0x2, "uart1"), /* RX/TX */
0347             BERLIN_PINCTRL_FUNCTION(0x3, "twsi2")),
0348     BERLIN_PINCTRL_GROUP("GSM14", 0x40, 0x2, 0x14,
0349             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0350             BERLIN_PINCTRL_FUNCTION(0x1, "uart1"), /* RX/TX */
0351             BERLIN_PINCTRL_FUNCTION(0x2, "irda1"),
0352             BERLIN_PINCTRL_FUNCTION(0x3, "twsi3")),
0353     BERLIN_PINCTRL_GROUP("GSM15", 0x40, 0x2, 0x16,
0354             BERLIN_PINCTRL_FUNCTION(0x0, "pwr"),
0355             BERLIN_PINCTRL_FUNCTION(0x1, "led"),
0356             BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0357     BERLIN_PINCTRL_GROUP("GSM16", 0x40, 0x1, 0x18,
0358             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0359             BERLIN_PINCTRL_FUNCTION(0x1, "eddc")),
0360     BERLIN_PINCTRL_GROUP("GSM17", 0x40, 0x1, 0x19,
0361             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0362             BERLIN_PINCTRL_FUNCTION(0x1, "eddc")),
0363     BERLIN_PINCTRL_GROUP("GSM18", 0x40, 0x1, 0x1a,
0364             BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0365             BERLIN_PINCTRL_FUNCTION(0x1, "eddc")),
0366 };
0367 
0368 static const struct berlin_pinctrl_desc berlin2q_soc_pinctrl_data = {
0369     .groups = berlin2q_soc_pinctrl_groups,
0370     .ngroups = ARRAY_SIZE(berlin2q_soc_pinctrl_groups),
0371 };
0372 
0373 static const struct berlin_pinctrl_desc berlin2q_sysmgr_pinctrl_data = {
0374     .groups = berlin2q_sysmgr_pinctrl_groups,
0375     .ngroups = ARRAY_SIZE(berlin2q_sysmgr_pinctrl_groups),
0376 };
0377 
0378 static const struct of_device_id berlin2q_pinctrl_match[] = {
0379     {
0380         .compatible = "marvell,berlin2q-soc-pinctrl",
0381         .data = &berlin2q_soc_pinctrl_data,
0382     },
0383     {
0384         .compatible = "marvell,berlin2q-system-pinctrl",
0385         .data = &berlin2q_sysmgr_pinctrl_data,
0386     },
0387     {}
0388 };
0389 
0390 static int berlin2q_pinctrl_probe(struct platform_device *pdev)
0391 {
0392     const struct of_device_id *match =
0393         of_match_device(berlin2q_pinctrl_match, &pdev->dev);
0394 
0395     return berlin_pinctrl_probe(pdev, match->data);
0396 }
0397 
0398 static struct platform_driver berlin2q_pinctrl_driver = {
0399     .probe  = berlin2q_pinctrl_probe,
0400     .driver = {
0401         .name = "berlin-bg2q-pinctrl",
0402         .of_match_table = berlin2q_pinctrl_match,
0403     },
0404 };
0405 builtin_platform_driver(berlin2q_pinctrl_driver);