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