brintos

brintos / linux-shallow public Read only

0
0
Text · 19.4 KiB · d9c98fa Raw
411 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Marvell Armada 39x pinctrl driver based on mvebu pinctrl core4 *5 * Copyright (C) 2015 Marvell6 *7 * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>8 */9 10#include <linux/err.h>11#include <linux/init.h>12#include <linux/io.h>13#include <linux/platform_device.h>14#include <linux/of.h>15#include <linux/pinctrl/pinctrl.h>16#include <linux/property.h>17 18#include "pinctrl-mvebu.h"19 20enum {21	V_88F6920 = BIT(0),22	V_88F6925 = BIT(1),23	V_88F6928 = BIT(2),24	V_88F6920_PLUS = (V_88F6920 | V_88F6925 | V_88F6928),25	V_88F6925_PLUS = (V_88F6925 | V_88F6928),26};27 28static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {29	MPP_MODE(0,30		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),31		 MPP_VAR_FUNCTION(1, "ua0",     "rxd",      V_88F6920_PLUS)),32	MPP_MODE(1,33		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),34		 MPP_VAR_FUNCTION(1, "ua0",     "txd",      V_88F6920_PLUS)),35	MPP_MODE(2,36		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),37		 MPP_VAR_FUNCTION(1, "i2c0",    "sck",      V_88F6920_PLUS)),38	MPP_MODE(3,39		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),40		 MPP_VAR_FUNCTION(1, "i2c0",    "sda",      V_88F6920_PLUS)),41	MPP_MODE(4,42		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),43		 MPP_VAR_FUNCTION(2, "ua1",     "txd",      V_88F6920_PLUS),44		 MPP_VAR_FUNCTION(3, "ua0",     "rts",      V_88F6920_PLUS),45		 MPP_VAR_FUNCTION(7, "smi",     "mdc",      V_88F6920_PLUS)),46	MPP_MODE(5,47		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),48		 MPP_VAR_FUNCTION(2, "ua1",     "rxd",      V_88F6920_PLUS),49		 MPP_VAR_FUNCTION(3, "ua0",     "cts",      V_88F6920_PLUS),50		 MPP_VAR_FUNCTION(7, "smi",     "mdio",     V_88F6920_PLUS)),51	MPP_MODE(6,52		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),53		 MPP_VAR_FUNCTION(5, "dev",     "cs3",      V_88F6920_PLUS),54		 MPP_VAR_FUNCTION(7, "xsmi",    "mdio",     V_88F6920_PLUS)),55	MPP_MODE(7,56		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),57		 MPP_VAR_FUNCTION(5, "dev",     "ad9",      V_88F6920_PLUS),58		 MPP_VAR_FUNCTION(7, "xsmi",    "mdc",      V_88F6920_PLUS)),59	MPP_MODE(8,60		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),61		 MPP_VAR_FUNCTION(5, "dev",     "ad10",     V_88F6920_PLUS),62		 MPP_VAR_FUNCTION(7, "ptp",     "trig",     V_88F6920_PLUS)),63	MPP_MODE(9,64		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),65		 MPP_VAR_FUNCTION(5, "dev",     "ad11",     V_88F6920_PLUS),66		 MPP_VAR_FUNCTION(7, "ptp",     "clk",      V_88F6920_PLUS)),67	MPP_MODE(10,68		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),69		 MPP_VAR_FUNCTION(5, "dev",     "ad12",     V_88F6920_PLUS),70		 MPP_VAR_FUNCTION(7, "ptp",     "evreq",    V_88F6920_PLUS)),71	MPP_MODE(11,72		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),73		 MPP_VAR_FUNCTION(5, "dev",     "ad13",     V_88F6920_PLUS),74		 MPP_VAR_FUNCTION(7, "led",     "clk",      V_88F6920_PLUS)),75	MPP_MODE(12,76		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),77		 MPP_VAR_FUNCTION(2, "pcie0",   "rstout",   V_88F6920_PLUS),78		 MPP_VAR_FUNCTION(5, "dev",     "ad14",     V_88F6920_PLUS),79		 MPP_VAR_FUNCTION(7, "led",     "stb",      V_88F6920_PLUS)),80	MPP_MODE(13,81		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),82		 MPP_VAR_FUNCTION(5, "dev",     "ad15",     V_88F6920_PLUS),83		 MPP_VAR_FUNCTION(6, "pcie2",   "clkreq",   V_88F6920_PLUS),84		 MPP_VAR_FUNCTION(7, "led",     "data",     V_88F6920_PLUS)),85	MPP_MODE(14,86		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),87		 MPP_VAR_FUNCTION(3, "dram",    "vttctrl",  V_88F6920_PLUS),88		 MPP_VAR_FUNCTION(5, "dev",     "we1",      V_88F6920_PLUS),89		 MPP_VAR_FUNCTION(7, "ua1",     "txd",      V_88F6920_PLUS)),90	MPP_MODE(15,91		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),92		 MPP_VAR_FUNCTION(3, "pcie0",   "rstout",   V_88F6920_PLUS),93		 MPP_VAR_FUNCTION(4, "spi0",    "mosi",     V_88F6920_PLUS),94		 MPP_VAR_FUNCTION(7, "i2c1",    "sck",      V_88F6920_PLUS)),95	MPP_MODE(16,96		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),97		 MPP_VAR_FUNCTION(3, "dram",    "deccerr",  V_88F6920_PLUS),98		 MPP_VAR_FUNCTION(4, "spi0",    "miso",     V_88F6920_PLUS),99		 MPP_VAR_FUNCTION(5, "pcie0",   "clkreq",   V_88F6920_PLUS),100		 MPP_VAR_FUNCTION(7, "i2c1",    "sda",      V_88F6920_PLUS)),101	MPP_MODE(17,102		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),103		 MPP_VAR_FUNCTION(3, "ua1",     "rxd",      V_88F6920_PLUS),104		 MPP_VAR_FUNCTION(4, "spi0",    "sck",      V_88F6920_PLUS),105		 MPP_VAR_FUNCTION(5, "sata1",   "prsnt",    V_88F6925_PLUS),106		 MPP_VAR_FUNCTION(6, "sata0",   "prsnt",    V_88F6925_PLUS),107		 MPP_VAR_FUNCTION(7, "smi",     "mdio",     V_88F6920_PLUS)),108	MPP_MODE(18,109		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),110		 MPP_VAR_FUNCTION(3, "ua1",     "txd",      V_88F6920_PLUS),111		 MPP_VAR_FUNCTION(4, "spi0",    "cs0",      V_88F6920_PLUS),112		 MPP_VAR_FUNCTION(7, "i2c2",    "sck",      V_88F6920_PLUS)),113	MPP_MODE(19,114		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),115		 MPP_VAR_FUNCTION(4, "sata1",   "prsnt",    V_88F6925_PLUS),116		 MPP_VAR_FUNCTION(5, "ua0",     "cts",      V_88F6920_PLUS),117		 MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS),118		 MPP_VAR_FUNCTION(7, "i2c2",    "sda",      V_88F6920_PLUS)),119	MPP_MODE(20,120		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),121		 MPP_VAR_FUNCTION(4, "sata0",   "prsnt",    V_88F6925_PLUS),122		 MPP_VAR_FUNCTION(5, "ua0",     "rts",      V_88F6920_PLUS),123		 MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS),124		 MPP_VAR_FUNCTION(7, "smi",     "mdc",      V_88F6920_PLUS)),125	MPP_MODE(21,126		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),127		 MPP_VAR_FUNCTION(1, "spi0",    "cs1",      V_88F6920_PLUS),128		 MPP_VAR_FUNCTION(3, "sata0",   "prsnt",    V_88F6925_PLUS),129		 MPP_VAR_FUNCTION(4, "sd0",     "cmd",      V_88F6920_PLUS),130		 MPP_VAR_FUNCTION(5, "dev",     "bootcs",   V_88F6920_PLUS),131		 MPP_VAR_FUNCTION(6, "sata1",   "prsnt",    V_88F6925_PLUS),132		 MPP_VAR_FUNCTION(8, "ge",      "rxd0",     V_88F6920_PLUS)),133	MPP_MODE(22,134		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),135		 MPP_VAR_FUNCTION(1, "spi0",    "mosi",     V_88F6920_PLUS),136		 MPP_VAR_FUNCTION(5, "dev",     "ad0",      V_88F6920_PLUS)),137	MPP_MODE(23,138		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),139		 MPP_VAR_FUNCTION(1, "spi0",    "sck",      V_88F6920_PLUS),140		 MPP_VAR_FUNCTION(5, "dev",     "ad2",      V_88F6920_PLUS)),141	MPP_MODE(24,142		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),143		 MPP_VAR_FUNCTION(1, "spi0",    "miso",     V_88F6920_PLUS),144		 MPP_VAR_FUNCTION(2, "ua0",     "cts",      V_88F6920_PLUS),145		 MPP_VAR_FUNCTION(3, "ua1",     "rxd",      V_88F6920_PLUS),146		 MPP_VAR_FUNCTION(4, "sd0",     "d4",       V_88F6920_PLUS),147		 MPP_VAR_FUNCTION(5, "dev",     "ready",    V_88F6920_PLUS)),148	MPP_MODE(25,149		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),150		 MPP_VAR_FUNCTION(1, "spi0",    "cs0",      V_88F6920_PLUS),151		 MPP_VAR_FUNCTION(2, "ua0",     "rts",      V_88F6920_PLUS),152		 MPP_VAR_FUNCTION(3, "ua1",     "txd",      V_88F6920_PLUS),153		 MPP_VAR_FUNCTION(4, "sd0",     "d5",       V_88F6920_PLUS),154		 MPP_VAR_FUNCTION(5, "dev",     "cs0",      V_88F6920_PLUS)),155	MPP_MODE(26,156		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),157		 MPP_VAR_FUNCTION(1, "spi0",    "cs2",      V_88F6920_PLUS),158		 MPP_VAR_FUNCTION(3, "i2c1",    "sck",      V_88F6920_PLUS),159		 MPP_VAR_FUNCTION(4, "sd0",     "d6",       V_88F6920_PLUS),160		 MPP_VAR_FUNCTION(5, "dev",     "cs1",      V_88F6920_PLUS)),161	MPP_MODE(27,162		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),163		 MPP_VAR_FUNCTION(1, "spi0",    "cs3",      V_88F6920_PLUS),164		 MPP_VAR_FUNCTION(3, "i2c1",    "sda",      V_88F6920_PLUS),165		 MPP_VAR_FUNCTION(4, "sd0",     "d7",       V_88F6920_PLUS),166		 MPP_VAR_FUNCTION(5, "dev",     "cs2",      V_88F6920_PLUS),167		 MPP_VAR_FUNCTION(8, "ge",      "txclkout", V_88F6920_PLUS)),168	MPP_MODE(28,169		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),170		 MPP_VAR_FUNCTION(4, "sd0",     "clk",      V_88F6920_PLUS),171		 MPP_VAR_FUNCTION(5, "dev",     "ad5",      V_88F6920_PLUS),172		 MPP_VAR_FUNCTION(8, "ge",      "txd0",     V_88F6920_PLUS)),173	MPP_MODE(29,174		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),175		 MPP_VAR_FUNCTION(5, "dev",     "ale0",     V_88F6920_PLUS),176		 MPP_VAR_FUNCTION(8, "ge",      "txd1",     V_88F6920_PLUS)),177	MPP_MODE(30,178		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),179		 MPP_VAR_FUNCTION(5, "dev",     "oe",       V_88F6920_PLUS),180		 MPP_VAR_FUNCTION(8, "ge",      "txd2",     V_88F6920_PLUS)),181	MPP_MODE(31,182		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),183		 MPP_VAR_FUNCTION(5, "dev",     "ale1",     V_88F6920_PLUS),184		 MPP_VAR_FUNCTION(8, "ge",      "txd3",     V_88F6920_PLUS)),185	MPP_MODE(32,186		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),187		 MPP_VAR_FUNCTION(5, "dev",     "we0",      V_88F6920_PLUS),188		 MPP_VAR_FUNCTION(8, "ge",      "txctl",    V_88F6920_PLUS)),189	MPP_MODE(33,190		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),191		 MPP_VAR_FUNCTION(1, "dram",    "deccerr",  V_88F6920_PLUS),192		 MPP_VAR_FUNCTION(5, "dev",     "ad3",      V_88F6920_PLUS)),193	MPP_MODE(34,194		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),195		 MPP_VAR_FUNCTION(5, "dev",     "ad1",      V_88F6920_PLUS)),196	MPP_MODE(35,197		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),198		 MPP_VAR_FUNCTION(1, "ref",     "clk_out1", V_88F6920_PLUS),199		 MPP_VAR_FUNCTION(5, "dev",     "a1",       V_88F6920_PLUS)),200	MPP_MODE(36,201		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),202		 MPP_VAR_FUNCTION(5, "dev",     "a0",       V_88F6920_PLUS)),203	MPP_MODE(37,204		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),205		 MPP_VAR_FUNCTION(4, "sd0",     "d3",       V_88F6920_PLUS),206		 MPP_VAR_FUNCTION(5, "dev",     "ad8",      V_88F6920_PLUS),207		 MPP_VAR_FUNCTION(8, "ge",      "rxclk",    V_88F6920_PLUS)),208	MPP_MODE(38,209		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),210		 MPP_VAR_FUNCTION(3, "ref",     "clk_out0", V_88F6920_PLUS),211		 MPP_VAR_FUNCTION(4, "sd0",     "d0",       V_88F6920_PLUS),212		 MPP_VAR_FUNCTION(5, "dev",     "ad4",      V_88F6920_PLUS),213		 MPP_VAR_FUNCTION(8, "ge",      "rxd1",     V_88F6920_PLUS)),214	MPP_MODE(39,215		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),216		 MPP_VAR_FUNCTION(1, "i2c1",    "sck",      V_88F6920_PLUS),217		 MPP_VAR_FUNCTION(3, "ua0",     "cts",      V_88F6920_PLUS),218		 MPP_VAR_FUNCTION(4, "sd0",     "d1",       V_88F6920_PLUS),219		 MPP_VAR_FUNCTION(5, "dev",     "a2",       V_88F6920_PLUS),220		 MPP_VAR_FUNCTION(8, "ge",      "rxd2",     V_88F6920_PLUS)),221	MPP_MODE(40,222		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),223		 MPP_VAR_FUNCTION(1, "i2c1",    "sda",      V_88F6920_PLUS),224		 MPP_VAR_FUNCTION(3, "ua0",     "rts",      V_88F6920_PLUS),225		 MPP_VAR_FUNCTION(4, "sd0",     "d2",       V_88F6920_PLUS),226		 MPP_VAR_FUNCTION(5, "dev",     "ad6",      V_88F6920_PLUS),227		 MPP_VAR_FUNCTION(8, "ge",      "rxd3",     V_88F6920_PLUS)),228	MPP_MODE(41,229		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),230		 MPP_VAR_FUNCTION(1, "ua1",     "rxd",      V_88F6920_PLUS),231		 MPP_VAR_FUNCTION(3, "ua0",     "cts",      V_88F6920_PLUS),232		 MPP_VAR_FUNCTION(4, "spi1",    "cs3",      V_88F6920_PLUS),233		 MPP_VAR_FUNCTION(5, "dev",     "burst/last", V_88F6920_PLUS),234		 MPP_VAR_FUNCTION(6, "nand",    "rb0",      V_88F6920_PLUS),235		 MPP_VAR_FUNCTION(8, "ge",      "rxctl",    V_88F6920_PLUS)),236	MPP_MODE(42,237		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),238		 MPP_VAR_FUNCTION(1, "ua1",     "txd",      V_88F6920_PLUS),239		 MPP_VAR_FUNCTION(3, "ua0",     "rts",      V_88F6920_PLUS),240		 MPP_VAR_FUNCTION(5, "dev",     "ad7",      V_88F6920_PLUS)),241	MPP_MODE(43,242		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),243		 MPP_VAR_FUNCTION(1, "pcie0",   "clkreq",   V_88F6920_PLUS),244		 MPP_VAR_FUNCTION(2, "dram",    "vttctrl",  V_88F6920_PLUS),245		 MPP_VAR_FUNCTION(3, "dram",    "deccerr",  V_88F6920_PLUS),246		 MPP_VAR_FUNCTION(4, "spi1",    "cs2",      V_88F6920_PLUS),247		 MPP_VAR_FUNCTION(5, "dev",     "clkout",   V_88F6920_PLUS),248		 MPP_VAR_FUNCTION(6, "nand",    "rb1",      V_88F6920_PLUS)),249	MPP_MODE(44,250		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),251		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),252		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),253		 MPP_VAR_FUNCTION(3, "sata2",   "prsnt",    V_88F6928),254		 MPP_VAR_FUNCTION(4, "sata3",   "prsnt",    V_88F6928),255		 MPP_VAR_FUNCTION(7, "led",     "clk",      V_88F6920_PLUS)),256	MPP_MODE(45,257		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),258		 MPP_VAR_FUNCTION(1, "ref",     "clk_out0", V_88F6920_PLUS),259		 MPP_VAR_FUNCTION(2, "pcie0",   "rstout",   V_88F6920_PLUS),260		 MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS)),261	MPP_MODE(46,262		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),263		 MPP_VAR_FUNCTION(1, "ref",     "clk_out1", V_88F6920_PLUS),264		 MPP_VAR_FUNCTION(2, "pcie0",   "rstout",   V_88F6920_PLUS),265		 MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS),266		 MPP_VAR_FUNCTION(7, "led",     "stb",      V_88F6920_PLUS)),267	MPP_MODE(47,268		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),269		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),270		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),271		 MPP_VAR_FUNCTION(3, "sata2",   "prsnt",    V_88F6928),272		 MPP_VAR_FUNCTION(5, "sata3",   "prsnt",    V_88F6928),273		 MPP_VAR_FUNCTION(7, "led",     "data",     V_88F6920_PLUS)),274	MPP_MODE(48,275		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),276		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),277		 MPP_VAR_FUNCTION(2, "dram",    "vttctrl",  V_88F6920_PLUS),278		 MPP_VAR_FUNCTION(3, "tdm",     "pclk",     V_88F6928),279		 MPP_VAR_FUNCTION(4, "audio",   "mclk",     V_88F6928),280		 MPP_VAR_FUNCTION(5, "sd0",     "d4",       V_88F6920_PLUS),281		 MPP_VAR_FUNCTION(6, "pcie0",   "clkreq",   V_88F6920_PLUS),282		 MPP_VAR_FUNCTION(7, "ua1",     "txd",      V_88F6920_PLUS)),283	MPP_MODE(49,284		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),285		 MPP_VAR_FUNCTION(1, "sata2",   "prsnt",    V_88F6928),286		 MPP_VAR_FUNCTION(2, "sata3",   "prsnt",    V_88F6928),287		 MPP_VAR_FUNCTION(3, "tdm",     "fsync",    V_88F6928),288		 MPP_VAR_FUNCTION(4, "audio",   "lrclk",    V_88F6928),289		 MPP_VAR_FUNCTION(5, "sd0",     "d5",       V_88F6920_PLUS),290		 MPP_VAR_FUNCTION(7, "ua2",     "rxd",      V_88F6920_PLUS)),291	MPP_MODE(50,292		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),293		 MPP_VAR_FUNCTION(1, "pcie0",   "rstout",   V_88F6920_PLUS),294		 MPP_VAR_FUNCTION(3, "tdm",     "drx",      V_88F6928),295		 MPP_VAR_FUNCTION(4, "audio",   "extclk",   V_88F6928),296		 MPP_VAR_FUNCTION(5, "sd0",     "cmd",      V_88F6920_PLUS),297		 MPP_VAR_FUNCTION(7, "ua2",     "rxd",      V_88F6920_PLUS)),298	MPP_MODE(51,299		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),300		 MPP_VAR_FUNCTION(3, "tdm",     "dtx",      V_88F6928),301		 MPP_VAR_FUNCTION(4, "audio",   "sdo",      V_88F6928),302		 MPP_VAR_FUNCTION(5, "dram",    "deccerr",  V_88F6920_PLUS),303		 MPP_VAR_FUNCTION(7, "ua2",     "txd",      V_88F6920_PLUS)),304	MPP_MODE(52,305		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),306		 MPP_VAR_FUNCTION(1, "pcie0",   "rstout",   V_88F6920_PLUS),307		 MPP_VAR_FUNCTION(3, "tdm",     "int",      V_88F6928),308		 MPP_VAR_FUNCTION(4, "audio",   "sdi",      V_88F6928),309		 MPP_VAR_FUNCTION(5, "sd0",     "d6",       V_88F6920_PLUS),310		 MPP_VAR_FUNCTION(7, "i2c3",    "sck",      V_88F6920_PLUS)),311	MPP_MODE(53,312		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),313		 MPP_VAR_FUNCTION(1, "sata1",   "prsnt",    V_88F6925_PLUS),314		 MPP_VAR_FUNCTION(2, "sata0",   "prsnt",    V_88F6925_PLUS),315		 MPP_VAR_FUNCTION(3, "tdm",     "rst",      V_88F6928),316		 MPP_VAR_FUNCTION(4, "audio",   "bclk",     V_88F6928),317		 MPP_VAR_FUNCTION(5, "sd0",     "d7",       V_88F6920_PLUS),318		 MPP_VAR_FUNCTION(7, "i2c3",    "sda",      V_88F6920_PLUS)),319	MPP_MODE(54,320		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),321		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),322		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),323		 MPP_VAR_FUNCTION(3, "pcie0",   "rstout",   V_88F6920_PLUS),324		 MPP_VAR_FUNCTION(5, "sd0",     "d3",       V_88F6920_PLUS),325		 MPP_VAR_FUNCTION(7, "ua3",     "txd",      V_88F6920_PLUS)),326	MPP_MODE(55,327		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),328		 MPP_VAR_FUNCTION(1, "ua1",     "cts",      V_88F6920_PLUS),329		 MPP_VAR_FUNCTION(4, "spi1",    "cs1",      V_88F6920_PLUS),330		 MPP_VAR_FUNCTION(5, "sd0",     "d0",       V_88F6920_PLUS),331		 MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS),332		 MPP_VAR_FUNCTION(7, "ua3",     "rxd",      V_88F6920_PLUS)),333	MPP_MODE(56,334		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),335		 MPP_VAR_FUNCTION(1, "ua1",     "rts",      V_88F6920_PLUS),336		 MPP_VAR_FUNCTION(3, "dram",    "deccerr",  V_88F6920_PLUS),337		 MPP_VAR_FUNCTION(4, "spi1",    "mosi",     V_88F6920_PLUS),338		 MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS)),339	MPP_MODE(57,340		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),341		 MPP_VAR_FUNCTION(4, "spi1",    "sck",      V_88F6920_PLUS),342		 MPP_VAR_FUNCTION(5, "sd0",     "clk",      V_88F6920_PLUS),343		 MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS)),344	MPP_MODE(58,345		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),346		 MPP_VAR_FUNCTION(2, "i2c1",    "sck",      V_88F6920_PLUS),347		 MPP_VAR_FUNCTION(3, "pcie2",   "clkreq",   V_88F6920_PLUS),348		 MPP_VAR_FUNCTION(4, "spi1",    "miso",     V_88F6920_PLUS),349		 MPP_VAR_FUNCTION(5, "sd0",     "d1",       V_88F6920_PLUS),350		 MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS)),351	MPP_MODE(59,352		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),353		 MPP_VAR_FUNCTION(1, "pcie0",   "rstout",   V_88F6920_PLUS),354		 MPP_VAR_FUNCTION(2, "i2c1",    "sda",      V_88F6920_PLUS),355		 MPP_VAR_FUNCTION(4, "spi1",    "cs0",      V_88F6920_PLUS),356		 MPP_VAR_FUNCTION(5, "sd0",     "d2",       V_88F6920_PLUS)),357};358 359static struct mvebu_pinctrl_soc_info armada_39x_pinctrl_info;360 361static const struct of_device_id armada_39x_pinctrl_of_match[] = {362	{363		.compatible = "marvell,mv88f6920-pinctrl",364		.data       = (void *) V_88F6920,365	},366	{367		.compatible = "marvell,mv88f6925-pinctrl",368		.data       = (void *) V_88F6925,369	},370	{371		.compatible = "marvell,mv88f6928-pinctrl",372		.data       = (void *) V_88F6928,373	},374	{ },375};376 377static const struct mvebu_mpp_ctrl armada_39x_mpp_controls[] = {378	MPP_FUNC_CTRL(0, 59, NULL, mvebu_mmio_mpp_ctrl),379};380 381static struct pinctrl_gpio_range armada_39x_mpp_gpio_ranges[] = {382	MPP_GPIO_RANGE(0,   0,  0, 32),383	MPP_GPIO_RANGE(1,  32, 32, 28),384};385 386static int armada_39x_pinctrl_probe(struct platform_device *pdev)387{388	struct mvebu_pinctrl_soc_info *soc = &armada_39x_pinctrl_info;389 390	soc->variant = (unsigned)device_get_match_data(&pdev->dev) & 0xff;391	soc->controls = armada_39x_mpp_controls;392	soc->ncontrols = ARRAY_SIZE(armada_39x_mpp_controls);393	soc->gpioranges = armada_39x_mpp_gpio_ranges;394	soc->ngpioranges = ARRAY_SIZE(armada_39x_mpp_gpio_ranges);395	soc->modes = armada_39x_mpp_modes;396	soc->nmodes = armada_39x_mpp_controls[0].npins;397 398	pdev->dev.platform_data = soc;399 400	return mvebu_pinctrl_simple_mmio_probe(pdev);401}402 403static struct platform_driver armada_39x_pinctrl_driver = {404	.driver = {405		.name = "armada-39x-pinctrl",406		.of_match_table = of_match_ptr(armada_39x_pinctrl_of_match),407	},408	.probe = armada_39x_pinctrl_probe,409};410builtin_platform_driver(armada_39x_pinctrl_driver);411