Skip to content

v2.3.0

Choose a tag to compare

@github-actions github-actions released this 28 May 19:57
· 127 commits to main since this release

New Distros: Batocera & Recalbox

  • Batocera images are now available for CM4, CM5, Zero 1, and Zero 2 W.
  • Recalbox images are now available for CM4, CM5, and Zero 2 W. The Zero 1 is excluded for now because the stock image appears defective. Recalbox does not appear to have a battery icon (just fyi).
  • Removed all Recalbox hardware detection and add-on scripts, preventing the GPIO conflicts that cause LCD color issues during startup.
  • Audio on Batocera is heavily modified. PipeWire is disabled in favor of ALSA, RetroArch is set to use the ALSA thread driver, and a compatibility shim is installed so Batocera's OS-level volume control works correctly with the BCM2835 PWM audio hardware. This was required because PipeWire doesn't work with the hardware and causes CPU usage to spike massively.

Gamepad Driver

  • The controller is now automatically detected on all supported operating systems without any per-distro configuration. The device presents itself using an ID that matches existing gamecontrollerdb entries on Lakka, Batocera, and Recalbox.
  • Volume up and down are now emitted as a separate OS-level keyboard device using the standard KEY_VOLUMEUP and KEY_VOLUMEDOWN keycodes. Previously they were mapped as numpad keys inside the gamepad device, which required per-distro workarounds.
  • L2 and R2 are now also exposed as analog trigger axes in addition to buttons, matching the layout expected by RetroArch and SDL. This is not yet fully tested.
  • The gamepad driver now exits cleanly at startup if the ATmega is not detected at address 0x10.

Startup & Services

  • All startup logic has been consolidated into a single pspi.service and boot.sh.
  • The battery monitor now starts first so the OS sees the battery immediately on boot.
  • The I2C bus is now confirmed to be present before any I2C-dependent driver is started.

LCD Overlay

  • The separate compute module and Pi Zero overlay files have been merged into a single pspi-lcd-overlay.dts. Use the zero parameter when targeting Pi Zero boards.
  • I2C configuration has been moved out of the overlay file to avoid conflicts with other overlays.

Build System

  • The image patcher has been generalized to support any image type, not just squashfs-based images. Standard Raspberry Pi OS images can now be patched.
  • Output images are now compressed with xz instead of gz to reduce file sizes.
  • Pre-built driver binaries are now included as downloadable assets in the release.
  • The GitHub Actions workflow now scales automatically when new distros are added.

Automatic Firmware Updates

  • The ATmega microcontroller can now update its own firmware automatically. Previously, updating the ATmega required soldering wires directly to the board and using avrdude, but this will no longer be necessary with the updated bootloader.
  • A custom bootloader has been added to the ATmega. On boot, the Raspberry Pi flashes an update, all over I2C.
  • Flashing uses a dedicated minimal image with bit-banged I2C to work around a hardware bug in the Raspberry Pi's I2C controller that could cause corruption during a flash.
  • The bootloader stores a checksum and performs full firmware verification on every boot. If verification fails, the bootloader holds rather than jumping to a potentially corrupt application.
  • All boards with revision 1.5 or greater will have the new bootloader. Earlier boards can be one-time flashed manually using an RPi or Atmega.

Compute Module 5 Reminder

  • Power draw is very high. The system may cut off if power demand spikes. The hardware gets very hot.
  • Audio through headphones and speakers does not work on the CM5 with the CM4 carrier. The pins changed, so no software change will fix this. Bluetooth or USB audio required.

Image User/Password

Lakka

Username: root
Password: root

Batocera

Username: root
Password: linux

Recalbox

Username: root
Password: recalboxroot

Full Changelog: v2.2.0...v2.3.0