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