On Thu, Jul 25, 2019 at 12:23 AM H. Nikolaus Schaller hns@goldelico.com wrote:
Hi Rob,
Am 24.07.2019 um 21:42 schrieb Rob Herring robh@kernel.org:
On Mon, Jul 08, 2019 at 04:46:05PM +0200, H. Nikolaus Schaller wrote:
commit 6953c57ab172 "gpio: of: Handle SPI chipselect legacy bindings"
did introduce logic to centrally handle the legacy spi-cs-high property in combination with cs-gpios. This assumes that the polarity of the CS has to be inverted if spi-cs-high is missing, even and especially if non-legacy GPIO_ACTIVE_HIGH is specified.
The DTS for the GTA04 was orginally introduced under the assumption that there is no need for spi-cs-high if the gpio is defined with proper polarity GPIO_ACTIVE_HIGH.
Given that spi-cs-high is called legacy, that would imply that DT's should not have to use spi-cs-high.
Yes.
This was not a problem until gpiolib changed the interpretation of GPIO_ACTIVE_HIGH and missing spi-cs-high.
Then we should fix gpiolib...
I tried to convince Linus that this is the right way but he convinced me that a fix that handles all cases does not exist.
There seem to be embedded devices with older DTB (potentially in ROM) which provide a plain 0 value for a gpios definition. And either with or without spi-cs-high.
Since "0" is the same as "GPIO_ACTIVE_HIGH", the absence of spi-cs-high was and must be interpreted as active low for these devices. This leads to the inversion logic in code.
AFAIR it boils down to the question if gpiolib and the bindings should still support such legacy devices with out-of tree DTB, but force in-tree DTS to add the legacy spi-cs-high property.
Or if we should fix the 2 or 3 cases of in-tree legacy cases and potentially break out-of tree DTBs.
If it is small number of platforms, then the kernel could handle those cases explicitly as needed.
IMHO it is more general to keep the out-of-tree DTBs working and "fix" what we can control (in-tree DTS).
If we do this, then we need to not call spi-cs-high legacy because we're stuck with it forever.
Rob