[PATCH/RFC] rockchip: derive GPIO bank from alias if available

John Keeping john at metanate.com
Tue Jul 26 18:25:09 CEST 2022


Upstream device trees now use standard node names like "gpio at ff..." but
the rk_gpio driver expects a name like "gpio0 at ff..." (note the index
before the @).

This is not a change that can be made in a -u-boot.dtsi file, so
updating to the latest upstream device trees requires updating the
driver.

When a sequence number is given explicitly via an alias it makes sense
to use this for the bank number (and aliases can be added via
-u-boot.dtsi when they are not present upstream), so make this the
preferred scheme for assigning a bank index, falling back to the current
method if no alias is defined.

Signed-off-by: John Keeping <john at metanate.com>
---
I'm not sure if it would be better just to use dev_seq(dev)
unconditionally here.  If no aliases are defined, then the device tree
nodes are in the right order for all Rockchip SoCs anyway so the
sequence numbers will be sensible.

But this feels like the change with less risk of unintentionally
introducing a regression.

 drivers/gpio/rk_gpio.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/gpio/rk_gpio.c b/drivers/gpio/rk_gpio.c
index 68f30157a9..b2f6d0e925 100644
--- a/drivers/gpio/rk_gpio.c
+++ b/drivers/gpio/rk_gpio.c
@@ -151,8 +151,13 @@ static int rockchip_gpio_probe(struct udevice *dev)
 		return ret;
 
 	uc_priv->gpio_count = ROCKCHIP_GPIOS_PER_BANK;
-	end = strrchr(dev->name, '@');
-	priv->bank = trailing_strtoln(dev->name, end);
+
+	ret = dev_read_alias_seq(dev, &priv->bank);
+	if (ret) {
+		end = strrchr(dev->name, '@');
+		priv->bank = trailing_strtoln(dev->name, end);
+	}
+
 	priv->name[0] = 'A' + priv->bank;
 	uc_priv->bank_name = priv->name;
 
-- 
2.37.1



More information about the U-Boot mailing list