I have a rather janky fix for this issue. Basically, we reset all USB devices on the bus after boot. I created a systemd service file with the following contents:
$ cat /etc/systemd/system/usb-reset.service
[Unit]
Description=Reset USB devices before SDDM
Before=sddm.service
[Service]
Type=oneshot
ExecStart=/root/usbreset.sh
[Install]
WantedBy=multi-user.target
And the script is this:
$ cat ~/usbreset.sh
#!/usr/bin/env bash
# Resets USB devices in a specified path.
# Use with caution, as this may reset devices currently in use.
base_path="/sys/bus/usb/devices/"
# Function to reset a single USB device
reset_usb_device() {
dev_path="$1"
echo "Resetting device at '$dev_path' ..."
echo 0 | sudo tee "$dev_path/authorized" > /dev/null # Deactivate
sleep 1 # Short delay
echo 1 | sudo tee "$dev_path/authorized" > /dev/null # Reactivate
}
# Find USB devices
echo "Looking for USB devices in '$base_path'..."
for dev_path in "$base_path"/*
do
reset_usb_device "$dev_path"
done
echo "Done."
Enable and start this service and your USB devices will be re-initialized after boot.
I've also verified that adding the "extraboardargs" as in the first post works for me as well.