Re: [PATCH v3] dt-bindings: power: supply: bq24735: reverse the polarity of ac-detect

From: Thierry Reding
Date: Fri Jan 27 2017 - 03:35:49 EST


On Thu, Jan 26, 2017 at 11:09:52AM +0100, Paul Kocialkowski wrote:
> On 25/01/17 13:20, Peter Rosin wrote:
> > On 2017-01-24 17:24, Paul Kocialkowski wrote:
> > > Le jeudi 15 dÃcembre 2016 Ã 18:50 +0100, Peter Rosin a Ãcrit :
> > > > The bindings are fine.
> > > >Â
> > > > The Tegra dts files are buggy, but the driver is also buggy, so those
> > > > two bugs cancel each other. So, the option is to either introduce
> > > > regressions by fixing the two bugs thus creating a flag day where
> > > > the kernel and dt needs to match. Or, just document what is going on
> > > > and change the bindings even if they are not wrong.
> > >Â
> > > After reading the discussion, I would rather be in favor of fixing the
> > > driver
> > > and the tegra dts files, which are both wrong.
> > >Â
> > > Keeping things as-is is very counter-intuitive: the GPIO on nyan boards is
> > > active-low and should be described as such (think of other projects, like
> > > U-Boot, reusing the dts). It's also very counter-intuitive to require that
> > > any
> > > new board using that driver use active-low polarity in the GPIO declaration
> > > when
> > > the line is really active-high.
>
> > Agreed, it very counter-intuitive. I have a board w/o an invert and it
> > does look odd with active-low in the dts. It really should be active-high.
>
> > The (new) binding helps a bit though.
>
> Yeah, it's a solution anyway. I'm mostly worried that it means all other code
> (especially not in Linux) using the dts will be plagued by this, which seems a
> bit unfair. I still see this as an error not being fixed.
>
> > > Is anyone strongly opposed to that solution? I'd really rather see the issue
> > > fixed that way instead of the current proposal (this patch).
>
> > It's a little bit more than a proposal since it is in linux-next. But not set
> > in stone of course.
>
> Oh, I thought it was still up for review when sending my previous message.
>
> > I personally do not care as long as it is changed before
> > hitting Linus' tree as I have no deployed devices. But docs are just that.
> > Docs. Anything that worked before is going to break with the change you are
> > proposing. Are you really willing to break who knows how many tegra boards?
>
> From my perspective, fixing counter-intuitive behaviour justifies that.
>
> But you're probably right to point out that others down the line will most
> likely prefer to keep the change you introduced. So I'll put it this way:
> if everyone agrees that it's okay to break support for older device-trees,
> then I'm available to craft a patch. Otherwise, let's just stick with you
> changes you got in.

I do think this case is exceptional because both the DTS and driver code
are wrong, whereas the binding is correct.

So the reasonable thing to do here is to fix the code and DTS files. The
only thing I'm still somewhat concerned about is the fallout from this.

Looking at the code it seems that the ACOK GPIO is primarily used to
report the "charger present" and "charging/discharging" status. However
that status is also used to enable or disable charging. So from what I
can tell breaking compatibility here would cause device to no longer be
able to charge, which could potentially brick users' devices.

Then again, I'm not sure how the hardware works exactly. If the device
will still function with an empty battery but with a charger connected,
and I suspect it will, then users would still be able to hook up their
chargers, which they eventually have to do anyway, to boot and update
the DTB to fix this.

Now as for the amount of users concerned: I see this charger used only
on Tegra boards. Of those I don't think Venice2 and Tegra132 Norrin have
ever been available outside NVIDIA, so I don't think we'd have to
concern ourselves with them. Even if somebody was still using them
they'd have to be developers that would likely start out by copying new
kernel *and* DTB to the device.

Nyan-based devices, on the other hand, are fairly popular. I suspect
that not many actually run upstream kernels on them, and those that do
will certainly know how to update the DTS along with the kernel.

> > Or do you somehow know that *all* tegra users will always update their kernel
> > and dtb in sync, so that regressions will not happen?
>
> Frankly I've never understood why kernel maintainers expect this is not the
> case, and this is quite frequently a pain when trying to address issues such as
> this one. While I reckon that device-trees shouldn't be tied to the kernel in
> particular (both are independent), I think it's fair to except that users use
> device-trees matching the release date of the kernel.
>
> It's usually accepted that projects have dependencies on certain versions of
> libraries and explicitly do not support older versions of these. It would be
> nice to adopt the same attitude towards device-tree. These are my 2 cents on the
> issue, of course this isn't up for me to decide.

I think the primary reason for requiring backwards-compatibility is that
the DTB could be stored in a read-only location. So if there is no way
to upgrade the DTB it's fairly natural that we can't ever break ABI with
it.

Anyway, I think I've captured in full above what the potential fallout
from this break would be. Essentially things will continue to work as-is
but if users end up not updating their DTB along with the kernel their
battery will drain. The fix for this would be to update the DTB, which
on Nyan boards can be easily done along with the kernel.

The advantages would be that other boards and OSes wouldn't have to deal
with a trivial logical error that was made a long time ago.

Rob, any chance you could grant an exception under the above
circumstances?

Thierry

Attachment: signature.asc
Description: PGP signature