From d0ce7019e5a49510a107e15ac09ed6105f27784a Mon Sep 17 00:00:00 2001 From: mlodedrwale Date: Sat, 5 Jul 2025 16:11:36 +0000 Subject: [PATCH 1/2] Detect gpiochip via libgpiod for H616 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use python3-libgpiod to scan /dev/gpiochip* and match each chip’s label, replacing the sysfs-only lookup. This ensures reliable detection on H616 and adds support for Orange Pi SBCs where the old method failed. --- .../microcontroller/allwinner/h616/pin.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/adafruit_blinka/microcontroller/allwinner/h616/pin.py b/src/adafruit_blinka/microcontroller/allwinner/h616/pin.py index 11855b77..3fd2ed49 100644 --- a/src/adafruit_blinka/microcontroller/allwinner/h616/pin.py +++ b/src/adafruit_blinka/microcontroller/allwinner/h616/pin.py @@ -1,15 +1,22 @@ # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries # # SPDX-License-Identifier: MIT - """Allwinner H616 Pin Names""" +import glob +import gpiod from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin -__chip_num = 1 -with open("/sys/class/gpio/gpiochip0/label", "r") as f: - label = f.read().strip() - if label == "300b000.pinctrl": - __chip_num = 0 +def find_gpiochip_number(target_label): + """Return the GPIO chip number for the target label, or 0 if not found.""" + for dev in glob.glob("/dev/gpiochip*"): + with gpiod.Chip(dev) as chip: + info = chip.get_info() + if info.label == target_label: + return int(dev[-1]) + return 0 + +__chip_num = find_gpiochip_number("300b000.pinctrl") + PC0 = Pin((__chip_num, 64)) SPI0_SCLK = PC0 PC1 = Pin((__chip_num, 65)) From 895990a1dc92419647bac79cc07be21bfca04aac Mon Sep 17 00:00:00 2001 From: mlodedrwale Date: Sun, 6 Jul 2025 11:42:51 +0000 Subject: [PATCH 2/2] style: autoformat with black --- src/adafruit_blinka/microcontroller/allwinner/h616/pin.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/adafruit_blinka/microcontroller/allwinner/h616/pin.py b/src/adafruit_blinka/microcontroller/allwinner/h616/pin.py index 3fd2ed49..9c576877 100644 --- a/src/adafruit_blinka/microcontroller/allwinner/h616/pin.py +++ b/src/adafruit_blinka/microcontroller/allwinner/h616/pin.py @@ -6,6 +6,7 @@ import gpiod from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin + def find_gpiochip_number(target_label): """Return the GPIO chip number for the target label, or 0 if not found.""" for dev in glob.glob("/dev/gpiochip*"): @@ -15,6 +16,7 @@ def find_gpiochip_number(target_label): return int(dev[-1]) return 0 + __chip_num = find_gpiochip_number("300b000.pinctrl") PC0 = Pin((__chip_num, 64))