[PATCH] realtek: fix RTL8231 gpio expander for high GPIOs

Sander Vanheule sander at svanheule.net
Mon Sep 20 08:45:06 PDT 2021


Hi Paul,

Thanks for the patch. One comment below.

On Fri, 2021-09-17 at 16:11 +0300, Paul Fertser wrote:
> GPIOs > 31 require special handling. This patch fixes both the
> initialisation (defaulting to input) and direction get/set operations.
> 
> Runtime-tested on D-Link DGS-1210-10P-R1 which has "reset" button on
> GPIO[33].
> 
> Signed-off-by: Paul Fertser <fercerpav at gmail.com>
> ---
>  .../realtek/files-5.4/drivers/gpio/gpio-rtl8231.c      | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 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 031f60f5307c..ddb8894663ec 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
> @@ -253,9 +252,10 @@ int rtl8231_init(struct rtl8231_gpios *gpios)
>                 sw_w32_mask(3, 1, RTL838X_DMY_REG5);
>         }
>  
> -       /*Select GPIO functionality for pins 0-15, 16-31 and 32-37 */
> +       /*Select GPIO functionality for pins 0-15, 16-31 and 32-34 */
>         rtl8231_write(gpios, RTL8231_GPIO_PIN_SEL(0), 0xffff);
>         rtl8231_write(gpios, RTL8231_GPIO_PIN_SEL(16), 0xffff);
> +       rtl8231_write(gpios, RTL8231_GPIO_PIN_SEL(32), 7 | (7 << 5));
>  

Pins 35-36 cannot serve as LED output, but their GPIO direction can still be changed.
Since the select bit for pins 35-36 should always read '1' (the GPIO pin function), this
should probably be:

	rtl8231_write(gpios, RTL8231_GPIO_PIN_SEL(32), 0x1f | (0x1f << 5));

Best,
Sander




More information about the openwrt-devel mailing list