[PATCH 26/26] pinctrl: add support for sta2x11 (via pinctrl-nomadik)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Signed-off-by: Davide Ciminaghi <ciminaghi@xxxxxxxxx>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@xxxxxx>
---
 .../devicetree/bindings/pinctrl/ste,nomadik.txt    |    2 +-
 drivers/pinctrl/Kconfig                            |    6 +-
 drivers/pinctrl/Makefile                           |    1 +
 drivers/pinctrl/pinctrl-nomadik-sta2x11.c          |  578 ++++++++++++++++++++
 drivers/pinctrl/pinctrl-nomadik.c                  |    7 +
 drivers/pinctrl/pinctrl-nomadik.h                  |   14 +
 6 files changed, 606 insertions(+), 2 deletions(-)
 create mode 100644 drivers/pinctrl/pinctrl-nomadik-sta2x11.c

diff --git a/Documentation/devicetree/bindings/pinctrl/ste,nomadik.txt b/Documentation/devicetree/bindings/pinctrl/ste,nomadik.txt
index 9a2f3f4..3361894 100644
--- a/Documentation/devicetree/bindings/pinctrl/ste,nomadik.txt
+++ b/Documentation/devicetree/bindings/pinctrl/ste,nomadik.txt
@@ -2,7 +2,7 @@ ST Ericsson Nomadik pinmux controller
 
 Required properties:
 - compatible: "stericsson,nmk-pinctrl", "stericsson,nmk-pinctrl-db8540",
-              "stericsson,nmk-pinctrl-stn8815"
+              "stericsson,nmk-pinctrl-stn8815", "stericsson,nmk-pinctrl-sta2x11"
 - reg: Should contain the register physical address and length of the PRCMU.
 
 Please refer to pinctrl-bindings.txt in this directory for details of the
diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig
index bc830af..be2977f 100644
--- a/drivers/pinctrl/Kconfig
+++ b/drivers/pinctrl/Kconfig
@@ -154,7 +154,7 @@ config PINCTRL_IMX28
 
 config PINCTRL_NOMADIK
 	bool "Nomadik pin controller driver"
-	depends on ARCH_U8500 || ARCH_NOMADIK
+	depends on ARCH_U8500 || ARCH_NOMADIK || STA2X11
 	select PINMUX
 	select PINCONF
 
@@ -176,6 +176,10 @@ config PINCTRL_ROCKCHIP
 	select GENERIC_PINCONF
 	select GENERIC_IRQ_CHIP
 
+config PINCTRL_STA2X11
+       bool "STA2X11 pin controller driver"
+       depends on PINCTRL_NOMADIK && STA2X11
+
 config PINCTRL_SINGLE
 	tristate "One-register-per-pin type device tree based pinctrl driver"
 	depends on OF
diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile
index d64563bf..24efd71 100644
--- a/drivers/pinctrl/Makefile
+++ b/drivers/pinctrl/Makefile
@@ -32,6 +32,7 @@ obj-$(CONFIG_PINCTRL_NOMADIK)	+= pinctrl-nomadik.o
 obj-$(CONFIG_PINCTRL_STN8815)	+= pinctrl-nomadik-stn8815.o
 obj-$(CONFIG_PINCTRL_DB8500)	+= pinctrl-nomadik-db8500.o
 obj-$(CONFIG_PINCTRL_DB8540)	+= pinctrl-nomadik-db8540.o
+obj-$(CONFIG_PINCTRL_STA2X11)	+= pinctrl-nomadik-sta2x11.o
 obj-$(CONFIG_PINCTRL_ROCKCHIP)	+= pinctrl-rockchip.o
 obj-$(CONFIG_PINCTRL_SINGLE)	+= pinctrl-single.o
 obj-$(CONFIG_PINCTRL_SIRF)	+= sirf/
diff --git a/drivers/pinctrl/pinctrl-nomadik-sta2x11.c b/drivers/pinctrl/pinctrl-nomadik-sta2x11.c
new file mode 100644
index 0000000..0a4e3c7
--- /dev/null
+++ b/drivers/pinctrl/pinctrl-nomadik-sta2x11.c
@@ -0,0 +1,578 @@
+#include <linux/kernel.h>
+#include <linux/pinctrl/pinctrl.h>
+#include "pinctrl-nomadik.h"
+
+/* All the pins that can be used for GPIO and some other functions */
+#define _GPIO(offset)		(offset)
+
+#define STA2X11_PIN_F6		_GPIO(0)
+#define STA2X11_PIN_D5		_GPIO(1)
+#define STA2X11_PIN_E6		_GPIO(2)
+#define STA2X11_PIN_E7		_GPIO(3)
+#define STA2X11_PIN_E9		_GPIO(4)
+#define STA2X11_PIN_F7		_GPIO(5)
+#define STA2X11_PIN_E8		_GPIO(6)
+#define STA2X11_PIN_F8		_GPIO(7)
+#define STA2X11_PIN_D14		_GPIO(8)
+#define STA2X11_PIN_E13		_GPIO(9)
+#define STA2X11_PIN_D13		_GPIO(10)
+#define STA2X11_PIN_E12		_GPIO(11)
+#define STA2X11_PIN_C15		_GPIO(12)
+#define STA2X11_PIN_E14		_GPIO(13)
+#define STA2X11_PIN_D15		_GPIO(14)
+#define STA2X11_PIN_E15		_GPIO(15)
+#define STA2X11_PIN_A17		_GPIO(16)
+#define STA2X11_PIN_C16		_GPIO(17)
+#define STA2X11_PIN_C18		_GPIO(18)
+#define STA2X11_PIN_B19		_GPIO(19)
+#define STA2X11_PIN_C17		_GPIO(20)
+#define STA2X11_PIN_D16		_GPIO(21)
+#define STA2X11_PIN_B18		_GPIO(22)
+#define STA2X11_PIN_A18		_GPIO(23)
+#define STA2X11_PIN_G13		_GPIO(24)
+#define STA2X11_PIN_F14		_GPIO(25)
+#define STA2X11_PIN_F13		_GPIO(26)
+#define STA2X11_PIN_D18		_GPIO(27)
+#define STA2X11_PIN_D19		_GPIO(28)
+#define STA2X11_PIN_G14		_GPIO(29)
+#define STA2X11_PIN_E17		_GPIO(30)
+#define STA2X11_PIN_C19		_GPIO(31)
+#define STA2X11_PIN_E19		_GPIO(32)
+#define STA2X11_PIN_E16		_GPIO(33)
+#define STA2X11_PIN_H14		_GPIO(34)
+#define STA2X11_PIN_L13		_GPIO(35)
+#define STA2X11_PIN_N16		_GPIO(36)
+#define STA2X11_PIN_M16		_GPIO(37)
+#define STA2X11_PIN_N13		_GPIO(38)
+#define STA2X11_PIN_M14		_GPIO(39)
+#define STA2X11_PIN_N14		_GPIO(40)
+#define STA2X11_PIN_M15		_GPIO(41)
+#define STA2X11_PIN_P17		_GPIO(42)
+#define STA2X11_PIN_P15		_GPIO(43)
+#define STA2X11_PIN_R18		_GPIO(44)
+#define STA2X11_PIN_R17		_GPIO(45)
+#define STA2X11_PIN_T19		_GPIO(46)
+#define STA2X11_PIN_R16		_GPIO(47)
+#define STA2X11_PIN_T18		_GPIO(48)
+#define STA2X11_PIN_U17		_GPIO(49)
+#define STA2X11_PIN_T17		_GPIO(50)
+#define STA2X11_PIN_U16		_GPIO(51)
+#define STA2X11_PIN_T15		_GPIO(52)
+#define STA2X11_PIN_T16		_GPIO(53)
+#define STA2X11_PIN_R15		_GPIO(54)
+#define STA2X11_PIN_T14		_GPIO(55)
+#define STA2X11_PIN_U18		_GPIO(56)
+#define STA2X11_PIN_U19		_GPIO(57)
+#define STA2X11_PIN_V19		_GPIO(58)
+#define STA2X11_PIN_V18		_GPIO(59)
+#define STA2X11_PIN_P18		_GPIO(60)
+#define STA2X11_PIN_R19		_GPIO(61)
+#define STA2X11_PIN_V17		_GPIO(62)
+#define STA2X11_PIN_V16		_GPIO(63)
+#define STA2X11_PIN_W17		_GPIO(64)
+#define STA2X11_PIN_W16		_GPIO(65)
+#define STA2X11_PIN_P13		_GPIO(66)
+#define STA2X11_PIN_P14		_GPIO(67)
+#define STA2X11_PIN_R9		_GPIO(68)
+#define STA2X11_PIN_R8		_GPIO(69)
+#define STA2X11_PIN_P11		_GPIO(70)
+#define STA2X11_PIN_R7		_GPIO(71)
+#define STA2X11_PIN_P10		_GPIO(72)
+#define STA2X11_PIN_P9		_GPIO(73)
+#define STA2X11_PIN_P8		_GPIO(74)
+#define STA2X11_PIN_N6		_GPIO(75)
+#define STA2X11_PIN_P5		_GPIO(76)
+#define STA2X11_PIN_N5		_GPIO(77)
+#define STA2X11_PIN_P6		_GPIO(78)
+#define STA2X11_PIN_R5		_GPIO(79)
+#define STA2X11_PIN_R6		_GPIO(80)
+#define STA2X11_PIN_T6		_GPIO(81)
+#define STA2X11_PIN_T5		_GPIO(82)
+#define STA2X11_PIN_W6		_GPIO(83)
+#define STA2X11_PIN_V6		_GPIO(84)
+#define STA2X11_PIN_W5		_GPIO(85)
+#define STA2X11_PIN_V5		_GPIO(86)
+#define STA2X11_PIN_V4		_GPIO(87)
+#define STA2X11_PIN_U4		_GPIO(88)
+#define STA2X11_PIN_U3		_GPIO(89)
+#define STA2X11_PIN_T4		_GPIO(90)
+#define STA2X11_PIN_W4		_GPIO(91)
+#define STA2X11_PIN_W3		_GPIO(92)
+#define STA2X11_PIN_W2		_GPIO(93)
+#define STA2X11_PIN_V3		_GPIO(94)
+#define STA2X11_PIN_V2		_GPIO(95)
+#define STA2X11_PIN_R4		_GPIO(96)
+#define STA2X11_PIN_V1		_GPIO(97)
+#define STA2X11_PIN_M5		_GPIO(98)
+#define STA2X11_PIN_U2		_GPIO(99)
+#define STA2X11_PIN_T2		_GPIO(100)
+#define STA2X11_PIN_U1		_GPIO(101)
+#define STA2X11_PIN_T3		_GPIO(102)
+#define STA2X11_PIN_R3		_GPIO(103)
+#define STA2X11_PIN_M7		_GPIO(104)
+#define STA2X11_PIN_P4		_GPIO(105)
+#define STA2X11_PIN_R2		_GPIO(106)
+#define STA2X11_PIN_P2		_GPIO(107)
+#define STA2X11_PIN_M6		_GPIO(108)
+#define STA2X11_PIN_T1		_GPIO(109)
+#define STA2X11_PIN_L5		_GPIO(110)
+#define STA2X11_PIN_N3		_GPIO(111)
+#define STA2X11_PIN_P1		_GPIO(112)
+#define STA2X11_PIN_N2		_GPIO(113)
+#define STA2X11_PIN_R1		_GPIO(114)
+#define STA2X11_PIN_N4		_GPIO(115)
+#define STA2X11_PIN_P3		_GPIO(116)
+#define STA2X11_PIN_M4		_GPIO(117)
+#define STA2X11_PIN_K5		_GPIO(118)
+#define STA2X11_PIN_H2		_GPIO(119)
+#define STA2X11_PIN_H1		_GPIO(120)
+#define STA2X11_PIN_J3		_GPIO(121)
+#define STA2X11_PIN_H3		_GPIO(122)
+#define STA2X11_PIN_J4		_GPIO(123)
+#define STA2X11_PIN_J5		_GPIO(124)
+#define STA2X11_PIN_D3		_GPIO(125)
+#define STA2X11_PIN_F4		_GPIO(126)
+#define STA2X11_PIN_D4		_GPIO(127)
+
+/*
+ * The names of the pins are denoted by GPIO number and ball name, even
+ * though they can be used for other things than GPIO, this is the first
+ * column in the table of the data sheet and often used on schematics and
+ * such.
+ */
+static const struct pinctrl_pin_desc nmk_sta2x11_pins[] = {
+	PINCTRL_PIN(STA2X11_PIN_F6, "GPIO0_F6"),
+	PINCTRL_PIN(STA2X11_PIN_D5, "GPIO1_D5"),
+	PINCTRL_PIN(STA2X11_PIN_E6, "GPIO2_E6"),
+	PINCTRL_PIN(STA2X11_PIN_E7, "GPIO3_E7"),
+	PINCTRL_PIN(STA2X11_PIN_E9, "GPIO4_E9"),
+	PINCTRL_PIN(STA2X11_PIN_F7, "GPIO5_F7"),
+	PINCTRL_PIN(STA2X11_PIN_E8, "GPIO6_E8"),
+	PINCTRL_PIN(STA2X11_PIN_F8, "GPIO7_F8"),
+	PINCTRL_PIN(STA2X11_PIN_D14, "GPIO8_D14"),
+	PINCTRL_PIN(STA2X11_PIN_E13, "GPIO9_E13"),
+	PINCTRL_PIN(STA2X11_PIN_D13, "GPIO10_D13"),
+	PINCTRL_PIN(STA2X11_PIN_E12, "GPIO11_E12"),
+	PINCTRL_PIN(STA2X11_PIN_C15, "GPIO12_C15"),
+	PINCTRL_PIN(STA2X11_PIN_E14, "GPIO13_E14"),
+	PINCTRL_PIN(STA2X11_PIN_D15, "GPIO14_D15"),
+	PINCTRL_PIN(STA2X11_PIN_E15, "GPIO15_E15"),
+	PINCTRL_PIN(STA2X11_PIN_A17, "GPIO16_A17"),
+	PINCTRL_PIN(STA2X11_PIN_C16, "GPIO17_C16"),
+	PINCTRL_PIN(STA2X11_PIN_C18, "GPIO18_C18"),
+	PINCTRL_PIN(STA2X11_PIN_B19, "GPIO19_B19"),
+	PINCTRL_PIN(STA2X11_PIN_C17, "GPIO20_C17"),
+	PINCTRL_PIN(STA2X11_PIN_D16, "GPIO21_D16"),
+	PINCTRL_PIN(STA2X11_PIN_B18, "GPIO22_B18"),
+	PINCTRL_PIN(STA2X11_PIN_A18, "GPIO23_A18"),
+	PINCTRL_PIN(STA2X11_PIN_G13, "GPIO24_G13"),
+	PINCTRL_PIN(STA2X11_PIN_F14, "GPIO25_F14"),
+	PINCTRL_PIN(STA2X11_PIN_F13, "GPIO26_F13"),
+	PINCTRL_PIN(STA2X11_PIN_D18, "GPIO27_D18"),
+	PINCTRL_PIN(STA2X11_PIN_D19, "GPIO28_D19"),
+	PINCTRL_PIN(STA2X11_PIN_G14, "GPIO29_G14"),
+	PINCTRL_PIN(STA2X11_PIN_E17, "GPIO30_E17"),
+	PINCTRL_PIN(STA2X11_PIN_C19, "GPIO31_C19"),
+	PINCTRL_PIN(STA2X11_PIN_E19, "GPIO32_E19"),
+	PINCTRL_PIN(STA2X11_PIN_E16, "GPIO33_E16"),
+	PINCTRL_PIN(STA2X11_PIN_H14, "GPIO34_H14"),
+	PINCTRL_PIN(STA2X11_PIN_L13, "GPIO35_L13"),
+	PINCTRL_PIN(STA2X11_PIN_N16, "GPIO36_N16"),
+	PINCTRL_PIN(STA2X11_PIN_M16, "GPIO37_M16"),
+	PINCTRL_PIN(STA2X11_PIN_N13, "GPIO38_N13"),
+	PINCTRL_PIN(STA2X11_PIN_M14, "GPIO39_M14"),
+	PINCTRL_PIN(STA2X11_PIN_N14, "GPIO40_N14"),
+	PINCTRL_PIN(STA2X11_PIN_M15, "GPIO41_M15"),
+	PINCTRL_PIN(STA2X11_PIN_P17, "GPIO42_P17"),
+	PINCTRL_PIN(STA2X11_PIN_P15, "GPIO43_P15"),
+	PINCTRL_PIN(STA2X11_PIN_R18, "GPIO44_R18"),
+	PINCTRL_PIN(STA2X11_PIN_R17, "GPIO45_R17"),
+	PINCTRL_PIN(STA2X11_PIN_T19, "GPIO46_T19"),
+	PINCTRL_PIN(STA2X11_PIN_R16, "GPIO47_R16"),
+	PINCTRL_PIN(STA2X11_PIN_T18, "GPIO48_T18"),
+	PINCTRL_PIN(STA2X11_PIN_U17, "GPIO49_U17"),
+	PINCTRL_PIN(STA2X11_PIN_T17, "GPIO50_T17"),
+	PINCTRL_PIN(STA2X11_PIN_U16, "GPIO51_U16"),
+	PINCTRL_PIN(STA2X11_PIN_T15, "GPIO52_T15"),
+	PINCTRL_PIN(STA2X11_PIN_T16, "GPIO53_T16"),
+	PINCTRL_PIN(STA2X11_PIN_R15, "GPIO54_R15"),
+	PINCTRL_PIN(STA2X11_PIN_T14, "GPIO55_T14"),
+	PINCTRL_PIN(STA2X11_PIN_U18, "GPIO56_U18"),
+	PINCTRL_PIN(STA2X11_PIN_U19, "GPIO57_U19"),
+	PINCTRL_PIN(STA2X11_PIN_V19, "GPIO58_V19"),
+	PINCTRL_PIN(STA2X11_PIN_V18, "GPIO59_V18"),
+	PINCTRL_PIN(STA2X11_PIN_P18, "GPIO60_P18"),
+	PINCTRL_PIN(STA2X11_PIN_R19, "GPIO61_R19"),
+	PINCTRL_PIN(STA2X11_PIN_V17, "GPIO62_V17"),
+	PINCTRL_PIN(STA2X11_PIN_V16, "GPIO63_V16"),
+	PINCTRL_PIN(STA2X11_PIN_W17, "GPIO64_W17"),
+	PINCTRL_PIN(STA2X11_PIN_W16, "GPIO65_W16"),
+	PINCTRL_PIN(STA2X11_PIN_P13, "GPIO66_P13"),
+	PINCTRL_PIN(STA2X11_PIN_P14, "GPIO67_P14"),
+	PINCTRL_PIN(STA2X11_PIN_R9, "GPIO68_R9"),
+	PINCTRL_PIN(STA2X11_PIN_R8, "GPIO69_R8"),
+	PINCTRL_PIN(STA2X11_PIN_P11, "GPIO70_P11"),
+	PINCTRL_PIN(STA2X11_PIN_R7, "GPIO71_R7"),
+	PINCTRL_PIN(STA2X11_PIN_P10, "GPIO72_P10"),
+	PINCTRL_PIN(STA2X11_PIN_P9, "GPIO73_P9"),
+	PINCTRL_PIN(STA2X11_PIN_P8, "GPIO74_P8"),
+	PINCTRL_PIN(STA2X11_PIN_N6, "GPIO75_N6"),
+	PINCTRL_PIN(STA2X11_PIN_P5, "GPIO76_P5"),
+	PINCTRL_PIN(STA2X11_PIN_N5, "GPIO77_N5"),
+	PINCTRL_PIN(STA2X11_PIN_P6, "GPIO78_P6"),
+	PINCTRL_PIN(STA2X11_PIN_R5, "GPIO79_R5"),
+	PINCTRL_PIN(STA2X11_PIN_R6, "GPIO80_R6"),
+	PINCTRL_PIN(STA2X11_PIN_T6, "GPIO81_T6"),
+	PINCTRL_PIN(STA2X11_PIN_T5, "GPIO82_T5"),
+	PINCTRL_PIN(STA2X11_PIN_W6, "GPIO83_W6"),
+	PINCTRL_PIN(STA2X11_PIN_V6, "GPIO84_V6"),
+	PINCTRL_PIN(STA2X11_PIN_W5, "GPIO85_W5"),
+	PINCTRL_PIN(STA2X11_PIN_V5, "GPIO86_V5"),
+	PINCTRL_PIN(STA2X11_PIN_V4, "GPIO87_V4"),
+	PINCTRL_PIN(STA2X11_PIN_U4, "GPIO88_U4"),
+	PINCTRL_PIN(STA2X11_PIN_U3, "GPIO89_U3"),
+	PINCTRL_PIN(STA2X11_PIN_T4, "GPIO90_T4"),
+	PINCTRL_PIN(STA2X11_PIN_W4, "GPIO91_W4"),
+	PINCTRL_PIN(STA2X11_PIN_W3, "GPIO92_W3"),
+	PINCTRL_PIN(STA2X11_PIN_W2, "GPIO93_W2"),
+	PINCTRL_PIN(STA2X11_PIN_V3, "GPIO94_V3"),
+	PINCTRL_PIN(STA2X11_PIN_V2, "GPIO95_V2"),
+	PINCTRL_PIN(STA2X11_PIN_R4, "GPIO96_R4"),
+	PINCTRL_PIN(STA2X11_PIN_V1, "GPIO97_V1"),
+	PINCTRL_PIN(STA2X11_PIN_M5, "GPIO98_M5"),
+	PINCTRL_PIN(STA2X11_PIN_U2, "GPIO99_U2"),
+	PINCTRL_PIN(STA2X11_PIN_T2, "GPIO100_T2"),
+	PINCTRL_PIN(STA2X11_PIN_U1, "GPIO101_U1"),
+	PINCTRL_PIN(STA2X11_PIN_T3, "GPIO102_T3"),
+	PINCTRL_PIN(STA2X11_PIN_R3, "GPIO103_R3"),
+	PINCTRL_PIN(STA2X11_PIN_M7, "GPIO104_M7"),
+	PINCTRL_PIN(STA2X11_PIN_P4, "GPIO105_P4"),
+	PINCTRL_PIN(STA2X11_PIN_R2, "GPIO106_R2"),
+	PINCTRL_PIN(STA2X11_PIN_P2, "GPIO107_P2"),
+	PINCTRL_PIN(STA2X11_PIN_M6, "GPIO108_M6"),
+	PINCTRL_PIN(STA2X11_PIN_T1, "GPIO109_T1"),
+	PINCTRL_PIN(STA2X11_PIN_L5, "GPIO110_L5"),
+	PINCTRL_PIN(STA2X11_PIN_N3, "GPIO111_N3"),
+	PINCTRL_PIN(STA2X11_PIN_P1, "GPIO112_P1"),
+	PINCTRL_PIN(STA2X11_PIN_N2, "GPIO113_N2"),
+	PINCTRL_PIN(STA2X11_PIN_R1, "GPIO114_R1"),
+	PINCTRL_PIN(STA2X11_PIN_N4, "GPIO115_N4"),
+	PINCTRL_PIN(STA2X11_PIN_P3, "GPIO116_P3"),
+	PINCTRL_PIN(STA2X11_PIN_M4, "GPIO117_M4"),
+	PINCTRL_PIN(STA2X11_PIN_K5, "GPIO118_K5"),
+	PINCTRL_PIN(STA2X11_PIN_H2, "GPIO119_H2"),
+	PINCTRL_PIN(STA2X11_PIN_H1, "GPIO120_H1"),
+	PINCTRL_PIN(STA2X11_PIN_J3, "GPIO121_J3"),
+	PINCTRL_PIN(STA2X11_PIN_H3, "GPIO122_H3"),
+	PINCTRL_PIN(STA2X11_PIN_J4, "GPIO123_J4"),
+	PINCTRL_PIN(STA2X11_PIN_J5, "GPIO124_J5"),
+	PINCTRL_PIN(STA2X11_PIN_D3, "GPIO125_D3"),
+	PINCTRL_PIN(STA2X11_PIN_F4, "GPIO126_F4"),
+	PINCTRL_PIN(STA2X11_PIN_D4, "GPIO127_D4"),
+};
+
+#define STA2X11_GPIO_RANGE(a, b, c) { .name = "STA2X11", .id = a, .base = b, \
+			.pin_base = b, .npins = c }
+
+/*
+ * This matches the 32-pin gpio chips registered by the GPIO portion. This
+ * cannot be const since we assign the struct gpio_chip * pointer at runtime.
+ */
+static struct pinctrl_gpio_range nmk_sta2x11_ranges[] = {
+	STA2X11_GPIO_RANGE(0, 0, 32),
+	STA2X11_GPIO_RANGE(1, 32, 32),
+	STA2X11_GPIO_RANGE(2, 64, 32),
+	STA2X11_GPIO_RANGE(3, 96, 32),
+};
+
+/*
+ * Read the pin group names like this:
+ * u0_a_1    = first groups of pins for uart0 on alt function a
+ * i2c2_b_2  = second group of pins for i2c2 on alt function b
+ */
+
+/* Altfunction A */
+static const unsigned gpio07_a_1_pins[] = { STA2X11_PIN_F6, STA2X11_PIN_D5,
+	STA2X11_PIN_E6, STA2X11_PIN_E7, STA2X11_PIN_E9, STA2X11_PIN_F7,
+	STA2X11_PIN_E8, STA2X11_PIN_F8 };
+
+static const unsigned rgbout_a_1_pins[] = {
+	STA2X11_PIN_D14,
+	STA2X11_PIN_E13,
+	STA2X11_PIN_D13,
+	STA2X11_PIN_E12,
+	STA2X11_PIN_C15,
+	STA2X11_PIN_E14,
+	STA2X11_PIN_D15,
+	STA2X11_PIN_E15,
+	STA2X11_PIN_A17,
+	STA2X11_PIN_C16,
+	STA2X11_PIN_C18,
+	STA2X11_PIN_B19,
+	STA2X11_PIN_C17,
+	STA2X11_PIN_D16,
+	STA2X11_PIN_B18,
+	STA2X11_PIN_A18,
+	STA2X11_PIN_G13,
+	STA2X11_PIN_F14,
+	STA2X11_PIN_F13,
+	STA2X11_PIN_D18,
+	STA2X11_PIN_D19,
+	STA2X11_PIN_G14,
+	STA2X11_PIN_E17,
+	STA2X11_PIN_C19,
+	STA2X11_PIN_E19,
+	STA2X11_PIN_E16,
+	STA2X11_PIN_H14,
+};
+
+static const unsigned eth_a_1_pins[] = {
+	STA2X11_PIN_L13,
+	STA2X11_PIN_N16,
+	STA2X11_PIN_M16,
+	STA2X11_PIN_N13,
+	STA2X11_PIN_M14,
+	STA2X11_PIN_N14,
+	STA2X11_PIN_M15,
+	STA2X11_PIN_P17,
+	STA2X11_PIN_P15,
+};
+
+static const unsigned can_a_1_pins[] = {
+	STA2X11_PIN_R18,
+	STA2X11_PIN_R17,
+};
+
+static const unsigned mlb_a_1_pins[] = {
+	STA2X11_PIN_T19,
+	STA2X11_PIN_R16,
+};
+
+static const unsigned spi0_a_1_pins[] = {
+	STA2X11_PIN_T18,
+	STA2X11_PIN_U17,
+	STA2X11_PIN_T17,
+	STA2X11_PIN_U16,
+};
+
+static const unsigned spi1_a_1_pins[] = {
+	STA2X11_PIN_T15,
+	STA2X11_PIN_T16,
+	STA2X11_PIN_R15,
+	STA2X11_PIN_T14,
+};
+
+static const unsigned spi2_a_1_pins[] = {
+	STA2X11_PIN_U18,
+	STA2X11_PIN_U19,
+	STA2X11_PIN_V19,
+	STA2X11_PIN_V18,
+};
+
+static const unsigned i2c0_a_1_pins[] = {
+	STA2X11_PIN_P18,
+	STA2X11_PIN_R19,
+};
+
+static const unsigned i2c1_a_1_pins[] = {
+	STA2X11_PIN_V17,
+	STA2X11_PIN_V16,
+};
+
+static const unsigned i2c2_a_1_pins[] = {
+	STA2X11_PIN_W17,
+	STA2X11_PIN_W16,
+};
+
+static const unsigned i2c3_a_1_pins[] = {
+	STA2X11_PIN_P13,
+	STA2X11_PIN_P14,
+};
+
+static const unsigned msp0_a_1_pins[] = {
+	STA2X11_PIN_R9,
+	STA2X11_PIN_R8,
+	STA2X11_PIN_P11,
+	STA2X11_PIN_R7,
+	STA2X11_PIN_P10,
+	STA2X11_PIN_P9,
+	STA2X11_PIN_P8,
+};
+
+static const unsigned msp1_a_1_pins[] = {
+	STA2X11_PIN_N6,
+	STA2X11_PIN_P5,
+	STA2X11_PIN_N5,
+	STA2X11_PIN_P6,
+};
+
+static const unsigned msp2_a_1_pins[] = {
+	STA2X11_PIN_R5,
+	STA2X11_PIN_R6,
+	STA2X11_PIN_T6,
+	STA2X11_PIN_T5,
+};
+
+static const unsigned msp3_a_1_pins[] = {
+	STA2X11_PIN_W6,
+	STA2X11_PIN_V6,
+	STA2X11_PIN_W5,
+	STA2X11_PIN_V5,
+};
+
+static const unsigned msp4_a_1_pins[] = {
+	STA2X11_PIN_V4,
+	STA2X11_PIN_U4,
+	STA2X11_PIN_U3,
+	STA2X11_PIN_T4,
+};
+
+static const unsigned msp5_a_1_pins[] = {
+	STA2X11_PIN_W4,
+	STA2X11_PIN_W3,
+	STA2X11_PIN_W2,
+	STA2X11_PIN_V3,
+};
+
+static const unsigned sdio3_a_1_pins[] = {
+	STA2X11_PIN_V2,
+	STA2X11_PIN_R4,
+	STA2X11_PIN_V1,
+	STA2X11_PIN_M5,
+	STA2X11_PIN_U2,
+	STA2X11_PIN_T2,
+};
+
+static const unsigned sdio2_a_1_pins[] = {
+	STA2X11_PIN_P4,
+	STA2X11_PIN_R2,
+	STA2X11_PIN_P2,
+	STA2X11_PIN_M6,
+	STA2X11_PIN_T1,
+	STA2X11_PIN_L5,
+};
+
+static const unsigned sdio1_a_1_pins[] = {
+	STA2X11_PIN_N4,
+	STA2X11_PIN_P3,
+	STA2X11_PIN_M4,
+	STA2X11_PIN_K5,
+	STA2X11_PIN_H2,
+	STA2X11_PIN_H1,
+};
+
+static const unsigned u2_a_1_pins[] = {
+	STA2X11_PIN_D3,
+	STA2X11_PIN_F4,
+};
+
+static const unsigned u3_a_1_pins[] = {
+	STA2X11_PIN_D4,
+};
+
+#define STA2X11_PIN_GROUP(a, b) { .name = #a, .pins = a##_pins,		\
+			.npins = ARRAY_SIZE(a##_pins), .altsetting = b }
+
+static const struct nmk_pingroup nmk_sta2x11_groups[] = {
+	STA2X11_PIN_GROUP(gpio07_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(rgbout_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(eth_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(can_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(mlb_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(spi0_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(spi1_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(spi2_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(i2c0_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(i2c1_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(i2c2_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(i2c3_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(msp0_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(msp1_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(msp2_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(msp3_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(msp4_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(msp5_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(sdio3_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(sdio2_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(sdio1_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(u2_a_1, NMK_GPIO_ALT_A),
+	STA2X11_PIN_GROUP(u3_a_1, NMK_GPIO_ALT_A),
+};
+
+/* We use this macro to define the groups applicable to a function */
+#define STA2X11_FUNC_GROUPS(a, b...)	   \
+static const char * const a##_groups[] = { b };
+
+STA2X11_FUNC_GROUPS(gpio07, "gpio07_a_1");
+STA2X11_FUNC_GROUPS(rgbout, "rgbout_a_1");
+STA2X11_FUNC_GROUPS(eth, "eth_a_1");
+STA2X11_FUNC_GROUPS(can, "can_a_1");
+STA2X11_FUNC_GROUPS(mlb, "mlb_a_1");
+STA2X11_FUNC_GROUPS(spi0, "spi0_a_1");
+STA2X11_FUNC_GROUPS(spi1, "spi1_a_1");
+STA2X11_FUNC_GROUPS(spi2, "spi2_a_1");
+STA2X11_FUNC_GROUPS(i2c0, "i2c0_a_1");
+STA2X11_FUNC_GROUPS(i2c1, "i2c1_a_1");
+STA2X11_FUNC_GROUPS(i2c2, "i2c2_a_1");
+STA2X11_FUNC_GROUPS(i2c3, "i2c3_a_1");
+STA2X11_FUNC_GROUPS(msp0, "msp0_a_1");
+STA2X11_FUNC_GROUPS(msp1, "msp1_a_1");
+STA2X11_FUNC_GROUPS(msp2, "msp2_a_1");
+STA2X11_FUNC_GROUPS(msp3, "msp3_a_1");
+STA2X11_FUNC_GROUPS(msp4, "msp4_a_1");
+STA2X11_FUNC_GROUPS(msp5, "msp5_a_1");
+STA2X11_FUNC_GROUPS(sdio3, "sdio3_a_1");
+STA2X11_FUNC_GROUPS(sdio2, "sdio2_a_1");
+STA2X11_FUNC_GROUPS(sdio1, "sdio1_a_1");
+STA2X11_FUNC_GROUPS(u2, "u2_a_1");
+STA2X11_FUNC_GROUPS(u3, "u3_a_1");
+
+
+#define FUNCTION(fname)					\
+	{						\
+		.name = #fname,				\
+		.groups = fname##_groups,		\
+		.ngroups = ARRAY_SIZE(fname##_groups),	\
+	}
+
+static const struct nmk_function nmk_sta2x11_functions[] = {
+	FUNCTION(gpio07),
+	FUNCTION(rgbout),
+	FUNCTION(eth),
+	FUNCTION(can),
+	FUNCTION(mlb),
+	FUNCTION(spi0),
+	FUNCTION(spi1),
+	FUNCTION(spi2),
+	FUNCTION(i2c0),
+	FUNCTION(i2c1),
+	FUNCTION(i2c2),
+	FUNCTION(i2c3),
+	FUNCTION(msp0),
+	FUNCTION(msp1),
+	FUNCTION(msp2),
+	FUNCTION(msp3),
+	FUNCTION(msp4),
+	FUNCTION(msp5),
+	FUNCTION(sdio3),
+	FUNCTION(sdio2),
+	FUNCTION(sdio1),
+	FUNCTION(u2),
+	FUNCTION(u3),
+};
+
+static const struct nmk_pinctrl_soc_data nmk_sta2x11_soc = {
+	.gpio_ranges = nmk_sta2x11_ranges,
+	.gpio_num_ranges = ARRAY_SIZE(nmk_sta2x11_ranges),
+	.pins = nmk_sta2x11_pins,
+	.npins = ARRAY_SIZE(nmk_sta2x11_pins),
+	.functions = nmk_sta2x11_functions,
+	.nfunctions = ARRAY_SIZE(nmk_sta2x11_functions),
+	.groups = nmk_sta2x11_groups,
+	.ngroups = ARRAY_SIZE(nmk_sta2x11_groups),
+};
+
+void nmk_pinctrl_sta2x11_init(const struct nmk_pinctrl_soc_data **soc)
+{
+	*soc = &nmk_sta2x11_soc;
+}
diff --git a/drivers/pinctrl/pinctrl-nomadik.c b/drivers/pinctrl/pinctrl-nomadik.c
index 97fb020..d7d4b592 100644
--- a/drivers/pinctrl/pinctrl-nomadik.c
+++ b/drivers/pinctrl/pinctrl-nomadik.c
@@ -2131,6 +2131,10 @@ static const struct of_device_id nmk_pinctrl_match[] = {
 		.compatible = "stericsson,db8540-pinctrl",
 		.data = (void *)PINCTRL_NMK_DB8540,
 	},
+	{
+		.compatible = "stericsson,nmk-pinctrl-sta2x11",
+		.data = (void *)PINCTRL_NMK_STA2X11,
+	},
 	{},
 };
 
@@ -2188,6 +2192,8 @@ static int nmk_pinctrl_probe(struct platform_device *pdev)
 		nmk_pinctrl_db8500_init(&npct->soc);
 	if (version == PINCTRL_NMK_DB8540)
 		nmk_pinctrl_db8540_init(&npct->soc);
+	if (version == PINCTRL_NMK_STA2X11)
+		nmk_pinctrl_sta2x11_init(&npct->soc);
 
 	if (np) {
 		prcm_np = of_parse_phandle(np, "prcm", 0);
@@ -2262,6 +2268,7 @@ static const struct platform_device_id nmk_pinctrl_id[] = {
 	{ "pinctrl-stn8815", PINCTRL_NMK_STN8815 },
 	{ "pinctrl-db8500", PINCTRL_NMK_DB8500 },
 	{ "pinctrl-db8540", PINCTRL_NMK_DB8540 },
+	{ "pinctrl-sta2x11", PINCTRL_NMK_STA2X11 },
 	{ }
 };
 
diff --git a/drivers/pinctrl/pinctrl-nomadik.h b/drivers/pinctrl/pinctrl-nomadik.h
index bcd4191..8b072f8 100644
--- a/drivers/pinctrl/pinctrl-nomadik.h
+++ b/drivers/pinctrl/pinctrl-nomadik.h
@@ -7,6 +7,7 @@
 #define PINCTRL_NMK_STN8815	0
 #define PINCTRL_NMK_DB8500	1
 #define PINCTRL_NMK_DB8540	2
+#define PINCTRL_NMK_STA2X11	3
 
 #define PRCM_GPIOCR_ALTCX(pin_num,\
 	altc1_used, altc1_ri, altc1_cb,\
@@ -179,4 +180,17 @@ nmk_pinctrl_db8540_init(const struct nmk_pinctrl_soc_data **soc)
 
 #endif
 
+#ifdef CONFIG_PINCTRL_STA2X11
+
+void nmk_pinctrl_sta2x11_init(const struct nmk_pinctrl_soc_data **soc);
+
+#else
+
+static inline void
+nmk_pinctrl_sta2x11_init(const struct nmk_pinctrl_soc_data **soc)
+{
+}
+
+#endif
+
 #endif /* PINCTRL_PINCTRL_NOMADIK_H */
-- 
1.7.7.2
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux