brintos

brintos / linux-shallow public Read only

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