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