265 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Marvell PXA25x family pin control4 *5 * Copyright (C) 2016 Robert Jarzmik6 */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 14static 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 212static 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 247static const struct of_device_id pxa25x_pinctrl_match[] = {248 { .compatible = "marvell,pxa25x-pinctrl", },249 {}250};251MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);252 253static 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};260module_platform_driver(pxa25x_pinctrl_driver);261 262MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");263MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");264MODULE_LICENSE("GPL v2");265