Skip to contentSkip to conversation

pinctrl: Add SPEAr pinctrl support

PATCH Superseded Viresh Kumar 4 participants 16 messages Apr 12, 2012 – Apr 16, 2012 2 messages not in the archive

Subsystems (5)

v3 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

v3 cover pinctrl: Add SPEAr pinctrl support

This patchset replaces existing pinmux framework for SPEAr family of SoC with generic pinctrl framework.

@Linus: I would need your Acks on it, after which i will take it through ARM-SoC tree, as it has dependency on that.

V2->V3
- Add DT bindings for pinmux mappings for SPEAr
- Pass pin maps from dtb instead of mach-spear3xx/spear3*0.c files
- use of_iomap() instead of devm_ioremap() and platform_get_resource()

V1->V2
- Earlier padmux support removed
- single patch for spear pinctrl drivers broken into two: one for spear and other for 3xx family
- add pinctrl support in arch/arm/mach-spear3xx/ and dts files
- pinctrl-spear.* made as library instead of platform driver
- pinctrl-spear300, spear310, spear320 are now platform drivers
- other minor fixes.

Viresh Kumar (4):
SPEAr: Remove existing padmux support for SPEAr
pinctrl: Add SPEAr pinctrl drivers
pinctrl: Add SPEAr3xx pinctrl drivers
SPEAr3xx: Add pinctrl support for boards

 .../devicetree/bindings/pinctrl/pinctrl_spear.txt  |   48 +
 MAINTAINERS                                        |   23 +-
 arch/arm/boot/dts/spear300-evb.dts                 |   38 +
 arch/arm/boot/dts/spear300.dtsi                    |    5 +
 arch/arm/boot/dts/spear310-evb.dts                 |   61 +
 arch/arm/boot/dts/spear310.dtsi                    |    5 +
 arch/arm/boot/dts/spear320-evb.dts                 |   61 +
 arch/arm/boot/dts/spear320.dtsi                    |    7 +-
 arch/arm/mach-spear3xx/Kconfig                     |    3 +
 arch/arm/mach-spear3xx/include/mach/generic.h      |  128 -
 arch/arm/mach-spear3xx/spear300.c                  |  389 +---
 arch/arm/mach-spear3xx/spear310.c                  |  161 +-
 arch/arm/mach-spear3xx/spear320.c                  |  403 +---
 arch/arm/mach-spear3xx/spear3xx.c                  |  425 ---
 arch/arm/plat-spear/Kconfig                        |    1 +
 arch/arm/plat-spear/Makefile                       |    2 +-
 arch/arm/plat-spear/include/plat/padmux.h          |   92 -
 arch/arm/plat-spear/padmux.c                       |  164 -
 drivers/pinctrl/Kconfig                            |    2 +
 drivers/pinctrl/Makefile                           |    2 +
 drivers/pinctrl/spear/Kconfig                      |   34 +
 drivers/pinctrl/spear/Makefile                     |    7 +
 drivers/pinctrl/spear/pinctrl-spear.c              |  349 ++
 drivers/pinctrl/spear/pinctrl-spear.h              |  142 +
 drivers/pinctrl/spear/pinctrl-spear300.c           |  708 ++++
 drivers/pinctrl/spear/pinctrl-spear310.c           |  431 +++
 drivers/pinctrl/spear/pinctrl-spear320.c           | 3468 ++++++++++++++++++++
 drivers/pinctrl/spear/pinctrl-spear3xx.c           |  588 ++++
 drivers/pinctrl/spear/pinctrl-spear3xx.h           |   92 +
 29 files changed, 6063 insertions(+), 1776 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/pinctrl_spear.txt
 delete mode 100644 arch/arm/plat-spear/include/plat/padmux.h
 delete mode 100644 arch/arm/plat-spear/padmux.c
 create mode 100644 drivers/pinctrl/spear/Kconfig
 create mode 100644 drivers/pinctrl/spear/Makefile
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear.c
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear.h
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear300.c
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear310.c
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear320.c
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear3xx.c
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear3xx.h
Signature · 1 line
1.7.9
#1 lore raw

PATCH v3 1/4 SPEAr: Remove existing padmux support for SPEAr

We must use pinctrl framework instead of defining per SoC pinmux drivers. This patch removes existing padmux support present for SPEAr platform.

---
 arch/arm/mach-spear3xx/include/mach/generic.h |  128 --------
 arch/arm/mach-spear3xx/spear300.c             |  389 +----------------------
 arch/arm/mach-spear3xx/spear310.c             |  161 +----------
 arch/arm/mach-spear3xx/spear320.c             |  403 +-----------------------
 arch/arm/mach-spear3xx/spear3xx.c             |  425 -------------------------
 arch/arm/plat-spear/Makefile                  |    2 +-
 arch/arm/plat-spear/include/plat/padmux.h     |   92 ------
 arch/arm/plat-spear/padmux.c                  |  164 ----------
 8 files changed, 4 insertions(+), 1760 deletions(-)
 delete mode 100644 arch/arm/plat-spear/include/plat/padmux.h
 delete mode 100644 arch/arm/plat-spear/padmux.c
arch/arm/mach-spear3xx/include/mach/generic.h +0 -128
index a756958..9603bf4 100644
@@ -20,7 +20,6 @@
 #include <linux/amba/bus.h>
 #include <asm/mach/time.h>
 #include <asm/mach/map.h>
-#include <plat/padmux.h>
 
 /* spear3xx declarations */
 /*
@@ -43,147 +42,20 @@ void __init spear3xx_dt_init_irq(void);
 
 void spear_restart(char, const char *);
 
-/* pad mux declarations */
-#define PMX_FIRDA_MASK		(1 << 14)
-#define PMX_I2C_MASK		(1 << 13)
-#define PMX_SSP_CS_MASK		(1 << 12)
-#define PMX_SSP_MASK		(1 << 11)
-#define PMX_MII_MASK		(1 << 10)
-#define PMX_GPIO_PIN0_MASK	(1 << 9)
-#define PMX_GPIO_PIN1_MASK	(1 << 8)
-#define PMX_GPIO_PIN2_MASK	(1 << 7)
-#define PMX_GPIO_PIN3_MASK	(1 << 6)
-#define PMX_GPIO_PIN4_MASK	(1 << 5)
-#define PMX_GPIO_PIN5_MASK	(1 << 4)
-#define PMX_UART0_MODEM_MASK	(1 << 3)
-#define PMX_UART0_MASK		(1 << 2)
-#define PMX_TIMER_3_4_MASK	(1 << 1)
-#define PMX_TIMER_1_2_MASK	(1 << 0)
-
-/* pad mux devices */
-extern struct pmx_dev spear3xx_pmx_firda;
-extern struct pmx_dev spear3xx_pmx_i2c;
-extern struct pmx_dev spear3xx_pmx_ssp_cs;
-extern struct pmx_dev spear3xx_pmx_ssp;
-extern struct pmx_dev spear3xx_pmx_mii;
-extern struct pmx_dev spear3xx_pmx_gpio_pin0;
-extern struct pmx_dev spear3xx_pmx_gpio_pin1;
-extern struct pmx_dev spear3xx_pmx_gpio_pin2;
-extern struct pmx_dev spear3xx_pmx_gpio_pin3;
-extern struct pmx_dev spear3xx_pmx_gpio_pin4;
-extern struct pmx_dev spear3xx_pmx_gpio_pin5;
-extern struct pmx_dev spear3xx_pmx_uart0_modem;
-extern struct pmx_dev spear3xx_pmx_uart0;
-extern struct pmx_dev spear3xx_pmx_timer_3_4;
-extern struct pmx_dev spear3xx_pmx_timer_1_2;
-
-#if defined(CONFIG_MACH_SPEAR310) || defined(CONFIG_MACH_SPEAR320)
-/* padmux plgpio devices */
-extern struct pmx_dev spear3xx_pmx_plgpio_0_1;
-extern struct pmx_dev spear3xx_pmx_plgpio_2_3;
-extern struct pmx_dev spear3xx_pmx_plgpio_4_5;
-extern struct pmx_dev spear3xx_pmx_plgpio_6_9;
-extern struct pmx_dev spear3xx_pmx_plgpio_10_27;
-extern struct pmx_dev spear3xx_pmx_plgpio_28;
-extern struct pmx_dev spear3xx_pmx_plgpio_29;
-extern struct pmx_dev spear3xx_pmx_plgpio_30;
-extern struct pmx_dev spear3xx_pmx_plgpio_31;
-extern struct pmx_dev spear3xx_pmx_plgpio_32;
-extern struct pmx_dev spear3xx_pmx_plgpio_33;
-extern struct pmx_dev spear3xx_pmx_plgpio_34_36;
-extern struct pmx_dev spear3xx_pmx_plgpio_37_42;
-extern struct pmx_dev spear3xx_pmx_plgpio_43_44_47_48;
-extern struct pmx_dev spear3xx_pmx_plgpio_45_46_49_50;
-#endif
-
 /* spear300 declarations */
 #ifdef CONFIG_MACH_SPEAR300
-/* pad mux modes */
-extern struct pmx_mode spear300_nand_mode;
-extern struct pmx_mode spear300_nor_mode;
-extern struct pmx_mode spear300_photo_frame_mode;
-extern struct pmx_mode spear300_lend_ip_phone_mode;
-extern struct pmx_mode spear300_hend_ip_phone_mode;
-extern struct pmx_mode spear300_lend_wifi_phone_mode;
-extern struct pmx_mode spear300_hend_wifi_phone_mode;
-extern struct pmx_mode spear300_ata_pabx_wi2s_mode;
-extern struct pmx_mode spear300_ata_pabx_i2s_mode;
-extern struct pmx_mode spear300_caml_lcdw_mode;
-extern struct pmx_mode spear300_camu_lcd_mode;
-extern struct pmx_mode spear300_camu_wlcd_mode;
-extern struct pmx_mode spear300_caml_lcd_mode;
-
-/* pad mux devices */
-extern struct pmx_dev spear300_pmx_fsmc_2_chips;
-extern struct pmx_dev spear300_pmx_fsmc_4_chips;
-extern struct pmx_dev spear300_pmx_keyboard;
-extern struct pmx_dev spear300_pmx_clcd;
-extern struct pmx_dev spear300_pmx_telecom_gpio;
-extern struct pmx_dev spear300_pmx_telecom_tdm;
-extern struct pmx_dev spear300_pmx_telecom_spi_cs_i2c_clk;
-extern struct pmx_dev spear300_pmx_telecom_camera;
-extern struct pmx_dev spear300_pmx_telecom_dac;
-extern struct pmx_dev spear300_pmx_telecom_i2s;
-extern struct pmx_dev spear300_pmx_telecom_boot_pins;
-extern struct pmx_dev spear300_pmx_telecom_sdhci_4bit;
-extern struct pmx_dev spear300_pmx_telecom_sdhci_8bit;
-extern struct pmx_dev spear300_pmx_gpio1;
-
-/* Add spear300 machine declarations here */
 void __init spear300_clk_init(void);
 
 #endif /* CONFIG_MACH_SPEAR300 */
 
 /* spear310 declarations */
 #ifdef CONFIG_MACH_SPEAR310
-/* pad mux devices */
-extern struct pmx_dev spear310_pmx_emi_cs_0_1_4_5;
-extern struct pmx_dev spear310_pmx_emi_cs_2_3;
-extern struct pmx_dev spear310_pmx_uart1;
-extern struct pmx_dev spear310_pmx_uart2;
-extern struct pmx_dev spear310_pmx_uart3_4_5;
-extern struct pmx_dev spear310_pmx_fsmc;
-extern struct pmx_dev spear310_pmx_rs485_0_1;
-extern struct pmx_dev spear310_pmx_tdm0;
-
-/* Add spear310 machine declarations here */
 void __init spear310_clk_init(void);
 
 #endif /* CONFIG_MACH_SPEAR310 */
 
 /* spear320 declarations */
 #ifdef CONFIG_MACH_SPEAR320
-/* pad mux modes */
-extern struct pmx_mode spear320_auto_net_smii_mode;
-extern struct pmx_mode spear320_auto_net_mii_mode;
-extern struct pmx_mode spear320_auto_exp_mode;
-extern struct pmx_mode spear320_small_printers_mode;
-
-/* pad mux devices */
-extern struct pmx_dev spear320_pmx_clcd;
-extern struct pmx_dev spear320_pmx_emi;
-extern struct pmx_dev spear320_pmx_fsmc;
-extern struct pmx_dev spear320_pmx_spp;
-extern struct pmx_dev spear320_pmx_sdhci;
-extern struct pmx_dev spear320_pmx_i2s;
-extern struct pmx_dev spear320_pmx_uart1;
-extern struct pmx_dev spear320_pmx_uart1_modem;
-extern struct pmx_dev spear320_pmx_uart2;
-extern struct pmx_dev spear320_pmx_touchscreen;
-extern struct pmx_dev spear320_pmx_can;
-extern struct pmx_dev spear320_pmx_sdhci_led;
-extern struct pmx_dev spear320_pmx_pwm0;
-extern struct pmx_dev spear320_pmx_pwm1;
-extern struct pmx_dev spear320_pmx_pwm2;
-extern struct pmx_dev spear320_pmx_pwm3;
-extern struct pmx_dev spear320_pmx_ssp1;
-extern struct pmx_dev spear320_pmx_ssp2;
-extern struct pmx_dev spear320_pmx_mii1;
-extern struct pmx_dev spear320_pmx_smii0;
-extern struct pmx_dev spear320_pmx_smii1;
-extern struct pmx_dev spear320_pmx_i2c1;
-
-/* Add spear320 machine declarations here */
 void __init spear320_clk_init(void);
 
 #endif /* CONFIG_MACH_SPEAR320 */
arch/arm/mach-spear3xx/spear300.c +1 -388

413 lines not on this page · raw message

arch/arm/mach-spear3xx/spear310.c +1 -160

185 lines not on this page · raw message

arch/arm/mach-spear3xx/spear320.c +1 -402

427 lines not on this page · raw message

arch/arm/mach-spear3xx/spear3xx.c +0 -425

431 lines not on this page · raw message

arch/arm/plat-spear/Makefile +1 -1
index 4af6258..7744802 100644
@@ -5,4 +5,4 @@
 # Common support
 obj-y	:= clock.o restart.o time.o pl080.o
 
-obj-$(CONFIG_ARCH_SPEAR3XX)	+= shirq.o padmux.o
+obj-$(CONFIG_ARCH_SPEAR3XX)	+= shirq.o
arch/arm/plat-spear/include/plat/padmux.h deleted +0 -92

92 lines not on this page · raw message

arch/arm/plat-spear/padmux.c deleted +0 -164

164 lines not on this page · raw message

Signature · 1 line
1.7.9
#2 lore raw

PATCH v3 1/4 SPEAr: Remove existing padmux support for SPEAr

Quoted 4 lines · Viresh Kumar

We must use pinctrl framework instead of defining per SoC pinmux drivers. This patch removes existing padmux support present for SPEAr platform.

FWIW: Acked-by: Linus Walleij <[email protected]>

But I think Viresh is the maintainer of these files :)

Yours,
Linus Walleij

#3 lore raw

PATCH v3 2/4 pinctrl: Add SPEAr pinctrl drivers

In reply to Viresh Kumar

This adds pinctrl driver for SPEAr platform. It also updates MAINTAINERS file for SPEAr pinctrl drivers.

---
 MAINTAINERS                           |   23 +--
 drivers/pinctrl/Kconfig               |    2 +
 drivers/pinctrl/Makefile              |    2 +
 drivers/pinctrl/spear/Kconfig         |   14 ++
 drivers/pinctrl/spear/Makefile        |    3 +
 drivers/pinctrl/spear/pinctrl-spear.c |  349 +++++++++++++++++++++++++++++++++
 drivers/pinctrl/spear/pinctrl-spear.h |  142 +++++++++++++
 7 files changed, 520 insertions(+), 15 deletions(-)
 create mode 100644 drivers/pinctrl/spear/Kconfig
 create mode 100644 drivers/pinctrl/spear/Makefile
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear.c
 create mode 100644 drivers/pinctrl/spear/pinctrl-spear.h
MAINTAINERS +8 -15
index 7e7ec09..1f2bc24 100644
@@ -5233,6 +5233,14 @@ M:	Linus Walleij <[email protected]>
 S:	Maintained
 F:	drivers/pinctrl/
 
+PIN CONTROLLER - ST SPEAR
+M:	Viresh Kumar <[email protected]>
+L:	spear-devel at list.st.com
+L:	linux-arm-kernel at lists.infradead.org (moderated for non-subscribers)
+W:	http://www.st.com/spear
+S:	Maintained
+F:	driver/pinctrl/spear/
+
 PKTCDVD DRIVER
 M:	Peter Osterlund <[email protected]>
 S:	Maintained
@@ -6329,21 +6337,6 @@ F:	arch/arm/mach-spear*/clock.c
 F:	arch/arm/plat-spear/clock.c
 F:	arch/arm/plat-spear/include/plat/clock.h
 
-SPEAR PAD MULTIPLEXING SUPPORT
-M:	Viresh Kumar <[email protected]>
-L:	spear-devel at list.st.com
-L:	linux-arm-kernel at lists.infradead.org (moderated for non-subscribers)
-W:	http://www.st.com/spear
-S:	Maintained
-F:	arch/arm/plat-spear/include/plat/padmux.h
-F:	arch/arm/plat-spear/padmux.c
-F:	arch/arm/mach-spear*/spear*xx.c
-F:	arch/arm/mach-spear*/include/mach/generic.h
-F:	arch/arm/mach-spear3xx/spear3*0.c
-F:	arch/arm/mach-spear3xx/spear3*0_evb.c
-F:	arch/arm/mach-spear6xx/spear600.c
-F:	arch/arm/mach-spear6xx/spear600_evb.c
-
 SPI SUBSYSTEM
 M:	Grant Likely <[email protected]>
 L:	spi-devel-general at lists.sourceforge.net
drivers/pinctrl/Kconfig +2 -0
index d68c878..9908bba 100644
@@ -89,6 +89,8 @@ config PINCTRL_COH901
 	  COH 901 335 and COH 901 571/3. They contain 3, 5 or 7
 	  ports of 8 GPIO pins each.
 
+source "drivers/pinctrl/spear/Kconfig"
+
 endmenu
 
 endif
drivers/pinctrl/Makefile +2 -0
index 5412f60..878a2dc 100644
@@ -17,3 +17,5 @@ obj-$(CONFIG_PINCTRL_TEGRA20)	+= pinctrl-tegra20.o
 obj-$(CONFIG_PINCTRL_TEGRA30)	+= pinctrl-tegra30.o
 obj-$(CONFIG_PINCTRL_U300)	+= pinctrl-u300.o
 obj-$(CONFIG_PINCTRL_COH901)	+= pinctrl-coh901.o
+
+obj-$(CONFIG_PLAT_SPEAR)	+= spear/
drivers/pinctrl/spear/Kconfig new file +14 -0
new file mode 100644
index 0000000..47a0e295
@@ -0,0 +1,14 @@
+#
+# ST Microelectronics SPEAr PINCTRL drivers
+#
+
+if PLAT_SPEAR
+
+config PINCTRL_SPEAR
+	bool
+	depends on OF
+	select PINMUX
+	help
+	  This enables pin control drivers for SPEAr Platform
+
+endif
drivers/pinctrl/spear/Makefile new file +3 -0
new file mode 100644
index 0000000..69c1a51
@@ -0,0 +1,3 @@
+# SPEAr pinmux support
+
+obj-$(CONFIG_PINCTRL_SPEAR)	+= pinctrl-spear.o
drivers/pinctrl/spear/pinctrl-spear.c new file +349 -0

349 lines not on this page · raw message

drivers/pinctrl/spear/pinctrl-spear.h new file +142 -0

142 lines not on this page · raw message

Signature · 1 line
1.7.9
#5 lore raw

PATCH v3 2/4 pinctrl: Add SPEAr pinctrl drivers

In reply to Viresh Kumar
Quoted 5 lines · Viresh Kumar

This adds pinctrl driver for SPEAr platform. It also updates MAINTAINERS file for SPEAr pinctrl drivers.

drivers/pinctrl/spear/pinctrl-spear.c new file +2 -0
+int __devinit spear_pinctrl_probe(struct platform_device *pdev,
+		struct spear_pinctrl_machdata *machdata)

...

Quoted 1 line
drivers/pinctrl/spear/pinctrl-spear.c new file +1 -0
+	pmx->vbase = of_iomap(np, 0);

...

drivers/pinctrl/spear/pinctrl-spear.c line 349

Quoted 10 lines
drivers/pinctrl/spear/pinctrl-spear.c new file +10 -0
+}
+
+int __devexit spear_pinctrl_remove(struct platform_device *pdev)
+{
+	struct spear_pmx *pmx = platform_get_drvdata(pdev);
+
+	pinctrl_unregister(pmx->pctl);
+
+	return 0;
+}

of_iomap isn't a devm function, so youo need to unmap in remove(), and in probe()'s error paths.

Or of course, you could just implement devm_of_iomap(); it's probably very simple to do.

#6 lore raw

PATCH v3 2/4 pinctrl: Add SPEAr pinctrl drivers

Quoted 5 lines · Stephen Warren

of_iomap isn't a devm function, so youo need to unmap in remove(), and in probe()'s error paths.

Or of course, you could just implement devm_of_iomap(); it's probably very simple to do.

Implemented devm_of_iomap().

Signature · 1 line
viresh
#7 lore raw

PATCH v3 4/4 SPEAr3xx: Add pinctrl support for boards

In reply to Viresh Kumar
---
 arch/arm/boot/dts/spear300-evb.dts |   38 ++++++++++++++++++++++
 arch/arm/boot/dts/spear300.dtsi    |    5 +++
 arch/arm/boot/dts/spear310-evb.dts |   61 ++++++++++++++++++++++++++++++++++++
 arch/arm/boot/dts/spear310.dtsi    |    5 +++
 arch/arm/boot/dts/spear320-evb.dts |   61 ++++++++++++++++++++++++++++++++++++
 arch/arm/boot/dts/spear320.dtsi    |    7 +++-
 arch/arm/mach-spear3xx/Kconfig     |    3 ++
 arch/arm/plat-spear/Kconfig        |    1 +
 8 files changed, 180 insertions(+), 1 deletions(-)
arch/arm/boot/dts/spear300-evb.dts +38 -0
index eaecc29..48a848a 100644
@@ -25,6 +25,44 @@
 	};
 
 	ahb {
+		pinmux at 99000000 {
+			st,pinmux-mode=<2>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&state_default>;
+
+			state_default: pinmux {
+				i2c0 {
+					st,pins = "i2c0_grp";
+					st,function = "i2c0";
+				};
+				ssp0 {
+					st,pins = "ssp0_grp";
+					st,function = "ssp0";
+				};
+				mii0 {
+					st,pins = "mii0_grp";
+					st,function = "mii0";
+				};
+				uart0 {
+					st,pins = "uart0_grp";
+					st,function = "uart0";
+				};
+				clcd {
+					st,pins = "clcd_pfmode_grp";
+					st,function = "clcd";
+				};
+				sdhci {
+					st,pins = "sdhci_4bit_grp";
+					st,function = "sdhci";
+				};
+				gpio1 {
+					st,pins = "gpio1_4_to_7_grp",
+						"gpio1_0_to_3_grp";
+					st,function = "gpio1";
+				};
+			};
+		};
+
 		clcd at 60000000 {
 			status = "okay";
 		};
arch/arm/boot/dts/spear300.dtsi +5 -0
index f9fcbf4..01c5e35 100644
@@ -21,6 +21,11 @@
 		ranges = <0x60000000 0x60000000 0x50000000
 			  0xd0000000 0xd0000000 0x30000000>;
 
+		pinmux at 99000000 {
+			compatible = "st,spear300-pinmux";
+			reg = <0x99000000 0x1000>;
+		};
+
 		clcd at 60000000 {
 			compatible = "arm,clcd-pl110", "arm,primecell";
 			reg = <0x60000000 0x1000>;
arch/arm/boot/dts/spear310-evb.dts +61 -0

67 lines not on this page · raw message

arch/arm/boot/dts/spear310.dtsi +5 -0
index dc7fa14..e47081c 100644
@@ -22,6 +22,11 @@
 			  0xb0000000 0xb0000000 0x10000000
 			  0xd0000000 0xd0000000 0x30000000>;
 
+		pinmux at b4000000 {
+			compatible = "st,spear310-pinmux";
+			reg = <0xb4000000 0x1000>;
+		};
+
 		fsmc: flash at 44000000 {
 			compatible = "st,spear600-fsmc-nand";
 			#address-cells = <1>;
arch/arm/boot/dts/spear320-evb.dts +61 -0

67 lines not on this page · raw message

arch/arm/boot/dts/spear320.dtsi +6 -1
index 9a0267a..5372ca3 100644
@@ -18,9 +18,14 @@
 		#address-cells = <1>;
 		#size-cells = <1>;
 		compatible = "simple-bus";
-		ranges = <0x40000000 0x40000000 0x70000000
+		ranges = <0x40000000 0x40000000 0x80000000
 			  0xd0000000 0xd0000000 0x30000000>;
 
+		pinmux at b3000000 {
+			compatible = "st,spear320-pinmux";
+			reg = <0xb3000000 0x1000>;
+		};
+
 		clcd at 90000000 {
 			compatible = "arm,clcd-pl110", "arm,primecell";
 			reg = <0x90000000 0x1000>;
arch/arm/mach-spear3xx/Kconfig +3 -0
index d9fe11c..8bd3729 100644
@@ -7,16 +7,19 @@ if ARCH_SPEAR3XX
 menu "SPEAr3xx Implementations"
 config MACH_SPEAR300
 	bool "SPEAr300 Machine support with Device Tree"
+	select PINCTRL_SPEAR300
 	help
 	  Supports ST SPEAr300 machine configured via the device-tree
 
 config MACH_SPEAR310
 	bool "SPEAr310 Machine support with Device Tree"
+	select PINCTRL_SPEAR310
 	help
 	  Supports ST SPEAr310 machine configured via the device-tree
 
 config MACH_SPEAR320
 	bool "SPEAr320 Machine support with Device Tree"
+	select PINCTRL_SPEAR320
 	help
 	  Supports ST SPEAr320 machine configured via the device-tree
 endmenu
arch/arm/plat-spear/Kconfig +1 -0
index 6c066fc..387655b 100644
@@ -13,6 +13,7 @@ config ARCH_SPEAR3XX
 	select ARM_VIC
 	select CPU_ARM926T
 	select USE_OF
+	select PINCTRL
 	help
 	  Supports for ARM's SPEAR3XX family
 
Signature · 1 line
1.7.9
#9 lore raw

PATCH v3 4/4 SPEAr3xx: Add pinctrl support for boards

In reply to Viresh Kumar
Quoted 1 line · Viresh Kumar

Just a couple of minor comments below.

arch/arm/boot/dts/spear300-evb.dts line 29

Quoted 4 lines
arch/arm/boot/dts/spear300-evb.dts +2 -0
 
+		pinmux at 99000000 {
+			st,pinmux-mode=<2>;

spaces around = here for consistency?

arch/arm/boot/dts/spear300-evb.dts line 37

Quoted 5 lines
arch/arm/boot/dts/spear300-evb.dts +5 -0
+			state_default: pinmux {
+				i2c0 {
+					st,pins = "i2c0_grp";
+					st,function = "i2c0";
+				};

Do the group names need the "_grp" suffix? If that's what's in your TRM, it's fine by me, but I'd guess that isn't the case, and if so I'd say either drop the _grp suffix here, or enhance the binding documentation to mention the need to add this suffix when writing the .dts file.

#10 lore raw

PATCH v3 4/4 SPEAr3xx: Add pinctrl support for boards

Quoted 4 lines · Stephen Warren
Quoted 1 line · Viresh Kumar

Just a couple of minor comments below.

No Probs.

Quoted 6 lines

arch/arm/boot/dts/spear300-evb.dts line 29

Quoted 4 lines
arch/arm/boot/dts/spear300-evb.dts +2 -0
 
+		pinmux at 99000000 {
+			st,pinmux-mode=<2>;

spaces around = here for consistency?

Ok.

Quoted 10 lines

arch/arm/boot/dts/spear300-evb.dts line 37

Quoted 5 lines
arch/arm/boot/dts/spear300-evb.dts +5 -0
+			state_default: pinmux {
+				i2c0 {
+					st,pins = "i2c0_grp";
+					st,function = "i2c0";
+				};

Do the group names need the "_grp" suffix? If that's what's in your TRM, it's fine by me, but I'd guess that isn't the case, and if so I'd say either drop the _grp suffix here, or enhance the binding documentation to mention the need to add this suffix when writing the .dts file.

Updated Documentation clearly for this.

As you have spent a lot of time getting these reviewed, i would add your Reviewed-by on all these patches. Hope that would be fine?

Will fix all these, resend them and send a pull request to Arnd.

Signature · 1 line
viresh
#11 lore raw

PATCH v3 4/4 SPEAr3xx: Add pinctrl support for boards

Quoted 1 line · Viresh Kumar

On 4/13/2012 9:48 PM, Stephen Warren wrote:

...

Quoted 1 line
Quoted 1 line

Just a couple of minor comments below.

...

Quoted 2 lines

As you have spent a lot of time getting these reviewed, i would add your Reviewed-by on all these patches. Hope that would be fine?

Sure. Note that I explicitly didn't review the pin/group/function data, but concentrated more on the general framework of the driver, but I think that's enough to add my Reviewed-by.

A message that is not in the archive (sent off-list or not yet received): [email protected]

A message that is not in the archive (sent off-list or not yet received): 61fe5fe87fdddfc66d21d82b1039de3782b50201.1334207964.git.viresh.kumar@st.com

#16 lore raw

PATCH v3 3/4 pinctrl: Add SPEAr3xx pinctrl drivers

In reply to a message not in the archive
Quoted 5 lines · Viresh Kumar

This adds pinctrl driver for SPEAr3xx family. SPEAr3xx family supports three
families: SPEAr300, SPEAr310 and SPEAr320.

+++ b/Documentation/devicetree/bindings/pinctrl/pinctrl_spear.txt

Review

Quoted 9 lines
(quoted diff) +9 -0
+Required subnode-properties:
+- st,pins : An array of strings. Each string contains the name of a pin or
+  group.
+- st,function: A string containing the name of the function to mux to the pin or
+  group. See the SPEAr's TRM to determine which are valid for each pin or group.
+
+  Valid values for group and function names can be found from looking at the
+  group and function arrays in driver files:
+  drivers/pinctrl/spear/pinctrl-spear3*0.c

It might be nice to enumerate the pin/group/function names here, but if they're identical to the TRM I guess it's fine not to.

Looking at the Tegra binding docs, I see I forgot to enumerate the function names although I did enumerate everything else.

#17 lore raw

PATCH v3 3/4 pinctrl: Add SPEAr3xx pinctrl drivers

Quoted 5 lines · Stephen Warren

It might be nice to enumerate the pin/group/function names here, but if they're identical to the TRM I guess it's fine not to.

Looking at the Tegra binding docs, I see I forgot to enumerate the function names although I did enumerate everything else.

Ok.

Signature · 1 line
viresh