diff mbox series

[RFC,1/2] dt-bindings: pincfg-node: Introduce an overridable way to set bias on pins

Message ID 20230130165435.2347569-1-konrad.dybcio@linaro.org
State New
Headers show
Series [RFC,1/2] dt-bindings: pincfg-node: Introduce an overridable way to set bias on pins | expand

Commit Message

Konrad Dybcio Jan. 30, 2023, 4:54 p.m. UTC
We came to a point where we sometimes we support a few dozen boards
with a given SoC. Sometimes, we have to take into consideration
configurations which deviate rather significatly from the reference
or most common designs. In the context of pinctrl, this often comes
down to wildly different pin configurations. While pins, function and
drive-strength are easily overridable, the (mostly) boolean properties
associated with setting bias, aren't. This wouldn't be much of a
problem if they didn't differ between boards so often, preventing us
from having a "nice" baseline setup without inevitably having to go
with an ugly /delete-property/. Introduce bias-type, a bias-type-
specific property and clone the pinconf-generic type enum into
dt-bindings to allow for setting the bias in an easily overridable
manner such as:

// SoC DT
i2c0_pin: i2c0-pin-state {
	pins = "gpio10";
	function = "gpio";
	bias-type = <BIAS_PULL_UP>;
};

// Deviant board DT
&i2c0_pin {
	bias-type = <BIAS_HIGH_IMPEDANCE>;
};

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 .../bindings/pinctrl/pincfg-node.yaml         |  4 ++
 include/dt-bindings/pinctrl/pinconf-generic.h | 40 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 include/dt-bindings/pinctrl/pinconf-generic.h

Comments

Rob Herring Feb. 1, 2023, 1:57 a.m. UTC | #1
On Tue, Jan 31, 2023 at 02:21:38PM +0100, Linus Walleij wrote:
> On Tue, Jan 31, 2023 at 12:50 AM Konrad Dybcio <konrad.dybcio@linaro.org> wrote:
> 
> > > +#define DRIVE_STRENGTH                 9
> > > +#define DRIVE_STRENGTH_UA              10
> > >
> > > drive-strength = <8>; // 8mA drive strength
> > >
> > > bias-type = <DRIVE_STRENGTH>;
> > >
> > > OK where do I put my 8 mA now?
> > >
> > If you look at the 2/2 patch, this property only reads BIAS_
> > values, which can't coexist anyway.
> 
> Well the DT bindings have to be consistent and clear on their
> own, no matter how Linux implements it.
> 
> But I'm sure you can make YAML verification such that it is
> impossible to use both schemes at the same time, and it's not
> like I don't understand what you're getting at.

We already don't enforce mutually exclusive combinations. Perhaps 
someone wants to fix that first?

> What I need as input is mainly the DT bindings people opinion
> on introducing another orthogonal way of doing something
> that is already possible to do another way, just more convenient.
> Because that is essentially what is happening here.

It's really a 3rd way we're adding because the existing properties have 
2 forms which IMO is worse than 2 disjoint ways of doing it. And since 
this new way can't represent some cases, I don't think it is an 
improvement. 

Rob
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/pinctrl/pincfg-node.yaml b/Documentation/devicetree/bindings/pinctrl/pincfg-node.yaml
index be81ed22a036..d4ea563d283e 100644
--- a/Documentation/devicetree/bindings/pinctrl/pincfg-node.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/pincfg-node.yaml
@@ -51,6 +51,10 @@  properties:
     description: use pin-default pull state. Takes as optional argument on
       hardware supporting it the pull strength in Ohm.
 
+  bias-type:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: Use the specified bias type.
+
   drive-push-pull:
     oneOf:
       - type: boolean
diff --git a/include/dt-bindings/pinctrl/pinconf-generic.h b/include/dt-bindings/pinctrl/pinconf-generic.h
new file mode 100644
index 000000000000..7d9c7d8f9105
--- /dev/null
+++ b/include/dt-bindings/pinctrl/pinconf-generic.h
@@ -0,0 +1,40 @@ 
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2011 ST-Ericsson SA
+ * Written on behalf of Linaro for ST-Ericsson
+ *
+ * Author: Linus Walleij <linus.walleij@linaro.org>
+ */
+
+#ifndef _DT_BINDINGS_PINCTRL_PINCONF_GENERIC_H
+#define _DT_BINDINGS_PINCTRL_PINCONF_GENERIC_H
+
+#define BIAS_BUS_HOLD			0
+#define BIAS_DISABLE			1
+#define BIAS_HIGH_IMPEDANCE		2
+#define BIAS_PULL_DOWN			3
+#define BIAS_PULL_PIN_DEFAULT		4
+#define BIAS_PULL_UP			5
+#define DRIVE_OPEN_DRAIN		6
+#define DRIVE_OPEN_SOURCE		7
+#define DRIVE_PUSH_PULL			8
+#define DRIVE_STRENGTH			9
+#define DRIVE_STRENGTH_UA		10
+#define INPUT_DEBOUNCE			11
+#define INPUT_ENABLE			12
+#define INPUT_SCHMITT			13
+#define INPUT_SCHMITT_ENABLE		14
+#define MODE_LOW_POWER			15
+#define MODE_PWM			16
+#define OUTPUT				17
+#define OUTPUT_ENABLE			18
+#define OUTPUT_IMPEDANCE_OHMS		19
+#define PERSIST_STATE			20
+#define POWER_SOURCE			21
+#define SKEW_DELAY			22
+#define SLEEP_HARDWARE_STATE		23
+#define SLEW_RATE			24
+#define PIN_CONFIG_END			0x7F
+#define PIN_CONFIG_MAX			0xFF
+
+#endif