Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Thomas Petazzoni and committed by
Linus Walleij
e73ac02d 6afc0c0f

+39 -31
+16 -14
Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt
··· 4 4 part and usage. 5 5 6 6 Required properties: 7 - - compatible: "marvell,88f6920-pinctrl", "marvell,88f6928-pinctrl" 8 - depending on the specific variant of the SoC being used. 7 + - compatible: "marvell,88f6920-pinctrl", "marvell,88f6925-pinctrl" or 8 + "marvell,88f6928-pinctrl" depending on the specific variant of the 9 + SoC being used. 9 10 - reg: register specifier of MPP registers 10 11 11 12 Available mpp pins/groups and functions: ··· 60 59 mpp41 41 gpio, ua1(rxd), ua0(cts), spi1(cs3), dev(burst/last), nand(rb0), ge(rxctl) 61 60 mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7) 62 61 mpp43 43 gpio, pcie0(clkreq), dram(vttctrl), dram(deccerr), spi1(cs2), dev(clkout), nand(rb1) 63 - mpp44 44 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [1], 64 - sata3(prsnt) [1], led(clk) 62 + mpp44 44 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [2], 63 + sata3(prsnt) [2], led(clk) 65 64 mpp45 45 gpio, ref(clk), pcie0(rstout), ua1(rxd) 66 65 mpp46 46 gpio, ref(clk), pcie0(rstout), ua1(txd), led(stb) 67 - mpp47 47 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [1], 68 - sata3(prsnt) [1], led(data) 69 - mpp48 48 gpio, sata0(prsnt) [1], dram(vttctrl), tdm(pclk) [1], audio(mclk) [1], sd0(d4), pcie0(clkreq), ua1(txd) 70 - mpp49 49 gpio, sata2(prsnt) [1], sata3(prsnt) [1], tdm(fsync) [1], 71 - audio(lrclk) [1], sd0(d5), ua2(rxd) 72 - mpp50 50 gpio, pcie0(rstout), tdm(drx) [1], audio(extclk) [1], sd0(cmd), ua2(rxd) 73 - mpp51 51 gpio, tdm(dtx) [1], audio(sdo) [1], dram(deccerr), ua2(txd) 74 - mpp52 52 gpio, pcie0(rstout), tdm(int) [1], audio(sdi) [1], sd0(d6), i2c3(sck) 75 - mpp53 53 gpio, sata1(prsnt) [1], sata0(prsnt) [1], tdm(rst) [1], audio(bclk) [1], sd0(d7), i2c3(sda) 66 + mpp47 47 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [2], 67 + sata3(prsnt) [2], led(data) 68 + mpp48 48 gpio, sata0(prsnt) [1], dram(vttctrl), tdm(pclk) [2], audio(mclk) [2], sd0(d4), pcie0(clkreq), ua1(txd) 69 + mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm(fsync) [2], 70 + audio(lrclk) [2], sd0(d5), ua2(rxd) 71 + mpp50 50 gpio, pcie0(rstout), tdm(drx) [2], audio(extclk) [2], sd0(cmd), ua2(rxd) 72 + mpp51 51 gpio, tdm(dtx) [2], audio(sdo) [2], dram(deccerr), ua2(txd) 73 + mpp52 52 gpio, pcie0(rstout), tdm(int) [2], audio(sdi) [2], sd0(d6), i2c3(sck) 74 + mpp53 53 gpio, sata1(prsnt) [1], sata0(prsnt) [1], tdm(rst) [2], audio(bclk) [2], sd0(d7), i2c3(sda) 76 75 mpp54 54 gpio, sata0(prsnt) [1], sata1(prsnt) [1], pcie0(rstout), sd0(d3), ua3(txd) 77 76 mpp55 55 gpio, ua1(cts), spi1(cs1), sd0(d0), ua1(rxd), ua3(rxd) 78 77 mpp56 56 gpio, ua1(rts), dram(deccerr), spi1(mosi), ua1(txd) ··· 80 79 mpp58 58 gpio, i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1), ua1(rxd) 81 80 mpp59 59 gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd0(d2) 82 81 83 - [1]: only available on 88F6928 82 + [1]: only available on 88F6925/88F6928 83 + [2]: only available on 88F6928
+23 -17
drivers/pinctrl/mvebu/pinctrl-armada-39x.c
··· 36 36 37 37 enum { 38 38 V_88F6920 = BIT(0), 39 - V_88F6928 = BIT(1), 40 - V_88F6920_PLUS = (V_88F6920 | V_88F6928), 39 + V_88F6925 = BIT(1), 40 + V_88F6928 = BIT(2), 41 + V_88F6920_PLUS = (V_88F6920 | V_88F6925 | V_88F6928), 42 + V_88F6925_PLUS = (V_88F6925 | V_88F6928), 41 43 }; 42 44 43 45 static struct mvebu_mpp_mode armada_39x_mpp_modes[] = { ··· 119 117 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 120 118 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6920_PLUS), 121 119 MPP_VAR_FUNCTION(4, "spi0", "sck", V_88F6920_PLUS), 122 - MPP_VAR_FUNCTION(5, "sata1", "prsnt", V_88F6928), 123 - MPP_VAR_FUNCTION(6, "sata0", "prsnt", V_88F6928), 120 + MPP_VAR_FUNCTION(5, "sata1", "prsnt", V_88F6925_PLUS), 121 + MPP_VAR_FUNCTION(6, "sata0", "prsnt", V_88F6925_PLUS), 124 122 MPP_VAR_FUNCTION(7, "smi", "mdio", V_88F6920_PLUS)), 125 123 MPP_MODE(18, 126 124 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), ··· 129 127 MPP_VAR_FUNCTION(7, "i2c2", "sck", V_88F6920_PLUS)), 130 128 MPP_MODE(19, 131 129 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 132 - MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6928), 130 + MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6925_PLUS), 133 131 MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6920_PLUS), 134 132 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS), 135 133 MPP_VAR_FUNCTION(7, "i2c2", "sda", V_88F6920_PLUS)), 136 134 MPP_MODE(20, 137 135 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 138 - MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6928), 136 + MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6925_PLUS), 139 137 MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6920_PLUS), 140 138 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS), 141 139 MPP_VAR_FUNCTION(7, "smi", "mdc", V_88F6920_PLUS)), 142 140 MPP_MODE(21, 143 141 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 144 142 MPP_VAR_FUNCTION(1, "spi0", "cs1", V_88F6920_PLUS), 145 - MPP_VAR_FUNCTION(3, "sata0", "prsnt", V_88F6928), 143 + MPP_VAR_FUNCTION(3, "sata0", "prsnt", V_88F6925_PLUS), 146 144 MPP_VAR_FUNCTION(4, "sd0", "cmd", V_88F6920_PLUS), 147 145 MPP_VAR_FUNCTION(5, "dev", "bootcs", V_88F6920_PLUS), 148 - MPP_VAR_FUNCTION(6, "sata1", "prsnt", V_88F6928), 146 + MPP_VAR_FUNCTION(6, "sata1", "prsnt", V_88F6925_PLUS), 149 147 MPP_VAR_FUNCTION(8, "ge", "rxd0", V_88F6920_PLUS)), 150 148 MPP_MODE(22, 151 149 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), ··· 265 263 MPP_VAR_FUNCTION(6, "nand", "rb1", V_88F6920_PLUS)), 266 264 MPP_MODE(44, 267 265 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 268 - MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6928), 269 - MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6928), 266 + MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS), 267 + MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS), 270 268 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6928), 271 269 MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6928), 272 270 MPP_VAR_FUNCTION(7, "led", "clk", V_88F6920_PLUS)), ··· 283 281 MPP_VAR_FUNCTION(7, "led", "stb", V_88F6920_PLUS)), 284 282 MPP_MODE(47, 285 283 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 286 - MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6928), 287 - MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6928), 284 + MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS), 285 + MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS), 288 286 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6928), 289 287 MPP_VAR_FUNCTION(5, "sata3", "prsnt", V_88F6928), 290 288 MPP_VAR_FUNCTION(7, "led", "data", V_88F6920_PLUS)), 291 289 MPP_MODE(48, 292 290 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 293 - MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6928), 291 + MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS), 294 292 MPP_VAR_FUNCTION(2, "dram", "vttctrl", V_88F6920_PLUS), 295 293 MPP_VAR_FUNCTION(3, "tdm", "pclk", V_88F6928), 296 294 MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6928), ··· 327 325 MPP_VAR_FUNCTION(7, "i2c3", "sck", V_88F6920_PLUS)), 328 326 MPP_MODE(53, 329 327 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 330 - MPP_VAR_FUNCTION(1, "sata1", "prsnt", V_88F6928), 331 - MPP_VAR_FUNCTION(2, "sata0", "prsnt", V_88F6928), 328 + MPP_VAR_FUNCTION(1, "sata1", "prsnt", V_88F6925_PLUS), 329 + MPP_VAR_FUNCTION(2, "sata0", "prsnt", V_88F6925_PLUS), 332 330 MPP_VAR_FUNCTION(3, "tdm", "rst", V_88F6928), 333 331 MPP_VAR_FUNCTION(4, "audio", "bclk", V_88F6928), 334 332 MPP_VAR_FUNCTION(5, "sd0", "d7", V_88F6920_PLUS), 335 333 MPP_VAR_FUNCTION(7, "i2c3", "sda", V_88F6920_PLUS)), 336 334 MPP_MODE(54, 337 335 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 338 - MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6928), 339 - MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6928), 336 + MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS), 337 + MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS), 340 338 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6920_PLUS), 341 339 MPP_VAR_FUNCTION(5, "sd0", "d3", V_88F6920_PLUS), 342 340 MPP_VAR_FUNCTION(7, "ua3", "txd", V_88F6920_PLUS)), ··· 379 377 { 380 378 .compatible = "marvell,mv88f6920-pinctrl", 381 379 .data = (void *) V_88F6920, 380 + }, 381 + { 382 + .compatible = "marvell,mv88f6925-pinctrl", 383 + .data = (void *) V_88F6925, 382 384 }, 383 385 { 384 386 .compatible = "marvell,mv88f6928-pinctrl",