Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Marvell PXA25x family pin control
0004  *
0005  * Copyright (C) 2016 Robert Jarzmik
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");