linux/drivers/pinctrl/pxa/pinctrl-pxa25x.c
<<
>>
Prefs
   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
  19static 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
 217static 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
 257static const struct of_device_id pxa25x_pinctrl_match[] = {
 258        { .compatible = "marvell,pxa25x-pinctrl", },
 259        {}
 260};
 261MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
 262
 263static 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};
 270module_platform_driver(pxa25x_pinctrl_driver);
 271
 272MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
 273MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
 274MODULE_LICENSE("GPL v2");
 275