MTK Genio520 DMIC預設使用的是One-wire,但在實際使用中經常會遇到客戶需要支援Two-wire模式。
什麼是One-wire和Two-wire?
One-wire 是指 L 和 R 兩個聲道共用一條數據線,透過時鐘的高低電平來控制傳輸 L 或 R 的數據;Two-wire 則是指 L 和 R 兩個聲道各自使用一條數據線,兩個聲道選擇同一個相位來抓取數據。硬體參考設計如下:
如何設定成雙模式呢?
1. 在 DTS 裡增加黃色部分,GPIO 具體請參考硬體設計:
dts中
aud_gpio_ap_dmic_on: aud-gpio-ap-dmic-on {
pins-cmd1-dat {
pinmux = <PINMUX_GPIO111__FUNC_DMIC0_CLK>;
輸入施密特啟用
偏差停用
};
pins-cmd2-dat {
pinmux = <PINMUX_GPIO112__FUNC_DMIC0_DAT0>;
輸入施密特啟用
偏差停用
};
pins-cmd3-dat {
pinmux = <PINMUX_GPIOxxx__FUNC_DMIC0_DAT1>;
輸入施密特啟用
偏差停用
};
};
2.kernel/kernel_device_modules-6.1/sound/soc/mediatek/mt8189/mt8189-dai-adda.c 增加黃色部分
選擇雙線模式
regmap_update_bits(afe->regmap, reg,
UL_DMIC_TWO_WIRE_CTL_MASK_SFT
0x1 << UL_DMIC_TWO_WIRE_CTL_SFT);
/* dmic 模式,3.25M */
句子: /*
regmap_update_bits(afe->regmap, reg,
DIGMIC_3P25M_1P625M_SEL_CTL_MASK_SFT
* 0x0);
如果是配置One-Wire,就是在上面的修改中把黃色部分去掉即可。
以上的實現僅適用於Gen2平台。
參考來源