Thread (28 messages) 28 messages, 4 authors, 2013-05-29

[PATCH v4 02/21] sh-pfc: Add DT support

From: laurent.pinchart@ideasonboard.com (Laurent Pinchart)
Date: 2013-05-29 08:01:05
Also in: linux-devicetree, linux-sh

Hi Linus,

Thanks for the review.

On Friday 24 May 2013 10:52:42 Linus Walleij wrote:
On Tue, May 21, 2013 at 2:14 PM, Laurent Pinchart wrote:
quoted
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
[off-list ref]
(...)

(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
+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.
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
+- 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.
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.
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
+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.
Agreed, I'll fix that.
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.

(...)
quoted
+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
+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>;
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.)

(...)
quoted
+++ b/drivers/pinctrl/sh-pfc/pinctrl.c
+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:
quoted
+       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.
-- 
Regards,

Laurent Pinchart
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help