aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>2015-06-09 12:47:26 -0400
committerLinus Walleij <linus.walleij@linaro.org>2015-06-10 08:36:34 -0400
commite73ac02dc132dcef1add62a1fac3e77a7ce17371 (patch)
tree94ae594f484f16b8501028823d1f9b0fcd2dee07
parent6afc0c0f5bcffd3d0c47d464b02030d54aac91bf (diff)
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>
-rw-r--r--Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt30
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-39x.c40
2 files changed, 39 insertions, 31 deletions
diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt
index bceb6c59a649..a40b60f1ca4c 100644
--- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt
@@ -4,8 +4,9 @@ Please refer to marvell,mvebu-pinctrl.txt in this directory for common binding
4part and usage. 4part and usage.
5 5
6Required properties: 6Required properties:
7- compatible: "marvell,88f6920-pinctrl", "marvell,88f6928-pinctrl" 7- compatible: "marvell,88f6920-pinctrl", "marvell,88f6925-pinctrl" or
8 depending on the specific variant of the SoC being used. 8 "marvell,88f6928-pinctrl" depending on the specific variant of the
9 SoC being used.
9- reg: register specifier of MPP registers 10- reg: register specifier of MPP registers
10 11
11Available mpp pins/groups and functions: 12Available mpp pins/groups and functions:
@@ -59,19 +60,19 @@ mpp40 40 gpio, i2c1(sda), ua0(rts), sd0(d2), dev(ad6), ge(rxd3)
59mpp41 41 gpio, ua1(rxd), ua0(cts), spi1(cs3), dev(burst/last), nand(rb0), ge(rxctl) 60mpp41 41 gpio, ua1(rxd), ua0(cts), spi1(cs3), dev(burst/last), nand(rb0), ge(rxctl)
60mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7) 61mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7)
61mpp43 43 gpio, pcie0(clkreq), dram(vttctrl), dram(deccerr), spi1(cs2), dev(clkout), nand(rb1) 62mpp43 43 gpio, pcie0(clkreq), dram(vttctrl), dram(deccerr), spi1(cs2), dev(clkout), nand(rb1)
62mpp44 44 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [1], 63mpp44 44 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [2],
63 sata3(prsnt) [1], led(clk) 64 sata3(prsnt) [2], led(clk)
64mpp45 45 gpio, ref(clk), pcie0(rstout), ua1(rxd) 65mpp45 45 gpio, ref(clk), pcie0(rstout), ua1(rxd)
65mpp46 46 gpio, ref(clk), pcie0(rstout), ua1(txd), led(stb) 66mpp46 46 gpio, ref(clk), pcie0(rstout), ua1(txd), led(stb)
66mpp47 47 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [1], 67mpp47 47 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [2],
67 sata3(prsnt) [1], led(data) 68 sata3(prsnt) [2], led(data)
68mpp48 48 gpio, sata0(prsnt) [1], dram(vttctrl), tdm(pclk) [1], audio(mclk) [1], sd0(d4), pcie0(clkreq), ua1(txd) 69mpp48 48 gpio, sata0(prsnt) [1], dram(vttctrl), tdm(pclk) [2], audio(mclk) [2], sd0(d4), pcie0(clkreq), ua1(txd)
69mpp49 49 gpio, sata2(prsnt) [1], sata3(prsnt) [1], tdm(fsync) [1], 70mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm(fsync) [2],
70 audio(lrclk) [1], sd0(d5), ua2(rxd) 71 audio(lrclk) [2], sd0(d5), ua2(rxd)
71mpp50 50 gpio, pcie0(rstout), tdm(drx) [1], audio(extclk) [1], sd0(cmd), ua2(rxd) 72mpp50 50 gpio, pcie0(rstout), tdm(drx) [2], audio(extclk) [2], sd0(cmd), ua2(rxd)
72mpp51 51 gpio, tdm(dtx) [1], audio(sdo) [1], dram(deccerr), ua2(txd) 73mpp51 51 gpio, tdm(dtx) [2], audio(sdo) [2], dram(deccerr), ua2(txd)
73mpp52 52 gpio, pcie0(rstout), tdm(int) [1], audio(sdi) [1], sd0(d6), i2c3(sck) 74mpp52 52 gpio, pcie0(rstout), tdm(int) [2], audio(sdi) [2], sd0(d6), i2c3(sck)
74mpp53 53 gpio, sata1(prsnt) [1], sata0(prsnt) [1], tdm(rst) [1], audio(bclk) [1], sd0(d7), i2c3(sda) 75mpp53 53 gpio, sata1(prsnt) [1], sata0(prsnt) [1], tdm(rst) [2], audio(bclk) [2], sd0(d7), i2c3(sda)
75mpp54 54 gpio, sata0(prsnt) [1], sata1(prsnt) [1], pcie0(rstout), sd0(d3), ua3(txd) 76mpp54 54 gpio, sata0(prsnt) [1], sata1(prsnt) [1], pcie0(rstout), sd0(d3), ua3(txd)
76mpp55 55 gpio, ua1(cts), spi1(cs1), sd0(d0), ua1(rxd), ua3(rxd) 77mpp55 55 gpio, ua1(cts), spi1(cs1), sd0(d0), ua1(rxd), ua3(rxd)
77mpp56 56 gpio, ua1(rts), dram(deccerr), spi1(mosi), ua1(txd) 78mpp56 56 gpio, ua1(rts), dram(deccerr), spi1(mosi), ua1(txd)
@@ -79,4 +80,5 @@ mpp57 57 gpio, spi1(sck), sd0(clk), ua1(txd)
79mpp58 58 gpio, i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1), ua1(rxd) 80mpp58 58 gpio, i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1), ua1(rxd)
80mpp59 59 gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd0(d2) 81mpp59 59 gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd0(d2)
81 82
82[1]: only available on 88F6928 83[1]: only available on 88F6925/88F6928
84[2]: only available on 88F6928
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-39x.c b/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
index bae1199486f3..fcfe9b478a2e 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
@@ -36,8 +36,10 @@ static int armada_39x_mpp_ctrl_set(unsigned pid, unsigned long config)
36 36
37enum { 37enum {
38 V_88F6920 = BIT(0), 38 V_88F6920 = BIT(0),
39 V_88F6928 = BIT(1), 39 V_88F6925 = BIT(1),
40 V_88F6920_PLUS = (V_88F6920 | V_88F6928), 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
43static struct mvebu_mpp_mode armada_39x_mpp_modes[] = { 45static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
@@ -117,8 +119,8 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
117 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 119 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
118 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6920_PLUS), 120 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6920_PLUS),
119 MPP_VAR_FUNCTION(4, "spi0", "sck", V_88F6920_PLUS), 121 MPP_VAR_FUNCTION(4, "spi0", "sck", V_88F6920_PLUS),
120 MPP_VAR_FUNCTION(5, "sata1", "prsnt", V_88F6928), 122 MPP_VAR_FUNCTION(5, "sata1", "prsnt", V_88F6925_PLUS),
121 MPP_VAR_FUNCTION(6, "sata0", "prsnt", V_88F6928), 123 MPP_VAR_FUNCTION(6, "sata0", "prsnt", V_88F6925_PLUS),
122 MPP_VAR_FUNCTION(7, "smi", "mdio", V_88F6920_PLUS)), 124 MPP_VAR_FUNCTION(7, "smi", "mdio", V_88F6920_PLUS)),
123 MPP_MODE(18, 125 MPP_MODE(18,
124 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 126 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
@@ -127,23 +129,23 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
127 MPP_VAR_FUNCTION(7, "i2c2", "sck", V_88F6920_PLUS)), 129 MPP_VAR_FUNCTION(7, "i2c2", "sck", V_88F6920_PLUS)),
128 MPP_MODE(19, 130 MPP_MODE(19,
129 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 131 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
130 MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6928), 132 MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6925_PLUS),
131 MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6920_PLUS), 133 MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6920_PLUS),
132 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS), 134 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS),
133 MPP_VAR_FUNCTION(7, "i2c2", "sda", V_88F6920_PLUS)), 135 MPP_VAR_FUNCTION(7, "i2c2", "sda", V_88F6920_PLUS)),
134 MPP_MODE(20, 136 MPP_MODE(20,
135 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 137 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
136 MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6928), 138 MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6925_PLUS),
137 MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6920_PLUS), 139 MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6920_PLUS),
138 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS), 140 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS),
139 MPP_VAR_FUNCTION(7, "smi", "mdc", V_88F6920_PLUS)), 141 MPP_VAR_FUNCTION(7, "smi", "mdc", V_88F6920_PLUS)),
140 MPP_MODE(21, 142 MPP_MODE(21,
141 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 143 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
142 MPP_VAR_FUNCTION(1, "spi0", "cs1", V_88F6920_PLUS), 144 MPP_VAR_FUNCTION(1, "spi0", "cs1", V_88F6920_PLUS),
143 MPP_VAR_FUNCTION(3, "sata0", "prsnt", V_88F6928), 145 MPP_VAR_FUNCTION(3, "sata0", "prsnt", V_88F6925_PLUS),
144 MPP_VAR_FUNCTION(4, "sd0", "cmd", V_88F6920_PLUS), 146 MPP_VAR_FUNCTION(4, "sd0", "cmd", V_88F6920_PLUS),
145 MPP_VAR_FUNCTION(5, "dev", "bootcs", V_88F6920_PLUS), 147 MPP_VAR_FUNCTION(5, "dev", "bootcs", V_88F6920_PLUS),
146 MPP_VAR_FUNCTION(6, "sata1", "prsnt", V_88F6928), 148 MPP_VAR_FUNCTION(6, "sata1", "prsnt", V_88F6925_PLUS),
147 MPP_VAR_FUNCTION(8, "ge", "rxd0", V_88F6920_PLUS)), 149 MPP_VAR_FUNCTION(8, "ge", "rxd0", V_88F6920_PLUS)),
148 MPP_MODE(22, 150 MPP_MODE(22,
149 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 151 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
@@ -263,8 +265,8 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
263 MPP_VAR_FUNCTION(6, "nand", "rb1", V_88F6920_PLUS)), 265 MPP_VAR_FUNCTION(6, "nand", "rb1", V_88F6920_PLUS)),
264 MPP_MODE(44, 266 MPP_MODE(44,
265 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 267 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
266 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6928), 268 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS),
267 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6928), 269 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS),
268 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6928), 270 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6928),
269 MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6928), 271 MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6928),
270 MPP_VAR_FUNCTION(7, "led", "clk", V_88F6920_PLUS)), 272 MPP_VAR_FUNCTION(7, "led", "clk", V_88F6920_PLUS)),
@@ -281,14 +283,14 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
281 MPP_VAR_FUNCTION(7, "led", "stb", V_88F6920_PLUS)), 283 MPP_VAR_FUNCTION(7, "led", "stb", V_88F6920_PLUS)),
282 MPP_MODE(47, 284 MPP_MODE(47,
283 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 285 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
284 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6928), 286 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS),
285 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6928), 287 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS),
286 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6928), 288 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6928),
287 MPP_VAR_FUNCTION(5, "sata3", "prsnt", V_88F6928), 289 MPP_VAR_FUNCTION(5, "sata3", "prsnt", V_88F6928),
288 MPP_VAR_FUNCTION(7, "led", "data", V_88F6920_PLUS)), 290 MPP_VAR_FUNCTION(7, "led", "data", V_88F6920_PLUS)),
289 MPP_MODE(48, 291 MPP_MODE(48,
290 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 292 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
291 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6928), 293 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS),
292 MPP_VAR_FUNCTION(2, "dram", "vttctrl", V_88F6920_PLUS), 294 MPP_VAR_FUNCTION(2, "dram", "vttctrl", V_88F6920_PLUS),
293 MPP_VAR_FUNCTION(3, "tdm", "pclk", V_88F6928), 295 MPP_VAR_FUNCTION(3, "tdm", "pclk", V_88F6928),
294 MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6928), 296 MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6928),
@@ -325,16 +327,16 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
325 MPP_VAR_FUNCTION(7, "i2c3", "sck", V_88F6920_PLUS)), 327 MPP_VAR_FUNCTION(7, "i2c3", "sck", V_88F6920_PLUS)),
326 MPP_MODE(53, 328 MPP_MODE(53,
327 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 329 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
328 MPP_VAR_FUNCTION(1, "sata1", "prsnt", V_88F6928), 330 MPP_VAR_FUNCTION(1, "sata1", "prsnt", V_88F6925_PLUS),
329 MPP_VAR_FUNCTION(2, "sata0", "prsnt", V_88F6928), 331 MPP_VAR_FUNCTION(2, "sata0", "prsnt", V_88F6925_PLUS),
330 MPP_VAR_FUNCTION(3, "tdm", "rst", V_88F6928), 332 MPP_VAR_FUNCTION(3, "tdm", "rst", V_88F6928),
331 MPP_VAR_FUNCTION(4, "audio", "bclk", V_88F6928), 333 MPP_VAR_FUNCTION(4, "audio", "bclk", V_88F6928),
332 MPP_VAR_FUNCTION(5, "sd0", "d7", V_88F6920_PLUS), 334 MPP_VAR_FUNCTION(5, "sd0", "d7", V_88F6920_PLUS),
333 MPP_VAR_FUNCTION(7, "i2c3", "sda", V_88F6920_PLUS)), 335 MPP_VAR_FUNCTION(7, "i2c3", "sda", V_88F6920_PLUS)),
334 MPP_MODE(54, 336 MPP_MODE(54,
335 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 337 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
336 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6928), 338 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS),
337 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6928), 339 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS),
338 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6920_PLUS), 340 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6920_PLUS),
339 MPP_VAR_FUNCTION(5, "sd0", "d3", V_88F6920_PLUS), 341 MPP_VAR_FUNCTION(5, "sd0", "d3", V_88F6920_PLUS),
340 MPP_VAR_FUNCTION(7, "ua3", "txd", V_88F6920_PLUS)), 342 MPP_VAR_FUNCTION(7, "ua3", "txd", V_88F6920_PLUS)),
@@ -379,6 +381,10 @@ static const struct of_device_id armada_39x_pinctrl_of_match[] = {
379 .data = (void *) V_88F6920, 381 .data = (void *) V_88F6920,
380 }, 382 },
381 { 383 {
384 .compatible = "marvell,mv88f6925-pinctrl",
385 .data = (void *) V_88F6925,
386 },
387 {
382 .compatible = "marvell,mv88f6928-pinctrl", 388 .compatible = "marvell,mv88f6928-pinctrl",
383 .data = (void *) V_88F6928, 389 .data = (void *) V_88F6928,
384 }, 390 },