On 10/12/2015 04:24 PM, Laurent Pinchart wrote:
Hi Stephen,
On Monday 12 October 2015 15:34:43 Stephen Warren wrote:
On 10/12/2015 03:13 PM, Laurent Pinchart wrote:
The enable GPIO is active low,
It'd be good to mention a justification for that statement in the
patches, since the cover letter isn't going to be checked in.
but is flagged as active high in the gpio
property. As the gpio property flags are currently unused by the driver
this doesn't cause any issue for now, but will break later if the driver
starts making use of the flags. Fix it.
IIRC the history here was that for some bizarre reason not all GPIO
bindings contained an active-high/low flag and there was resistance to
extending them in a backwards compatible way. So the regulator binding
needed the separate property to represent this. For bindings that did
have the flag, we had to set the GPIO flag to active-high, so that if
anything started honoring the GPIO flags (e.g. I thikn the gpiod API
does today, but the legacy GPIO API doesn't), we wouldn't apply both
"active low indicators", and end up driving an active-high signal, and
breaking things.
So while this change is logically correct when read in isolation (and
for Harmony, Seaboard, and Ventana I verified that these regulators do
use an active-low GPIO), I worry that making it makes mistakes likely
later. How would we mitigate that?
That's a very good point. Is the resistance to move to the standard GPIO
active low/high flags still present, or is it now only history ?
This was a few years back, so I don't remember the details; it might
have been as simple as "some bindings don't already have GPIO flags, and
I'd rather get GPIO regulators implemented first before thinking about
fixing that" or it could have been "some bindings don't already have
GPIO flags, and there's ${some reason} why it's not possible to solve
that in a backwards-compatible fashion" (recalling that DT bindings must
evolve in a backwards-compatible fashion since they're an ABI).
Unfortunately, you'd have to read through the mailing list posts related
to the patches that defined the GPIO regulator bindings or added the
nodes to DT.
In other
words, could we aim for using GPIO flags as the primary method to specify
polarities, and fall back to the custom properties for backward compatibility
(and possibly for GPIO controllers that don't support the flags) ?
I don't think we can switch to using GPIO flags, without changing the
compatible values for the relevant DT nodes.
For one, we'd need some way of actively marking the nodes to say whether
they are written to expect that the GPIO flags or the other properties
be used. It's not possible in all cases to determine this automatically.
For example, if enable-active-high it's fairly clear we should honor
this flag, yet if it's missing does that mean the GPIO is active-low or
simply that the node was written to expect that the GPIO flags be used
instead?
Also, old DTs must work with new kernels (and preferably also, new DTs
must work with old kernels). If the GPIO flags are wrong in current DTs,
then we can't use them. Of course, there's an argument that the
backwards-compatibility constraint doesn't apply to buggy DTs, just to
correctly written DTs. However, if we deliberately chose to make all
regulator GPIO flags ACTIVE_HIGH, then the current DTs aren't buggy.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html