[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Y4eC6W/wstJFLrEr@smile.fi.intel.com>
Date: Wed, 30 Nov 2022 18:20:57 +0200
From: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
To: Hans de Goede <hdegoede@...hat.com>
Cc: Marc Zyngier <maz@...nel.org>, linux-gpio@...r.kernel.org,
linux-doc@...r.kernel.org, linux-kernel@...r.kernel.org,
Linus Walleij <linus.walleij@...aro.org>,
Bartosz Golaszewski <brgl@...ev.pl>,
Jonathan Corbet <corbet@....net>
Subject: Re: [PATCH v1 2/3] Documentation: gpio: Add a section on what to
return in ->get() callback
On Wed, Nov 30, 2022 at 05:12:13PM +0100, Hans de Goede wrote:
> On 11/30/22 16:55, Andy Shevchenko wrote:
> > The ->get() callback depending on other settings and hardware support
> > may return different values, while the line outside the chip is kept
> > in the same state. Let's discuss that in the documentation.
...
> > +Considerations of the ->get() returned value
> > +--------------------------------------------
> > +
> > +Due to different possible electrical configurations and software applications
> > +the value that ->get() callback returns may vary depending on the other settings.
> > +This will allow to use pins in the I2C emulation mode or other not so standard
> > +uses.
> > +
> > +The below table gathered the most used cases.
> > +
> > +========== ========== =============== =======================
> > + Input Output State What value to return?
> > +========== ========== =============== =======================
> > + Disabled Disabled Hi-Z input buffer
> > + Disabled OS/OD/etc Single ended [cached] output buffer
>
> You need to clarify what single-ended means here. You mean a pin
> which is only capable of output I guess ? So now way to figure
> out if another participant in the OS/OD bus has its transistor
> in the "on" state this pulling the bus high / low agains the bias
> resistor(s) which determine the state of the bus in rest ?
>
> Or you mean that the bus is uni-directional, even then being
> able to detect a short-circuit is useful.
It's described in the previous chapter(s).
> > + x Push-Pull Out [cached] output buffer
>
> Why, most GPIO drivers are protected against short-circuit to
> GND / Vdd and actually reading the input-buffer here will allow
> GPIO API consumers to detect such short-circuits if they are
> interested in this. This would e.g. be useful to detect
> mis-wiring on devices like the Raspberry Pi were users often
> connect extra peripherals through breadboards.
I think it is nonsense from electronics point of view.
> IMHO for pins with an input buffer get() should simply
> always return the contents of the input buffer. This is what
> I believe almost all GPIO drivers currently do and also
> keeps the get() methods KISS.
As you can see, I disagree on this.
> Actually implementing the behavior you suggest here requires
> the get() method to differentiate between push-pull and
> other mode. This makes the get() method implementation
> needlessly complicated and will likely be a source of bugs
> as people will get this wrong in some cases and people
> will very likely not test all possible combinations from
> this big table you are adding here.
People already are getting wrong this and here is no documentation
on what to do to get it right.
> IHMO the rules for get() should simply be:
>
> 1. Device has an input buffer:
> Return input-buffer value for the pin.
I disagree on this. It makes no sense to read real hw wire state when output
is enabled. If somebody does a short circuit, it's not a Linux issue and
should be recognized on the PCB side (using oscilloscope, multi-meter, etc).
> 2. Devices does not have an input buffer:
> Return last set output-buffer value
> > + Enabled Disabled In input buffer
> > + Enabled OS/OD/etc Bidirectional input buffer
> > +========== ========== =============== =======================
> > +
> > +The [cached] here is used in a broader sense: either pure software cache, or
> > +read back value from the GPIO output buffer (not all hardware support that).
--
With Best Regards,
Andy Shevchenko
Powered by blists - more mailing lists