From 5dde1125e988f3d0f729e6e181e8455689c2473d Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 15 May 2026 11:22:33 -0400 Subject: [PATCH] chore(deps): update rpi-rgb-led-matrix to latest upstream for Pi 5 support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configure submodule to track upstream master branch (branch = master in .gitmodules) so future updates are a single 'git submodule update --remote' rather than manual SHA management. Update first_time_install.sh to use --remote flag so fresh installs always pull the current upstream master, not the commit recorded at clone time. Current upstream HEAD (8907235) brings: - PR #1886: Raspberry Pi 5 support — new RP1 PIO and RIO backends. The library auto-detects Pi 5 hardware at runtime; no config change required for basic operation. adafruit-hat-pwm is confirmed supported on Pi 5. - PR #1833: setup.py migrated from distutils → setuptools, fixing Python 3.12+ build failure (Pi runs Python 3.13). Previous version could not build the bindings at all on current Pi OS. Expose new rp1_rio option in display_manager.py and config.template.json: 0 (default) = PIO mode — uses Pi 5 RP1 coprocessor, minimal CPU usage 1 = RIO mode — Registered IO, faster throughput, higher CPU; note that gpio_slowdown has inverted effect in this mode No API changes to RGBMatrix, RGBMatrixOptions, or FrameCanvas. Pi 4 and earlier hardware is unaffected — rp1_rio is silently ignored on non-Pi-5. Co-Authored-By: Claude Sonnet 4.6 --- .gitmodules | 1 + config/config.template.json | 3 ++- first_time_install.sh | 4 ++-- rpi-rgb-led-matrix-master | 2 +- src/display_manager.py | 4 ++++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6efbe97a..7998285c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "rpi-rgb-led-matrix-master"] path = rpi-rgb-led-matrix-master url = https://github.com/hzeller/rpi-rgb-led-matrix.git + branch = master diff --git a/config/config.template.json b/config/config.template.json index 8eb664e1..b55220ef 100644 --- a/config/config.template.json +++ b/config/config.template.json @@ -112,7 +112,8 @@ "limit_refresh_rate_hz": 100 }, "runtime": { - "gpio_slowdown": 3 + "gpio_slowdown": 3, + "rp1_rio": 0 }, "display_durations": {}, "use_short_date_format": true, diff --git a/first_time_install.sh b/first_time_install.sh index 2c46ed7f..f2b777ba 100644 --- a/first_time_install.sh +++ b/first_time_install.sh @@ -795,7 +795,7 @@ else # Try to initialize submodule if .gitmodules exists if [ -f "$PROJECT_ROOT_DIR/.gitmodules" ] && grep -q "rpi-rgb-led-matrix" "$PROJECT_ROOT_DIR/.gitmodules"; then echo "Initializing rpi-rgb-led-matrix submodule..." - if ! git submodule update --init --recursive rpi-rgb-led-matrix-master 2>&1; then + if ! git submodule update --init --remote --recursive rpi-rgb-led-matrix-master 2>&1; then echo "⚠ Submodule init failed, cloning directly from GitHub..." git clone https://github.com/hzeller/rpi-rgb-led-matrix.git rpi-rgb-led-matrix-master fi @@ -814,7 +814,7 @@ else cd "$PROJECT_ROOT_DIR" rm -rf rpi-rgb-led-matrix-master if [ -f "$PROJECT_ROOT_DIR/.gitmodules" ] && grep -q "rpi-rgb-led-matrix" "$PROJECT_ROOT_DIR/.gitmodules"; then - git submodule update --init --recursive rpi-rgb-led-matrix-master + git submodule update --init --remote --recursive rpi-rgb-led-matrix-master else git clone https://github.com/hzeller/rpi-rgb-led-matrix.git rpi-rgb-led-matrix-master fi diff --git a/rpi-rgb-led-matrix-master b/rpi-rgb-led-matrix-master index 2cfff2a4..89072356 160000 --- a/rpi-rgb-led-matrix-master +++ b/rpi-rgb-led-matrix-master @@ -1 +1 @@ -Subproject commit 2cfff2a4b14825795e195d2bf3a9b2ef2ac93446 +Subproject commit 89072356305e272c2b1af32b8377a274df3d6d9f diff --git a/src/display_manager.py b/src/display_manager.py index 43433582..15538866 100644 --- a/src/display_manager.py +++ b/src/display_manager.py @@ -100,6 +100,10 @@ class DisplayManager: options.pwm_dither_bits = hardware_config.get('pwm_dither_bits') if 'inverse_colors' in hardware_config: options.inverse_colors = hardware_config.get('inverse_colors') + # Pi 5 only: 0=PIO/RP1 coprocessor (default, less CPU), + # 1=RIO/Registered IO (faster; gpio_slowdown effect is inverted in this mode) + if 'rp1_rio' in runtime_config: + options.rp1_rio = runtime_config.get('rp1_rio') logger.info(f"Initializing RGB Matrix with settings: rows={options.rows}, cols={options.cols}, chain_length={options.chain_length}, parallel={options.parallel}, hardware_mapping={options.hardware_mapping}")