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 berlin2cd_soc_pinctrl_groups[] = {
0018
0019 BERLIN_PINCTRL_GROUP("G0", 0x00, 0x3, 0x00,
0020 BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
0021 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
0022 BERLIN_PINCTRL_FUNCTION(0x2, "led"),
0023 BERLIN_PINCTRL_FUNCTION(0x3, "pwm")),
0024 BERLIN_PINCTRL_GROUP("G1", 0x00, 0x3, 0x03,
0025 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0026 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0027 BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0028 BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0029 BERLIN_PINCTRL_GROUP("G2", 0x00, 0x3, 0x06,
0030 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0031 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0032 BERLIN_PINCTRL_FUNCTION(0x2, "fe"),
0033 BERLIN_PINCTRL_FUNCTION(0x3, "pll"),
0034 BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0035 BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0036 BERLIN_PINCTRL_GROUP("G3", 0x00, 0x3, 0x09,
0037 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0038 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0039 BERLIN_PINCTRL_FUNCTION(0x2, "twsi2"),
0040 BERLIN_PINCTRL_FUNCTION(0x3, "pll"),
0041 BERLIN_PINCTRL_FUNCTION(0x4, "fe"),
0042 BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0043 BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0044 BERLIN_PINCTRL_GROUP("G4", 0x00, 0x3, 0x0c,
0045 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0046 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0047 BERLIN_PINCTRL_FUNCTION(0x2, "twsi3"),
0048 BERLIN_PINCTRL_FUNCTION(0x3, "pll"),
0049 BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
0050 BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0051 BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0052 BERLIN_PINCTRL_GROUP("G5", 0x00, 0x3, 0x0f,
0053 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0054 BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
0055 BERLIN_PINCTRL_FUNCTION(0x2, "twsi3"),
0056 BERLIN_PINCTRL_FUNCTION(0x3, "arc"),
0057 BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
0058 BERLIN_PINCTRL_FUNCTION(0x6, "usb0_dbg"),
0059 BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
0060 BERLIN_PINCTRL_GROUP("G6", 0x00, 0x3, 0x12,
0061 BERLIN_PINCTRL_FUNCTION(0x0, "uart0"),
0062 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0063 BERLIN_PINCTRL_GROUP("G7", 0x00, 0x3, 0x15,
0064 BERLIN_PINCTRL_FUNCTION(0x0, "eddc"),
0065 BERLIN_PINCTRL_FUNCTION(0x1, "twsi1"),
0066 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
0067 BERLIN_PINCTRL_GROUP("G8", 0x00, 0x3, 0x18,
0068 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
0069 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0070 BERLIN_PINCTRL_GROUP("G9", 0x00, 0x3, 0x1b,
0071 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
0072 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"),
0073 BERLIN_PINCTRL_FUNCTION(0x3, "twsi0")),
0074 BERLIN_PINCTRL_GROUP("G10", 0x00, 0x2, 0x1e,
0075 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
0076 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0077 BERLIN_PINCTRL_GROUP("G11", 0x04, 0x2, 0x00,
0078 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"),
0079 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0080 BERLIN_PINCTRL_GROUP("G12", 0x04, 0x3, 0x02,
0081 BERLIN_PINCTRL_FUNCTION(0x0, "usb1"),
0082 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0083 BERLIN_PINCTRL_GROUP("G13", 0x04, 0x3, 0x05,
0084 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0085 BERLIN_PINCTRL_FUNCTION(0x1, "usb0_dbg"),
0086 BERLIN_PINCTRL_FUNCTION(0x2, "usb1_dbg")),
0087 BERLIN_PINCTRL_GROUP("G14", 0x04, 0x1, 0x08,
0088 BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
0089 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0090 BERLIN_PINCTRL_GROUP("G15", 0x04, 0x3, 0x09,
0091 BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
0092 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
0093 BERLIN_PINCTRL_GROUP("G16", 0x04, 0x3, 0x0c,
0094 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0095 BERLIN_PINCTRL_GROUP("G17", 0x04, 0x3, 0x0f,
0096 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0097 BERLIN_PINCTRL_GROUP("G18", 0x04, 0x2, 0x12,
0098 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0099 BERLIN_PINCTRL_GROUP("G19", 0x04, 0x2, 0x14,
0100 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0101 BERLIN_PINCTRL_GROUP("G20", 0x04, 0x2, 0x16,
0102 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0103 BERLIN_PINCTRL_GROUP("G21", 0x04, 0x3, 0x18,
0104 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0105 BERLIN_PINCTRL_GROUP("G22", 0x04, 0x3, 0x1b,
0106 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0107 BERLIN_PINCTRL_GROUP("G23", 0x08, 0x3, 0x00,
0108 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0109 BERLIN_PINCTRL_GROUP("G24", 0x08, 0x2, 0x03,
0110 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0111 BERLIN_PINCTRL_GROUP("G25", 0x08, 0x2, 0x05,
0112 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0113 BERLIN_PINCTRL_GROUP("G26", 0x08, 0x1, 0x07,
0114 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0115 BERLIN_PINCTRL_GROUP("G27", 0x08, 0x2, 0x08,
0116 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0117 BERLIN_PINCTRL_GROUP("G28", 0x08, 0x3, 0x0a,
0118 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0119 BERLIN_PINCTRL_GROUP("G29", 0x08, 0x3, 0x0d,
0120 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0121 };
0122
0123 static const struct berlin_desc_group berlin2cd_sysmgr_pinctrl_groups[] = {
0124
0125 BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00,
0126 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0127 BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02,
0128 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0129 BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04,
0130 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0131 BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06,
0132 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0133 BERLIN_PINCTRL_GROUP("GSM4", 0x40, 0x2, 0x08,
0134 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0135 BERLIN_PINCTRL_GROUP("GSM5", 0x40, 0x2, 0x0a,
0136 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0137 BERLIN_PINCTRL_GROUP("GSM6", 0x40, 0x2, 0x0c,
0138 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0139 BERLIN_PINCTRL_GROUP("GSM7", 0x40, 0x1, 0x0e,
0140 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0141 BERLIN_PINCTRL_GROUP("GSM8", 0x40, 0x1, 0x0f,
0142 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0143 BERLIN_PINCTRL_GROUP("GSM9", 0x40, 0x1, 0x10,
0144 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0145 BERLIN_PINCTRL_GROUP("GSM10", 0x40, 0x1, 0x11,
0146 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0147 BERLIN_PINCTRL_GROUP("GSM11", 0x40, 0x1, 0x12,
0148 BERLIN_PINCTRL_FUNCTION_UNKNOWN),
0149 };
0150
0151 static const struct berlin_pinctrl_desc berlin2cd_soc_pinctrl_data = {
0152 .groups = berlin2cd_soc_pinctrl_groups,
0153 .ngroups = ARRAY_SIZE(berlin2cd_soc_pinctrl_groups),
0154 };
0155
0156 static const struct berlin_pinctrl_desc berlin2cd_sysmgr_pinctrl_data = {
0157 .groups = berlin2cd_sysmgr_pinctrl_groups,
0158 .ngroups = ARRAY_SIZE(berlin2cd_sysmgr_pinctrl_groups),
0159 };
0160
0161 static const struct of_device_id berlin2cd_pinctrl_match[] = {
0162 {
0163 .compatible = "marvell,berlin2cd-soc-pinctrl",
0164 .data = &berlin2cd_soc_pinctrl_data
0165 },
0166 {
0167 .compatible = "marvell,berlin2cd-system-pinctrl",
0168 .data = &berlin2cd_sysmgr_pinctrl_data
0169 },
0170 {}
0171 };
0172
0173 static int berlin2cd_pinctrl_probe(struct platform_device *pdev)
0174 {
0175 const struct of_device_id *match =
0176 of_match_device(berlin2cd_pinctrl_match, &pdev->dev);
0177
0178 return berlin_pinctrl_probe(pdev, match->data);
0179 }
0180
0181 static struct platform_driver berlin2cd_pinctrl_driver = {
0182 .probe = berlin2cd_pinctrl_probe,
0183 .driver = {
0184 .name = "berlin-bg2cd-pinctrl",
0185 .of_match_table = berlin2cd_pinctrl_match,
0186 },
0187 };
0188 builtin_platform_driver(berlin2cd_pinctrl_driver);