0001
0002
0003
0004
0005
0006
0007 #include <linux/module.h>
0008 #include <linux/platform_device.h>
0009 #include <linux/of.h>
0010 #include <linux/of_device.h>
0011 #include <linux/pinctrl/pinctrl.h>
0012
0013 #include "pinctrl-pxa2xx.h"
0014
0015 static const struct pxa_desc_pin pxa25x_pins[] = {
0016 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)),
0017 PXA_GPIO_PIN(PXA_PINCTRL_PIN(1),
0018 PXA_FUNCTION(0, 1, "GP_RST")),
0019 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)),
0020 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)),
0021 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)),
0022 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)),
0023 PXA_GPIO_PIN(PXA_PINCTRL_PIN(6),
0024 PXA_FUNCTION(1, 1, "MMCCLK")),
0025 PXA_GPIO_PIN(PXA_PINCTRL_PIN(7),
0026 PXA_FUNCTION(1, 1, "48_MHz")),
0027 PXA_GPIO_PIN(PXA_PINCTRL_PIN(8),
0028 PXA_FUNCTION(1, 1, "MMCCS0")),
0029 PXA_GPIO_PIN(PXA_PINCTRL_PIN(9),
0030 PXA_FUNCTION(1, 1, "MMCCS1")),
0031 PXA_GPIO_PIN(PXA_PINCTRL_PIN(10),
0032 PXA_FUNCTION(1, 1, "RTCCLK")),
0033 PXA_GPIO_PIN(PXA_PINCTRL_PIN(11),
0034 PXA_FUNCTION(1, 1, "3_6_MHz")),
0035 PXA_GPIO_PIN(PXA_PINCTRL_PIN(12),
0036 PXA_FUNCTION(1, 1, "32_kHz")),
0037 PXA_GPIO_PIN(PXA_PINCTRL_PIN(13),
0038 PXA_FUNCTION(1, 2, "MBGNT")),
0039 PXA_GPIO_PIN(PXA_PINCTRL_PIN(14),
0040 PXA_FUNCTION(0, 1, "MBREQ")),
0041 PXA_GPIO_PIN(PXA_PINCTRL_PIN(15),
0042 PXA_FUNCTION(1, 2, "nCS_1")),
0043 PXA_GPIO_PIN(PXA_PINCTRL_PIN(16),
0044 PXA_FUNCTION(1, 2, "PWM0")),
0045 PXA_GPIO_PIN(PXA_PINCTRL_PIN(17),
0046 PXA_FUNCTION(1, 2, "PWM1")),
0047 PXA_GPIO_PIN(PXA_PINCTRL_PIN(18),
0048 PXA_FUNCTION(0, 1, "RDY")),
0049 PXA_GPIO_PIN(PXA_PINCTRL_PIN(19),
0050 PXA_FUNCTION(0, 1, "DREQ[1]")),
0051 PXA_GPIO_PIN(PXA_PINCTRL_PIN(20),
0052 PXA_FUNCTION(0, 1, "DREQ[0]")),
0053 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)),
0054 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)),
0055 PXA_GPIO_PIN(PXA_PINCTRL_PIN(23),
0056 PXA_FUNCTION(1, 2, "SCLK")),
0057 PXA_GPIO_PIN(PXA_PINCTRL_PIN(24),
0058 PXA_FUNCTION(1, 2, "SFRM")),
0059 PXA_GPIO_PIN(PXA_PINCTRL_PIN(25),
0060 PXA_FUNCTION(1, 2, "TXD")),
0061 PXA_GPIO_PIN(PXA_PINCTRL_PIN(26),
0062 PXA_FUNCTION(0, 1, "RXD")),
0063 PXA_GPIO_PIN(PXA_PINCTRL_PIN(27),
0064 PXA_FUNCTION(0, 1, "EXTCLK")),
0065 PXA_GPIO_PIN(PXA_PINCTRL_PIN(28),
0066 PXA_FUNCTION(0, 1, "BITCLK"),
0067 PXA_FUNCTION(0, 2, "BITCLK"),
0068 PXA_FUNCTION(1, 1, "BITCLK")),
0069 PXA_GPIO_PIN(PXA_PINCTRL_PIN(29),
0070 PXA_FUNCTION(0, 1, "SDATA_IN0"),
0071 PXA_FUNCTION(0, 2, "SDATA_IN")),
0072 PXA_GPIO_PIN(PXA_PINCTRL_PIN(30),
0073 PXA_FUNCTION(1, 1, "SDATA_OUT"),
0074 PXA_FUNCTION(1, 2, "SDATA_OUT")),
0075 PXA_GPIO_PIN(PXA_PINCTRL_PIN(31),
0076 PXA_FUNCTION(1, 1, "SYNC"),
0077 PXA_FUNCTION(1, 2, "SYNC")),
0078 PXA_GPIO_PIN(PXA_PINCTRL_PIN(32),
0079 PXA_FUNCTION(0, 1, "SDATA_IN1"),
0080 PXA_FUNCTION(1, 1, "SYSCLK")),
0081 PXA_GPIO_PIN(PXA_PINCTRL_PIN(33),
0082 PXA_FUNCTION(1, 2, "nCS[5]")),
0083 PXA_GPIO_PIN(PXA_PINCTRL_PIN(34),
0084 PXA_FUNCTION(0, 1, "FFRXD"),
0085 PXA_FUNCTION(1, 2, "MMCCS0")),
0086 PXA_GPIO_PIN(PXA_PINCTRL_PIN(35),
0087 PXA_FUNCTION(0, 1, "CTS")),
0088 PXA_GPIO_PIN(PXA_PINCTRL_PIN(36),
0089 PXA_FUNCTION(0, 1, "DCD")),
0090 PXA_GPIO_PIN(PXA_PINCTRL_PIN(37),
0091 PXA_FUNCTION(0, 1, "DSR")),
0092 PXA_GPIO_PIN(PXA_PINCTRL_PIN(38),
0093 PXA_FUNCTION(0, 1, "RI")),
0094 PXA_GPIO_PIN(PXA_PINCTRL_PIN(39),
0095 PXA_FUNCTION(1, 1, "MMCC1"),
0096 PXA_FUNCTION(1, 2, "FFTXD")),
0097 PXA_GPIO_PIN(PXA_PINCTRL_PIN(40),
0098 PXA_FUNCTION(1, 2, "DTR")),
0099 PXA_GPIO_PIN(PXA_PINCTRL_PIN(41),
0100 PXA_FUNCTION(1, 2, "RTS")),
0101 PXA_GPIO_PIN(PXA_PINCTRL_PIN(42),
0102 PXA_FUNCTION(0, 1, "BTRXD"),
0103 PXA_FUNCTION(0, 3, "HWRXD")),
0104 PXA_GPIO_PIN(PXA_PINCTRL_PIN(43),
0105 PXA_FUNCTION(1, 2, "BTTXD"),
0106 PXA_FUNCTION(1, 3, "HWTXD")),
0107 PXA_GPIO_PIN(PXA_PINCTRL_PIN(44),
0108 PXA_FUNCTION(0, 1, "BTCTS"),
0109 PXA_FUNCTION(0, 3, "HWCTS")),
0110 PXA_GPIO_PIN(PXA_PINCTRL_PIN(45),
0111 PXA_FUNCTION(1, 2, "BTRTS"),
0112 PXA_FUNCTION(1, 3, "HWRTS")),
0113 PXA_GPIO_PIN(PXA_PINCTRL_PIN(46),
0114 PXA_FUNCTION(0, 1, "ICP_RXD"),
0115 PXA_FUNCTION(0, 2, "RXD")),
0116 PXA_GPIO_PIN(PXA_PINCTRL_PIN(47),
0117 PXA_FUNCTION(1, 1, "TXD"),
0118 PXA_FUNCTION(1, 2, "ICP_TXD")),
0119 PXA_GPIO_PIN(PXA_PINCTRL_PIN(48),
0120 PXA_FUNCTION(1, 1, "HWTXD"),
0121 PXA_FUNCTION(1, 2, "nPOE")),
0122 PXA_GPIO_PIN(PXA_PINCTRL_PIN(49),
0123 PXA_FUNCTION(0, 1, "HWRXD"),
0124 PXA_FUNCTION(1, 2, "nPWE")),
0125 PXA_GPIO_PIN(PXA_PINCTRL_PIN(50),
0126 PXA_FUNCTION(0, 1, "HWCTS"),
0127 PXA_FUNCTION(1, 2, "nPIOR")),
0128 PXA_GPIO_PIN(PXA_PINCTRL_PIN(51),
0129 PXA_FUNCTION(1, 1, "HWRTS"),
0130 PXA_FUNCTION(1, 2, "nPIOW")),
0131 PXA_GPIO_PIN(PXA_PINCTRL_PIN(52),
0132 PXA_FUNCTION(1, 2, "nPCE[1]")),
0133 PXA_GPIO_PIN(PXA_PINCTRL_PIN(53),
0134 PXA_FUNCTION(1, 1, "MMCCLK"),
0135 PXA_FUNCTION(1, 2, "nPCE[2]")),
0136 PXA_GPIO_PIN(PXA_PINCTRL_PIN(54),
0137 PXA_FUNCTION(1, 1, "MMCCLK"),
0138 PXA_FUNCTION(1, 2, "nPSKTSEL")),
0139 PXA_GPIO_PIN(PXA_PINCTRL_PIN(55),
0140 PXA_FUNCTION(1, 2, "nPREG")),
0141 PXA_GPIO_PIN(PXA_PINCTRL_PIN(56),
0142 PXA_FUNCTION(0, 1, "nPWAIT")),
0143 PXA_GPIO_PIN(PXA_PINCTRL_PIN(57),
0144 PXA_FUNCTION(0, 1, "nIOIS16")),
0145 PXA_GPIO_PIN(PXA_PINCTRL_PIN(58),
0146 PXA_FUNCTION(1, 2, "LDD<0>")),
0147 PXA_GPIO_PIN(PXA_PINCTRL_PIN(59),
0148 PXA_FUNCTION(1, 2, "LDD<1>")),
0149 PXA_GPIO_PIN(PXA_PINCTRL_PIN(60),
0150 PXA_FUNCTION(1, 2, "LDD<2>")),
0151 PXA_GPIO_PIN(PXA_PINCTRL_PIN(61),
0152 PXA_FUNCTION(1, 2, "LDD<3>")),
0153 PXA_GPIO_PIN(PXA_PINCTRL_PIN(62),
0154 PXA_FUNCTION(1, 2, "LDD<4>")),
0155 PXA_GPIO_PIN(PXA_PINCTRL_PIN(63),
0156 PXA_FUNCTION(1, 2, "LDD<5>")),
0157 PXA_GPIO_PIN(PXA_PINCTRL_PIN(64),
0158 PXA_FUNCTION(1, 2, "LDD<6>")),
0159 PXA_GPIO_PIN(PXA_PINCTRL_PIN(65),
0160 PXA_FUNCTION(1, 2, "LDD<7>")),
0161 PXA_GPIO_PIN(PXA_PINCTRL_PIN(66),
0162 PXA_FUNCTION(0, 1, "MBREQ"),
0163 PXA_FUNCTION(1, 2, "LDD<8>")),
0164 PXA_GPIO_PIN(PXA_PINCTRL_PIN(67),
0165 PXA_FUNCTION(1, 1, "MMCCS0"),
0166 PXA_FUNCTION(1, 2, "LDD<9>")),
0167 PXA_GPIO_PIN(PXA_PINCTRL_PIN(68),
0168 PXA_FUNCTION(1, 1, "MMCCS1"),
0169 PXA_FUNCTION(1, 2, "LDD<10>")),
0170 PXA_GPIO_PIN(PXA_PINCTRL_PIN(69),
0171 PXA_FUNCTION(1, 1, "MMCCLK"),
0172 PXA_FUNCTION(1, 2, "LDD<11>")),
0173 PXA_GPIO_PIN(PXA_PINCTRL_PIN(70),
0174 PXA_FUNCTION(1, 1, "RTCCLK"),
0175 PXA_FUNCTION(1, 2, "LDD<12>")),
0176 PXA_GPIO_PIN(PXA_PINCTRL_PIN(71),
0177 PXA_FUNCTION(1, 1, "3_6_MHz"),
0178 PXA_FUNCTION(1, 2, "LDD<13>")),
0179 PXA_GPIO_PIN(PXA_PINCTRL_PIN(72),
0180 PXA_FUNCTION(1, 1, "32_kHz"),
0181 PXA_FUNCTION(1, 2, "LDD<14>")),
0182 PXA_GPIO_PIN(PXA_PINCTRL_PIN(73),
0183 PXA_FUNCTION(1, 1, "MBGNT"),
0184 PXA_FUNCTION(1, 2, "LDD<15>")),
0185 PXA_GPIO_PIN(PXA_PINCTRL_PIN(74),
0186 PXA_FUNCTION(1, 2, "LCD_FCLK")),
0187 PXA_GPIO_PIN(PXA_PINCTRL_PIN(75),
0188 PXA_FUNCTION(1, 2, "LCD_LCLK")),
0189 PXA_GPIO_PIN(PXA_PINCTRL_PIN(76),
0190 PXA_FUNCTION(1, 2, "LCD_PCLK")),
0191 PXA_GPIO_PIN(PXA_PINCTRL_PIN(77),
0192 PXA_FUNCTION(1, 2, "LCD_ACBIAS")),
0193 PXA_GPIO_PIN(PXA_PINCTRL_PIN(78),
0194 PXA_FUNCTION(1, 2, "nCS<2>")),
0195 PXA_GPIO_PIN(PXA_PINCTRL_PIN(79),
0196 PXA_FUNCTION(1, 2, "nCS<3>")),
0197 PXA_GPIO_PIN(PXA_PINCTRL_PIN(80),
0198 PXA_FUNCTION(1, 2, "nCS<4>")),
0199 PXA_GPIO_PIN(PXA_PINCTRL_PIN(81),
0200 PXA_FUNCTION(0, 1, "NSSPSCLK"),
0201 PXA_FUNCTION(1, 1, "NSSPSCLK")),
0202 PXA_GPIO_PIN(PXA_PINCTRL_PIN(82),
0203 PXA_FUNCTION(0, 1, "NSSPSFRM"),
0204 PXA_FUNCTION(1, 1, "NSSPSFRM")),
0205 PXA_GPIO_PIN(PXA_PINCTRL_PIN(83),
0206 PXA_FUNCTION(0, 2, "NSSPRXD"),
0207 PXA_FUNCTION(1, 1, "NSSPTXD")),
0208 PXA_GPIO_PIN(PXA_PINCTRL_PIN(84),
0209 PXA_FUNCTION(0, 2, "NSSPRXD"),
0210 PXA_FUNCTION(1, 1, "NSSPTXD")),
0211 };
0212
0213 static int pxa25x_pinctrl_probe(struct platform_device *pdev)
0214 {
0215 int ret, i;
0216 void __iomem *base_af[8];
0217 void __iomem *base_dir[4];
0218 void __iomem *base_sleep[4];
0219
0220 base_af[0] = devm_platform_ioremap_resource(pdev, 0);
0221 if (IS_ERR(base_af[0]))
0222 return PTR_ERR(base_af[0]);
0223
0224 base_dir[0] = devm_platform_ioremap_resource(pdev, 1);
0225 if (IS_ERR(base_dir[0]))
0226 return PTR_ERR(base_dir[0]);
0227
0228 base_dir[3] = devm_platform_ioremap_resource(pdev, 2);
0229 if (IS_ERR(base_dir[3]))
0230 return PTR_ERR(base_dir[3]);
0231
0232 base_sleep[0] = devm_platform_ioremap_resource(pdev, 3);
0233 if (IS_ERR(base_sleep[0]))
0234 return PTR_ERR(base_sleep[0]);
0235
0236 for (i = 0; i < ARRAY_SIZE(base_af); i++)
0237 base_af[i] = base_af[0] + sizeof(base_af[0]) * i;
0238 for (i = 0; i < 3; i++)
0239 base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i;
0240 for (i = 0; i < ARRAY_SIZE(base_sleep); i++)
0241 base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i;
0242
0243 ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins),
0244 base_af, base_dir, base_sleep);
0245 return ret;
0246 }
0247
0248 static const struct of_device_id pxa25x_pinctrl_match[] = {
0249 { .compatible = "marvell,pxa25x-pinctrl", },
0250 {}
0251 };
0252 MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
0253
0254 static struct platform_driver pxa25x_pinctrl_driver = {
0255 .probe = pxa25x_pinctrl_probe,
0256 .driver = {
0257 .name = "pxa25x-pinctrl",
0258 .of_match_table = pxa25x_pinctrl_match,
0259 },
0260 };
0261 module_platform_driver(pxa25x_pinctrl_driver);
0262
0263 MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
0264 MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
0265 MODULE_LICENSE("GPL v2");