diff --git a/.gitignore b/.gitignore index 60d0bd9..cd9aa4c 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,5 @@ src/auracast/server/certs/per_device/ src/auracast/.env src/auracast/server/certs/ca/ca_cert.srl src/auracast/server/credentials.json +pcm1862-i2s.dtbo +test.wav diff --git a/src/misc/build_pcm1862_dts.sh b/src/misc/build_pcm1862_dts.sh new file mode 100755 index 0000000..e0372ad --- /dev/null +++ b/src/misc/build_pcm1862_dts.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -euo pipefail +DTS=./src/misc/pcm1862-i2s.dts +DTBO=pcm1862-i2s.dtbo +OUT=/boot/firmware/overlays + +# build +dtc -@ -I dts -O dtb -o "$DTBO" "$DTS" + +# install +sudo install -m 0644 "$DTBO" "$OUT/$DTBO" + +# NOTE: also add +# dtparam=i2c_arm=on +# dtoverlay=pcm1862-i2s +# to /boot/firmware/config.txt + +echo "Built and installed $DTBO to $OUT." +echo "Now either reboot to load the installed overlay" diff --git a/src/misc/pcm1862-i2s.dts b/src/misc/pcm1862-i2s.dts new file mode 100644 index 0000000..da80468 --- /dev/null +++ b/src/misc/pcm1862-i2s.dts @@ -0,0 +1,51 @@ +/dts-v1/; +/plugin/; + +/ { + compatible = "brcm,bcm2835"; + + /* Enable the I²S controller */ + fragment@0 { + target = <&i2s>; + __overlay__ { status = "okay"; }; + }; + + /* PCM1862 on I2C1 at 0x4a */ + fragment@1 { + target = <&i2c1>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + pcm1862: adc@4a { + compatible = "ti,pcm1862"; + reg = <0x4a>; + #sound-dai-cells = <0>; + }; + }; + }; + + /* Link bcm2835-i2s <-> pcm1862 with simple-audio-card */ + fragment@2 { + target-path = "/"; + __overlay__ { + pcm1862_sound: pcm1862-sound { + compatible = "simple-audio-card"; + simple-audio-card,name = "pcm1862 on i2s"; + simple-audio-card,format = "i2s"; + /* Pi is master for BCLK/LRCLK */ + simple-audio-card,bitclock-master = <&dai_cpu>; + simple-audio-card,frame-master = <&dai_cpu>; + + dai_cpu: simple-audio-card,cpu { + sound-dai = <&i2s>; + dai-tdm-slot-num = <2>; + dai-tdm-slot-width = <32>; + }; + + simple-audio-card,codec { + sound-dai = <&pcm1862>; + }; + }; + }; + }; +};