Hi Andy, Andrew,
On Mon, 2021-05-24 at 10:53 +0300, Andy Shevchenko wrote:
On Mon, May 24, 2021 at 4:11 AM Andrew Lunn <andrew@xxxxxxx> wrote:
>
> > Changes since v2:
> > - MDIO regmap support was merged, so patch is dropped here
>
> Do you have any idea how this will get merged. It sounds like one of
> the Maintainers will need a stable branch of regmap.
This is not a problem if Mark provides an immutable branch to pull from.
Mark has a tag (regmap-mdio) for this patch:
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git/tag/?h=regmap-mdio
> > - Introduce GPIO regmap quirks to set output direction first
>
> I thought you had determined it was possible to set output before
> direction?
Same thoughts when I saw an updated version of that patch. My
anticipation was to not see it at all.
The two devices I've been trying to test the behaviour on are:
* Netgear GS110TPP: has an RTL8231 with three LEDs, each driven via a pin
configured as (active-low) GPIO. The LEDs are easy for a quick visual check.
* Zyxel GS1900-8: RTL8231 used for the front panel button, and an active-low
GPIO used to hard reset the main SoC (an RTL8380). I've modified this board
to change some of the strapping pin values, but testing with the jumpers and
pull-up/down resistors is a bit more tedious.
On the Netgear, I tested the following with and without the quirk:
# Set as OUT-LOW twice, to avoid the quirk. Always turns the LED on
gpioset 1 32=0; gpioset 1 32=0
# Get value to change to input, turns the LED off (high impedance)
# Will return 1 due to (weak) internal pull-up
gpioget 1 32
# Set as OUT-HIGH, should result in LED off
# When the quirk is disabled, the LED turns on (i.e. old OUT-LOW value)
# When the quirk is enabled, the LED remains off (i.e. correct
OUT-HIGH value)
gpioset 1 32=1
Now, what's confusing (to me) is that the inverse doesn't depend on the quirk:
# Set as OUT-HIGH twice
gpioset 1 32=1; gpioset 1 32=1
# Change to high-Z
gpioget 1 32
# Set to OUT-LOW, always results in LED on, with or without quirk
gpioset 1 32=0
Any idea why this would be (or appear) broken on the former case, but not on the
latter?