diff --git a/host_vars/musicdolphin.yml b/host_vars/musicdolphin.yml index b82ea5d..54ba27d 100644 --- a/host_vars/musicdolphin.yml +++ b/host_vars/musicdolphin.yml @@ -9,7 +9,16 @@ main_user: root mediapi_has_hifiberry_amp: true mediapi_ir_control: irserver -mediapi_has_dhtsensor: true +# Off for the Pi 5: the legacy Adafruit_DHT library bit-bangs the BCM283x registers, +# which the Pi 5 no longer has (GPIO sits behind the RP1 chip), so the poller cannot +# work there. Needs a libgpiod-based replacement before this goes back to true. +mediapi_has_dhtsensor: false + +# Raspberry Pi 5. The SD card came from a Pi 4, whose image has no Pi 5 kernel. +pi_standard_setup_install_pi5_kernel: true +# The Pi is fed 5V through the HiFiBerry board's GPIO header, not USB-C, so it cannot +# negotiate a 5A supply and would cap USB current at 600mA. +hifiberry_powers_pi: true # Display-only MusicMouse instance: no physical mouse attached, shown on the monitor # via pi_kiosk instead. See roles/pi_musicmouse/files/config-musicdolphin.yml. diff --git a/roles/pi_hifiberry_amp/README.md b/roles/pi_hifiberry_amp/README.md index 1986516..fda3580 100644 --- a/roles/pi_hifiberry_amp/README.md +++ b/roles/pi_hifiberry_amp/README.md @@ -3,4 +3,7 @@ Deactivates the Pi's onboard analog audio and activates a HiFiBerry amp/DAC overlay instead. -**Key vars:** `hifiberry_overlay` +**Key vars:** `hifiberry_overlay`, `hifiberry_powers_pi` + +`hifiberry_powers_pi` (default `false`) is for a Pi fed through the HiFiBerry board's +GPIO header. On a Pi 5 that sets `usb_max_current_enable=1`, or USB is capped at 600mA. diff --git a/roles/pi_hifiberry_amp/defaults/main.yml b/roles/pi_hifiberry_amp/defaults/main.yml new file mode 100644 index 0000000..d1bc483 --- /dev/null +++ b/roles/pi_hifiberry_amp/defaults/main.yml @@ -0,0 +1,2 @@ +--- +hifiberry_powers_pi: false diff --git a/roles/pi_hifiberry_amp/tasks/main.yml b/roles/pi_hifiberry_amp/tasks/main.yml index 704271e..59f0e17 100644 --- a/roles/pi_hifiberry_amp/tasks/main.yml +++ b/roles/pi_hifiberry_amp/tasks/main.yml @@ -11,3 +11,13 @@ regexp: "^#?dtoverlay=hifiberry-amp" line: "dtoverlay={{ hifiberry_overlay }}" notify: Reboot +- name: Lift the Pi 5's USB current cap when the HiFiBerry board powers it + # A Pi 5 fed over the GPIO header has no USB-C power negotiation, so it assumes a + # weak supply and limits USB ports to 600mA. Unknown to a Pi 4, which ignores it. + ansible.builtin.lineinfile: + path: /boot/firmware/config.txt + regexp: "^#?usb_max_current_enable=" + line: "usb_max_current_enable=1" + insertafter: EOF + when: hifiberry_powers_pi + notify: Reboot diff --git a/roles/pi_standard_setup/defaults/main.yml b/roles/pi_standard_setup/defaults/main.yml index 2c0d840..66c5f6d 100644 --- a/roles/pi_standard_setup/defaults/main.yml +++ b/roles/pi_standard_setup/defaults/main.yml @@ -9,3 +9,8 @@ pi_standard_setup_wifi_pass_url: "bauer_wifi" # has to be in keepass with url "w ansible_ssh_pass: "raspberry" ansible_become_password: "raspberry" ansible_become: true + +# Install the Pi 5 (BCM2712) kernel, kernel_2712.img (an arm64 package, hence the :arm64 on +# the armhf userland). A card imaged on a Pi 4 does not have +# it, and a Pi 5 will not boot without. Harmless on a Pi 4, which keeps its own kernel. +pi_standard_setup_install_pi5_kernel: false diff --git a/roles/pi_standard_setup/tasks/main.yml b/roles/pi_standard_setup/tasks/main.yml index e1eb43c..51e005c 100644 --- a/roles/pi_standard_setup/tasks/main.yml +++ b/roles/pi_standard_setup/tasks/main.yml @@ -115,6 +115,13 @@ - telnet cache_valid_time: 7200 state: present +- name: Install the Pi 5 kernel + ansible.builtin.apt: + name: "linux-image-rpi-2712:arm64" + cache_valid_time: 7200 + state: present + when: pi_standard_setup_install_pi5_kernel + notify: Reboot - name: Copy vim config ansible.builtin.copy: src: vimrc