25 Mainlining
emeric edited this page 2026-10-18 20:21:55 +02:00

Overview

  • WLAN works
  • Display works
  • Torch/flashlight works

Open

diff --git a/arch/arm64/boot/dts/vendor/qcom/yupik-iot-idp-pm7250b-overlay.dts b/arch/arm64/boot/dts/vendor/qcom/yupik-iot-idp-pm7250b-overlay.dts
index 82336601fcdd..32232b34c5cf 100644
--- a/arch/arm64/boot/dts/vendor/qcom/yupik-iot-idp-pm7250b-overlay.dts
+++ b/arch/arm64/boot/dts/vendor/qcom/yupik-iot-idp-pm7250b-overlay.dts
@@ -4,8 +4,8 @@
 #include "yupik-iot-idp-pm7250b.dtsi"
 
 / {
-       model = "Qualcomm Technologies, Inc. Yupik IOT IDP + PM7250B";
-       compatible = "qcom,yupik-iot-idp", "qcom,yupik-iot", "qcom,idp";
+       model = "SHIFT SHIFTphone 8";
+       compatible = "shift,otter", "qcom,yupik-iot-idp", "qcom,yupik-iot", "qcom,idp";
        qcom,msm-id = <497 0x10000>, <575 0x10000>, <576 0x10000>;
        qcom,board-id = <34 0>;
 };

Audioo

  • Capture
amixer-c 0 cset name='MultiMedia2 Mixer VA_CODEC_DMA_TX_0' 1

amixer-c 0 cset name='VA DEC0 MUX' 'VA_DMIC' 
amixer-c 0 cset name='VA DMIC MUX0' DMIC0 
amixer-c 0 cset name='VA_AIF1_CAP Mixer DEC0' on 

arecord-D hw:0,1 -f S16_LE -r 48000 -c 1 -d 10 /tmp/va_dmic0.wav 
  • ADSP
    • Test: cat /sys/kernel/debug/remoteproc/remoteproc*/state
  • TAS2563
    • Add: &i2c4 node
    • Test: i2cdetect -y 4, dmesg (firmware error expected)
  • Firmware binary
    bsdtar xf ~/Downloads/SHIFTPHONE_8.SOS.7.1.L-RELEASE-LIGHT-20260710-OTA.zip -O payload.bin |
        dd bs=1 skip=964203097 count=548720 | unxz | dd bs=1 skip=1941504 count=27375 > tas2563_coef.bin
    bsdtar xf ~/Downloads/SHIFTPHONE_8.SOS.7.1.L-RELEASE-LIGHT-20260710-OTA.zip -O payload.bin |
        dd bs=1 skip=964203097 count=548720 | unxz | dd bs=1 skip=1970176 count=2184 > tas2563RCA2.bin
    sudo mv tas*.bin /lib/firmware
    

Missing parts

  • tas2563.bin for left and right speakers
sudo cp tas2563-2amp-reg.bin /lib/firmware/tas2563RCA2.bin
sudo cp tas2563-2amp-dsp.bin /lib/firmware/tas2563_coef.bin
amixer -c 0 cset name='QUIN_MI2S_RX Audio Mixer MultiMedia1' 1
amixer -c 0 cset name="Speaker Profile Id" 1

amixer -c 0 cset name='Speaker Config Id' 0
amixer -c 0 cset name="Activate Tasdevice Num" 1
speaker-test -D sysdefault -t sine -c 2 -l 1

# Working sine with
amixer -D hw:0 cset name='PRI_MI2S_RX Audio Mixer MultiMedia1' 1
amixer -c 0 cset name="Speaker Profile Id" 5
speaker-test -D hw:0,0 -t sine -c 2
  • UCM2
sudo mkdir /usr/share/alsa/ucm2/S8
sudo tee /usr/share/alsa/ucm2/S8/S8.conf <<'EOF'
Syntax 2

SectionDefaults [
    cset "name='PRI_MI2S_RX Audio Mixer MultiMedia1' 1"
    cset "name='PRI_MI2S_RX Audio Mixer MultiMedia2' 1"
    cset "name='PRI_MI2S_RX Audio Mixer MultiMedia3' 1"
]

SectionUseCase."HiFi" {
    File "HiFi.conf"
    Comment "HiFi"
}
EOF
sudo tee /usr/share/alsa/ucm2/S8/HiFi.conf <<'EOF'
SectionVerb {
    EnableSequence [
        cset "name='PRI_MI2S_RX Audio Mixer MultiMedia1' 1"
        cset "name='Speaker Profile Id' 5"
    ]
    DisableSequence [
        cset "name='PRI_MI2S_RX Audio Mixer MultiMedia1' 0"
    ]

    Value {
        PlaybackPCM "hw:0,0"
        TQ "HiFi"
    }
}

SectionDevice."Speaker" {
    Comment "Built-in Speakers"

    Value {
        PlaybackChannels 2
        PlaybackPCM "hw:0,0"
        PlaybackVolume "Speaker Digital Volume"
    }
}
EOF
sudo tee /usr/share/wireplumber/wireplumber.conf.d/52-otter.conf <<'EOF'
monitor.alsa.rules = [
  {
    matches = [
      { device.name = "alsa_card.platform-sound" }
    ]
    actions = {
      update-props = {
        api.alsa.use-acp = true
        api.alsa.split-enable = false
      }
    }
  }
]
EOF

But that still doesn't work because the routing is not up by the time pipewire is started.

sudo mkdir -p /usr/local/sbin/
sudo tee /usr/local/sbin/otter-audio-init << 'EOF'
#!/bin/sh
exec >> /var/log/otter-audio-init.log 2>&1
echo "$(date): starting"
/usr/sbin/amixer -c 0 cset name='PRI_MI2S_RX Audio Mixer MultiMedia1' 1
/usr/sbin/amixer -c 0 cset name='PRI_MI2S_RX Audio Mixer MultiMedia2' 1
/usr/sbin/amixer -c 0 cset name='PRI_MI2S_RX Audio Mixer MultiMedia3' 1
/usr/sbin/amixer -c 0 cset name='Speaker Profile Id' 5
echo "$(date): done"
EOF
sudo chmod +x /usr/local/sbin/otter-audio-init

sudo tee /etc/udev/rules.d/90-otter-audio.rules << 'EOF'
SUBSYSTEM=="sound", ACTION=="add", KERNEL=="controlC0", ATTRS{id}=="S8", RUN+="/usr/local/sbin/otter-audio-init"
EOF
  • LPASS macros
    • Add: qcs6490-audioreach
    • Test: ls /sys/bus/platform/drivers/lpass-*-macro/
  • SoundWire buses
    • Add: swr0/swr1 + LPI pinctrl
    • Test: ls /sys/bus/soundwire/devices/
  • WCD9385
    • Add: wcd9385 codec node + reset GPIO pinctrl + wcd_rx/wcd_tx slave nodes.
    • Test: dmesg | grep -i wcd938; ls /sys/bus/soundwire/devices/sdw:*
  • Sound card (input)
    • Test: dmesg (ASoC, snd_soc_register_card, otter-sndcard); cat /proc/asound/cards

Camera