summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorKaustabh Chakraborty <[email protected]>2025-10-21 19:51:35 +0530
committerMinkyu Kang <[email protected]>2025-11-25 19:00:47 +0900
commit4937a9778cfb22cad3f411522c62a14d5242e55e (patch)
tree9263db6864c1b86b7d195a76c35ea3bef0492950 /drivers
parent1ca7bcdb9d6489caa55742a2938be2091d24e3b2 (diff)
gpio: s5p: increment bank base address only if bank is initialized
There is a condition guard which ensures that the GPIO node, indeed describes a GPIO controller. if (!fdtdec_get_bool(blob, node, "gpio-controller")) continue; Since the bank base is being incremented in the loop, it is done so irrespective of whether the node is a GPIO controller or not. This leads to the incorrect resolution of bank base addresses. Move it out of the loop, and instead increment the bank base address only if the driver successfully binds a GPIO controller. Reviewed-by: Henrik Grimler <[email protected]> Fixes: b8809e60cdb5 ("dm: exynos: gpio: Convert to driver model") Signed-off-by: Kaustabh Chakraborty <[email protected]> Signed-off-by: Minkyu Kang <[email protected]>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpio/s5p_gpio.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/gpio/s5p_gpio.c b/drivers/gpio/s5p_gpio.c
index 53dbbe97b5a..c072f146514 100644
--- a/drivers/gpio/s5p_gpio.c
+++ b/drivers/gpio/s5p_gpio.c
@@ -319,7 +319,7 @@ static int gpio_exynos_bind(struct udevice *parent)
base = dev_read_addr_ptr(parent);
for (node = fdt_first_subnode(blob, dev_of_offset(parent)), bank = base;
node > 0;
- node = fdt_next_subnode(blob, node), bank++) {
+ node = fdt_next_subnode(blob, node)) {
struct exynos_gpio_plat *plat;
struct udevice *dev;
fdt_addr_t reg;
@@ -341,9 +341,8 @@ static int gpio_exynos_bind(struct udevice *parent)
if (reg != FDT_ADDR_T_NONE)
bank = (struct s5p_gpio_bank *)((ulong)base + reg);
- plat->bank = bank;
-
debug("dev at %p: %s\n", bank, plat->bank_name);
+ plat->bank = bank++;
}
return 0;