Back to home page

OSCL-LXR

 
 

    


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