1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Marvell PXA25x family pin control 4 * 5 * Copyright (C) 2016 Robert Jarzmik 6 */ 7 #include <linux/module.h> 8 #include <linux/platform_device.h> 9 #include <linux/of.h> 10 #include <linux/of_device.h> 11 #include <linux/pinctrl/pinctrl.h> 12 13 #include "pinctrl-pxa2xx.h" 14 15 static const struct pxa_desc_pin pxa25x_pins[] = { 16 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)), 17 PXA_GPIO_PIN(PXA_PINCTRL_PIN(1), 18 PXA_FUNCTION(0, 1, "GP_RST")), 19 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)), 20 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)), 21 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)), 22 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)), 23 PXA_GPIO_PIN(PXA_PINCTRL_PIN(6), 24 PXA_FUNCTION(1, 1, "MMCCLK")), 25 PXA_GPIO_PIN(PXA_PINCTRL_PIN(7), 26 PXA_FUNCTION(1, 1, "48_MHz")), 27 PXA_GPIO_PIN(PXA_PINCTRL_PIN(8), 28 PXA_FUNCTION(1, 1, "MMCCS0")), 29 PXA_GPIO_PIN(PXA_PINCTRL_PIN(9), 30 PXA_FUNCTION(1, 1, "MMCCS1")), 31 PXA_GPIO_PIN(PXA_PINCTRL_PIN(10), 32 PXA_FUNCTION(1, 1, "RTCCLK")), 33 PXA_GPIO_PIN(PXA_PINCTRL_PIN(11), 34 PXA_FUNCTION(1, 1, "3_6_MHz")), 35 PXA_GPIO_PIN(PXA_PINCTRL_PIN(12), 36 PXA_FUNCTION(1, 1, "32_kHz")), 37 PXA_GPIO_PIN(PXA_PINCTRL_PIN(13), 38 PXA_FUNCTION(1, 2, "MBGNT")), 39 PXA_GPIO_PIN(PXA_PINCTRL_PIN(14), 40 PXA_FUNCTION(0, 1, "MBREQ")), 41 PXA_GPIO_PIN(PXA_PINCTRL_PIN(15), 42 PXA_FUNCTION(1, 2, "nCS_1")), 43 PXA_GPIO_PIN(PXA_PINCTRL_PIN(16), 44 PXA_FUNCTION(1, 2, "PWM0")), 45 PXA_GPIO_PIN(PXA_PINCTRL_PIN(17), 46 PXA_FUNCTION(1, 2, "PWM1")), 47 PXA_GPIO_PIN(PXA_PINCTRL_PIN(18), 48 PXA_FUNCTION(0, 1, "RDY")), 49 PXA_GPIO_PIN(PXA_PINCTRL_PIN(19), 50 PXA_FUNCTION(0, 1, "DREQ[1]")), 51 PXA_GPIO_PIN(PXA_PINCTRL_PIN(20), 52 PXA_FUNCTION(0, 1, "DREQ[0]")), 53 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)), 54 PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)), 55 PXA_GPIO_PIN(PXA_PINCTRL_PIN(23), 56 PXA_FUNCTION(1, 2, "SCLK")), 57 PXA_GPIO_PIN(PXA_PINCTRL_PIN(24), 58 PXA_FUNCTION(1, 2, "SFRM")), 59 PXA_GPIO_PIN(PXA_PINCTRL_PIN(25), 60 PXA_FUNCTION(1, 2, "TXD")), 61 PXA_GPIO_PIN(PXA_PINCTRL_PIN(26), 62 PXA_FUNCTION(0, 1, "RXD")), 63 PXA_GPIO_PIN(PXA_PINCTRL_PIN(27), 64 PXA_FUNCTION(0, 1, "EXTCLK")), 65 PXA_GPIO_PIN(PXA_PINCTRL_PIN(28), 66 PXA_FUNCTION(0, 1, "BITCLK"), 67 PXA_FUNCTION(0, 2, "BITCLK"), 68 PXA_FUNCTION(1, 1, "BITCLK")), 69 PXA_GPIO_PIN(PXA_PINCTRL_PIN(29), 70 PXA_FUNCTION(0, 1, "SDATA_IN0"), 71 PXA_FUNCTION(0, 2, "SDATA_IN")), 72 PXA_GPIO_PIN(PXA_PINCTRL_PIN(30), 73 PXA_FUNCTION(1, 1, "SDATA_OUT"), 74 PXA_FUNCTION(1, 2, "SDATA_OUT")), 75 PXA_GPIO_PIN(PXA_PINCTRL_PIN(31), 76 PXA_FUNCTION(1, 1, "SYNC"), 77 PXA_FUNCTION(1, 2, "SYNC")), 78 PXA_GPIO_PIN(PXA_PINCTRL_PIN(32), 79 PXA_FUNCTION(0, 1, "SDATA_IN1"), 80 PXA_FUNCTION(1, 1, "SYSCLK")), 81 PXA_GPIO_PIN(PXA_PINCTRL_PIN(33), 82 PXA_FUNCTION(1, 2, "nCS[5]")), 83 PXA_GPIO_PIN(PXA_PINCTRL_PIN(34), 84 PXA_FUNCTION(0, 1, "FFRXD"), 85 PXA_FUNCTION(1, 2, "MMCCS0")), 86 PXA_GPIO_PIN(PXA_PINCTRL_PIN(35), 87 PXA_FUNCTION(0, 1, "CTS")), 88 PXA_GPIO_PIN(PXA_PINCTRL_PIN(36), 89 PXA_FUNCTION(0, 1, "DCD")), 90 PXA_GPIO_PIN(PXA_PINCTRL_PIN(37), 91 PXA_FUNCTION(0, 1, "DSR")), 92 PXA_GPIO_PIN(PXA_PINCTRL_PIN(38), 93 PXA_FUNCTION(0, 1, "RI")), 94 PXA_GPIO_PIN(PXA_PINCTRL_PIN(39), 95 PXA_FUNCTION(1, 1, "MMCC1"), 96 PXA_FUNCTION(1, 2, "FFTXD")), 97 PXA_GPIO_PIN(PXA_PINCTRL_PIN(40), 98 PXA_FUNCTION(1, 2, "DTR")), 99 PXA_GPIO_PIN(PXA_PINCTRL_PIN(41), 100 PXA_FUNCTION(1, 2, "RTS")), 101 PXA_GPIO_PIN(PXA_PINCTRL_PIN(42), 102 PXA_FUNCTION(0, 1, "BTRXD"), 103 PXA_FUNCTION(0, 3, "HWRXD")), 104 PXA_GPIO_PIN(PXA_PINCTRL_PIN(43), 105 PXA_FUNCTION(1, 2, "BTTXD"), 106 PXA_FUNCTION(1, 3, "HWTXD")), 107 PXA_GPIO_PIN(PXA_PINCTRL_PIN(44), 108 PXA_FUNCTION(0, 1, "BTCTS"), 109 PXA_FUNCTION(0, 3, "HWCTS")), 110 PXA_GPIO_PIN(PXA_PINCTRL_PIN(45), 111 PXA_FUNCTION(1, 2, "BTRTS"), 112 PXA_FUNCTION(1, 3, "HWRTS")), 113 PXA_GPIO_PIN(PXA_PINCTRL_PIN(46), 114 PXA_FUNCTION(0, 1, "ICP_RXD"), 115 PXA_FUNCTION(0, 2, "RXD")), 116 PXA_GPIO_PIN(PXA_PINCTRL_PIN(47), 117 PXA_FUNCTION(1, 1, "TXD"), 118 PXA_FUNCTION(1, 2, "ICP_TXD")), 119 PXA_GPIO_PIN(PXA_PINCTRL_PIN(48), 120 PXA_FUNCTION(1, 1, "HWTXD"), 121 PXA_FUNCTION(1, 2, "nPOE")), 122 PXA_GPIO_PIN(PXA_PINCTRL_PIN(49), 123 PXA_FUNCTION(0, 1, "HWRXD"), 124 PXA_FUNCTION(1, 2, "nPWE")), 125 PXA_GPIO_PIN(PXA_PINCTRL_PIN(50), 126 PXA_FUNCTION(0, 1, "HWCTS"), 127 PXA_FUNCTION(1, 2, "nPIOR")), 128 PXA_GPIO_PIN(PXA_PINCTRL_PIN(51), 129 PXA_FUNCTION(1, 1, "HWRTS"), 130 PXA_FUNCTION(1, 2, "nPIOW")), 131 PXA_GPIO_PIN(PXA_PINCTRL_PIN(52), 132 PXA_FUNCTION(1, 2, "nPCE[1]")), 133 PXA_GPIO_PIN(PXA_PINCTRL_PIN(53), 134 PXA_FUNCTION(1, 1, "MMCCLK"), 135 PXA_FUNCTION(1, 2, "nPCE[2]")), 136 PXA_GPIO_PIN(PXA_PINCTRL_PIN(54), 137 PXA_FUNCTION(1, 1, "MMCCLK"), 138 PXA_FUNCTION(1, 2, "nPSKTSEL")), 139 PXA_GPIO_PIN(PXA_PINCTRL_PIN(55), 140 PXA_FUNCTION(1, 2, "nPREG")), 141 PXA_GPIO_PIN(PXA_PINCTRL_PIN(56), 142 PXA_FUNCTION(0, 1, "nPWAIT")), 143 PXA_GPIO_PIN(PXA_PINCTRL_PIN(57), 144 PXA_FUNCTION(0, 1, "nIOIS16")), 145 PXA_GPIO_PIN(PXA_PINCTRL_PIN(58), 146 PXA_FUNCTION(1, 2, "LDD<0>")), 147 PXA_GPIO_PIN(PXA_PINCTRL_PIN(59), 148 PXA_FUNCTION(1, 2, "LDD<1>")), 149 PXA_GPIO_PIN(PXA_PINCTRL_PIN(60), 150 PXA_FUNCTION(1, 2, "LDD<2>")), 151 PXA_GPIO_PIN(PXA_PINCTRL_PIN(61), 152 PXA_FUNCTION(1, 2, "LDD<3>")), 153 PXA_GPIO_PIN(PXA_PINCTRL_PIN(62), 154 PXA_FUNCTION(1, 2, "LDD<4>")), 155 PXA_GPIO_PIN(PXA_PINCTRL_PIN(63), 156 PXA_FUNCTION(1, 2, "LDD<5>")), 157 PXA_GPIO_PIN(PXA_PINCTRL_PIN(64), 158 PXA_FUNCTION(1, 2, "LDD<6>")), 159 PXA_GPIO_PIN(PXA_PINCTRL_PIN(65), 160 PXA_FUNCTION(1, 2, "LDD<7>")), 161 PXA_GPIO_PIN(PXA_PINCTRL_PIN(66), 162 PXA_FUNCTION(0, 1, "MBREQ"), 163 PXA_FUNCTION(1, 2, "LDD<8>")), 164 PXA_GPIO_PIN(PXA_PINCTRL_PIN(67), 165 PXA_FUNCTION(1, 1, "MMCCS0"), 166 PXA_FUNCTION(1, 2, "LDD<9>")), 167 PXA_GPIO_PIN(PXA_PINCTRL_PIN(68), 168 PXA_FUNCTION(1, 1, "MMCCS1"), 169 PXA_FUNCTION(1, 2, "LDD<10>")), 170 PXA_GPIO_PIN(PXA_PINCTRL_PIN(69), 171 PXA_FUNCTION(1, 1, "MMCCLK"), 172 PXA_FUNCTION(1, 2, "LDD<11>")), 173 PXA_GPIO_PIN(PXA_PINCTRL_PIN(70), 174 PXA_FUNCTION(1, 1, "RTCCLK"), 175 PXA_FUNCTION(1, 2, "LDD<12>")), 176 PXA_GPIO_PIN(PXA_PINCTRL_PIN(71), 177 PXA_FUNCTION(1, 1, "3_6_MHz"), 178 PXA_FUNCTION(1, 2, "LDD<13>")), 179 PXA_GPIO_PIN(PXA_PINCTRL_PIN(72), 180 PXA_FUNCTION(1, 1, "32_kHz"), 181 PXA_FUNCTION(1, 2, "LDD<14>")), 182 PXA_GPIO_PIN(PXA_PINCTRL_PIN(73), 183 PXA_FUNCTION(1, 1, "MBGNT"), 184 PXA_FUNCTION(1, 2, "LDD<15>")), 185 PXA_GPIO_PIN(PXA_PINCTRL_PIN(74), 186 PXA_FUNCTION(1, 2, "LCD_FCLK")), 187 PXA_GPIO_PIN(PXA_PINCTRL_PIN(75), 188 PXA_FUNCTION(1, 2, "LCD_LCLK")), 189 PXA_GPIO_PIN(PXA_PINCTRL_PIN(76), 190 PXA_FUNCTION(1, 2, "LCD_PCLK")), 191 PXA_GPIO_PIN(PXA_PINCTRL_PIN(77), 192 PXA_FUNCTION(1, 2, "LCD_ACBIAS")), 193 PXA_GPIO_PIN(PXA_PINCTRL_PIN(78), 194 PXA_FUNCTION(1, 2, "nCS<2>")), 195 PXA_GPIO_PIN(PXA_PINCTRL_PIN(79), 196 PXA_FUNCTION(1, 2, "nCS<3>")), 197 PXA_GPIO_PIN(PXA_PINCTRL_PIN(80), 198 PXA_FUNCTION(1, 2, "nCS<4>")), 199 PXA_GPIO_PIN(PXA_PINCTRL_PIN(81), 200 PXA_FUNCTION(0, 1, "NSSPSCLK"), 201 PXA_FUNCTION(1, 1, "NSSPSCLK")), 202 PXA_GPIO_PIN(PXA_PINCTRL_PIN(82), 203 PXA_FUNCTION(0, 1, "NSSPSFRM"), 204 PXA_FUNCTION(1, 1, "NSSPSFRM")), 205 PXA_GPIO_PIN(PXA_PINCTRL_PIN(83), 206 PXA_FUNCTION(0, 2, "NSSPRXD"), 207 PXA_FUNCTION(1, 1, "NSSPTXD")), 208 PXA_GPIO_PIN(PXA_PINCTRL_PIN(84), 209 PXA_FUNCTION(0, 2, "NSSPRXD"), 210 PXA_FUNCTION(1, 1, "NSSPTXD")), 211 }; 212 213 static int pxa25x_pinctrl_probe(struct platform_device *pdev) 214 { 215 int ret, i; 216 void __iomem *base_af[8]; 217 void __iomem *base_dir[4]; 218 void __iomem *base_sleep[4]; 219 struct resource *res; 220 221 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 222 base_af[0] = devm_ioremap_resource(&pdev->dev, res); 223 if (IS_ERR(base_af[0])) 224 return PTR_ERR(base_af[0]); 225 226 res = platform_get_resource(pdev, IORESOURCE_MEM, 1); 227 base_dir[0] = devm_ioremap_resource(&pdev->dev, res); 228 if (IS_ERR(base_dir[0])) 229 return PTR_ERR(base_dir[0]); 230 231 res = platform_get_resource(pdev, IORESOURCE_MEM, 2); 232 base_dir[3] = devm_ioremap_resource(&pdev->dev, res); 233 if (IS_ERR(base_dir[3])) 234 return PTR_ERR(base_dir[3]); 235 236 res = platform_get_resource(pdev, IORESOURCE_MEM, 3); 237 base_sleep[0] = devm_ioremap_resource(&pdev->dev, res); 238 if (IS_ERR(base_sleep[0])) 239 return PTR_ERR(base_sleep[0]); 240 241 for (i = 0; i < ARRAY_SIZE(base_af); i++) 242 base_af[i] = base_af[0] + sizeof(base_af[0]) * i; 243 for (i = 0; i < 3; i++) 244 base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i; 245 for (i = 0; i < ARRAY_SIZE(base_sleep); i++) 246 base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i; 247 248 ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins), 249 base_af, base_dir, base_sleep); 250 return ret; 251 } 252 253 static const struct of_device_id pxa25x_pinctrl_match[] = { 254 { .compatible = "marvell,pxa25x-pinctrl", }, 255 {} 256 }; 257 MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match); 258 259 static struct platform_driver pxa25x_pinctrl_driver = { 260 .probe = pxa25x_pinctrl_probe, 261 .driver = { 262 .name = "pxa25x-pinctrl", 263 .of_match_table = pxa25x_pinctrl_match, 264 }, 265 }; 266 module_platform_driver(pxa25x_pinctrl_driver); 267 268 MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>"); 269 MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver"); 270 MODULE_LICENSE("GPL v2"); 271