[PATCH] realtek: ensure output drivers are enabled in RTL8231

Sander Vanheule sander at svanheule.net
Wed Sep 29 23:59:54 PDT 2021


Hi Paul,

On Wed, 2021-09-29 at 23:52 +0300, Paul Fertser wrote:
> The bootloader can leave the GPIO expander in a state which doesn't have
> output drivers enabled so GPIOs will properly work for input but output
> operations will have no effect.
> 
> To avoid disrupting the boot in case the bootloader left direction and
> data registers in an inconsistent state (e.g. pulling SoC's reset to 0)
> reconfigure everything as input.
> 
> Thanks to Sander Vanheule for telling about LED_Start.
> 
> Signed-off-by: Paul Fertser <fercerpav at gmail.com>
> ---
> 
> My previous patch to this part of the code is marked Accepted in the
> Patchwork so this one is on top of it. Feel free to squash them
> together.

Already merged in commit 16ae56b4f9ec.

> 
>  .../realtek/files-5.4/drivers/gpio/gpio-rtl8231.c      | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/target/linux/realtek/files-5.4/drivers/gpio/gpio-rtl8231.c
> b/target/linux/realtek/files-5.4/drivers/gpio/gpio-rtl8231.c
> index a8ffcdc31368..405c2c151368 100644
> --- a/target/linux/realtek/files-5.4/drivers/gpio/gpio-rtl8231.c
> +++ b/target/linux/realtek/files-5.4/drivers/gpio/gpio-rtl8231.c
> @@ -254,11 +254,15 @@ int rtl8231_init(struct rtl8231_gpios *gpios)
>                 sw_w32_mask(3, 1, RTL838X_DMY_REG5);
>         }
>  
> -       /* Select GPIO functionality for pins 0-34 */
> +       /* Select GPIO functionality and force input direction for pins 0-34

You're now really configuring all 37 GPIOs, so the pin range in the comment
isn't quite correct any more.

> */
>         rtl8231_write(gpios, RTL8231_GPIO_PIN_SEL(0), 0xffff);
> +       rtl8231_write(gpios, RTL8231_GPIO_DIR(0), 0xffff);
>         rtl8231_write(gpios, RTL8231_GPIO_PIN_SEL(16), 0xffff);
> -       v = rtl8231_read(gpios, RTL8231_GPIO_PIN_SEL(32));
> -       rtl8231_write(gpios, RTL8231_GPIO_PIN_SEL(32), v | 0x7);

The previous patch added this variable 'v' for the RMW operation. I assume you
can now remove that variable's declaration too?

> +       rtl8231_write(gpios, RTL8231_GPIO_DIR(16), 0xffff);
> +       rtl8231_write(gpios, RTL8231_GPIO_PIN_SEL(32), 0x03ff);
> +
> +       /* Set LED_Start to enable drivers for output mode */
> +       rtl8231_write(gpios, RTL8231_LED_FUNC0, 1 << 1);

Unless you wanted to do a RMW to preserve the other bits in LED_FUNC0. Not that
it would make much of a difference, since the only other field that is changed
to a non-default value is En_bicolor (i.e. changing the LED matrix layout, which
isn't used anyway).

Best,
Sander




More information about the openwrt-devel mailing list