Back to home page

OSCL-LXR

 
 

    


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