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