Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e73ac02d authored by Thomas Petazzoni's avatar Thomas Petazzoni Committed by Linus Walleij
Browse files

pinctrl: mvebu: armada-39x: add support for Armada 395 variant



The Armada 39x SoC family has grown a new variant, the Armada 395,
which sits between the Armada 390 and Armada 398 in terms of
features. This commit adds support for this additional variant to the
Armada 39x pinctrl driver.

Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 6afc0c0f
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
@@ -4,8 +4,9 @@ Please refer to marvell,mvebu-pinctrl.txt in this directory for common binding
part and usage.

Required properties:
- compatible: "marvell,88f6920-pinctrl", "marvell,88f6928-pinctrl"
  depending on the specific variant of the SoC being used.
- compatible: "marvell,88f6920-pinctrl", "marvell,88f6925-pinctrl" or
  "marvell,88f6928-pinctrl" depending on the specific variant of the
  SoC being used.
- reg: register specifier of MPP registers

Available mpp pins/groups and functions:
@@ -59,19 +60,19 @@ mpp40 40 gpio, i2c1(sda), ua0(rts), sd0(d2), dev(ad6), ge(rxd3)
mpp41	41	gpio, ua1(rxd), ua0(cts), spi1(cs3), dev(burst/last), nand(rb0), ge(rxctl)
mpp42	42	gpio, ua1(txd), ua0(rts), dev(ad7)
mpp43	43	gpio, pcie0(clkreq), dram(vttctrl), dram(deccerr), spi1(cs2), dev(clkout), nand(rb1)
mpp44	44	gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [1],
                sata3(prsnt) [1], led(clk)
mpp44	44	gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [2],
                sata3(prsnt) [2], led(clk)
mpp45	45	gpio, ref(clk), pcie0(rstout), ua1(rxd)
mpp46	46	gpio, ref(clk), pcie0(rstout), ua1(txd), led(stb)
mpp47	47	gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [1],
                sata3(prsnt) [1], led(data)
mpp48	48	gpio, sata0(prsnt) [1], dram(vttctrl), tdm(pclk) [1], audio(mclk) [1], sd0(d4), pcie0(clkreq), ua1(txd)
mpp49	49	gpio, sata2(prsnt) [1], sata3(prsnt) [1], tdm(fsync) [1],
                audio(lrclk) [1], sd0(d5), ua2(rxd)
mpp50	50	gpio, pcie0(rstout), tdm(drx) [1], audio(extclk) [1], sd0(cmd), ua2(rxd)
mpp51	51	gpio, tdm(dtx) [1], audio(sdo) [1], dram(deccerr), ua2(txd)
mpp52	52	gpio, pcie0(rstout), tdm(int) [1], audio(sdi) [1], sd0(d6), i2c3(sck)
mpp53	53	gpio, sata1(prsnt) [1], sata0(prsnt) [1], tdm(rst) [1], audio(bclk) [1], sd0(d7), i2c3(sda)
mpp47	47	gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [2],
                sata3(prsnt) [2], led(data)
mpp48	48	gpio, sata0(prsnt) [1], dram(vttctrl), tdm(pclk) [2], audio(mclk) [2], sd0(d4), pcie0(clkreq), ua1(txd)
mpp49	49	gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm(fsync) [2],
                audio(lrclk) [2], sd0(d5), ua2(rxd)
mpp50	50	gpio, pcie0(rstout), tdm(drx) [2], audio(extclk) [2], sd0(cmd), ua2(rxd)
mpp51	51	gpio, tdm(dtx) [2], audio(sdo) [2], dram(deccerr), ua2(txd)
mpp52	52	gpio, pcie0(rstout), tdm(int) [2], audio(sdi) [2], sd0(d6), i2c3(sck)
mpp53	53	gpio, sata1(prsnt) [1], sata0(prsnt) [1], tdm(rst) [2], audio(bclk) [2], sd0(d7), i2c3(sda)
mpp54	54	gpio, sata0(prsnt) [1], sata1(prsnt) [1], pcie0(rstout), sd0(d3), ua3(txd)
mpp55	55	gpio, ua1(cts), spi1(cs1), sd0(d0), ua1(rxd), ua3(rxd)
mpp56	56	gpio, ua1(rts), dram(deccerr), spi1(mosi), ua1(txd)
@@ -79,4 +80,5 @@ mpp57 57 gpio, spi1(sck), sd0(clk), ua1(txd)
mpp58	58	gpio, i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1), ua1(rxd)
mpp59	59	gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd0(d2)

[1]: only available on 88F6928
[1]: only available on 88F6925/88F6928
[2]: only available on 88F6928
+23 −17
Original line number Diff line number Diff line
@@ -36,8 +36,10 @@ static int armada_39x_mpp_ctrl_set(unsigned pid, unsigned long config)

enum {
	V_88F6920 = BIT(0),
	V_88F6928 = BIT(1),
	V_88F6920_PLUS = (V_88F6920 | V_88F6928),
	V_88F6925 = BIT(1),
	V_88F6928 = BIT(2),
	V_88F6920_PLUS = (V_88F6920 | V_88F6925 | V_88F6928),
	V_88F6925_PLUS = (V_88F6925 | V_88F6928),
};

static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
@@ -117,8 +119,8 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(3, "ua1",     "rxd",      V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(4, "spi0",    "sck",      V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(5, "sata1",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(6, "sata0",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(5, "sata1",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(6, "sata0",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(7, "smi",     "mdio",     V_88F6920_PLUS)),
	MPP_MODE(18,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
@@ -127,23 +129,23 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
		 MPP_VAR_FUNCTION(7, "i2c2",    "sck",      V_88F6920_PLUS)),
	MPP_MODE(19,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(4, "sata1",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(4, "sata1",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(5, "ua0",     "cts",      V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(6, "ua1",     "rxd",      V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(7, "i2c2",    "sda",      V_88F6920_PLUS)),
	MPP_MODE(20,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(4, "sata0",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(4, "sata0",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(5, "ua0",     "rts",      V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(6, "ua1",     "txd",      V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(7, "smi",     "mdc",      V_88F6920_PLUS)),
	MPP_MODE(21,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(1, "spi0",    "cs1",      V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(3, "sata0",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(3, "sata0",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(4, "sd0",     "cmd",      V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(5, "dev",     "bootcs",   V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(6, "sata1",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(6, "sata1",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(8, "ge",      "rxd0",     V_88F6920_PLUS)),
	MPP_MODE(22,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
@@ -263,8 +265,8 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
		 MPP_VAR_FUNCTION(6, "nand",    "rb1",      V_88F6920_PLUS)),
	MPP_MODE(44,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(3, "sata2",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(4, "sata3",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(7, "led",     "clk",      V_88F6920_PLUS)),
@@ -281,14 +283,14 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
		 MPP_VAR_FUNCTION(7, "led",     "stb",      V_88F6920_PLUS)),
	MPP_MODE(47,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(3, "sata2",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(5, "sata3",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(7, "led",     "data",     V_88F6920_PLUS)),
	MPP_MODE(48,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(2, "dram",    "vttctrl",  V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(3, "tdm",     "pclk",     V_88F6928),
		 MPP_VAR_FUNCTION(4, "audio",   "mclk",     V_88F6928),
@@ -325,16 +327,16 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
		 MPP_VAR_FUNCTION(7, "i2c3",    "sck",      V_88F6920_PLUS)),
	MPP_MODE(53,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(1, "sata1",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(2, "sata0",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(1, "sata1",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(2, "sata0",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(3, "tdm",     "rst",      V_88F6928),
		 MPP_VAR_FUNCTION(4, "audio",   "bclk",     V_88F6928),
		 MPP_VAR_FUNCTION(5, "sd0",     "d7",       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(7, "i2c3",    "sda",      V_88F6920_PLUS)),
	MPP_MODE(54,
		 MPP_VAR_FUNCTION(0, "gpio",    NULL,       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6928),
		 MPP_VAR_FUNCTION(1, "sata0",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(2, "sata1",   "prsnt",    V_88F6925_PLUS),
		 MPP_VAR_FUNCTION(3, "pcie0",   "rstout",   V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(5, "sd0",     "d3",       V_88F6920_PLUS),
		 MPP_VAR_FUNCTION(7, "ua3",     "txd",      V_88F6920_PLUS)),
@@ -378,6 +380,10 @@ static const struct of_device_id armada_39x_pinctrl_of_match[] = {
		.compatible = "marvell,mv88f6920-pinctrl",
		.data       = (void *) V_88F6920,
	},
	{
		.compatible = "marvell,mv88f6925-pinctrl",
		.data       = (void *) V_88F6925,
	},
	{
		.compatible = "marvell,mv88f6928-pinctrl",
		.data       = (void *) V_88F6928,