linux/drivers/pinctrl/pxa/pinctrl-pxa25x.c
<<
>>
Prefs
   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
  15static 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
 213static 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
 253static const struct of_device_id pxa25x_pinctrl_match[] = {
 254        { .compatible = "marvell,pxa25x-pinctrl", },
 255        {}
 256};
 257MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
 258
 259static 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};
 266module_platform_driver(pxa25x_pinctrl_driver);
 267
 268MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
 269MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
 270MODULE_LICENSE("GPL v2");
 271