base-files: armsr: number Ten64 GPIOs according to kernel version
authorMathew McBride <matt@traverse.com.au>
Mon, 18 Mar 2024 02:03:55 +0000 (13:03 +1100)
committerDaniel Golle <daniel@makrotopia.org>
Tue, 7 May 2024 12:01:19 +0000 (13:01 +0100)
A change in kernel 6.2[1] caused the base numbers of GPIOs to
change significantly on some architectures like aarch64.

We have to number our GPIOs accordingly.
Ideally the board.d scripts should look through sysfs
to find the basenum (like cat "/sys/devices/platform/soc/2000000.i2c/
i2c-0/0-0076/gpio/gpiochip640/base"), but the problem is
that this occurs before modules are loaded, meaning I2C and other
runtime devices may be missing.

Signed-off-by: Mathew McBride <matt@traverse.com.au>
[1] https://lore.kernel.org/lkml/cover.1662116601.git.christophe.leroy@csgroup.eu/T/

target/linux/armsr/base-files/etc/board.d/03_gpio_switches

index cf07bc0f54fbc0572e6f4730cbb9726289a3bd54..72f310277ae311eae4f56ec5fe2979a6c12c6b03 100644 (file)
@@ -3,18 +3,26 @@
 
 . /lib/functions/uci-defaults.sh
 
+KERNEL_MAJOR=$(uname -r | awk -F '.' '{print $1}')
+KERNEL_MINOR=$(uname -r | awk -F '.' '{print $2}')
+
 board_config_update
 
 board=$(board_name)
 
 case "$board" in
 traverse,ten64)
-       ucidef_add_gpio_switch "lte_reset" "Cell Modem Reset" "376"
-       ucidef_add_gpio_switch "lte_power" "Cell Modem Power" "377"
-       ucidef_add_gpio_switch "lte_disable" "Cell Modem Airplane mode" "378"
-       ucidef_add_gpio_switch "gnss_disable" "Cell Modem Disable GNSS receiver" "379"
-       ucidef_add_gpio_switch "lower_sfp_txidsable" "Lower SFP+ TX Disable" "369"
-       ucidef_add_gpio_switch "upper_sfp_txdisable" "Upper SFP+ TX Disable" "373"
+       if [ "${KERNEL_MAJOR}" -ge "6" ] && [ "${KERNEL_MINOR}" -ge "6" ]; then
+               I2C_GPIO_BASE=640
+       else
+               I2C_GPIO_BASE=368
+       fi
+       ucidef_add_gpio_switch "lte_reset" "Cell Modem Reset" "$(($I2C_GPIO_BASE + 8))"
+       ucidef_add_gpio_switch "lte_power" "Cell Modem Power" "$(($I2C_GPIO_BASE + 9))"
+       ucidef_add_gpio_switch "lte_disable" "Cell Modem Airplane mode" "$((I2C_GPIO_BASE + 10))"
+       ucidef_add_gpio_switch "gnss_disable" "Cell Modem Disable GNSS receiver" "$(($I2C_GPIO_BASE + 11))"
+       ucidef_add_gpio_switch "lower_sfp_txidsable" "Lower SFP+ TX Disable" "$(($I2C_GPIO_BASE + 1))"
+       ucidef_add_gpio_switch "upper_sfp_txdisable" "Upper SFP+ TX Disable" "$(($I2C_GPIO_BASE + 5))"
        ;;
 esac