[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