Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/pinctrl/mvebu/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 22 kB image not shown  

Quelle  pinctrl-armada-cp110.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Marvell Armada CP110 pinctrl driver based on mvebu pinctrl core
 *
 * Copyright (C) 2017 Marvell
 *
 * Hanna Hawa <hannah@marvell.com>
 */


#include <linux/err.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/mfd/syscon.h>
#include <linux/of.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/platform_device.h>
#include <linux/property.h>

#include "pinctrl-mvebu.h"

/*
 * Even if the pin controller is the same the MMP available depend on the SoC
 * integration.
 *  - In Armada7K (single CP) almost all the MPPs are available (except the
 *    MMP 39 to 43)
 *  - In Armada8K (dual CP) the MPPs are split into 2 parts, MPPs 0-31 from
 *    CPS, and MPPs 32-62 from CPM, the below flags (V_ARMADA_8K_CPM,
 *    V_ARMADA_8K_CPS) set which MPP is available to the CPx.
 * The x_PLUS enum mean that the MPP available for CPx and for Armada70x0
 */

enum {
 V_ARMADA_7K = BIT(0),
 V_ARMADA_8K_CPM = BIT(1),
 V_ARMADA_8K_CPS = BIT(2),
 V_CP115_STANDALONE = BIT(3),
 V_ARMADA_7K_8K_CPM = (V_ARMADA_7K | V_ARMADA_8K_CPM),
 V_ARMADA_7K_8K_CPS = (V_ARMADA_7K | V_ARMADA_8K_CPS),
};

static struct mvebu_mpp_mode armada_cp110_mpp_modes[] = {
 MPP_MODE(0,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ale1"),
   MPP_FUNCTION(2, "au",  "i2smclk"),
   MPP_FUNCTION(3, "ge0",  "rxd3"),
   MPP_FUNCTION(4, "tdm",  "pclk"),
   MPP_FUNCTION(6, "ptp",  "pulse"),
   MPP_FUNCTION(7, "mss_i2c""sda"),
   MPP_FUNCTION(8, "uart0""rxd"),
   MPP_FUNCTION(9, "sata0""present_act"),
   MPP_FUNCTION(10, "ge",  "mdio")),
 MPP_MODE(1,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ale0"),
   MPP_FUNCTION(2, "au",  "i2sdo_spdifo"),
   MPP_FUNCTION(3, "ge0",  "rxd2"),
   MPP_FUNCTION(4, "tdm",  "drx"),
   MPP_FUNCTION(6, "ptp",  "clk"),
   MPP_FUNCTION(7, "mss_i2c""sck"),
   MPP_FUNCTION(8, "uart0""txd"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(10, "ge",  "mdc")),
 MPP_MODE(2,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad15"),
   MPP_FUNCTION(2, "au",  "i2sextclk"),
   MPP_FUNCTION(3, "ge0",  "rxd1"),
   MPP_FUNCTION(4, "tdm",  "dtx"),
   MPP_FUNCTION(5, "mss_uart""rxd"),
   MPP_FUNCTION(6, "ptp",  "pclk_out"),
   MPP_FUNCTION(7, "i2c1",  "sck"),
   MPP_FUNCTION(8, "uart1""rxd"),
   MPP_FUNCTION(9, "sata0""present_act"),
   MPP_FUNCTION(10, "xg",  "mdc")),
 MPP_MODE(3,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad14"),
   MPP_FUNCTION(2, "au",  "i2slrclk"),
   MPP_FUNCTION(3, "ge0",  "rxd0"),
   MPP_FUNCTION(4, "tdm",  "fsync"),
   MPP_FUNCTION(5, "mss_uart""txd"),
   MPP_FUNCTION(6, "pcie",  "rstoutn"),
   MPP_FUNCTION(7, "i2c1",  "sda"),
   MPP_FUNCTION(8, "uart1""txd"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(10, "xg",  "mdio")),
 MPP_MODE(4,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad13"),
   MPP_FUNCTION(2, "au",  "i2sbclk"),
   MPP_FUNCTION(3, "ge0",  "rxctl"),
   MPP_FUNCTION(4, "tdm",  "rstn"),
   MPP_FUNCTION(5, "mss_uart""rxd"),
   MPP_FUNCTION(6, "uart1""cts"),
   MPP_FUNCTION(7, "pcie0""clkreq"),
   MPP_FUNCTION(8, "uart3""rxd"),
   MPP_FUNCTION(10, "ge",  "mdc")),
 MPP_MODE(5,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad12"),
   MPP_FUNCTION(2, "au",  "i2sdi"),
   MPP_FUNCTION(3, "ge0",  "rxclk"),
   MPP_FUNCTION(4, "tdm",  "intn"),
   MPP_FUNCTION(5, "mss_uart""txd"),
   MPP_FUNCTION(6, "uart1""rts"),
   MPP_FUNCTION(7, "pcie1""clkreq"),
   MPP_FUNCTION(8, "uart3""txd"),
   MPP_FUNCTION(10, "ge",  "mdio")),
 MPP_MODE(6,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad11"),
   MPP_FUNCTION(3, "ge0",  "txd3"),
   MPP_FUNCTION(4, "spi0",  "csn2"),
   MPP_FUNCTION(5, "au",  "i2sextclk"),
   MPP_FUNCTION(6, "sata1""present_act"),
   MPP_FUNCTION(7, "pcie2""clkreq"),
   MPP_FUNCTION(8, "uart0""rxd"),
   MPP_FUNCTION(9, "ptp",  "pulse")),
 MPP_MODE(7,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad10"),
   MPP_FUNCTION(3, "ge0",  "txd2"),
   MPP_FUNCTION(4, "spi0",  "csn1"),
   MPP_FUNCTION(5, "spi1",  "csn1"),
   MPP_FUNCTION(6, "sata0""present_act"),
   MPP_FUNCTION(7, "led",  "data"),
   MPP_FUNCTION(8, "uart0""txd"),
   MPP_FUNCTION(9, "ptp",  "clk")),
 MPP_MODE(8,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad9"),
   MPP_FUNCTION(3, "ge0",  "txd1"),
   MPP_FUNCTION(4, "spi0",  "csn0"),
   MPP_FUNCTION(5, "spi1",  "csn0"),
   MPP_FUNCTION(6, "uart0""cts"),
   MPP_FUNCTION(7, "led",  "stb"),
   MPP_FUNCTION(8, "uart2""rxd"),
   MPP_FUNCTION(9, "ptp",  "pclk_out"),
   MPP_FUNCTION(10, "synce1""clk")),
 MPP_MODE(9,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad8"),
   MPP_FUNCTION(3, "ge0",  "txd0"),
   MPP_FUNCTION(4, "spi0",  "mosi"),
   MPP_FUNCTION(5, "spi1",  "mosi"),
   MPP_FUNCTION(7, "pcie",  "rstoutn"),
   MPP_FUNCTION(10, "synce2""clk")),
 MPP_MODE(10,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "readyn"),
   MPP_FUNCTION(3, "ge0",  "txctl"),
   MPP_FUNCTION(4, "spi0",  "miso"),
   MPP_FUNCTION(5, "spi1",  "miso"),
   MPP_FUNCTION(6, "uart0""cts"),
   MPP_FUNCTION(7, "sata1""present_act")),
 MPP_MODE(11,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "wen1"),
   MPP_FUNCTION(3, "ge0",  "txclkout"),
   MPP_FUNCTION(4, "spi0",  "clk"),
   MPP_FUNCTION(5, "spi1",  "clk"),
   MPP_FUNCTION(6, "uart0""rts"),
   MPP_FUNCTION(7, "led",  "clk"),
   MPP_FUNCTION(8, "uart2""txd"),
   MPP_FUNCTION(9, "sata0""present_act")),
 MPP_MODE(12,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "clk_out"),
   MPP_FUNCTION(2, "nf",  "rbn1"),
   MPP_FUNCTION(3, "spi1",  "csn1"),
   MPP_FUNCTION(4, "ge0",  "rxclk")),
 MPP_MODE(13,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "burstn"),
   MPP_FUNCTION(2, "nf",  "rbn0"),
   MPP_FUNCTION(3, "spi1",  "miso"),
   MPP_FUNCTION(4, "ge0",  "rxctl"),
   MPP_FUNCTION(8, "mss_spi""miso")),
 MPP_MODE(14,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "bootcsn"),
   MPP_FUNCTION(2, "dev",  "csn0"),
   MPP_FUNCTION(3, "spi1",  "csn0"),
   MPP_FUNCTION(4, "spi0",  "csn3"),
   MPP_FUNCTION(5, "au",  "i2sextclk"),
   MPP_FUNCTION(6, "spi0",  "miso"),
   MPP_FUNCTION(7, "sata0""present_act"),
   MPP_FUNCTION(8, "mss_spi""csn")),
 MPP_MODE(15,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad7"),
   MPP_FUNCTION(3, "spi1",  "mosi"),
   MPP_FUNCTION(6, "spi0",  "mosi"),
   MPP_FUNCTION(8, "mss_spi""mosi"),
   MPP_FUNCTION(11, "ptp",  "pulse_cp2cp")),
 MPP_MODE(16,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad6"),
   MPP_FUNCTION(3, "spi1",  "clk"),
   MPP_FUNCTION(8, "mss_spi""clk")),
 MPP_MODE(17,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad5"),
   MPP_FUNCTION(4, "ge0",  "txd3")),
 MPP_MODE(18,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad4"),
   MPP_FUNCTION(4, "ge0",  "txd2"),
   MPP_FUNCTION(11, "ptp",  "clk_cp2cp")),
 MPP_MODE(19,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad3"),
   MPP_FUNCTION(4, "ge0",  "txd1"),
   MPP_FUNCTION(11, "wakeup""out_cp2cp")),
 MPP_MODE(20,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad2"),
   MPP_FUNCTION(4, "ge0",  "txd0")),
 MPP_MODE(21,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad1"),
   MPP_FUNCTION(4, "ge0",  "txctl"),
   MPP_FUNCTION(11, "sei",  "in_cp2cp")),
 MPP_MODE(22,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "ad0"),
   MPP_FUNCTION(4, "ge0",  "txclkout"),
   MPP_FUNCTION(11, "wakeup""in_cp2cp")),
 MPP_MODE(23,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "a1"),
   MPP_FUNCTION(5, "au",  "i2smclk"),
   MPP_FUNCTION(11, "link",  "rd_in_cp2cp")),
 MPP_MODE(24,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "a0"),
   MPP_FUNCTION(5, "au",  "i2slrclk")),
 MPP_MODE(25,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "oen"),
   MPP_FUNCTION(5, "au",  "i2sdo_spdifo")),
 MPP_MODE(26,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "wen0"),
   MPP_FUNCTION(5, "au",  "i2sbclk")),
 MPP_MODE(27,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "csn0"),
   MPP_FUNCTION(2, "spi1",  "miso"),
   MPP_FUNCTION(3, "mss_gpio4", NULL),
   MPP_FUNCTION(4, "ge0",  "rxd3"),
   MPP_FUNCTION(5, "spi0",  "csn4"),
   MPP_FUNCTION(8, "ge",  "mdio"),
   MPP_FUNCTION(9, "sata0""present_act"),
   MPP_FUNCTION(10, "uart0""rts"),
   MPP_FUNCTION(11, "rei",  "in_cp2cp")),
 MPP_MODE(28,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "csn1"),
   MPP_FUNCTION(2, "spi1",  "csn0"),
   MPP_FUNCTION(3, "mss_gpio5", NULL),
   MPP_FUNCTION(4, "ge0",  "rxd2"),
   MPP_FUNCTION(5, "spi0",  "csn5"),
   MPP_FUNCTION(6, "pcie2""clkreq"),
   MPP_FUNCTION(7, "ptp",  "pulse"),
   MPP_FUNCTION(8, "ge",  "mdc"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(10, "uart0""cts"),
   MPP_FUNCTION(11, "led",  "data")),
 MPP_MODE(29,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "csn2"),
   MPP_FUNCTION(2, "spi1",  "mosi"),
   MPP_FUNCTION(3, "mss_gpio6", NULL),
   MPP_FUNCTION(4, "ge0",  "rxd1"),
   MPP_FUNCTION(5, "spi0",  "csn6"),
   MPP_FUNCTION(6, "pcie1""clkreq"),
   MPP_FUNCTION(7, "ptp",  "clk"),
   MPP_FUNCTION(8, "mss_i2c""sda"),
   MPP_FUNCTION(9, "sata0""present_act"),
   MPP_FUNCTION(10, "uart0""rxd"),
   MPP_FUNCTION(11, "led",  "stb")),
 MPP_MODE(30,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "csn3"),
   MPP_FUNCTION(2, "spi1",  "clk"),
   MPP_FUNCTION(3, "mss_gpio7", NULL),
   MPP_FUNCTION(4, "ge0",  "rxd0"),
   MPP_FUNCTION(5, "spi0",  "csn7"),
   MPP_FUNCTION(6, "pcie0""clkreq"),
   MPP_FUNCTION(7, "ptp",  "pclk_out"),
   MPP_FUNCTION(8, "mss_i2c""sck"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(10, "uart0""txd"),
   MPP_FUNCTION(11, "led",  "clk")),
 MPP_MODE(31,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "dev",  "a2"),
   MPP_FUNCTION(3, "mss_gpio4", NULL),
   MPP_FUNCTION(6, "pcie",  "rstoutn"),
   MPP_FUNCTION(8, "ge",  "mdc")),
 MPP_MODE(32,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "mii",  "col"),
   MPP_FUNCTION(2, "mii",  "txerr"),
   MPP_FUNCTION(3, "mss_spi""miso"),
   MPP_FUNCTION(4, "tdm",  "drx"),
   MPP_FUNCTION(5, "au",  "i2sextclk"),
   MPP_FUNCTION(6, "au",  "i2sdi"),
   MPP_FUNCTION(7, "ge",  "mdio"),
   MPP_FUNCTION(8, "sdio",  "v18_en"),
   MPP_FUNCTION(9, "pcie1""clkreq"),
   MPP_FUNCTION(10, "mss_gpio0", NULL)),
 MPP_MODE(33,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "mii",  "txclk"),
   MPP_FUNCTION(2, "sdio",  "pwr10"),
   MPP_FUNCTION(3, "mss_spi""csn"),
   MPP_FUNCTION(4, "tdm",  "fsync"),
   MPP_FUNCTION(5, "au",  "i2smclk"),
   MPP_FUNCTION(6, "sdio",  "bus_pwr"),
   MPP_FUNCTION(8, "xg",  "mdio"),
   MPP_FUNCTION(9, "pcie2""clkreq"),
   MPP_FUNCTION(10, "mss_gpio1", NULL)),
 MPP_MODE(34,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "mii",  "rxerr"),
   MPP_FUNCTION(2, "sdio",  "pwr11"),
   MPP_FUNCTION(3, "mss_spi""mosi"),
   MPP_FUNCTION(4, "tdm",  "dtx"),
   MPP_FUNCTION(5, "au",  "i2slrclk"),
   MPP_FUNCTION(6, "sdio",  "wr_protect"),
   MPP_FUNCTION(7, "ge",  "mdc"),
   MPP_FUNCTION(9, "pcie0""clkreq"),
   MPP_FUNCTION(10, "mss_gpio2", NULL)),
 MPP_MODE(35,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "sata1""present_act"),
   MPP_FUNCTION(2, "i2c1",  "sda"),
   MPP_FUNCTION(3, "mss_spi""clk"),
   MPP_FUNCTION(4, "tdm",  "pclk"),
   MPP_FUNCTION(5, "au",  "i2sdo_spdifo"),
   MPP_FUNCTION(6, "sdio",  "card_detect"),
   MPP_FUNCTION(7, "xg",  "mdio"),
   MPP_FUNCTION(8, "ge",  "mdio"),
   MPP_FUNCTION(9, "pcie",  "rstoutn"),
   MPP_FUNCTION(10, "mss_gpio3", NULL)),
 MPP_MODE(36,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "synce2""clk"),
   MPP_FUNCTION(2, "i2c1",  "sck"),
   MPP_FUNCTION(3, "ptp",  "clk"),
   MPP_FUNCTION(4, "synce1""clk"),
   MPP_FUNCTION(5, "au",  "i2sbclk"),
   MPP_FUNCTION(6, "sata0""present_act"),
   MPP_FUNCTION(7, "xg",  "mdc"),
   MPP_FUNCTION(8, "ge",  "mdc"),
   MPP_FUNCTION(9, "pcie2""clkreq"),
   MPP_FUNCTION(10, "mss_gpio5", NULL)),
 MPP_MODE(37,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "uart2""rxd"),
   MPP_FUNCTION(2, "i2c0",  "sck"),
   MPP_FUNCTION(3, "ptp",  "pclk_out"),
   MPP_FUNCTION(4, "tdm",  "intn"),
   MPP_FUNCTION(5, "mss_i2c""sck"),
   MPP_FUNCTION(6, "sata1""present_act"),
   MPP_FUNCTION(7, "ge",  "mdc"),
   MPP_FUNCTION(8, "xg",  "mdc"),
   MPP_FUNCTION(9, "pcie1""clkreq"),
   MPP_FUNCTION(10, "mss_gpio6", NULL),
   MPP_FUNCTION(11, "link",  "rd_out_cp2cp")),
 MPP_MODE(38,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "uart2""txd"),
   MPP_FUNCTION(2, "i2c0",  "sda"),
   MPP_FUNCTION(3, "ptp",  "pulse"),
   MPP_FUNCTION(4, "tdm",  "rstn"),
   MPP_FUNCTION(5, "mss_i2c""sda"),
   MPP_FUNCTION(6, "sata0""present_act"),
   MPP_FUNCTION(7, "ge",  "mdio"),
   MPP_FUNCTION(8, "xg",  "mdio"),
   MPP_FUNCTION(9, "au",  "i2sextclk"),
   MPP_FUNCTION(10, "mss_gpio7", NULL),
   MPP_FUNCTION(11, "ptp",  "pulse_cp2cp")),
 MPP_MODE(39,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "sdio",  "wr_protect"),
   MPP_FUNCTION(4, "au",  "i2sbclk"),
   MPP_FUNCTION(5, "ptp",  "clk"),
   MPP_FUNCTION(6, "spi0",  "csn1"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(10, "mss_gpio0", NULL)),
 MPP_MODE(40,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "sdio",  "pwr11"),
   MPP_FUNCTION(2, "synce1""clk"),
   MPP_FUNCTION(3, "mss_i2c""sda"),
   MPP_FUNCTION(4, "au",  "i2sdo_spdifo"),
   MPP_FUNCTION(5, "ptp",  "pclk_out"),
   MPP_FUNCTION(6, "spi0",  "clk"),
   MPP_FUNCTION(7, "uart1""txd"),
   MPP_FUNCTION(8, "ge",  "mdio"),
   MPP_FUNCTION(9, "sata0""present_act"),
   MPP_FUNCTION(10, "mss_gpio1", NULL)),
 MPP_MODE(41,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "sdio",  "pwr10"),
   MPP_FUNCTION(2, "sdio",  "bus_pwr"),
   MPP_FUNCTION(3, "mss_i2c""sck"),
   MPP_FUNCTION(4, "au",  "i2slrclk"),
   MPP_FUNCTION(5, "ptp",  "pulse"),
   MPP_FUNCTION(6, "spi0",  "mosi"),
   MPP_FUNCTION(7, "uart1""rxd"),
   MPP_FUNCTION(8, "ge",  "mdc"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(10, "mss_gpio2", NULL),
   MPP_FUNCTION(11, "rei",  "out_cp2cp")),
 MPP_MODE(42,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "sdio",  "v18_en"),
   MPP_FUNCTION(2, "sdio",  "wr_protect"),
   MPP_FUNCTION(3, "synce2""clk"),
   MPP_FUNCTION(4, "au",  "i2smclk"),
   MPP_FUNCTION(5, "mss_uart""txd"),
   MPP_FUNCTION(6, "spi0",  "miso"),
   MPP_FUNCTION(7, "uart1""cts"),
   MPP_FUNCTION(8, "xg",  "mdc"),
   MPP_FUNCTION(9, "sata0""present_act"),
   MPP_FUNCTION(10, "mss_gpio4", NULL)),
 MPP_MODE(43,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "sdio",  "card_detect"),
   MPP_FUNCTION(3, "synce1""clk"),
   MPP_FUNCTION(4, "au",  "i2sextclk"),
   MPP_FUNCTION(5, "mss_uart""rxd"),
   MPP_FUNCTION(6, "spi0",  "csn0"),
   MPP_FUNCTION(7, "uart1""rts"),
   MPP_FUNCTION(8, "xg",  "mdio"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(10, "mss_gpio5", NULL),
   MPP_FUNCTION(11, "wakeup""out_cp2cp")),
 MPP_MODE(44,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "txd2"),
   MPP_FUNCTION(7, "uart0""rts"),
   MPP_FUNCTION(11, "ptp",  "clk_cp2cp")),
 MPP_MODE(45,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "txd3"),
   MPP_FUNCTION(7, "uart0""txd"),
   MPP_FUNCTION(9, "pcie",  "rstoutn")),
 MPP_MODE(46,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "txd1"),
   MPP_FUNCTION(7, "uart1""rts")),
 MPP_MODE(47,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "txd0"),
   MPP_FUNCTION(5, "spi1",  "clk"),
   MPP_FUNCTION(7, "uart1""txd"),
   MPP_FUNCTION(8, "ge",  "mdc")),
 MPP_MODE(48,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "txctl_txen"),
   MPP_FUNCTION(5, "spi1",  "mosi"),
   MPP_FUNCTION(8, "xg",  "mdc"),
   MPP_FUNCTION(11, "wakeup""in_cp2cp")),
 MPP_MODE(49,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "txclkout"),
   MPP_FUNCTION(2, "mii",  "crs"),
   MPP_FUNCTION(5, "spi1",  "miso"),
   MPP_FUNCTION(7, "uart1""rxd"),
   MPP_FUNCTION(8, "ge",  "mdio"),
   MPP_FUNCTION(9, "pcie0""clkreq"),
   MPP_FUNCTION(10, "sdio",  "v18_en"),
   MPP_FUNCTION(11, "sei",  "out_cp2cp")),
 MPP_MODE(50,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "rxclk"),
   MPP_FUNCTION(2, "mss_i2c""sda"),
   MPP_FUNCTION(5, "spi1",  "csn0"),
   MPP_FUNCTION(6, "uart2""txd"),
   MPP_FUNCTION(7, "uart0""rxd"),
   MPP_FUNCTION(8, "xg",  "mdio"),
   MPP_FUNCTION(10, "sdio",  "pwr11")),
 MPP_MODE(51,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "rxd0"),
   MPP_FUNCTION(2, "mss_i2c""sck"),
   MPP_FUNCTION(5, "spi1",  "csn1"),
   MPP_FUNCTION(6, "uart2""rxd"),
   MPP_FUNCTION(7, "uart0""cts"),
   MPP_FUNCTION(10, "sdio",  "pwr10")),
 MPP_MODE(52,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "rxd1"),
   MPP_FUNCTION(2, "synce1""clk"),
   MPP_FUNCTION(4, "synce2""clk"),
   MPP_FUNCTION(5, "spi1",  "csn2"),
   MPP_FUNCTION(7, "uart1""cts"),
   MPP_FUNCTION(8, "led",  "clk"),
   MPP_FUNCTION(9, "pcie",  "rstoutn"),
   MPP_FUNCTION(10, "pcie0""clkreq")),
 MPP_MODE(53,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "rxd2"),
   MPP_FUNCTION(3, "ptp",  "clk"),
   MPP_FUNCTION(5, "spi1",  "csn3"),
   MPP_FUNCTION(7, "uart1""rxd"),
   MPP_FUNCTION(8, "led",  "stb"),
   MPP_FUNCTION(11, "sdio",  "led")),
 MPP_MODE(54,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "rxd3"),
   MPP_FUNCTION(2, "synce2""clk"),
   MPP_FUNCTION(3, "ptp",  "pclk_out"),
   MPP_FUNCTION(4, "synce1""clk"),
   MPP_FUNCTION(8, "led",  "data"),
   MPP_FUNCTION(10, "sdio",  "hw_rst"),
   MPP_FUNCTION(11, "sdio_wp""wr_protect")),
 MPP_MODE(55,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "ge1",  "rxctl_rxdv"),
   MPP_FUNCTION(3, "ptp",  "pulse"),
   MPP_FUNCTION(10, "sdio",  "led"),
   MPP_FUNCTION(11, "sdio_cd""card_detect")),
 MPP_MODE(56,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(4, "tdm",  "drx"),
   MPP_FUNCTION(5, "au",  "i2sdo_spdifo"),
   MPP_FUNCTION(6, "spi0",  "clk"),
   MPP_FUNCTION(7, "uart1""rxd"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(14, "sdio",  "clk")),
 MPP_MODE(57,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(2, "mss_i2c""sda"),
   MPP_FUNCTION(3, "ptp",  "pclk_out"),
   MPP_FUNCTION(4, "tdm",  "intn"),
   MPP_FUNCTION(5, "au",  "i2sbclk"),
   MPP_FUNCTION(6, "spi0",  "mosi"),
   MPP_FUNCTION(7, "uart1""txd"),
   MPP_FUNCTION(9, "sata0""present_act"),
   MPP_FUNCTION(14, "sdio",  "cmd")),
 MPP_MODE(58,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(2, "mss_i2c""sck"),
   MPP_FUNCTION(3, "ptp",  "clk"),
   MPP_FUNCTION(4, "tdm",  "rstn"),
   MPP_FUNCTION(5, "au",  "i2sdi"),
   MPP_FUNCTION(6, "spi0",  "miso"),
   MPP_FUNCTION(7, "uart1""cts"),
   MPP_FUNCTION(8, "led",  "clk"),
   MPP_FUNCTION(14, "sdio",  "d0")),
 MPP_MODE(59,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "mss_gpio7", NULL),
   MPP_FUNCTION(2, "synce2""clk"),
   MPP_FUNCTION(4, "tdm",  "fsync"),
   MPP_FUNCTION(5, "au",  "i2slrclk"),
   MPP_FUNCTION(6, "spi0",  "csn0"),
   MPP_FUNCTION(7, "uart0""cts"),
   MPP_FUNCTION(8, "led",  "stb"),
   MPP_FUNCTION(9, "uart1""txd"),
   MPP_FUNCTION(14, "sdio",  "d1")),
 MPP_MODE(60,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "mss_gpio6", NULL),
   MPP_FUNCTION(3, "ptp",  "pulse"),
   MPP_FUNCTION(4, "tdm",  "dtx"),
   MPP_FUNCTION(5, "au",  "i2smclk"),
   MPP_FUNCTION(6, "spi0",  "csn1"),
   MPP_FUNCTION(7, "uart0""rts"),
   MPP_FUNCTION(8, "led",  "data"),
   MPP_FUNCTION(9, "uart1""rxd"),
   MPP_FUNCTION(14, "sdio",  "d2")),
 MPP_MODE(61,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "mss_gpio5", NULL),
   MPP_FUNCTION(3, "ptp",  "clk"),
   MPP_FUNCTION(4, "tdm",  "pclk"),
   MPP_FUNCTION(5, "au",  "i2sextclk"),
   MPP_FUNCTION(6, "spi0",  "csn2"),
   MPP_FUNCTION(7, "uart0""txd"),
   MPP_FUNCTION(8, "uart2""txd"),
   MPP_FUNCTION(9, "sata1""present_act"),
   MPP_FUNCTION(10, "ge",  "mdio"),
   MPP_FUNCTION(14, "sdio",  "d3")),
 MPP_MODE(62,
   MPP_FUNCTION(0, "gpio",  NULL),
   MPP_FUNCTION(1, "mss_gpio4", NULL),
   MPP_FUNCTION(2, "synce1""clk"),
   MPP_FUNCTION(3, "ptp",  "pclk_out"),
   MPP_FUNCTION(5, "sata1""present_act"),
   MPP_FUNCTION(6, "spi0",  "csn3"),
   MPP_FUNCTION(7, "uart0""rxd"),
   MPP_FUNCTION(8, "uart2""rxd"),
   MPP_FUNCTION(9, "sata0""present_act"),
   MPP_FUNCTION(10, "ge",  "mdc"),
   MPP_FUNCTION(14, "sdio",  "ds")),
};

static const struct of_device_id armada_cp110_pinctrl_of_match[] = {
 {
  .compatible = "marvell,armada-7k-pinctrl",
  .data  = (void *) V_ARMADA_7K,
 },
 {
  .compatible = "marvell,armada-8k-cpm-pinctrl",
  .data  = (void *) V_ARMADA_8K_CPM,
 },
 {
  .compatible = "marvell,armada-8k-cps-pinctrl",
  .data  = (void *) V_ARMADA_8K_CPS,
 },
 {
  .compatible = "marvell,cp115-standalone-pinctrl",
  .data  = (void *) V_CP115_STANDALONE,
 },
 { },
};

static const struct mvebu_mpp_ctrl armada_cp110_mpp_controls[] = {
 MPP_FUNC_CTRL(0, 62, NULL, mvebu_regmap_mpp_ctrl),
};

static void mvebu_pinctrl_assign_variant(struct mvebu_mpp_mode *m,
      u8 variant)
{
 struct mvebu_mpp_ctrl_setting *s;

 for (s = m->settings ; s->name ; s++)
  s->variant = variant;
}

static int armada_cp110_pinctrl_probe(struct platform_device *pdev)
{
 struct mvebu_pinctrl_soc_info *soc;
 int i;

 if (!pdev->dev.parent)
  return -ENODEV;

 soc = devm_kzalloc(&pdev->dev,
      sizeof(struct mvebu_pinctrl_soc_info), GFP_KERNEL);
 if (!soc)
  return -ENOMEM;

 soc->variant = (unsigned long)device_get_match_data(&pdev->dev) & 0xff;
 soc->controls = armada_cp110_mpp_controls;
 soc->ncontrols = ARRAY_SIZE(armada_cp110_mpp_controls);
 soc->modes = armada_cp110_mpp_modes;
 soc->nmodes = ARRAY_SIZE(armada_cp110_mpp_modes);
 for (i = 0; i < ARRAY_SIZE(armada_cp110_mpp_modes); i++) {
  struct mvebu_mpp_mode *m = &armada_cp110_mpp_modes[i];

  switch (i) {
  case 0 ... 31:
   mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPS |
        V_CP115_STANDALONE));
   break;
  case 32 ... 38:
   mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM |
        V_CP115_STANDALONE));
   break;
  case 39 ... 43:
   mvebu_pinctrl_assign_variant(m, (V_ARMADA_8K_CPM |
        V_CP115_STANDALONE));
   break;
  case 44 ... 62:
   mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM |
        V_CP115_STANDALONE));
   break;
  }
 }
 pdev->dev.platform_data = soc;

 return mvebu_pinctrl_simple_regmap_probe(pdev, pdev->dev.parent, 0);
}

static struct platform_driver armada_cp110_pinctrl_driver = {
 .driver = {
  .name = "armada-cp110-pinctrl",
  .of_match_table = of_match_ptr(armada_cp110_pinctrl_of_match),
 },
 .probe = armada_cp110_pinctrl_probe,
};

builtin_platform_driver(armada_cp110_pinctrl_driver);

Messung V0.5
C=97 H=94 G=95

¤ Dauer der Verarbeitung: 0.9 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.