/ {
/* 1. Объявляем виртуальный драйвер (заглушку) для простого усилителя TFA9882 */
tfa9882_codec: tfa9882 {
compatible = "zephyr,audio-codec-dummy";
status = "okay";
#sound-dai-cells = <0>;
/* Если у вас есть пин EN/MODE для TFA, раскомментируйте строку ниже: */
/* power-gpios = <&gpioX Y GPIO_ACTIVE_HIGH>; */
};
/* 2. Собираем аудио-карту, объединяющую кодек, усилитель и процессор */
sound_card {
compatible = "audio-graph-card";
dais = <&sai2_rx_port &sai2_tx_port>;
status = "okay";
};
};
/* 3. Настройка I2C1 для управления кодеком SGTL5000 */
&lpi2c1 {
status = "okay";
sgtl5000: sgtl5000@a { /* Проверьте ваш I2C адрес (обычно 0x0a) */
compatible = "fsl,sgtl5000";
reg = <0x0a>;
status = "okay";
#sound-dai-cells = <0>;
/* Привязываем MCLK к источнику из SAI2 */
clocks = <&sai2 0>;
clock-names = "mclk";
/* Питание кодека (укажите реальные регуляторы или dummy, если они постоянные) */
VDDA-supply = <&vcc_3v3>;
VDDIO-supply = <&vcc_3v3>;
};
};
/* 4. Конфигурация аудио-интерфейса SAI2 */
&sai2 {
status = "okay";
/* КРИТИЧЕСКИЙ ФЛАГ: Включает независимую (асинхронную) работу TX и RX */
fsl,sai-asynchronous;
/* Настраиваем физические пины через pinctrl под вашу схему */
pinctrl-0 = <&pinmux_sai2>;
pinctrl-names = "default";
/* Описываем порты аудио-графа для Zephyr Audio API */
sai2_rx_port: port@0 {
reg = <0>;
sai2_rx_endpoint: endpoint {
remote-endpoint = <&sgtl5000_endpoint>;
dai-format = "i2s";
/* Процессор — мастер, генерирует RX_CLK и RX_SYNC из своего MCLK */
frame-master;
bitclock-master;
};
};
sai2_tx_port: port@1 {
reg = <1>;
sai2_tx_endpoint: endpoint {
remote-endpoint = <&tfa9882_endpoint>;
dai-format = "i2s";
/* Процессор — мастер, независимо генерирует TX_CLK и TX_SYNC */
frame-master;
bitclock-master;
};
};
};
/* Достраиваем связи со стороны конечных устройств */
&sgtl5000 {
sgtl5000_port: port {
sgtl5000_endpoint: endpoint {
remote-endpoint = <&sai2_rx_endpoint>;
};
};
};
&tfa9882_codec {
tfa9882_port: port {
tfa9882_endpoint: endpoint {
remote-endpoint = <&sai2_tx_endpoint>;
};
};
};