Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * Marvell Armada 39x pinctrl driver based on mvebu pinctrl core
0004  *
0005  * Copyright (C) 2015 Marvell
0006  *
0007  * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
0008  */
0009 
0010 #include <linux/err.h>
0011 #include <linux/init.h>
0012 #include <linux/io.h>
0013 #include <linux/platform_device.h>
0014 #include <linux/of.h>
0015 #include <linux/of_device.h>
0016 #include <linux/pinctrl/pinctrl.h>
0017 
0018 #include "pinctrl-mvebu.h"
0019 
0020 enum {
0021     V_88F6920 = BIT(0),
0022     V_88F6925 = BIT(1),
0023     V_88F6928 = BIT(2),
0024     V_88F6920_PLUS = (V_88F6920 | V_88F6925 | V_88F6928),
0025     V_88F6925_PLUS = (V_88F6925 | V_88F6928),
0026 };
0027 
0028 static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
0029     MPP_MODE(0,
0030          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0031          MPP_VAR_FUNCTION(1, "ua0",     "rxd",      V_88F6920_PLUS)),
0032     MPP_MODE(1,
0033          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0034          MPP_VAR_FUNCTION(1, "ua0",     "txd",      V_88F6920_PLUS)),
0035     MPP_MODE(2,
0036          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0037          MPP_VAR_FUNCTION(1, "i2c0",    "sck",      V_88F6920_PLUS)),
0038     MPP_MODE(3,
0039          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0040          MPP_VAR_FUNCTION(1, "i2c0",    "sda",      V_88F6920_PLUS)),
0041     MPP_MODE(4,
0042          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0043          MPP_VAR_FUNCTION(2, "ua1",     "txd",      V_88F6920_PLUS),
0044          MPP_VAR_FUNCTION(3, "ua0",     "rts",      V_88F6920_PLUS),
0045          MPP_VAR_FUNCTION(7, "smi",     "mdc",      V_88F6920_PLUS)),
0046     MPP_MODE(5,
0047          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0048          MPP_VAR_FUNCTION(2, "ua1",     "rxd",      V_88F6920_PLUS),
0049          MPP_VAR_FUNCTION(3, "ua0",     "cts",      V_88F6920_PLUS),
0050          MPP_VAR_FUNCTION(7, "smi",     "mdio",     V_88F6920_PLUS)),
0051     MPP_MODE(6,
0052          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0053          MPP_VAR_FUNCTION(5, "dev",     "cs3",      V_88F6920_PLUS),
0054          MPP_VAR_FUNCTION(7, "xsmi",    "mdio",     V_88F6920_PLUS)),
0055     MPP_MODE(7,
0056          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0057          MPP_VAR_FUNCTION(5, "dev",     "ad9",      V_88F6920_PLUS),
0058          MPP_VAR_FUNCTION(7, "xsmi",    "mdc",      V_88F6920_PLUS)),
0059     MPP_MODE(8,
0060          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0061          MPP_VAR_FUNCTION(5, "dev",     "ad10",     V_88F6920_PLUS),
0062          MPP_VAR_FUNCTION(7, "ptp",     "trig",     V_88F6920_PLUS)),
0063     MPP_MODE(9,
0064          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0065          MPP_VAR_FUNCTION(5, "dev",     "ad11",     V_88F6920_PLUS),
0066          MPP_VAR_FUNCTION(7, "ptp",     "clk",      V_88F6920_PLUS)),
0067     MPP_MODE(10,
0068          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0069          MPP_VAR_FUNCTION(5, "dev",     "ad12",     V_88F6920_PLUS),
0070          MPP_VAR_FUNCTION(7, "ptp",     "evreq",    V_88F6920_PLUS)),
0071     MPP_MODE(11,
0072          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0073          MPP_VAR_FUNCTION(5, "dev",     "ad13",     V_88F6920_PLUS),
0074          MPP_VAR_FUNCTION(7, "led",     "clk",      V_88F6920_PLUS)),
0075     MPP_MODE(12,
0076          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0077          MPP_VAR_FUNCTION(2, "pcie0",   "rstout",   V_88F6920_PLUS),
0078          MPP_VAR_FUNCTION(5, "dev",     "ad14",     V_88F6920_PLUS),
0079          MPP_VAR_FUNCTION(7, "led",     "stb",      V_88F6920_PLUS)),
0080     MPP_MODE(13,
0081          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0082          MPP_VAR_FUNCTION(5, "dev",     "ad15",     V_88F6920_PLUS),
0083          MPP_VAR_FUNCTION(6, "pcie2",   "clkreq",   V_88F6920_PLUS),
0084          MPP_VAR_FUNCTION(7, "led",     "data",     V_88F6920_PLUS)),
0085     MPP_MODE(14,
0086          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0087          MPP_VAR_FUNCTION(3, "dram",    "vttctrl",  V_88F6920_PLUS),
0088          MPP_VAR_FUNCTION(5, "dev",     "we1",      V_88F6920_PLUS),
0089          MPP_VAR_FUNCTION(7, "ua1",     "txd",      V_88F6920_PLUS)),
0090     MPP_MODE(15,
0091          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0092          MPP_VAR_FUNCTION(3, "pcie0",   "rstout",   V_88F6920_PLUS),
0093          MPP_VAR_FUNCTION(4, "spi0",    "mosi",     V_88F6920_PLUS),
0094          MPP_VAR_FUNCTION(7, "i2c1",    "sck",      V_88F6920_PLUS)),
0095     MPP_MODE(16,
0096          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0097          MPP_VAR_FUNCTION(3, "dram",    "deccerr",  V_88F6920_PLUS),
0098          MPP_VAR_FUNCTION(4, "spi0",    "miso",     V_88F6920_PLUS),
0099          MPP_VAR_FUNCTION(5, "pcie0",   "clkreq",   V_88F6920_PLUS),
0100          MPP_VAR_FUNCTION(7, "i2c1",    "sda",      V_88F6920_PLUS)),
0101     MPP_MODE(17,
0102          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0103          MPP_VAR_FUNCTION(3, "ua1",     "rxd",      V_88F6920_PLUS),
0104          MPP_VAR_FUNCTION(4, "spi0",    "sck",      V_88F6920_PLUS),
0105          MPP_VAR_FUNCTION(5, "sata1",   "prsnt",    V_88F6925_PLUS),
0106          MPP_VAR_FUNCTION(6, "sata0",   "prsnt",    V_88F6925_PLUS),
0107          MPP_VAR_FUNCTION(7, "smi",     "mdio",     V_88F6920_PLUS)),
0108     MPP_MODE(18,
0109          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0110          MPP_VAR_FUNCTION(3, "ua1",     "txd",      V_88F6920_PLUS),
0111          MPP_VAR_FUNCTION(4, "spi0",    "cs0",      V_88F6920_PLUS),
0112          MPP_VAR_FUNCTION(7, "i2c2",    "sck",      V_88F6920_PLUS)),
0113     MPP_MODE(19,
0114          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0115          MPP_VAR_FUNCTION(4, "sata1",   "prsnt",    V_88F6925_PLUS),
0116          MPP_VAR_FUNCTION(5, "ua0",     "cts",      V_88F6920_PLUS),
0117          MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS),
0118          MPP_VAR_FUNCTION(7, "i2c2",    "sda",      V_88F6920_PLUS)),
0119     MPP_MODE(20,
0120          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0121          MPP_VAR_FUNCTION(4, "sata0",   "prsnt",    V_88F6925_PLUS),
0122          MPP_VAR_FUNCTION(5, "ua0",     "rts",      V_88F6920_PLUS),
0123          MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS),
0124          MPP_VAR_FUNCTION(7, "smi",     "mdc",      V_88F6920_PLUS)),
0125     MPP_MODE(21,
0126          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0127          MPP_VAR_FUNCTION(1, "spi0",    "cs1",      V_88F6920_PLUS),
0128          MPP_VAR_FUNCTION(3, "sata0",   "prsnt",    V_88F6925_PLUS),
0129          MPP_VAR_FUNCTION(4, "sd0",     "cmd",      V_88F6920_PLUS),
0130          MPP_VAR_FUNCTION(5, "dev",     "bootcs",   V_88F6920_PLUS),
0131          MPP_VAR_FUNCTION(6, "sata1",   "prsnt",    V_88F6925_PLUS),
0132          MPP_VAR_FUNCTION(8, "ge",      "rxd0",     V_88F6920_PLUS)),
0133     MPP_MODE(22,
0134          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0135          MPP_VAR_FUNCTION(1, "spi0",    "mosi",     V_88F6920_PLUS),
0136          MPP_VAR_FUNCTION(5, "dev",     "ad0",      V_88F6920_PLUS)),
0137     MPP_MODE(23,
0138          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0139          MPP_VAR_FUNCTION(1, "spi0",    "sck",      V_88F6920_PLUS),
0140          MPP_VAR_FUNCTION(5, "dev",     "ad2",      V_88F6920_PLUS)),
0141     MPP_MODE(24,
0142          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0143          MPP_VAR_FUNCTION(1, "spi0",    "miso",     V_88F6920_PLUS),
0144          MPP_VAR_FUNCTION(2, "ua0",     "cts",      V_88F6920_PLUS),
0145          MPP_VAR_FUNCTION(3, "ua1",     "rxd",      V_88F6920_PLUS),
0146          MPP_VAR_FUNCTION(4, "sd0",     "d4",       V_88F6920_PLUS),
0147          MPP_VAR_FUNCTION(5, "dev",     "ready",    V_88F6920_PLUS)),
0148     MPP_MODE(25,
0149          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0150          MPP_VAR_FUNCTION(1, "spi0",    "cs0",      V_88F6920_PLUS),
0151          MPP_VAR_FUNCTION(2, "ua0",     "rts",      V_88F6920_PLUS),
0152          MPP_VAR_FUNCTION(3, "ua1",     "txd",      V_88F6920_PLUS),
0153          MPP_VAR_FUNCTION(4, "sd0",     "d5",       V_88F6920_PLUS),
0154          MPP_VAR_FUNCTION(5, "dev",     "cs0",      V_88F6920_PLUS)),
0155     MPP_MODE(26,
0156          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0157          MPP_VAR_FUNCTION(1, "spi0",    "cs2",      V_88F6920_PLUS),
0158          MPP_VAR_FUNCTION(3, "i2c1",    "sck",      V_88F6920_PLUS),
0159          MPP_VAR_FUNCTION(4, "sd0",     "d6",       V_88F6920_PLUS),
0160          MPP_VAR_FUNCTION(5, "dev",     "cs1",      V_88F6920_PLUS)),
0161     MPP_MODE(27,
0162          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0163          MPP_VAR_FUNCTION(1, "spi0",    "cs3",      V_88F6920_PLUS),
0164          MPP_VAR_FUNCTION(3, "i2c1",    "sda",      V_88F6920_PLUS),
0165          MPP_VAR_FUNCTION(4, "sd0",     "d7",       V_88F6920_PLUS),
0166          MPP_VAR_FUNCTION(5, "dev",     "cs2",      V_88F6920_PLUS),
0167          MPP_VAR_FUNCTION(8, "ge",      "txclkout", V_88F6920_PLUS)),
0168     MPP_MODE(28,
0169          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0170          MPP_VAR_FUNCTION(4, "sd0",     "clk",      V_88F6920_PLUS),
0171          MPP_VAR_FUNCTION(5, "dev",     "ad5",      V_88F6920_PLUS),
0172          MPP_VAR_FUNCTION(8, "ge",      "txd0",     V_88F6920_PLUS)),
0173     MPP_MODE(29,
0174          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0175          MPP_VAR_FUNCTION(5, "dev",     "ale0",     V_88F6920_PLUS),
0176          MPP_VAR_FUNCTION(8, "ge",      "txd1",     V_88F6920_PLUS)),
0177     MPP_MODE(30,
0178          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0179          MPP_VAR_FUNCTION(5, "dev",     "oe",       V_88F6920_PLUS),
0180          MPP_VAR_FUNCTION(8, "ge",      "txd2",     V_88F6920_PLUS)),
0181     MPP_MODE(31,
0182          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0183          MPP_VAR_FUNCTION(5, "dev",     "ale1",     V_88F6920_PLUS),
0184          MPP_VAR_FUNCTION(8, "ge",      "txd3",     V_88F6920_PLUS)),
0185     MPP_MODE(32,
0186          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0187          MPP_VAR_FUNCTION(5, "dev",     "we0",      V_88F6920_PLUS),
0188          MPP_VAR_FUNCTION(8, "ge",      "txctl",    V_88F6920_PLUS)),
0189     MPP_MODE(33,
0190          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0191          MPP_VAR_FUNCTION(1, "dram",    "deccerr",  V_88F6920_PLUS),
0192          MPP_VAR_FUNCTION(5, "dev",     "ad3",      V_88F6920_PLUS)),
0193     MPP_MODE(34,
0194          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0195          MPP_VAR_FUNCTION(5, "dev",     "ad1",      V_88F6920_PLUS)),
0196     MPP_MODE(35,
0197          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0198          MPP_VAR_FUNCTION(1, "ref",     "clk_out1", V_88F6920_PLUS),
0199          MPP_VAR_FUNCTION(5, "dev",     "a1",       V_88F6920_PLUS)),
0200     MPP_MODE(36,
0201          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0202          MPP_VAR_FUNCTION(5, "dev",     "a0",       V_88F6920_PLUS)),
0203     MPP_MODE(37,
0204          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0205          MPP_VAR_FUNCTION(4, "sd0",     "d3",       V_88F6920_PLUS),
0206          MPP_VAR_FUNCTION(5, "dev",     "ad8",      V_88F6920_PLUS),
0207          MPP_VAR_FUNCTION(8, "ge",      "rxclk",    V_88F6920_PLUS)),
0208     MPP_MODE(38,
0209          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0210          MPP_VAR_FUNCTION(3, "ref",     "clk_out0", V_88F6920_PLUS),
0211          MPP_VAR_FUNCTION(4, "sd0",     "d0",       V_88F6920_PLUS),
0212          MPP_VAR_FUNCTION(5, "dev",     "ad4",      V_88F6920_PLUS),
0213          MPP_VAR_FUNCTION(8, "ge",      "rxd1",     V_88F6920_PLUS)),
0214     MPP_MODE(39,
0215          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0216          MPP_VAR_FUNCTION(1, "i2c1",    "sck",      V_88F6920_PLUS),
0217          MPP_VAR_FUNCTION(3, "ua0",     "cts",      V_88F6920_PLUS),
0218          MPP_VAR_FUNCTION(4, "sd0",     "d1",       V_88F6920_PLUS),
0219          MPP_VAR_FUNCTION(5, "dev",     "a2",       V_88F6920_PLUS),
0220          MPP_VAR_FUNCTION(8, "ge",      "rxd2",     V_88F6920_PLUS)),
0221     MPP_MODE(40,
0222          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0223          MPP_VAR_FUNCTION(1, "i2c1",    "sda",      V_88F6920_PLUS),
0224          MPP_VAR_FUNCTION(3, "ua0",     "rts",      V_88F6920_PLUS),
0225          MPP_VAR_FUNCTION(4, "sd0",     "d2",       V_88F6920_PLUS),
0226          MPP_VAR_FUNCTION(5, "dev",     "ad6",      V_88F6920_PLUS),
0227          MPP_VAR_FUNCTION(8, "ge",      "rxd3",     V_88F6920_PLUS)),
0228     MPP_MODE(41,
0229          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0230          MPP_VAR_FUNCTION(1, "ua1",     "rxd",      V_88F6920_PLUS),
0231          MPP_VAR_FUNCTION(3, "ua0",     "cts",      V_88F6920_PLUS),
0232          MPP_VAR_FUNCTION(4, "spi1",    "cs3",      V_88F6920_PLUS),
0233          MPP_VAR_FUNCTION(5, "dev",     "burst/last", V_88F6920_PLUS),
0234          MPP_VAR_FUNCTION(6, "nand",    "rb0",      V_88F6920_PLUS),
0235          MPP_VAR_FUNCTION(8, "ge",      "rxctl",    V_88F6920_PLUS)),
0236     MPP_MODE(42,
0237          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0238          MPP_VAR_FUNCTION(1, "ua1",     "txd",      V_88F6920_PLUS),
0239          MPP_VAR_FUNCTION(3, "ua0",     "rts",      V_88F6920_PLUS),
0240          MPP_VAR_FUNCTION(5, "dev",     "ad7",      V_88F6920_PLUS)),
0241     MPP_MODE(43,
0242          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0243          MPP_VAR_FUNCTION(1, "pcie0",   "clkreq",   V_88F6920_PLUS),
0244          MPP_VAR_FUNCTION(2, "dram",    "vttctrl",  V_88F6920_PLUS),
0245          MPP_VAR_FUNCTION(3, "dram",    "deccerr",  V_88F6920_PLUS),
0246          MPP_VAR_FUNCTION(4, "spi1",    "cs2",      V_88F6920_PLUS),
0247          MPP_VAR_FUNCTION(5, "dev",     "clkout",   V_88F6920_PLUS),
0248          MPP_VAR_FUNCTION(6, "nand",    "rb1",      V_88F6920_PLUS)),
0249     MPP_MODE(44,
0250          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0251          MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),
0252          MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),
0253          MPP_VAR_FUNCTION(3, "sata2",   "prsnt",    V_88F6928),
0254          MPP_VAR_FUNCTION(4, "sata3",   "prsnt",    V_88F6928),
0255          MPP_VAR_FUNCTION(7, "led",     "clk",      V_88F6920_PLUS)),
0256     MPP_MODE(45,
0257          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0258          MPP_VAR_FUNCTION(1, "ref",     "clk_out0", V_88F6920_PLUS),
0259          MPP_VAR_FUNCTION(2, "pcie0",   "rstout",   V_88F6920_PLUS),
0260          MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS)),
0261     MPP_MODE(46,
0262          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0263          MPP_VAR_FUNCTION(1, "ref",     "clk_out1", V_88F6920_PLUS),
0264          MPP_VAR_FUNCTION(2, "pcie0",   "rstout",   V_88F6920_PLUS),
0265          MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS),
0266          MPP_VAR_FUNCTION(7, "led",     "stb",      V_88F6920_PLUS)),
0267     MPP_MODE(47,
0268          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0269          MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),
0270          MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),
0271          MPP_VAR_FUNCTION(3, "sata2",   "prsnt",    V_88F6928),
0272          MPP_VAR_FUNCTION(5, "sata3",   "prsnt",    V_88F6928),
0273          MPP_VAR_FUNCTION(7, "led",     "data",     V_88F6920_PLUS)),
0274     MPP_MODE(48,
0275          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0276          MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),
0277          MPP_VAR_FUNCTION(2, "dram",    "vttctrl",  V_88F6920_PLUS),
0278          MPP_VAR_FUNCTION(3, "tdm",     "pclk",     V_88F6928),
0279          MPP_VAR_FUNCTION(4, "audio",   "mclk",     V_88F6928),
0280          MPP_VAR_FUNCTION(5, "sd0",     "d4",       V_88F6920_PLUS),
0281          MPP_VAR_FUNCTION(6, "pcie0",   "clkreq",   V_88F6920_PLUS),
0282          MPP_VAR_FUNCTION(7, "ua1",     "txd",      V_88F6920_PLUS)),
0283     MPP_MODE(49,
0284          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0285          MPP_VAR_FUNCTION(1, "sata2",   "prsnt",    V_88F6928),
0286          MPP_VAR_FUNCTION(2, "sata3",   "prsnt",    V_88F6928),
0287          MPP_VAR_FUNCTION(3, "tdm",     "fsync",    V_88F6928),
0288          MPP_VAR_FUNCTION(4, "audio",   "lrclk",    V_88F6928),
0289          MPP_VAR_FUNCTION(5, "sd0",     "d5",       V_88F6920_PLUS),
0290          MPP_VAR_FUNCTION(7, "ua2",     "rxd",      V_88F6920_PLUS)),
0291     MPP_MODE(50,
0292          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0293          MPP_VAR_FUNCTION(1, "pcie0",   "rstout",   V_88F6920_PLUS),
0294          MPP_VAR_FUNCTION(3, "tdm",     "drx",      V_88F6928),
0295          MPP_VAR_FUNCTION(4, "audio",   "extclk",   V_88F6928),
0296          MPP_VAR_FUNCTION(5, "sd0",     "cmd",      V_88F6920_PLUS),
0297          MPP_VAR_FUNCTION(7, "ua2",     "rxd",      V_88F6920_PLUS)),
0298     MPP_MODE(51,
0299          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0300          MPP_VAR_FUNCTION(3, "tdm",     "dtx",      V_88F6928),
0301          MPP_VAR_FUNCTION(4, "audio",   "sdo",      V_88F6928),
0302          MPP_VAR_FUNCTION(5, "dram",    "deccerr",  V_88F6920_PLUS),
0303          MPP_VAR_FUNCTION(7, "ua2",     "txd",      V_88F6920_PLUS)),
0304     MPP_MODE(52,
0305          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0306          MPP_VAR_FUNCTION(1, "pcie0",   "rstout",   V_88F6920_PLUS),
0307          MPP_VAR_FUNCTION(3, "tdm",     "int",      V_88F6928),
0308          MPP_VAR_FUNCTION(4, "audio",   "sdi",      V_88F6928),
0309          MPP_VAR_FUNCTION(5, "sd0",     "d6",       V_88F6920_PLUS),
0310          MPP_VAR_FUNCTION(7, "i2c3",    "sck",      V_88F6920_PLUS)),
0311     MPP_MODE(53,
0312          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0313          MPP_VAR_FUNCTION(1, "sata1",   "prsnt",    V_88F6925_PLUS),
0314          MPP_VAR_FUNCTION(2, "sata0",   "prsnt",    V_88F6925_PLUS),
0315          MPP_VAR_FUNCTION(3, "tdm",     "rst",      V_88F6928),
0316          MPP_VAR_FUNCTION(4, "audio",   "bclk",     V_88F6928),
0317          MPP_VAR_FUNCTION(5, "sd0",     "d7",       V_88F6920_PLUS),
0318          MPP_VAR_FUNCTION(7, "i2c3",    "sda",      V_88F6920_PLUS)),
0319     MPP_MODE(54,
0320          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0321          MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),
0322          MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),
0323          MPP_VAR_FUNCTION(3, "pcie0",   "rstout",   V_88F6920_PLUS),
0324          MPP_VAR_FUNCTION(5, "sd0",     "d3",       V_88F6920_PLUS),
0325          MPP_VAR_FUNCTION(7, "ua3",     "txd",      V_88F6920_PLUS)),
0326     MPP_MODE(55,
0327          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0328          MPP_VAR_FUNCTION(1, "ua1",     "cts",      V_88F6920_PLUS),
0329          MPP_VAR_FUNCTION(4, "spi1",    "cs1",      V_88F6920_PLUS),
0330          MPP_VAR_FUNCTION(5, "sd0",     "d0",       V_88F6920_PLUS),
0331          MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS),
0332          MPP_VAR_FUNCTION(7, "ua3",     "rxd",      V_88F6920_PLUS)),
0333     MPP_MODE(56,
0334          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0335          MPP_VAR_FUNCTION(1, "ua1",     "rts",      V_88F6920_PLUS),
0336          MPP_VAR_FUNCTION(3, "dram",    "deccerr",  V_88F6920_PLUS),
0337          MPP_VAR_FUNCTION(4, "spi1",    "mosi",     V_88F6920_PLUS),
0338          MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS)),
0339     MPP_MODE(57,
0340          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0341          MPP_VAR_FUNCTION(4, "spi1",    "sck",      V_88F6920_PLUS),
0342          MPP_VAR_FUNCTION(5, "sd0",     "clk",      V_88F6920_PLUS),
0343          MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS)),
0344     MPP_MODE(58,
0345          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0346          MPP_VAR_FUNCTION(2, "i2c1",    "sck",      V_88F6920_PLUS),
0347          MPP_VAR_FUNCTION(3, "pcie2",   "clkreq",   V_88F6920_PLUS),
0348          MPP_VAR_FUNCTION(4, "spi1",    "miso",     V_88F6920_PLUS),
0349          MPP_VAR_FUNCTION(5, "sd0",     "d1",       V_88F6920_PLUS),
0350          MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS)),
0351     MPP_MODE(59,
0352          MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
0353          MPP_VAR_FUNCTION(1, "pcie0",   "rstout",   V_88F6920_PLUS),
0354          MPP_VAR_FUNCTION(2, "i2c1",    "sda",      V_88F6920_PLUS),
0355          MPP_VAR_FUNCTION(4, "spi1",    "cs0",      V_88F6920_PLUS),
0356          MPP_VAR_FUNCTION(5, "sd0",     "d2",       V_88F6920_PLUS)),
0357 };
0358 
0359 static struct mvebu_pinctrl_soc_info armada_39x_pinctrl_info;
0360 
0361 static const struct of_device_id armada_39x_pinctrl_of_match[] = {
0362     {
0363         .compatible = "marvell,mv88f6920-pinctrl",
0364         .data       = (void *) V_88F6920,
0365     },
0366     {
0367         .compatible = "marvell,mv88f6925-pinctrl",
0368         .data       = (void *) V_88F6925,
0369     },
0370     {
0371         .compatible = "marvell,mv88f6928-pinctrl",
0372         .data       = (void *) V_88F6928,
0373     },
0374     { },
0375 };
0376 
0377 static const struct mvebu_mpp_ctrl armada_39x_mpp_controls[] = {
0378     MPP_FUNC_CTRL(0, 59, NULL, mvebu_mmio_mpp_ctrl),
0379 };
0380 
0381 static struct pinctrl_gpio_range armada_39x_mpp_gpio_ranges[] = {
0382     MPP_GPIO_RANGE(0,   0,  0, 32),
0383     MPP_GPIO_RANGE(1,  32, 32, 28),
0384 };
0385 
0386 static int armada_39x_pinctrl_probe(struct platform_device *pdev)
0387 {
0388     struct mvebu_pinctrl_soc_info *soc = &armada_39x_pinctrl_info;
0389     const struct of_device_id *match =
0390         of_match_device(armada_39x_pinctrl_of_match, &pdev->dev);
0391 
0392     if (!match)
0393         return -ENODEV;
0394 
0395     soc->variant = (unsigned) match->data & 0xff;
0396     soc->controls = armada_39x_mpp_controls;
0397     soc->ncontrols = ARRAY_SIZE(armada_39x_mpp_controls);
0398     soc->gpioranges = armada_39x_mpp_gpio_ranges;
0399     soc->ngpioranges = ARRAY_SIZE(armada_39x_mpp_gpio_ranges);
0400     soc->modes = armada_39x_mpp_modes;
0401     soc->nmodes = armada_39x_mpp_controls[0].npins;
0402 
0403     pdev->dev.platform_data = soc;
0404 
0405     return mvebu_pinctrl_simple_mmio_probe(pdev);
0406 }
0407 
0408 static struct platform_driver armada_39x_pinctrl_driver = {
0409     .driver = {
0410         .name = "armada-39x-pinctrl",
0411         .of_match_table = of_match_ptr(armada_39x_pinctrl_of_match),
0412     },
0413     .probe = armada_39x_pinctrl_probe,
0414 };
0415 builtin_platform_driver(armada_39x_pinctrl_driver);