mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-01 15:14:52 +00:00

In current configuration, nau8822 codec on development carrier board provides distorted audio output. This happens due to reference clock is fixed to 25MHz and no PLL is enabled. Following is the calculation of deviation error for different frequencies: 44100Hz: fs = 256 (fixed) prescaler = 2 target frequency = 44100 * 256 * 2 = 22579200 deviation = 22579200 vs 25000000 = 9.6832% 48000Hz: fs = 256 (fixed) prescaler = 2 target frequency = 48000 * 256 * 2 = 24576000 deviation = 24576000 vs 25000000 = 1.696% Enabling nau822 PLL via providing mclk-fs property to simple-audio-card configures clocks properly, but also adjusts audio reference clock (mclk), which in case of TI AM62 should be avoided, as it only supports 25MHz output [1][2]. This change enables PLL on nau8822 by providing mclk-fs, and moves away audio reference clock from DAI configuration, which prevents simple-audio-card to adjust it before every playback [3]. [1]: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1175479/processor-sdk-am62x-output-audio_ext_refclk0-as-mclk-for-codec-and-mcbsp/4444986#4444986 [2]: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1188051/am625-audio_ext_refclk1-clock-output---dts-support/4476322#4476322 [3]: sound/soc/generic/simple-card-utils.c#L441 Signed-off-by: Andrejs Cainikovs <andrejs.cainikovs@toradex.com> Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com> Link: https://lore.kernel.org/r/20240418105730.120913-1-andrejs.cainikovs@gmail.com Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
247 lines
4.1 KiB
Plaintext
247 lines
4.1 KiB
Plaintext
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
|
/*
|
|
* Copyright 2023 Toradex
|
|
*
|
|
* Common dtsi for Verdin AM62 SoM on Development carrier board
|
|
*
|
|
* https://www.toradex.com/computer-on-modules/verdin-arm-family/ti-am62
|
|
* https://www.toradex.com/products/carrier-board/verdin-development-board-kit
|
|
*/
|
|
|
|
/ {
|
|
sound {
|
|
compatible = "simple-audio-card";
|
|
simple-audio-card,bitclock-master = <&codec_dai>;
|
|
simple-audio-card,format = "i2s";
|
|
simple-audio-card,frame-master = <&codec_dai>;
|
|
simple-audio-card,mclk-fs = <256>;
|
|
simple-audio-card,name = "verdin-nau8822";
|
|
simple-audio-card,routing =
|
|
"Headphones", "LHP",
|
|
"Headphones", "RHP",
|
|
"Speaker", "LSPK",
|
|
"Speaker", "RSPK",
|
|
"Line Out", "AUXOUT1",
|
|
"Line Out", "AUXOUT2",
|
|
"LAUX", "Line In",
|
|
"RAUX", "Line In",
|
|
"LMICP", "Mic In",
|
|
"RMICP", "Mic In";
|
|
simple-audio-card,widgets =
|
|
"Headphones", "Headphones",
|
|
"Line Out", "Line Out",
|
|
"Speaker", "Speaker",
|
|
"Microphone", "Mic In",
|
|
"Line", "Line In";
|
|
|
|
codec_dai: simple-audio-card,codec {
|
|
sound-dai = <&nau8822_1a>;
|
|
};
|
|
|
|
simple-audio-card,cpu {
|
|
sound-dai = <&mcasp0>;
|
|
};
|
|
};
|
|
};
|
|
|
|
/* Verdin ETHs */
|
|
&cpsw3g {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pinctrl_rgmii1>, <&pinctrl_rgmii2>;
|
|
status = "okay";
|
|
};
|
|
|
|
/* MDIO, shared by Verdin ETH_1 (On-module PHY) and Verdin ETH_2_RGMII */
|
|
&cpsw3g_mdio {
|
|
status = "okay";
|
|
|
|
cpsw3g_phy1: ethernet-phy@7 {
|
|
compatible = "ethernet-phy-ieee802.3-c22";
|
|
reg = <7>;
|
|
interrupt-parent = <&main_gpio0>;
|
|
interrupts = <38 IRQ_TYPE_EDGE_FALLING>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pinctrl_eth2_rgmii_int>;
|
|
micrel,led-mode = <0>;
|
|
};
|
|
};
|
|
|
|
/* Verdin ETH_1 (On-module PHY) */
|
|
&cpsw_port1 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin ETH_2_RGMII */
|
|
&cpsw_port2 {
|
|
phy-handle = <&cpsw3g_phy1>;
|
|
phy-mode = "rgmii-rxid";
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin PWM_1, PWM_2 */
|
|
&epwm0 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin PWM_3_DSI */
|
|
&epwm1 {
|
|
status = "okay";
|
|
};
|
|
|
|
&main_gpio0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pinctrl_ctrl_sleep_moci>,
|
|
<&pinctrl_gpio_5>,
|
|
<&pinctrl_gpio_6>,
|
|
<&pinctrl_gpio_7>,
|
|
<&pinctrl_gpio_8>;
|
|
};
|
|
|
|
/* Verdin I2C_1 */
|
|
&main_i2c1 {
|
|
status = "okay";
|
|
|
|
/* Audio Codec */
|
|
nau8822_1a: audio-codec@1a {
|
|
compatible = "nuvoton,nau8822";
|
|
reg = <0x1a>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pinctrl_i2s1_mclk>;
|
|
clock-names = "mclk";
|
|
clocks = <&audio_refclk1>;
|
|
#sound-dai-cells = <0>;
|
|
};
|
|
|
|
/* IO Expander */
|
|
gpio_expander_21: gpio@21 {
|
|
compatible = "nxp,pcal6416";
|
|
reg = <0x21>;
|
|
#gpio-cells = <2>;
|
|
gpio-controller;
|
|
};
|
|
|
|
/* Current measurement into module VCC */
|
|
hwmon@40 {
|
|
compatible = "ti,ina219";
|
|
reg = <0x40>;
|
|
shunt-resistor = <10000>;
|
|
};
|
|
|
|
/* Temperature sensor */
|
|
sensor@4f {
|
|
compatible = "ti,tmp75c";
|
|
reg = <0x4f>;
|
|
};
|
|
|
|
/* EEPROM */
|
|
eeprom@57 {
|
|
compatible = "st,24c02", "atmel,24c02";
|
|
reg = <0x57>;
|
|
pagesize = <16>;
|
|
};
|
|
};
|
|
|
|
/* Verdin I2C_2_DSI */
|
|
&main_i2c2 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin I2C_4_CSI */
|
|
&main_i2c3 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin CAN_1 */
|
|
&main_mcan0 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin SPI_1 */
|
|
&main_spi1 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin UART_3 */
|
|
&main_uart0 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin UART_1, connector X50 through RS485 transceiver. */
|
|
&main_uart1 {
|
|
linux,rs485-enabled-at-boot-time;
|
|
rs485-rx-during-tx;
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin I2S_1 */
|
|
&mcasp0 {
|
|
status = "okay";
|
|
};
|
|
|
|
&mcu_gpio0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pinctrl_gpio_1>,
|
|
<&pinctrl_gpio_2>,
|
|
<&pinctrl_gpio_3>,
|
|
<&pinctrl_gpio_4>,
|
|
<&pinctrl_pcie_1_reset>;
|
|
};
|
|
|
|
/* Verdin I2C_3_HDMI */
|
|
&mcu_i2c0 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin CAN_2 */
|
|
&mcu_mcan0 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin UART_4 */
|
|
&mcu_uart0 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin QSPI_1 */
|
|
&ospi0 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin SD_1 */
|
|
&sdhci1 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin USB_1 */
|
|
&usbss0 {
|
|
status = "okay";
|
|
};
|
|
|
|
&usb0 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin USB_2 */
|
|
&usbss1 {
|
|
status = "okay";
|
|
};
|
|
|
|
&usb1 {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin CTRL_WAKE1_MICO# */
|
|
&verdin_gpio_keys {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin PCIE_1_RESET# */
|
|
&verdin_pcie_1_reset_hog {
|
|
status = "okay";
|
|
};
|
|
|
|
/* Verdin UART_2 */
|
|
&wkup_uart0 {
|
|
status = "okay";
|
|
};
|