M. Feser KBS GmbH
Date: 21.01.2025

Due to probe deferring during GPIO init, the gpiochip numbering is not
deterministic anymore.
This patch enforces deterministic gpiochip numbering for AM335x targets
using devicetree aliases.
-------------------------------------------------------------------------
diff -ruPN a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
--- a/arch/arm/boot/dts/am33xx.dtsi	2025-01-09 13:28:51.000000000 +0100
+++ b/arch/arm/boot/dts/am33xx.dtsi	2025-01-21 16:00:42.000000000 +0100
@@ -40,6 +40,10 @@
 		mmc0 = &mmc1;
 		mmc1 = &mmc2;
 		mmc2 = &mmc3;
+		gpio0 = &gpio0;
+		gpio1 = &gpio1;
+		gpio2 = &gpio2;
+		gpio3 = &gpio3;
 	};
 
 	cpus {
diff -ruPN a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
--- a/drivers/gpio/gpiolib.c	2025-01-09 13:28:51.000000000 +0100
+++ b/drivers/gpio/gpiolib.c	2025-01-21 16:01:47.000000000 +0100
@@ -623,7 +623,11 @@
 	 */
 	gdev->dev.fwnode = dev_fwnode(&gdev->dev) ?: fwnode;
 
-	gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
+	ret = of_alias_get_id(gc->of_node, "gpio");
+	if (ret >= 0)
+		gdev->id = ida_alloc_range(&gpio_ida, ret, ret, GFP_KERNEL);
+	else
+		gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
 	if (gdev->id < 0) {
 		ret = gdev->id;
 		goto err_free_gdev;
diff -ruPN a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
--- a/drivers/gpio/gpio-omap.c	2025-01-09 13:28:51.000000000 +0100
+++ b/drivers/gpio/gpio-omap.c	2025-01-21 16:07:03.000000000 +0100
@@ -1014,6 +1014,10 @@
 			bank->chip.parent = &omap_mpuio_device.dev;
 		bank->chip.base = OMAP_MPUIO(0);
 	} else {
+		ret = of_alias_get_id(bank->chip.of_node, "gpio");
+		if (ret >= 0)
+			gpio = ret * bank->width;
+		
 		label = devm_kasprintf(bank->chip.parent, GFP_KERNEL, "gpio-%d-%d",
 				       gpio, gpio + bank->width - 1);
 		if (!label)
