Skip to contentSkip to conversation

SH pinctrl DT support

PATCH Superseded Laurent Pinchart 4 participants 28 messages May 21, 2013 – May 29, 2013

Subsystems (7)

v4 of 7 Superseded Latest is v7 →

lore
Share & tools
lore
#0 lore raw

v4 cover SH pinctrl DT support

Hello,

Here's the fourth version of the SuperH and SH Mobile pin controllers (PFC) DT support patch set.

The patches are based on tags/renesas-next-20130513 from Simon's tree
(git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git), the R-Car GPIO DT bindings proposal ("[RFC/PATCH v2 0/2] R-Car GPIO DT bindings") and the marzen-reference ethernet patches ("[PATCH v2 0/4] marzen-reference ethernet patches"). The result is available in my tree at

git://linuxtv.org/pinchartl/fbdev.git pinmux/3.9/dt

The series is pretty self-explanatory. DT bindings are added in patch 02/21, and the following patches gradually move SoC code and board code over to the device tree for the armadilla800eva-reference, kzm9g-reference and marzen-reference boards. The code has been tested on the three boards, but armadillo800eva has received less testing as it can't be booted all the way to userspace with network support due to missing DT bindings.

Comments will be very appreciated on the DT bindings (02/21). Points I'm a bit unsure about include:

- Should the driver support pin configuration subnodes as currently implemented, or should the subnodes be promoted to regular pin configuration nodes, with clients referencing multiple nodes ?
- Should the driver allow mixing function and configuration properties in a pin configuration node as currently implemented, or should it restrict the pin configuration nodes to either a function or one (or more) configuration(s) ?
- Should we specify common bindings for pinconf-generic instead of using Renesas-specific properties ? (If the answer to this question is yes, please help :-)).

Changes since v3:

- Fixed the GPIO flags description in the DT bindings documentation
- Mention the gpio-rcar driver in the DT bindings documentation for platforms that use it
- Removed unneeded #ifdef CONFIG_OF...#endif
- Removed unused support for platform data
- Simplified error path in sh_pfc_dt_node_to_map()
- Added gpio-ranges for r8a7778, r8a7779 and r8a7790

Changes since v2:

- Added pin configuration properties
- Rewrote all arch changes

Changes since v1:

- Fixed gpio cell number 2 documentation
- Added missing gpio-controller and #gpio-cells properties to r8a7740 DT
- Split kzm9g DT patch into SoC and board patches
- Dropped pinctrl mappings move to DT

Laurent Pinchart (21):
sh-pfc: Remove support for platform data
sh-pfc: Add DT support
ARM: shmobile: r8a73a4: Add pin control device to device tree
ARM: shmobile: r8a7740: Add pin control device to device tree
ARM: shmobile: r8a7778: Add pin control device to device tree
ARM: shmobile: r8a7778: Add GPIO controller devices to device tree
ARM: shmobile: r8a7779: Add pin control device to device tree
ARM: shmobile: r8a7779: Add GPIO controller devices to device tree
ARM: shmobile: r8a7790: Add pin control device to device tree
ARM: shmobile: r8a7790: Add GPIO controller devices to device tree
ARM: shmobile: sh7372: Add pin control device to device tree
ARM: shmobile: sh73a0: Add pin control device to device tree
ARM: shmobile: armadillo-reference: Move pinctrl mappings to device
tree
ARM: shmobile: armadillo-reference: Add st1232 pin mappings
ARM: shmobile: armadillo-reference: Move st1232 reset GPIO to DT
ARM: shmobile: armadillo-reference: Add LED1-LED4 to the device tree
ARM: shmobile: kzm9g-reference: Move pinctrl mappings to device tree
ARM: shmobile: kzm9g-reference: Move SDHI regulators to DT
ARM: shmobile: kzm9g-reference: Add LED1-LED4 to the device tree
ARM: shmobile: marzen-reference: Move pinctrl mappings to device tree
ARM: shmobile: marzen-reference: Add LED2-LED4 to the device tree

 .../bindings/pinctrl/renesas,pfc-pinctrl.txt       | 155 +++++++++++++
 arch/arm/boot/dts/r8a73a4.dtsi                     |   7 +
 .../boot/dts/r8a7740-armadillo800eva-reference.dts |  33 +++
 arch/arm/boot/dts/r8a7740.dtsi                     |   8 +
 arch/arm/boot/dts/r8a7778.dtsi                     |  56 +++++
 arch/arm/boot/dts/r8a7779-marzen-reference.dts     |  48 ++++
 arch/arm/boot/dts/r8a7779.dtsi                     |  76 +++++++
 arch/arm/boot/dts/r8a7790.dtsi                     |  66 ++++++
 arch/arm/boot/dts/sh7372.dtsi                      |   8 +
 arch/arm/boot/dts/sh73a0-kzm9g-reference.dts       |  89 +++++++-
 arch/arm/boot/dts/sh73a0.dtsi                      |   8 +
 .../board-armadillo800eva-reference.c              |  18 +-
 arch/arm/mach-shmobile/board-kzm9g-reference.c     |  47 ----
 arch/arm/mach-shmobile/board-marzen-reference.c    |  28 ---
 drivers/pinctrl/sh-pfc/core.c                      |  60 ++++-
 drivers/pinctrl/sh-pfc/pinctrl.c                   | 242 +++++++++++++++++++++
 16 files changed, 853 insertions(+), 96 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt
Signature · 3 lines
Regards,

Laurent Pinchart
#1 lore raw

PATCH v4 1/21 sh-pfc: Remove support for platform data

Platform data isn't used, support can thus be removed.

---
 drivers/pinctrl/sh-pfc/core.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/pinctrl/sh-pfc/core.c +1 -2
index 3b2fd43..ac45084 100644
@@ -354,8 +354,7 @@ static int sh_pfc_probe(struct platform_device *pdev)
 	struct sh_pfc *pfc;
 	int ret;
 
-	info = pdev->id_entry->driver_data
-	      ? (void *)pdev->id_entry->driver_data : pdev->dev.platform_data;
+	info = (void *)pdev->id_entry->driver_data;
 	if (info == NULL)
 		return -ENODEV;
 
Signature · 1 line
1.8.1.5
#3 lore raw

PATCH v4 2/21 sh-pfc: Add DT support

In reply to Laurent Pinchart

Support device instantiation through the device tree. The compatible property is used to select the SoC pinmux information.

Set the gpio_chip device field to the PFC device to enable automatic GPIO OF support.

Cc devicetree-discuss at lists.ozlabs.org
---
 .../bindings/pinctrl/renesas,pfc-pinctrl.txt       | 155 +++++++++++++
 drivers/pinctrl/sh-pfc/core.c                      |  59 ++++-
 drivers/pinctrl/sh-pfc/pinctrl.c                   | 242 +++++++++++++++++++++
 3 files changed, 455 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +155 -0
new file mode 100644
index 0000000..7651a90
@@ -0,0 +1,155 @@
+* Renesas Pin Function Controller (GPIO and Pin Mux/Config)
+
+The Pin Function Controller (PFC) is a Pin Mux/Config controller. On SH7372,
+SH73A0, R8A73A4 and R8A7740 it also acts as a GPIO controller.
+
+
+Pin Control
+-----------
+
+Required Properties:
+
+  - compatible: should be one of the following.
+    - "renesas,pfc-r8a73a4": for R8A73A4 (R-Mobile APE6) compatible pin-controller.
+    - "renesas,pfc-r8a7740": for R8A7740 (R-Mobile A1) compatible pin-controller.
+    - "renesas,pfc-r8a7778": for R8A7778 (R-Mobile M1) compatible pin-controller.
+    - "renesas,pfc-r8a7779": for R8A7779 (R-Car H1) compatible pin-controller.
+    - "renesas,pfc-r8a7790": for R8A7790 (R-Car H2) compatible pin-controller.
+    - "renesas,pfc-sh7372": for SH7372 (SH-Mobile AP4) compatible pin-controller.
+    - "renesas,pfc-sh73a0": for SH73A0 (SH-Mobile AG5) compatible pin-controller.
+
+  - reg: Base address and length of each memory resource used by the pin
+    controller hardware module.
+
+Optional properties:
+
+  - #gpio-range-cells: Mandatory when the PFC doesn't handle GPIO, forbidden
+    otherwise. Should be 3.
+
+The PFC node also acts as a container for pin configuration nodes. Please refer
+to pinctrl-bindings.txt in this directory for the definition of the term "pin
+configuration node" and for the common pinctrl bindings used by client devices.
+
+Each pin configuration node represents a desired configuration for a pin, a
+pin group, or a list of pins or pin groups. The configuration can include the
+function to select on those pin(s) and pin configuration parameters (such as
+pull-up and pull-down).
+
+Pin configuration nodes contain pin configuration properties, either directly
+or grouped in child subnodes. Both pin muxing and configuration parameters can
+be grouped in that way and referenced as a single pin configuration node by
+client devices.
+
+A configuration node or subnode must reference at least one pin (through the
+pins or pin groups properties) and contain at least a function or one
+configuration parameter. When the function is present only pin groups can be
+used to reference pins.
+
+All pin configuration nodes and subnodes names are ignored. All of those nodes
+are parsed through phandles and processed purely based on their content.
+
+Pin Configuration Node Properties:
+
+- renesas,pins : An array of strings, each string containing the name of a pin.
+- renesas,groups : An array of strings, each string containing the name of a pin
+  group.
+
+- renesas,function: A string containing the name of the function to mux to the
+  pin group(s) specified by the renesas,groups property
+
+  Valid values for pin, group and function names can be found in the group and
+  function arrays of the PFC data file corresponding to the SoC
+  (drivers/pinctrl/sh-pfc/pfc-*.c)
+
+- renesas,pull-up: An integer representing the pull-up strength to be applied
+  to all pins specified by the renesas,pins and renesas-groups properties.
+  0 disables the pull-up, 1 enables it. Other values should not be used.
+- renesas,pull-down: An integer representing the pull-down strength to be
+  applied to all pins specified by the renesas,pins and renesas-groups
+  properties. 0 disables the pull-down, 1 enables it. Other values should not
+  be used.
+
+
+GPIO
+----
+
+On SH7372, SH73A0, R8A73A4 and R8A7740 the PFC node is also a GPIO controller
+node.
+
+Required Properties:
+
+  - gpio-controller: Marks the device node as a gpio controller.
+
+  - #gpio-cells: Should be 2. The first cell is the pin number and the second
+    cell is used to specify optional parameters as bit flags. Only the GPIO
+    active low flag (bit 0) is currently supported.
+
+The syntax of the gpio specifier used by client nodes should be the following
+with values derived from the SoC user manual.
+
+  <[phandle of the gpio controller node]
+   [pin number within the gpio controller]
+   [flags]>
+
+On other mach-shmobile platforms GPIO is handled by the gpio-rcar driver.
+Please refer to Documentation/devicetree/bindings/gpio/renesas,gpio-rcar.txt
+for documentation of the GPIO device tree bindings on those platforms.
+
+
+Examples
+--------
+
+Example 1: SH73A0 (SH-Mobile AG5) pin controller node
+
+	pfc: pfc at e6050000 {
+		compatible = "renesas,pfc-sh73a0";
+		reg = <0xe6050000 0x8000>,
+		      <0xe605801c 0x1c>;
+		gpio-controller;
+		#gpio-cells = <2>;
+	};
+
+Example 2: A GPIO LED node that references a GPIO
+
+	leds {
+		compatible = "gpio-leds";
+		led1 {
+			gpios = <&pfc 20 1>; /* Active low */
+		};
+	};
+
+Example 3: KZM-A9-GT (SH-Mobile AG5) default pin state hog and pin control maps
+           for the MMCIF and SCIFA4 devices
+
+	&pfc {
+		pinctrl-0 = <&scifa4_pins>;
+		pinctrl-names = "default";
+
+		mmcif_pins: mmcif {
+			mux {
+				renesas,groups = "mmc0_data8_0", "mmc0_ctrl_0";
+				renesas,function = "mmc0";
+			};
+			cfg {
+				renesas,groups = "mmc0_data8_0";
+				renesas,pins = "PORT279";
+				renesas,pull-up = <1>;
+			};
+		};
+
+		scifa4_pins: scifa4 {
+			renesas,groups = "scifa4_data", "scifa4_ctrl";
+			renesas,function = "scifa4";
+		};
+	};
+
+Example 4: KZM-A9-GT (SH-Mobile AG5) default pin state for the MMCIF device
+
+	&mmcif {
+		pinctrl-0 = <&mmcif_pins>;
+		pinctrl-names = "default";
+
+		bus-width = <8>;
+		vmmc-supply = <&reg_1p8v>;
+		status = "okay";
+	};
drivers/pinctrl/sh-pfc/core.c +58 -1

83 lines not on this page · raw message

drivers/pinctrl/sh-pfc/pinctrl.c +242 -0

260 lines not on this page · raw message

Signature · 1 line
1.8.1.5
#4 lore raw

PATCH v4 2/21 sh-pfc: Add DT support

Quoted 8 lines · Laurent Pinchart

Support device instantiation through the device tree. The compatible property is used to select the SoC pinmux information.

Set the gpio_chip device field to the PFC device to enable automatic GPIO OF support.

Cc devicetree-discuss at lists.ozlabs.org

(...)

(Again I'm rather nervous about all the device tree binding reviewing being dropped in the lap of Linux subsystem maintainers and then expecting them to be good and OS-neutral... Not your fault though.)

Quoted 6 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +6 -0
+Pin Configuration Node Properties:
+
+- renesas,pins : An array of strings, each string containing the name of a pin.
+- renesas,groups : An array of strings, each string containing the name of a pin
+  group.
+

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt line 66

Quoted 10 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +10 -0
+- renesas,function: A string containing the name of the function to mux to the
+  pin group(s) specified by the renesas,groups property
+
+  Valid values for pin, group and function names can be found in the group and
+  function arrays of the PFC data file corresponding to the SoC
+  (drivers/pinctrl/sh-pfc/pfc-*.c)
+
+- renesas,pull-up: An integer representing the pull-up strength to be applied
+  to all pins specified by the renesas,pins and renesas-groups properties.
+  0 disables the pull-up, 1 enables it. Other values should not be used.

Then just use a boolean.

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt line 70

Quoted 4 lines

+- renesas,pull-down: An integer representing the pull-down strength to be

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +3 -0
+  applied to all pins specified by the renesas,pins and renesas-groups
+  properties. 0 disables the pull-down, 1 enables it. Other values should not
+  be used.

Just use a boolean oneliner then.

But I prefer that you define something really generic in Documentation/devicetree/bindings/pinconf.txt for anyone using generic pin config, then reference that.

This way we can have a more general config binding for any system using generic pin config, mapping to the configs we have in <linux/pinctrl/pinconf-generic.h>

The upside is that we could move the pinconf generic parsing code to drivers/pinctrl/pinconf-generic.c and thus avoid code duplication.

We have so far not tried much to standardize pinctrl bindings, but this would be a good opportunity.

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt line 85

Quoted 10 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +10 -0
+On SH7372, SH73A0, R8A73A4 and R8A7740 the PFC node is also a GPIO controller
+node.
+
+Required Properties:
+
+  - gpio-controller: Marks the device node as a gpio controller.
+
+  - #gpio-cells: Should be 2. The first cell is the pin number and the second
+    cell is used to specify optional parameters as bit flags. Only the GPIO
+    active low flag (bit 0) is currently supported.

I suggest these properties shall be defined in an include file using that new include hierarchy, since you're using pinconf generic.

include/dt-bindings/gpio/gpio.h
Referenced by <dt-bindings/gpio/gpio.h> in the .dts[i] files.

In Linux-next you find how tegra machines and the imx6sl DTs have started to use this facility for symbolic names.

And for that you should reference
<dt-bindings/gpio/gpio.h>

Use the symbolic names GPIO_ACTIVE_HIGH and GPIO_ACTIVE_LOW here.

(...)

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt line 117

Quoted 6 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +6 -0
+Example 2: A GPIO LED node that references a GPIO
+
+       leds {
+               compatible = "gpio-leds";
+               led1 {
+                       gpios = <&pfc 20 1>; /* Active low */

#include <dt-bindings/gpio/gpio.h>
gpios = <&pfc 20 GPIO_ACTIVE_LOW>;

(...)

Quoted 6 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +6 -0
+Example 3: KZM-A9-GT (SH-Mobile AG5) default pin state hog and pin control maps
+           for the MMCIF and SCIFA4 devices
+
+       &pfc {
+               pinctrl-0 = <&scifa4_pins>;
+               pinctrl-names = "default";

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt line 136

Quoted 10 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +10 -0
+
+               mmcif_pins: mmcif {
+                       mux {
+                               renesas,groups = "mmc0_data8_0", "mmc0_ctrl_0";
+                               renesas,function = "mmc0";
+                       };
+                       cfg {
+                               renesas,groups = "mmc0_data8_0";
+                               renesas,pins = "PORT279";
+                               renesas,pull-up = <1>;

Just
renesas,pull-up;

Or go for the generic pinconf binding I'm suggesting. Then I guess it'd be something like:

pinconf-bias-pull-up;

(Quite readable.)

(...)

drivers/pinctrl/sh-pfc/pinctrl.c static void sh_pfc_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, · line 125

Quoted 5 lines

+++ b/drivers/pinctrl/sh-pfc/pinctrl.c

drivers/pinctrl/sh-pfc/pinctrl.c +4 -0
+static const struct sh_pfc_config_param sh_pfc_config_params[] = {
+       { "renesas,pull-up", PIN_CONFIG_BIAS_PULL_UP },
+       { "renesas,pull-down", PIN_CONFIG_BIAS_PULL_DOWN },
+};

So these should be checked as booleans instead:

drivers/pinctrl/sh-pfc/pinctrl.c static void sh_pfc_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, · line 159

Quoted 7 lines
drivers/pinctrl/sh-pfc/pinctrl.c +7 -0
+       for (i = 0; i < ARRAY_SIZE(sh_pfc_config_params); ++i) {
+               const struct sh_pfc_config_param *param =
+                       &sh_pfc_config_params[i];
+               unsigned long config;
+               u32 val;
+
+               ret = of_property_read_u32(np, param->name, &val);

of_property_read_bool()

Though I much rather like this code added as helper lib in pinconf-generic.c. Use drivers/pinctrl/pinconf.h for API.

Yours,
Linus Walleij

#5 lore raw

PATCH v4 2/21 sh-pfc: Add DT support

Hi Linus,

Thanks for the review.

Quoted 11 lines · On Friday 24 May 2013 10:52:42 Linus Walleij wrote:
Quoted 9 lines · Laurent Pinchart

Support device instantiation through the device tree. The compatible property is used to select the SoC pinmux information.

Set the gpio_chip device field to the PFC device to enable automatic GPIO OF support.

Cc: devicetree-discuss at lists.ozlabs.org
Signed-off-by: Laurent Pinchart
<[email protected]>

Quoted 5 lines

(...)

(Again I'm rather nervous about all the device tree binding reviewing being dropped in the lap of Linux subsystem maintainers and then expecting them to be good and OS-neutral... Not your fault though.)

I agree with you. I'm open to review from other OS vendors :-)

Quoted 12 lines
Quoted 12 lines
(quoted diff) +12 -0
+Pin Configuration Node Properties:
+
+- renesas,pins : An array of strings, each string containing the name of
+  a pin.
+- renesas,groups : An array of strings, each string containing the name
+  of a pin group.
+
+- renesas,function: A string containing the name of the function to mux
+  to the pin group(s) specified by the renesas,groups property
+
+  Valid values for pin, group and function names can be found in the
+  group and function arrays of the PFC data file corresponding to the
Quoted 8 lines

Review

Quoted 6 lines
(quoted diff) +6 -0
+  SoC (drivers/pinctrl/sh-pfc/pfc-*.c)
+
+- renesas,pull-up: An integer representing the pull-up strength to be
+  applied to all pins specified by the renesas,pins and renesas-groups
+  properties. 0 disables the pull-up, 1 enables it. Other values should
+ not be used.

Then just use a boolean.

I meant that other values should not be used for now. Future revisions of the GPIO core might allow controlling the pull-up strength, hence the integer property. Same for the pull-down property. This is especially true if we device to implement generic pinconf bindings.

Quoted 15 lines

Review

Quoted 4 lines

+- renesas,pull-down: An integer representing the pull-down strength to be

(quoted diff) +3 -0
+  applied to all pins specified by the renesas,pins and renesas-groups
+  properties. 0 disables the pull-down, 1 enables it. Other values should
+  not be used.

Just use a boolean oneliner then.

But I prefer that you define something really generic in Documentation/devicetree/bindings/pinconf.txt for anyone using generic pin config, then reference that.

This way we can have a more general config binding for any system using generic pin config, mapping to the configs we have in <linux/pinctrl/pinconf-generic.h>

Quoted 5 lines

The upside is that we could move the pinconf generic parsing code to drivers/pinctrl/pinconf-generic.c and thus avoid code duplication.

We have so far not tried much to standardize pinctrl bindings, but this would be a good opportunity.

I agree. I'll reply to the "[PATCH v2 6/9] pinctrl-tz1090: add TZ1090 pinctrl driver" mail thread to further discuss the pinconf generic bindings.

Quoted 14 lines

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt

Quoted 10 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +10 -0
+On SH7372, SH73A0, R8A73A4 and R8A7740 the PFC node is also a GPIO
+controller node.
+
+Required Properties:
+
+  - gpio-controller: Marks the device node as a gpio controller.
+
+  - #gpio-cells: Should be 2. The first cell is the pin number and the
+    second cell is used to specify optional parameters as bit flags.
+    Only the GPIO active low flag (bit 0) is currently supported.

I suggest these properties shall be defined in an include file using that new include hierarchy, since you're using pinconf generic.

Quoted 2 lines

include/dt-bindings/gpio/gpio.h
Referenced by <dt-bindings/gpio/gpio.h> in the .dts[i] files.

Agreed, I'll fix that.

Quoted 72 lines

In Linux-next you find how tegra machines and the imx6sl DTs have started to use this facility for symbolic names.

And for that you should reference
<dt-bindings/gpio/gpio.h>

Use the symbolic names GPIO_ACTIVE_HIGH and GPIO_ACTIVE_LOW here.

(...)

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt line 117

Quoted 6 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +6 -0
+Example 2: A GPIO LED node that references a GPIO
+
+       leds {
+               compatible = "gpio-leds";
+               led1 {
+                       gpios = <&pfc 20 1>; /* Active low */

#include <dt-bindings/gpio/gpio.h>
gpios = <&pfc 20 GPIO_ACTIVE_LOW>;

(...)

Quoted 11 lines

+Example 3: KZM-A9-GT (SH-Mobile AG5) default pin state hog and pin
control maps + for the MMCIF and SCIFA4 devices

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +8 -0
+
+       &pfc {
+               pinctrl-0 = <&scifa4_pins>;
+               pinctrl-names = "default";
+
+               mmcif_pins: mmcif {
+                       mux {
+                               renesas,groups = "mmc0_data8_0",

"mmc0_ctrl_0"; + renesas,function = "mmc0";

Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt line 136

Quoted 5 lines
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt new file +5 -0
+                       };
+                       cfg {
+                               renesas,groups = "mmc0_data8_0";
+                               renesas,pins = "PORT279";
+                               renesas,pull-up = <1>;

Just
renesas,pull-up;

Or go for the generic pinconf binding I'm suggesting. Then I guess it'd be something like:

pinconf-bias-pull-up;

(Quite readable.)

(...)

drivers/pinctrl/sh-pfc/pinctrl.c static void sh_pfc_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, · line 125

Quoted 5 lines

+++ b/drivers/pinctrl/sh-pfc/pinctrl.c

drivers/pinctrl/sh-pfc/pinctrl.c +4 -0
+static const struct sh_pfc_config_param sh_pfc_config_params[] = {
+       { "renesas,pull-up", PIN_CONFIG_BIAS_PULL_UP },
+       { "renesas,pull-down", PIN_CONFIG_BIAS_PULL_DOWN },
+};

So these should be checked as booleans instead:

drivers/pinctrl/sh-pfc/pinctrl.c static void sh_pfc_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, · line 159

Quoted 7 lines
drivers/pinctrl/sh-pfc/pinctrl.c +7 -0
+       for (i = 0; i < ARRAY_SIZE(sh_pfc_config_params); ++i) {
+               const struct sh_pfc_config_param *param =
+                       &sh_pfc_config_params[i];
+               unsigned long config;
+               u32 val;
+
+               ret = of_property_read_u32(np, param->name, &val);

of_property_read_bool()

Though I much rather like this code added as helper lib in pinconf- generic.c. Use drivers/pinctrl/pinconf.h for API.

Signature · 3 lines
Regards,

Laurent Pinchart
#6 lore raw

PATCH v4 3/21 ARM: shmobile: r8a73a4: Add pin control device to device tree

In reply to Laurent Pinchart

Add a pfc node to the r8a73a4 device tree.

---
 arch/arm/boot/dts/r8a73a4.dtsi | 7 +++++++
 1 file changed, 7 insertions(+)
arch/arm/boot/dts/r8a73a4.dtsi +7 -0
index fde2a33..358898c 100644
@@ -91,4 +91,11 @@
 		interrupt-parent = <&gic>;
 		interrupts = <0 69 4>;
 	};
+
+	pfc: pfc at e6050000 {
+		compatible = "renesas,pfc-r8a73a4";
+		reg = <0xe6050000 0x9000>;
+		gpio-controller;
+		#gpio-cells = <2>;
+	};
 };
Signature · 1 line
1.8.1.5
#7 lore raw

PATCH v4 4/21 ARM: shmobile: r8a7740: Add pin control device to device tree

In reply to Laurent Pinchart

Add a pfc node to the r8a7740 device tree and remove manual pinmux initialization from the corresponding board files.

---
 arch/arm/boot/dts/r8a7740.dtsi                           |  8 ++++++++
 arch/arm/mach-shmobile/board-armadillo800eva-reference.c | 16 ++++++++--------
 2 files changed, 16 insertions(+), 8 deletions(-)
arch/arm/boot/dts/r8a7740.dtsi +8 -0
index 25dc930..2fa3708 100644
@@ -135,4 +135,12 @@
 			      0 72 0x4
 			      0 73 0x4>;
 	};
+
+	pfc: pfc at e6050000 {
+		compatible = "renesas,pfc-r8a7740";
+		reg = <0xe6050000 0x8000>,
+		      <0xe605800c 0x20>;
+		gpio-controller;
+		#gpio-cells = <2>;
+	};
 };
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +8 -8
index 03b85fe..f25b6aa 100644
@@ -121,7 +121,7 @@
 
 static const struct pinctrl_map eva_pinctrl_map[] = {
 	/* SCIFA1 */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.1", "pfc-r8a7740",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.1", "e6050000.pfc",
 				  "scifa1_data", "scifa1"),
 };
 
@@ -170,22 +170,22 @@ static void __init eva_init(void)
 	eva_clock_init();
 
 	pinctrl_register_mappings(eva_pinctrl_map, ARRAY_SIZE(eva_pinctrl_map));
-	r8a7740_pinmux_init();
 
 	r8a7740_meram_workaround();
 
-	/*
-	 * Touchscreen
-	 * TODO: Move reset GPIO over to .dts when we can reference it
-	 */
-	gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
-
 #ifdef CONFIG_CACHE_L2X0
 	/* Early BRESP enable, Shared attribute override enable, 32K*8way */
 	l2x0_init(IOMEM(0xf0002000), 0x40440000, 0x82000fff);
 #endif
 
 	r8a7740_add_standard_devices_dt();
+
+	/*
+	 * Touchscreen
+	 * TODO: Move reset GPIO over to .dts when we can reference it
+	 */
+	gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
+
 	r8a7740_pm_init();
 }
 
Signature · 1 line
1.8.1.5
#8 lore raw

PATCH v4 5/21 ARM: shmobile: r8a7778: Add pin control device to device tree

In reply to Laurent Pinchart

Add a pfc node to the r8a7778 device tree.

---
 arch/arm/boot/dts/r8a7778.dtsi | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm/boot/dts/r8a7778.dtsi +5 -0
index 4743735..c8dbf14 100644
@@ -32,4 +32,9 @@
 		reg = <0xfe438000 0x1000>,
 		      <0xfe430000 0x100>;
 	};
+
+	pfc: pfc at fffc0000 {
+		compatible = "renesas,pfc-r8a7778";
+		reg = <0xfffc000 0x118>;
+	};
 };
Signature · 1 line
1.8.1.5
#9 lore raw

PATCH v4 6/21 ARM: shmobile: r8a7778: Add GPIO controller devices to device tree

In reply to Laurent Pinchart

Add GPIO controller nodes to the r8a7778 core device tree.

---
 arch/arm/boot/dts/r8a7778.dtsi | 51 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)
arch/arm/boot/dts/r8a7778.dtsi +51 -0
index c8dbf14..0639e8b 100644
@@ -33,8 +33,59 @@
 		      <0xfe430000 0x100>;
 	};
 
+	gpio0: gpio at ffc40000 {
+		compatible = "renesas,gpio-r8a7778", "renesas,gpio-rcar";
+		reg = <0xffc40000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 103 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 0 32>;
+	};
+
+	gpio1: gpio at ffc41000 {
+		compatible = "renesas,gpio-r8a7778", "renesas,gpio-rcar";
+		reg = <0xffc41000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 103 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 32 32>;
+	};
+
+	gpio2: gpio at ffc42000 {
+		compatible = "renesas,gpio-r8a7778", "renesas,gpio-rcar";
+		reg = <0xffc42000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 103 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 64 32>;
+	};
+
+	gpio3: gpio at ffc43000 {
+		compatible = "renesas,gpio-r8a7778", "renesas,gpio-rcar";
+		reg = <0xffc43000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 103 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 96 32>;
+	};
+
+	gpio4: gpio at ffc44000 {
+		compatible = "renesas,gpio-r8a7778", "renesas,gpio-rcar";
+		reg = <0xffc44000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 103 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 128 27>;
+	};
+
 	pfc: pfc at fffc0000 {
 		compatible = "renesas,pfc-r8a7778";
 		reg = <0xfffc000 0x118>;
+		#gpio-range-cells = <3>;
 	};
 };
Signature · 1 line
1.8.1.5
#10 lore raw

PATCH v4 7/21 ARM: shmobile: r8a7779: Add pin control device to device tree

In reply to Laurent Pinchart

Add a pfc node to the r8a7779 device tree and remove manual pinmux initialization from the corresponding board files.

---
 arch/arm/boot/dts/r8a7779.dtsi                  |  5 +++++
 arch/arm/mach-shmobile/board-marzen-reference.c | 17 ++++++++---------
 2 files changed, 13 insertions(+), 9 deletions(-)
arch/arm/boot/dts/r8a7779.dtsi +5 -0
index 7f146c6..9dfc438 100644
@@ -101,6 +101,11 @@
 		interrupts = <0 81 0x4>;
 	};
 
+	pfc: pfc at fffc0000 {
+		compatible = "renesas,pfc-r8a7779";
+		reg = <0xfffc0000 0x23c>;
+	};
+
 	thermal at ffc48000 {
 		compatible = "renesas,rcar-thermal";
 		reg = <0xffc48000 0x38>;
arch/arm/mach-shmobile/board-marzen-reference.c +8 -9
index 5332e89..fa7fc07 100644
@@ -28,24 +28,24 @@
 
 static const struct pinctrl_map marzen_pinctrl_map[] = {
 	/* SCIF2 (CN18: DEBUG0) */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-r8a7779",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "fffc0000.pfc",
 				  "scif2_data_c", "scif2"),
 	/* SCIF4 (CN19: DEBUG1) */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-r8a7779",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "fffc0000.pfc",
 				  "scif4_data", "scif4"),
 	/* SDHI0 */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7779",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "fffc0000.pfc",
 				  "sdhi0_data4", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7779",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "fffc0000.pfc",
 				  "sdhi0_ctrl", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7779",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "fffc0000.pfc",
 				  "sdhi0_cd", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7779",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "fffc0000.pfc",
 				  "sdhi0_wp", "sdhi0"),
 	/* SMSC */
-	PIN_MAP_MUX_GROUP_DEFAULT("18000000.lan0", "pfc-r8a7779",
+	PIN_MAP_MUX_GROUP_DEFAULT("18000000.lan0", "fffc0000.pfc",
 				  "intc_irq1_b", "intc"),
-	PIN_MAP_MUX_GROUP_DEFAULT("18000000.lan0", "pfc-r8a7779",
+	PIN_MAP_MUX_GROUP_DEFAULT("18000000.lan0", "fffc0000.pfc",
 				  "lbsc_ex_cs0", "lbsc"),
 };
 
@@ -53,7 +53,6 @@ static void __init marzen_init(void)
 {
 	pinctrl_register_mappings(marzen_pinctrl_map,
 				  ARRAY_SIZE(marzen_pinctrl_map));
-	r8a7779_pinmux_init();
 
 	r8a7779_add_standard_devices_dt();
 }
Signature · 1 line
1.8.1.5
#11 lore raw

PATCH v4 8/21 ARM: shmobile: r8a7779: Add GPIO controller devices to device tree

In reply to Laurent Pinchart

Add GPIO controller nodes to the r8a7779 core device tree.

---
 arch/arm/boot/dts/r8a7779.dtsi | 71 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)
arch/arm/boot/dts/r8a7779.dtsi +71 -0
index 9dfc438..2bbb4cb 100644
@@ -48,6 +48,76 @@
                       <0xf0000100 0x100>;
         };
 
+	gpio0: gpio at ffc40000 {
+		compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
+		reg = <0xffc40000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 141 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 0 32>;
+	};
+
+	gpio1: gpio at ffc41000 {
+		compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
+		reg = <0xffc41000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 142 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 32 32>;
+	};
+
+	gpio2: gpio at ffc42000 {
+		compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
+		reg = <0xffc42000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 143 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 64 32>;
+	};
+
+	gpio3: gpio at ffc43000 {
+		compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
+		reg = <0xffc43000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 144 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 96 32>;
+	};
+
+	gpio4: gpio at ffc44000 {
+		compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
+		reg = <0xffc44000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 145 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 128 32>;
+	};
+
+	gpio5: gpio at ffc45000 {
+		compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
+		reg = <0xffc45000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 146 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 160 32>;
+	};
+
+	gpio6: gpio at ffc46000 {
+		compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
+		reg = <0xffc46000 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 147 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 192 9>;
+	};
+
 	irqpin0: irqpin at fe780010 {
 		compatible = "renesas,intc-irqpin";
 		#interrupt-cells = <2>;
@@ -104,6 +174,7 @@
 	pfc: pfc at fffc0000 {
 		compatible = "renesas,pfc-r8a7779";
 		reg = <0xfffc0000 0x23c>;
+		#gpio-range-cells = <3>;
 	};
 
 	thermal at ffc48000 {
Signature · 1 line
1.8.1.5
#12 lore raw

PATCH v4 9/21 ARM: shmobile: r8a7790: Add pin control device to device tree

In reply to Laurent Pinchart

Add a pfc node to the r8a7790 device tree.

---
 arch/arm/boot/dts/r8a7790.dtsi | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm/boot/dts/r8a7790.dtsi +5 -0
index 7a17110..c14fbd1 100644
@@ -60,4 +60,9 @@
 		interrupt-parent = <&gic>;
 		interrupts = <0 0 4>, <0 1 4>, <0 2 4>,	<0 3 4>;
 	};
+
+	pfc: pfc at e6060000 {
+		compatible = "renesas,pfc-r8a7790";
+		reg = <0 0xe6060000 0 0x250>;
+	};
 };
Signature · 1 line
1.8.1.5
#13 lore raw

PATCH v4 10/21 ARM: shmobile: r8a7790: Add GPIO controller devices to device tree

In reply to Laurent Pinchart

Add GPIO controller nodes to the r8a7790 core device tree.

---
 arch/arm/boot/dts/r8a7790.dtsi | 61 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
arch/arm/boot/dts/r8a7790.dtsi +61 -0
index c14fbd1..89afccd 100644
@@ -44,6 +44,66 @@
 		};
 	};
 
+	gpio0: gpio at ffc40000 {
+		compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
+		reg = <0 0xffc40000 0 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 4 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 0 32>;
+	};
+
+	gpio1: gpio at ffc41000 {
+		compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
+		reg = <0 0xffc41000 0 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 5 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 32 32>;
+	};
+
+	gpio2: gpio at ffc42000 {
+		compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
+		reg = <0 0xffc42000 0 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 6 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 64 32>;
+	};
+
+	gpio3: gpio at ffc43000 {
+		compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
+		reg = <0 0xffc43000 0 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 7 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 96 32>;
+	};
+
+	gpio4: gpio at ffc44000 {
+		compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
+		reg = <0 0xffc44000 0 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 8 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 128 32>;
+	};
+
+	gpio5: gpio at ffc45000 {
+		compatible = "renesas,gpio-r8a7790", "renesas,gpio-rcar";
+		reg = <0 0xffc45000 0 0x2c>;
+		interrupt-parent = <&gic>;
+		interrupts = <0 9 0x4>;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-ranges = <&pfc 0 160 32>;
+	};
+
 	timer {
 		compatible = "arm,armv7-timer";
 		interrupts = <1 13 0xf08>,
@@ -64,5 +124,6 @@
 	pfc: pfc at e6060000 {
 		compatible = "renesas,pfc-r8a7790";
 		reg = <0 0xe6060000 0 0x250>;
+		#gpio-range-cells = <3>;
 	};
 };
Signature · 1 line
1.8.1.5
#14 lore raw

PATCH v4 11/21 ARM: shmobile: sh7372: Add pin control device to device tree

In reply to Laurent Pinchart

Add a pfc node to the sh7372 device tree.

---
 arch/arm/boot/dts/sh7372.dtsi | 8 ++++++++
 1 file changed, 8 insertions(+)
arch/arm/boot/dts/sh7372.dtsi +8 -0
index 677fc60..ce19398 100644
@@ -18,4 +18,12 @@
 			compatible = "arm,cortex-a8";
 		};
 	};
+
+	pfc: pfc at e6050000 {
+		compatible = "renesas,pfc-sh7372";
+		reg = <0xe6050000 0x8000>,
+		      <0xe605801c 0x1c>;
+		gpio-controller;
+		#gpio-cells = <2>;
+	};
 };
Signature · 1 line
1.8.1.5
#15 lore raw

PATCH v4 12/21 ARM: shmobile: sh73a0: Add pin control device to device tree

In reply to Laurent Pinchart

Add a pfc node to the sh73a0 device tree and remove manual pinmux initialization from the corresponding board files.

---
 arch/arm/boot/dts/sh73a0.dtsi                  |  8 ++++++++
 arch/arm/mach-shmobile/board-kzm9g-reference.c | 27 +++++++++++++-------------
 2 files changed, 21 insertions(+), 14 deletions(-)
arch/arm/boot/dts/sh73a0.dtsi +8 -0
index 17fd9c6..9b1e8f8 100644
@@ -233,4 +233,12 @@
 		cap-sd-highspeed;
 		status = "disabled";
 	};
+
+	pfc: pfc at e6050000 {
+		compatible = "renesas,pfc-sh73a0";
+		reg = <0xe6050000 0x8000>,
+		      <0xe605801c 0x1c>;
+		gpio-controller;
+		#gpio-cells = <2>;
+	};
 };
arch/arm/mach-shmobile/board-kzm9g-reference.c +13 -14
index 44055fe..6ff6ca2 100644
@@ -40,35 +40,35 @@ static unsigned long pin_pullup_conf[] = {
 };
 
 static const struct pinctrl_map kzm_pinctrl_map[] = {
-	PIN_MAP_MUX_GROUP_DEFAULT("e6826000.i2c", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("e6826000.i2c", "e6050000.pfc",
 				  "i2c3_1", "i2c3"),
 	/* MMCIF */
-	PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "e6050000.pfc",
 				  "mmc0_data8_0", "mmc0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "e6050000.pfc",
 				  "mmc0_ctrl_0", "mmc0"),
-	PIN_MAP_CONFIGS_PIN_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
+	PIN_MAP_CONFIGS_PIN_DEFAULT("e6bd0000.mmcif", "e6050000.pfc",
 				    "PORT279", pin_pullup_conf),
-	PIN_MAP_CONFIGS_GROUP_DEFAULT("e6bd0000.mmcif", "pfc-sh73a0",
+	PIN_MAP_CONFIGS_GROUP_DEFAULT("e6bd0000.mmcif", "e6050000.pfc",
 				      "mmc0_data8_0", pin_pullup_conf),
 	/* SCIFA4 */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "e6050000.pfc",
 				  "scifa4_data", "scifa4"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "e6050000.pfc",
 				  "scifa4_ctrl", "scifa4"),
 	/* SDHI0 */
-	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "e6050000.pfc",
 				  "sdhi0_data4", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "e6050000.pfc",
 				  "sdhi0_ctrl", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "e6050000.pfc",
 				  "sdhi0_cd", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "e6050000.pfc",
 				  "sdhi0_wp", "sdhi0"),
 	/* SDHI2 */
-	PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "e6050000.pfc",
 				  "sdhi2_data4", "sdhi2"),
-	PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "pfc-sh73a0",
+	PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "e6050000.pfc",
 				  "sdhi2_ctrl", "sdhi2"),
 };
 
@@ -76,7 +76,6 @@ static void __init kzm_init(void)
 {
 	sh73a0_add_standard_devices_dt();
 	pinctrl_register_mappings(kzm_pinctrl_map, ARRAY_SIZE(kzm_pinctrl_map));
-	sh73a0_pinmux_init();
 
 	/* enable SD */
 	gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
Signature · 1 line
1.8.1.5
#16 lore raw

PATCH v4 13/21 ARM: shmobile: armadillo-reference: Move pinctrl mappings to device tree

In reply to Laurent Pinchart

Replace the pinctrl mappings in board code by device tree mappings. For devices that are still instantiated from board code reference the mappings as the default pin controller state to apply them at boot time.

---
 arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts  | 10 ++++++++++
 arch/arm/mach-shmobile/board-armadillo800eva-reference.c |  9 ---------
 2 files changed, 10 insertions(+), 9 deletions(-)
arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +10 -0
index 09ea22c..4a7ae32 100644
@@ -43,3 +43,13 @@
 		interrupts = <2 0>; /* IRQ10: hwirq 2 on irqpin1 */
 	};
 };
+
+&pfc {
+	pinctrl-0 = <&scifa1_pins>;
+	pinctrl-names = "default";
+
+	scifa1_pins: scifa1 {
+		renesas,groups = "scifa1_data";
+		renesas,function = "scifa1";
+	};
+};
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +0 -9
index f25b6aa..4ddd299 100644
@@ -24,7 +24,6 @@
 #include <linux/kernel.h>
 #include <linux/gpio.h>
 #include <linux/io.h>
-#include <linux/pinctrl/machine.h>
 #include <mach/common.h>
 #include <mach/r8a7740.h>
 #include <asm/mach/arch.h>
@@ -119,12 +118,6 @@
  *	usbhsf_power_ctrl()
  */
 
-static const struct pinctrl_map eva_pinctrl_map[] = {
-	/* SCIFA1 */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.1", "e6050000.pfc",
-				  "scifa1_data", "scifa1"),
-};
-
 static void __init eva_clock_init(void)
 {
 	struct clk *system	= clk_get(NULL, "system_clk");
@@ -169,8 +162,6 @@ static void __init eva_init(void)
 	r8a7740_clock_init(MD_CK0 | MD_CK2);
 	eva_clock_init();
 
-	pinctrl_register_mappings(eva_pinctrl_map, ARRAY_SIZE(eva_pinctrl_map));
-
 	r8a7740_meram_workaround();
 
 #ifdef CONFIG_CACHE_L2X0
Signature · 1 line
1.8.1.5
#17 lore raw

PATCH v4 14/21 ARM: shmobile: armadillo-reference: Add st1232 pin mappings

In reply to Laurent Pinchart

Add pin mappings for the st1232 device to the device tree and reference them as the default state for the device.

---
 arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts | 7 +++++++
 1 file changed, 7 insertions(+)
arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +7 -0
index 4a7ae32..a6c6606 100644
@@ -41,6 +41,8 @@
 		reg = <0x55>;
 		interrupt-parent = <&irqpin1>;
 		interrupts = <2 0>; /* IRQ10: hwirq 2 on irqpin1 */
+		pinctrl-0 = <&st1232_pins>;
+		pinctrl-names = "default";
 	};
 };
 
@@ -52,4 +54,9 @@
 		renesas,groups = "scifa1_data";
 		renesas,function = "scifa1";
 	};
+
+	st1232_pins: st1232 {
+		renesas,groups = "intc_irq10";
+		renesas,function = "intc";
+	};
 };
Signature · 1 line
1.8.1.5
#18 lore raw

PATCH v4 15/21 ARM: shmobile: armadillo-reference: Move st1232 reset GPIO to DT

In reply to Laurent Pinchart

Reference the st1232 reset GPIO from the device tree and remove it from board code.

---
 arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts  | 1 +
 arch/arm/mach-shmobile/board-armadillo800eva-reference.c | 7 -------
 2 files changed, 1 insertion(+), 7 deletions(-)
arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +1 -0
index a6c6606..a037776 100644
@@ -43,6 +43,7 @@
 		interrupts = <2 0>; /* IRQ10: hwirq 2 on irqpin1 */
 		pinctrl-0 = <&st1232_pins>;
 		pinctrl-names = "default";
+		gpios = <&pfc 166 1>;
 	};
 };
 
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +0 -7
index 4ddd299..002d8d3 100644
@@ -158,7 +158,6 @@ clock_error:
  */
 static void __init eva_init(void)
 {
-
 	r8a7740_clock_init(MD_CK0 | MD_CK2);
 	eva_clock_init();
 
@@ -171,12 +170,6 @@ static void __init eva_init(void)
 
 	r8a7740_add_standard_devices_dt();
 
-	/*
-	 * Touchscreen
-	 * TODO: Move reset GPIO over to .dts when we can reference it
-	 */
-	gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
-
 	r8a7740_pm_init();
 }
 
Signature · 1 line
1.8.1.5
#19 lore raw

PATCH v4 15/21 ARM: shmobile: armadillo-reference: Move st1232 reset GPIO to DT

arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts line 46

Quoted 11 lines · Laurent Pinchart

Reference the st1232 reset GPIO from the device tree and remove it from board code.

+++ b/arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts

arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +1 -0
@@ -43,6 +43,7 @@
                interrupts = <2 0>; /* IRQ10: hwirq 2 on irqpin1 */
                pinctrl-0 = <&st1232_pins>;
                pinctrl-names = "default";
+               gpios = <&pfc 166 1>;

Just as a random example this becomes:

gpios = <&pfc 166 GPIO_ACTIVE_LOW>;

Which is WAAAY more readable.

Quoted 10 lines
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +1 -1
+++ b/arch/arm/mach-shmobile/board-armadillo800eva-reference.c
@@ -158,7 +158,6 @@ clock_error:
  */
 static void __init eva_init(void)
 {
-
        r8a7740_clock_init(MD_CK0 | MD_CK2);
        eva_clock_init();
 

arch/arm/mach-shmobile/board-armadillo800eva-reference.c static void __init eva_init(void) · line 179

Quoted 9 lines
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +0 -6
@@ -171,12 +170,6 @@ static void __init eva_init(void)
 
        r8a7740_add_standard_devices_dt();
 
-       /*
-        * Touchscreen
-        * TODO: Move reset GPIO over to .dts when we can reference it
-        */
-       gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
-

Not really my business but I guess the driver is already augmented to pick its GPIO from the device tree in this case? And are you willingly breaking non-DT boots or something?

Yours,
Linus Walleij

maintainer
#20 lore raw

PATCH v4 15/21 ARM: shmobile: armadillo-reference: Move st1232 reset GPIO to DT

Hi Linus,

Quoted 17 lines · Linus Walleij

arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts line 46

Quoted 11 lines · Laurent Pinchart

Reference the st1232 reset GPIO from the device tree and remove it from board code.

+++ b/arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts

arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +1 -0
@@ -43,6 +43,7 @@
                interrupts = <2 0>; /* IRQ10: hwirq 2 on irqpin1 */
                pinctrl-0 = <&st1232_pins>;
                pinctrl-names = "default";
+               gpios = <&pfc 166 1>;

Just as a random example this becomes:

Quoted 3 lines

gpios = <&pfc 166 GPIO_ACTIVE_LOW>;

Which is WAAAY more readable.

Yes, agreed, even grumpy me starts thinking this looks good. =)

Quoted 13 lines
Quoted 13 lines
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +1 -1
+++ b/arch/arm/mach-shmobile/board-armadillo800eva-reference.c
@@ -158,7 +158,6 @@ clock_error:
  */
 static void __init eva_init(void)
 {
-
        r8a7740_clock_init(MD_CK0 | MD_CK2);
        eva_clock_init();
 
@@ -171,12 +170,6 @@ static void __init eva_init(void)
 
        r8a7740_add_standard_devices_dt();
 
Quoted 10 lines

arch/arm/mach-shmobile/board-armadillo800eva-reference.c static void __init eva_init(void) · line 179

Quoted 6 lines
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +0 -6
-       /*
-        * Touchscreen
-        * TODO: Move reset GPIO over to .dts when we can reference it
-        */
-       gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
-

Not really my business but I guess the driver is already augmented to pick its GPIO from the device tree in this case? And are you willingly breaking non-DT boots or something?

Regarding dependency handing of driver and board code, I believe Laurent has us covered.

As for breaking non-DT boot, under mach-shmobile the code for DT "-reference" board support is DT only so judging by the file name this kind of change should be fine.

Thanks,

/ magnus

#21 lore raw

PATCH v4 15/21 ARM: shmobile: armadillo-reference: Move st1232 reset GPIO to DT

In reply to Linus Walleij

Hi Linus,

Thanks for the review.

Quoted 14 lines · On Friday 24 May 2013 10:59:50 Linus Walleij wrote:
Quoted 13 lines · Laurent Pinchart

Reference the st1232 reset GPIO from the device tree and remove it from board code.

Signed-off-by: Laurent Pinchart
<[email protected]>

+++ b/arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts

arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +0 -0
@@ -43,6 +43,7 @@
 
                interrupts = <2 0>; /* IRQ10: hwirq 2 on irqpin1 */
                pinctrl-0 = <&st1232_pins>;
                pinctrl-names = "default";
 
Quoted 7 lines

arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts line 46

Quoted 1 line
arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +1 -0
+               gpios = <&pfc 166 1>;

Just as a random example this becomes:

gpios = <&pfc 166 GPIO_ACTIVE_LOW>;

Which is WAAAY more readable.

As stated in my reply to your other e-mail, I'll switch to symbolic constants.

Quoted 14 lines
Quoted 14 lines
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +1 -1
+++ b/arch/arm/mach-shmobile/board-armadillo800eva-reference.c
@@ -158,7 +158,6 @@ clock_error:
  */
 static void __init eva_init(void)
 {
-
        r8a7740_clock_init(MD_CK0 | MD_CK2);
        eva_clock_init();
 
@@ -171,12 +170,6 @@ static void __init eva_init(void)
 
        r8a7740_add_standard_devices_dt();
 
Quoted 9 lines

arch/arm/mach-shmobile/board-armadillo800eva-reference.c static void __init eva_init(void) · line 179

Quoted 6 lines
arch/arm/mach-shmobile/board-armadillo800eva-reference.c +0 -6
-       /*
-        * Touchscreen
-        * TODO: Move reset GPIO over to .dts when we can reference it
-        */
-       gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
-

Not really my business but I guess the driver is already augmented to pick its GPIO from the device tree in this case?

Yes it is.

Quoted 1 line

And are you willingly breaking non-DT boots or something?

The armadillo-reference board doesn't support non-DT boot.

Signature · 3 lines
Regards,

Laurent Pinchart
#22 lore raw

PATCH v4 16/21 ARM: shmobile: armadillo-reference: Add LED1-LED4 to the device tree

In reply to Laurent Pinchart

LED1 to LED4 are GPIO LEDs. Add corresponding DT nodes.

---
 arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +15 -0
index a037776..746c64a 100644
@@ -33,6 +33,21 @@
 		regulator-boot-on;
 	};
 
+	leds {
+		compatible = "gpio-leds";
+		led1 {
+			gpios = <&pfc 102 0>;
+		};
+		led2 {
+			gpios = <&pfc 111 0>;
+		};
+		led3 {
+			gpios = <&pfc 110 0>;
+		};
+		led4 {
+			gpios = <&pfc 177 0>;
+		};
+	};
 };
 
 &i2c0 {
Signature · 1 line
1.8.1.5
#23 lore raw

PATCH v4 17/21 ARM: shmobile: kzm9g-reference: Move pinctrl mappings to device tree

In reply to Laurent Pinchart

Replace the pinctrl mappings in board code by device tree mappings. For devices that are still instantiated from board code reference the mappings as the default pin controller state to apply them at boot time.

---
 arch/arm/boot/dts/sh73a0-kzm9g-reference.dts   | 51 ++++++++++++++++++++++++++
 arch/arm/mach-shmobile/board-kzm9g-reference.c | 40 --------------------
 2 files changed, 51 insertions(+), 40 deletions(-)
arch/arm/boot/dts/sh73a0-kzm9g-reference.dts +51 -0
index b6f759e..475535f 100644
@@ -145,19 +145,70 @@
 	};
 };
 
+&i2c3 {
+	pinctrl-0 = <&i2c3_pins>;
+	pinctrl-names = "default";
+};
+
 &mmcif {
+	pinctrl-0 = <&mmcif_pins>;
+	pinctrl-names = "default";
+
 	bus-width = <8>;
 	vmmc-supply = <&reg_1p8v>;
 	status = "okay";
 };
 
+&pfc {
+	pinctrl-0 = <&scifa4_pins>;
+	pinctrl-names = "default";
+
+	i2c3_pins: i2c3 {
+		renesas,groups = "i2c3_1";
+		renesas,function = "i2c3";
+	};
+
+	mmcif_pins: mmcif {
+		mux {
+			renesas,groups = "mmc0_data8_0", "mmc0_ctrl_0";
+			renesas,function = "mmc0";
+		};
+		cfg {
+			renesas,groups = "mmc0_data8_0";
+			renesas,pins = "PORT279";
+			renesas,pull-up = <1>;
+		};
+	};
+
+	scifa4_pins: scifa4 {
+		renesas,groups = "scifa4_data", "scifa4_ctrl";
+		renesas,function = "scifa4";
+	};
+
+	sdhi0_pins: sdhi0 {
+		renesas,groups = "sdhi0_data4", "sdhi0_ctrl", "sdhi0_cd", "sdhi0_wp";
+		renesas,function = "sdhi0";
+	};
+
+	sdhi2_pins: sdhi2 {
+		renesas,groups = "sdhi2_data4", "sdhi2_ctrl";
+		renesas,function = "sdhi2";
+	};
+};
+
 &sdhi0 {
+	pinctrl-0 = <&sdhi0_pins>;
+	pinctrl-names = "default";
+
 	vmmc-supply = <&reg_3p3v>;
 	bus-width = <4>;
 	status = "okay";
 };
 
 &sdhi2 {
+	pinctrl-0 = <&sdhi2_pins>;
+	pinctrl-names = "default";
+
 	vmmc-supply = <&reg_3p3v>;
 	bus-width = <4>;
 	broken-cd;
arch/arm/mach-shmobile/board-kzm9g-reference.c +0 -40
index 6ff6ca2..fc2bb37 100644
@@ -27,55 +27,15 @@
 #include <linux/irqchip.h>
 #include <linux/input.h>
 #include <linux/of_platform.h>
-#include <linux/pinctrl/machine.h>
-#include <linux/pinctrl/pinconf-generic.h>
 #include <mach/sh73a0.h>
 #include <mach/common.h>
 #include <asm/hardware/cache-l2x0.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 
-static unsigned long pin_pullup_conf[] = {
-	PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 0),
-};
-
-static const struct pinctrl_map kzm_pinctrl_map[] = {
-	PIN_MAP_MUX_GROUP_DEFAULT("e6826000.i2c", "e6050000.pfc",
-				  "i2c3_1", "i2c3"),
-	/* MMCIF */
-	PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "e6050000.pfc",
-				  "mmc0_data8_0", "mmc0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("e6bd0000.mmcif", "e6050000.pfc",
-				  "mmc0_ctrl_0", "mmc0"),
-	PIN_MAP_CONFIGS_PIN_DEFAULT("e6bd0000.mmcif", "e6050000.pfc",
-				    "PORT279", pin_pullup_conf),
-	PIN_MAP_CONFIGS_GROUP_DEFAULT("e6bd0000.mmcif", "e6050000.pfc",
-				      "mmc0_data8_0", pin_pullup_conf),
-	/* SCIFA4 */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "e6050000.pfc",
-				  "scifa4_data", "scifa4"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "e6050000.pfc",
-				  "scifa4_ctrl", "scifa4"),
-	/* SDHI0 */
-	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "e6050000.pfc",
-				  "sdhi0_data4", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "e6050000.pfc",
-				  "sdhi0_ctrl", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "e6050000.pfc",
-				  "sdhi0_cd", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("ee100000.sdhi", "e6050000.pfc",
-				  "sdhi0_wp", "sdhi0"),
-	/* SDHI2 */
-	PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "e6050000.pfc",
-				  "sdhi2_data4", "sdhi2"),
-	PIN_MAP_MUX_GROUP_DEFAULT("ee140000.sdhi", "e6050000.pfc",
-				  "sdhi2_ctrl", "sdhi2"),
-};
-
 static void __init kzm_init(void)
 {
 	sh73a0_add_standard_devices_dt();
-	pinctrl_register_mappings(kzm_pinctrl_map, ARRAY_SIZE(kzm_pinctrl_map));
 
 	/* enable SD */
 	gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
Signature · 1 line
1.8.1.5
#24 lore raw

PATCH v4 18/21 ARM: shmobile: kzm9g-reference: Move SDHI regulators to DT

In reply to Laurent Pinchart

Create two GPIO-controlled fixed-voltage regulators in the kzm9g-reference DT and remove manual configuration of the corresponding GPIOs from board code.

---
 arch/arm/boot/dts/sh73a0-kzm9g-reference.dts   | 22 ++++++++++++++++++++--
 arch/arm/mach-shmobile/board-kzm9g-reference.c |  6 ------
 2 files changed, 20 insertions(+), 8 deletions(-)
arch/arm/boot/dts/sh73a0-kzm9g-reference.dts +20 -2
index 475535f..cdfd71a 100644
@@ -58,6 +58,24 @@
 		regulator-boot-on;
 	};
 
+	vmmc_sdhi0: regulator at 2 {
+	        compatible = "regulator-fixed";
+		regulator-name = "SDHI0 Vcc";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		gpio = <&pfc 15 0>;
+		enable-active-high;
+	};
+
+	vmmc_sdhi2: regulator at 3 {
+	        compatible = "regulator-fixed";
+		regulator-name = "SDHI2 Vcc";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		gpio = <&pfc 14 0>;
+		enable-active-high;
+	};
+
 	lan9220 at 10000000 {
 		compatible = "smsc,lan9220", "smsc,lan9115";
 		reg = <0x10000000 0x100>;
@@ -200,7 +218,7 @@
 	pinctrl-0 = <&sdhi0_pins>;
 	pinctrl-names = "default";
 
-	vmmc-supply = <&reg_3p3v>;
+	vmmc-supply = <&vmmc_sdhi0>;
 	bus-width = <4>;
 	status = "okay";
 };
@@ -209,7 +227,7 @@
 	pinctrl-0 = <&sdhi2_pins>;
 	pinctrl-names = "default";
 
-	vmmc-supply = <&reg_3p3v>;
+	vmmc-supply = <&vmmc_sdhi2>;
 	bus-width = <4>;
 	broken-cd;
 	status = "okay";
arch/arm/mach-shmobile/board-kzm9g-reference.c +0 -6
index fc2bb37..1847b4d 100644
@@ -21,7 +21,6 @@
  */
 
 #include <linux/delay.h>
-#include <linux/gpio.h>
 #include <linux/io.h>
 #include <linux/irq.h>
 #include <linux/irqchip.h>
@@ -37,11 +36,6 @@ static void __init kzm_init(void)
 {
 	sh73a0_add_standard_devices_dt();
 
-	/* enable SD */
-	gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
-
-	gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
-
 #ifdef CONFIG_CACHE_L2X0
 	/* Early BRESP enable, Shared attribute override enable, 64K*8way */
 	l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff);
Signature · 1 line
1.8.1.5
#25 lore raw

PATCH v4 19/21 ARM: shmobile: kzm9g-reference: Add LED1-LED4 to the device tree

In reply to Laurent Pinchart

LED1 to LED4 are GPIO LEDs. Add corresponding DT nodes.

---
 arch/arm/boot/dts/sh73a0-kzm9g-reference.dts | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
arch/arm/boot/dts/sh73a0-kzm9g-reference.dts +16 -0
index cdfd71a..21b0fe3 100644
@@ -88,6 +88,22 @@
 		vddvario-supply = <&reg_1p8v>;
 		vdd33a-supply = <&reg_3p3v>;
 	};
+
+	leds {
+		compatible = "gpio-leds";
+		led1 {
+			gpios = <&pfc 20 1>; /* Active low */
+		};
+		led2 {
+			gpios = <&pfc 21 1>; /* Active low */
+		};
+		led3 {
+			gpios = <&pfc 22 1>; /* Active low */
+		};
+		led4 {
+			gpios = <&pfc 23 1>; /* Active low */
+		};
+	};
 };
 
 &i2c0 {
Signature · 1 line
1.8.1.5
#26 lore raw

PATCH v4 20/21 ARM: shmobile: marzen-reference: Move pinctrl mappings to device tree

In reply to Laurent Pinchart

Replace the pinctrl mappings in board code by device tree mappings. For devices that are still instantiated from board code reference the mappings as the default pin controller state to apply them at boot time.

---
 arch/arm/boot/dts/r8a7779-marzen-reference.dts  | 35 +++++++++++++++++++++++++
 arch/arm/mach-shmobile/board-marzen-reference.c | 27 -------------------
 2 files changed, 35 insertions(+), 27 deletions(-)
arch/arm/boot/dts/r8a7779-marzen-reference.dts +35 -0
index fe32e1a..596e313 100644
@@ -37,6 +37,9 @@
 	lan0 at 18000000 {
 		compatible = "smsc,lan9220", "smsc,lan9115";
 		reg = <0x18000000 0x100>;
+		pinctrl-0 = <&lan0_pins>;
+		pinctrl-names = "default";
+
 		phy-mode = "mii";
 		interrupt-parent = <&irqpin0>;
 		interrupts = <1 0x4>;
@@ -46,3 +49,35 @@
 		vdd33a-supply = <&fixedregulator3v3>;
 	};
 };
+
+&pfc {
+	pinctrl-0 = <&scif2_pins &scif4_pins &sdhi0_pins>;
+	pinctrl-names = "default";
+
+	lan0_pins: lan0 {
+		intc {
+			renesas,groups = "intc_irq1_b";
+			renesas,function = "intc";
+		};
+		lbsc {
+			renesas,groups = "lbsc_ex_cs0";
+			renesas,function = "lbsc";
+		};
+	};
+
+	scif2_pins: scif2 {
+		renesas,groups = "scif2_data_c";
+		renesas,function = "scif2";
+	};
+
+	scif4_pins: scif4 {
+		renesas,groups = "scif4_data";
+		renesas,function = "scif4";
+	};
+
+	sdhi0_pins: sdhi0 {
+		renesas,groups = "sdhi0_data4", "sdhi0_ctrl", "sdhi0_cd",
+				 "sdhi0_wp";
+		renesas,function = "sdhi0";
+	};
+};
arch/arm/mach-shmobile/board-marzen-reference.c +0 -27
index fa7fc07..3d1c439 100644
@@ -19,41 +19,14 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <linux/pinctrl/machine.h>
 #include <mach/r8a7779.h>
 #include <mach/common.h>
 #include <mach/irqs.h>
 #include <asm/irq.h>
 #include <asm/mach/arch.h>
 
-static const struct pinctrl_map marzen_pinctrl_map[] = {
-	/* SCIF2 (CN18: DEBUG0) */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "fffc0000.pfc",
-				  "scif2_data_c", "scif2"),
-	/* SCIF4 (CN19: DEBUG1) */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "fffc0000.pfc",
-				  "scif4_data", "scif4"),
-	/* SDHI0 */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "fffc0000.pfc",
-				  "sdhi0_data4", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "fffc0000.pfc",
-				  "sdhi0_ctrl", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "fffc0000.pfc",
-				  "sdhi0_cd", "sdhi0"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "fffc0000.pfc",
-				  "sdhi0_wp", "sdhi0"),
-	/* SMSC */
-	PIN_MAP_MUX_GROUP_DEFAULT("18000000.lan0", "fffc0000.pfc",
-				  "intc_irq1_b", "intc"),
-	PIN_MAP_MUX_GROUP_DEFAULT("18000000.lan0", "fffc0000.pfc",
-				  "lbsc_ex_cs0", "lbsc"),
-};
-
 static void __init marzen_init(void)
 {
-	pinctrl_register_mappings(marzen_pinctrl_map,
-				  ARRAY_SIZE(marzen_pinctrl_map));
-
 	r8a7779_add_standard_devices_dt();
 }
 
Signature · 1 line
1.8.1.5
#27 lore raw

PATCH v4 21/21 ARM: shmobile: marzen-reference: Add LED2-LED4 to the device tree

In reply to Laurent Pinchart

LED2 to LED4 are GPIO LEDs. Add corresponding DT nodes.

---
 arch/arm/boot/dts/r8a7779-marzen-reference.dts | 13 +++++++++++++
 1 file changed, 13 insertions(+)
arch/arm/boot/dts/r8a7779-marzen-reference.dts +13 -0
index 596e313..48e254b 100644
@@ -48,6 +48,19 @@
 		vddvario-supply = <&fixedregulator3v3>;
 		vdd33a-supply = <&fixedregulator3v3>;
 	};
+
+	leds {
+		compatible = "gpio-leds";
+		led2 {
+			gpios = <&gpio4 29 0>;
+		};
+		led3 {
+			gpios = <&gpio4 30 0>;
+		};
+		led4 {
+			gpios = <&gpio4 31 0>;
+		};
+	};
 };
 
 &pfc {
Signature · 1 line
1.8.1.5