mediatek: bananapi-r3: add overlay for ReSpeaker 2-mic hat
authorDaniel Golle <daniel@makrotopia.org>
Sun, 10 Dec 2023 23:09:00 +0000 (23:09 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 11 Dec 2023 18:01:43 +0000 (18:01 +0000)
Add DT overlay to allow using the ReSpeaker 2-mic hat connected to
the 26-pin header of the BananaPi BPi-R3.

Supported sample formats: S16_LE, S24_LE, S32_LE
Supported sample rates: 8/12/16/24/32/48/96/192 kHz

          |  BPi-R3  |  ReSpeaker 2-mic
  Signal  |  26-pin  |  40-pin
----------+----------+-------------------
 VCC 5V   |    2     |    2
 I2C SDA  |    3     |    3
 I2C SCL  |    5     |    5
 GND      |    6     |    6
 PCM CLK  |   12     |   12
 PCM FS   |   15     |   35
 PCM DIN  |   26     |   38
 GND      |   25     |   39
 PCM DOUT |   22     |   40

Once connected, install the driver and tell U-Boot to apply the DT
overlay:

opkg kmod-sound-soc-mt7986-wm8960
fw_setenv bootconf_base "config-mt7986a-bananapi-bpi-r3#mt7986a-bananapi-bpi-r3-respeaker-2mics"
reboot

To setup the ReSpeaker for Stereo out on the Headphone plug:

amixer sset 'Right Output Mixer PCM' on
amixer sset 'Left Output Mixer PCM' on
amixer sset 'PCM Playback -6dB' off
amixer sset 'O018 I150_Switch' on
amixer sset 'O019 I151_Switch' on
amixer sset 'O124 I032_Switch' on
amixer sset 'O125 I033_Switch' on
amixer sset 'Headphone' 121
amixer sset 'Playback' 255

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
target/linux/mediatek/image/filogic.mk
target/linux/mediatek/patches-5.15/864-arm64-dts-mt7986-add-sound-overlay-for-bpi-r3.patch [new file with mode: 0644]
target/linux/mediatek/patches-6.1/864-arm64-dts-mt7986-add-sound-overlay-for-bpi-r3.patch [new file with mode: 0644]

index 36333bb92650c187573085bbe8875b73094ddb5c..7af96674d9c7936ab5e451fa4e874974790ab0a9 100644 (file)
@@ -212,7 +212,9 @@ define Device/bananapi_bpi-r3
   DEVICE_MODEL := BPi-R3
   DEVICE_DTS := mt7986a-bananapi-bpi-r3
   DEVICE_DTS_CONFIG := config-mt7986a-bananapi-bpi-r3
-  DEVICE_DTS_OVERLAY:= mt7986a-bananapi-bpi-r3-emmc mt7986a-bananapi-bpi-r3-nand mt7986a-bananapi-bpi-r3-nor mt7986a-bananapi-bpi-r3-sd
+  DEVICE_DTS_OVERLAY:= mt7986a-bananapi-bpi-r3-emmc mt7986a-bananapi-bpi-r3-nand \
+                      mt7986a-bananapi-bpi-r3-nor mt7986a-bananapi-bpi-r3-sd \
+                      mt7986a-bananapi-bpi-r3-respeaker-2mics
   DEVICE_DTS_DIR := $(DTS_DIR)/
   DEVICE_DTS_LOADADDR := 0x43f00000
   DEVICE_PACKAGES := kmod-hwmon-pwmfan kmod-i2c-gpio kmod-mt7986-firmware kmod-sfp kmod-usb3 e2fsprogs f2fsck mkf2fs mt7986-wo-firmware
diff --git a/target/linux/mediatek/patches-5.15/864-arm64-dts-mt7986-add-sound-overlay-for-bpi-r3.patch b/target/linux/mediatek/patches-5.15/864-arm64-dts-mt7986-add-sound-overlay-for-bpi-r3.patch
new file mode 100644 (file)
index 0000000..4fc12bf
--- /dev/null
@@ -0,0 +1,65 @@
+--- /dev/null
++++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-respeaker-2mics.dtso
+@@ -0,0 +1,62 @@
++// SPDX-License-Identifier: (GPL-2.0 OR MIT)
++/*
++ * Copyright (C) 2023 MediaTek Inc.
++ * Author: Maso Huang <Maso.Huang@mediatek.com>
++ */
++
++/dts-v1/;
++/plugin/;
++
++/ {
++      compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
++
++      fragment@0 {
++              target-path = "/";
++              __overlay__ {
++                      sound_wm8960 {
++                              compatible = "mediatek,mt7986-wm8960-sound";
++                              audio-routing = "Headphone", "HP_L",
++                                      "Headphone", "HP_R",
++                                      "LINPUT1", "AMIC",
++                                      "RINPUT1", "AMIC";
++
++                              status = "okay";
++
++                              platform {
++                                      sound-dai = <&afe>;
++                              };
++
++                              codec {
++                                      sound-dai = <&wm8960>;
++                              };
++                      };
++              };
++      };
++
++      fragment@1 {
++              target = <&i2c0>;
++              __overlay__ {
++                      pinctrl-names = "default";
++                      pinctrl-0 = <&i2c_pins>;
++                      clock-frequency = <400000>;
++                      status = "okay";
++
++                      wm8960: wm8960@1a {
++                              compatible = "wlf,wm8960";
++                              reg = <0x1a>;
++                      };
++              };
++      };
++
++      fragment@2 {
++              target = <&pio>;
++              __overlay__ {
++                      i2c_pins: i2c-pins-3-4 {
++                              mux {
++                                      function = "i2c";
++                                      groups = "i2c";
++                              };
++                      };
++              };
++      };
++};
diff --git a/target/linux/mediatek/patches-6.1/864-arm64-dts-mt7986-add-sound-overlay-for-bpi-r3.patch b/target/linux/mediatek/patches-6.1/864-arm64-dts-mt7986-add-sound-overlay-for-bpi-r3.patch
new file mode 100644 (file)
index 0000000..bddcd4b
--- /dev/null
@@ -0,0 +1,75 @@
+--- /dev/null
++++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-respeaker-2mics.dtso
+@@ -0,0 +1,62 @@
++// SPDX-License-Identifier: (GPL-2.0 OR MIT)
++/*
++ * Copyright (C) 2023 MediaTek Inc.
++ * Author: Maso Huang <Maso.Huang@mediatek.com>
++ */
++
++/dts-v1/;
++/plugin/;
++
++/ {
++      compatible = "bananapi,bpi-r3", "mediatek,mt7986a";
++
++      fragment@0 {
++              target-path = "/";
++              __overlay__ {
++                      sound_wm8960 {
++                              compatible = "mediatek,mt7986-wm8960-sound";
++                              audio-routing = "Headphone", "HP_L",
++                                      "Headphone", "HP_R",
++                                      "LINPUT1", "AMIC",
++                                      "RINPUT1", "AMIC";
++
++                              status = "okay";
++
++                              platform {
++                                      sound-dai = <&afe>;
++                              };
++
++                              codec {
++                                      sound-dai = <&wm8960>;
++                              };
++                      };
++              };
++      };
++
++      fragment@1 {
++              target = <&i2c0>;
++              __overlay__ {
++                      pinctrl-names = "default";
++                      pinctrl-0 = <&i2c_pins>;
++                      clock-frequency = <400000>;
++                      status = "okay";
++
++                      wm8960: wm8960@1a {
++                              compatible = "wlf,wm8960";
++                              reg = <0x1a>;
++                      };
++              };
++      };
++
++      fragment@2 {
++              target = <&pio>;
++              __overlay__ {
++                      i2c_pins: i2c-pins-3-4 {
++                              mux {
++                                      function = "i2c";
++                                      groups = "i2c";
++                              };
++                      };
++              };
++      };
++};
+--- a/arch/arm64/boot/dts/mediatek/Makefile
++++ b/arch/arm64/boot/dts/mediatek/Makefile
+@@ -12,6 +12,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-b
+ dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-nand.dtbo
+ dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-nor.dtbo
+ dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-sd.dtbo
++dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-bananapi-bpi-r3-respeaker-2mics.dtbo
+ dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986a-rfb.dtb
+ dtb-$(CONFIG_ARCH_MEDIATEK) += mt7986b-rfb.dtb
+ dtb-$(CONFIG_ARCH_MEDIATEK) += mt8167-pumpkin.dtb