I want to add Max98090 driver on TX2 with 28.2.
I used the default codec driver max98088.c, and tegra_t210ref_mobile_rt565x_alt.c as a reference to write the machine driver.
It seems to have succeeded from the log of “dmesg”
[ 4.571715] max98090_i2c_probe: start max98090_i2c_probe-------------
[ 4.573431] tegra210_adsp_audio_platform_probe: platform probe started
[ 4.578814] tegra210-adsp adsp_audio: Default param-type to BYTE for mp3-dec1
[ 4.579051] tegra210-adsp adsp_audio: Default param-type to BYTE for spkprot
[ 4.579350] tegra210-adsp adsp_audio: Default param-type to BYTE for src
[ 4.579610] tegra210-adsp adsp_audio: Default param-type to BYTE for aac-dec1
[ 4.579904] tegra210-adsp adsp_audio: Default param-type to BYTE for aec
[ 4.579909] tegra210-adsp adsp_audio: adma channel page address dt entry not found
[ 4.579910] tegra210-adsp adsp_audio: using adma channel page 0
[ 4.586008] tegra210_adsp_audio_platform_probe probe successfull.
[ 4.586009] input: tegra-hda HDMI/DP,pcm=3 as /devices/3510000.hda/sound/card0/input0
[ 4.586233] input: tegra-hda HDMI/DP,pcm=7 as /devices/3510000.hda/sound/card0/input1
[ 4.590773] OPE platform probe
[ 4.590840] OPE platform probe successful
[ 4.603978] tegra_t186ref_driver_probe: start tegra_max98090_probe-------------
[ 4.603984] snd_soc_of_parse_audio_routing: x HPR -> x Headphone---------------
[ 4.603985] snd_soc_of_parse_audio_routing: x HPL -> x Headphone---------------
[ 4.604785] snd_soc_register_card: card.name = tegra-snd-t186ref-max98090--------------
[ 4.604786] snd_soc_register_card: card.num_links = 160----
[ 4.604859] random: nonblocking pool is initialized
[ 4.618802] PD DISP2 index4 DOWN
[ 4.618898] PD DISP1 index3 DOWN
[ 4.618982] PD DISP0 index2 DOWN
[ 4.625409] tegradc 15210000.nvdisplay: unblank
[ 4.625422] PD DISP0 index2 UP
[ 4.626407] PD DISP1 index3 UP
[ 4.626496] PD DISP2 index4 UP
[ 4.628069] Parent Clock set for DC plld2
[ 4.630950] tegradc 15210000.nvdisplay: hdmi: pclk:148500K, set prod-setting:prod_c_150M
[ 4.654029] max98090_probe: start max98090_probe-------------------
[ 4.674917] max98090 1-0010: MAX98090 REVID=0x43
[ 4.675664] max98090 1-0010: use default 2.8v micbias
[ 4.679310] tegra-snd-t186ref-max98090 sound: ADMAIF1 <-> ADMAIF1 mapping ok
[ 4.679411] tegra-snd-t186ref-max98090 sound: ADMAIF2 <-> ADMAIF2 mapping ok
[ 4.679509] tegra-snd-t186ref-max98090 sound: ADMAIF3 <-> ADMAIF3 mapping ok
[ 4.679600] tegra-snd-t186ref-max98090 sound: ADMAIF4 <-> ADMAIF4 mapping ok
[ 4.679709] tegra-snd-t186ref-max98090 sound: ADMAIF5 <-> ADMAIF5 mapping ok
[ 4.679806] tegra-snd-t186ref-max98090 sound: ADMAIF6 <-> ADMAIF6 mapping ok
[ 4.679900] tegra-snd-t186ref-max98090 sound: ADMAIF7 <-> ADMAIF7 mapping ok
[ 4.680026] tegra-snd-t186ref-max98090 sound: ADMAIF8 <-> ADMAIF8 mapping ok
[ 4.680119] tegra-snd-t186ref-max98090 sound: ADMAIF9 <-> ADMAIF9 mapping ok
[ 4.680210] tegra-snd-t186ref-max98090 sound: ADMAIF10 <-> ADMAIF10 mapping ok
[ 4.680297] tegra-snd-t186ref-max98090 sound: ADMAIF11 <-> ADMAIF11 mapping ok
[ 4.680410] tegra-snd-t186ref-max98090 sound: ADMAIF12 <-> ADMAIF12 mapping ok
[ 4.680503] tegra-snd-t186ref-max98090 sound: ADMAIF13 <-> ADMAIF13 mapping ok
[ 4.680597] tegra-snd-t186ref-max98090 sound: ADMAIF14 <-> ADMAIF14 mapping ok
[ 4.680705] tegra-snd-t186ref-max98090 sound: ADMAIF15 <-> ADMAIF15 mapping ok
[ 4.680798] tegra-snd-t186ref-max98090 sound: ADMAIF16 <-> ADMAIF16 mapping ok
[ 4.680894] tegra-snd-t186ref-max98090 sound: ADMAIF17 <-> ADMAIF17 mapping ok
[ 4.680984] tegra-snd-t186ref-max98090 sound: ADMAIF18 <-> ADMAIF18 mapping ok
[ 4.681102] tegra-snd-t186ref-max98090 sound: ADMAIF19 <-> ADMAIF19 mapping ok
[ 4.681196] tegra-snd-t186ref-max98090 sound: ADMAIF20 <-> ADMAIF20 mapping ok
[ 4.685369] tegra-snd-t186ref-max98090 sound: ADSP-FE1 <-> ADSP PCM1 mapping ok
[ 4.685486] tegra-snd-t186ref-max98090 sound: ADSP-FE2 <-> ADSP PCM2 mapping ok
[ 4.685513] compress asoc: ADSP-FE3 <-> ADSP COMPR1 mapping ok
[ 4.685538] compress asoc: ADSP-FE4 <-> ADSP COMPR2 mapping ok
[ 4.695367] snd_soc_instantiate_card: num_dapm_routes = 0---------------
[ 4.695418] tegra-snd-t186ref-max98090 sound: ASoC: Add route x HPR -> direct -> x Headphone
[ 4.695449] tegra-snd-t186ref-max98090 sound: ASoC: Add route x HPL -> direct -> x Headphone
[ 4.695451] snd_soc_instantiate_card: num_of_dapm_routes = 2------------
[ 4.718567] input: tegra-snd-t186ref-max98090 Headphone Jack as /devices/sound/sound/card1/input2
[ 4.719143] tegra-snd-t186ref-max98090 sound: codec-dai "HiFi" registered
[ 4.837665] ALSA device list:
[ 4.837667] #0: tegra-hda at 0x3518000 irq 400
[ 4.837669] #1: tegra-snd-t186ref-max98090
I executed the command (amixer -c 1 cset name=“I2S1 Mux” ADMAIF22) and then “aplay -Dhw:1,1 some_audio.wav”, but I can’t hear any sound form Headphone.
My major changes of DTS is as follow:
i2c@c240000 {
status = "okay";
acodec: audio-codec@10 {
compatible = "maxim,max98090";
reg = <0x10>;
interrupt-parent = <&tegra_main_gpio>;
interrupts = <TEGRA_MAIN_GPIO(J, 5) GPIO_ACTIVE_HIGH>;
};
};
tegra_sound: sound {
status = "okay";
compatible = "nvidia,tegra-audio-t186ref-max98090";
nvidia,model = "tegra-snd-t186ref-max98090";
// compatible = "nvidia,tegra-audio-t186ref-mobile-rt565x";
// nvidia,model = "tegra-snd-t186ref-mobile-rt565x";
nvidia,num-codec-link = <1>;
rt565x_dai_link: nvidia,dai-link-1 {
link-name = "max98090-playback";
cpu-dai = <&tegra_i2s1>;
codec-dai = <&acodec>; // max98090
// codec-dai = <&spdif_dit0>;
cpu-dai-name = "I2S1";
codec-dai-name = "HiFi"; // max98090
// codec-dai-name = "dit-hifi";
format = "i2s";
bitclock-slave;
frame-slave;
bitclock-noninversion;
frame-noninversion;
bit-format = "s16_le";
bclk_ratio = <0>;
srate = <48000>;
num-channel = <2>;
ignore_suspend;
name-prefix = "x";
status = "okay";
};
My clk_summary info is as follow:
clock enable_cnt prepare_cnt rate req_rate accuracy phase
----------------------------------------------------------------------------------------------------------------------
vi 0 0 409600000 409600000 0 0
*[ default_freq 0]
isp 0 0 768000000 768000000 0 0
*[ default_freq 0]
sce_cpu_nic 1 1 115200000 115200000 0 0
*[ default_freq 0]
se 0 0 601600000 601600000 0 0
*[ default_freq 0]
eqos_rx_input 1 1 0 0 0 0
*[ default_freq 0]
eqos_rx 1 1 0 0 0 0
*[ default_freq 0]
axi_cbb 1 1 115200000 115200000 0 0
*[ default_freq 0]
gpc2clk 1 1 0 0 0 0
*[ default_freq 0]
gpcclk 1 1 140250000 140250000 0 0
*[ default_freq 0]
sor1_pad_clkout 7 7 148351000 148351000 0 0
*[ default_freq 0]
sor1_out 6 6 148351000 148351000 0 0
*[ default_freq 0]
i2s6_sync_input 0 0 0 0 0 0
*[ default_freq 0]
i2s5_sync_input 0 0 0 0 0 0
*[ default_freq 0]
i2s4_sync_input 0 0 0 0 0 0
*[ default_freq 0]
i2s3_sync_input 0 0 0 0 0 0
*[ default_freq 0]
i2s2_sync_input 0 0 0 0 0 0
*[ default_freq 0]
i2s1_sync_input 0 0 1411200 1411200 0 0
*[ default_freq 0]
i2s1_sync_clk 0 0 1411200 0 0 0
*[ default_freq 0]
dspk2_sync_clk 0 0 1411200 0 0 0
*[ default_freq 0]
dspk1_sync_clk 0 0 1411200 0 0 0
*[ default_freq 0]
dmic4_sync_clk 0 0 1411200 0 0 0
*[ default_freq 0]
dmic3_sync_clk 0 0 1411200 0 0 0
*[ default_freq 0]
dmic2_sync_clk 0 0 1411200 0 0 0
*[ default_freq 0]
dmic1_sync_clk 0 0 1411200 0 0 0
*[ default_freq 0]
spdifin_sync_input 0 0 0 0 0 0
*[ default_freq 0]
spdif_sync_clk 0 0 0 0 0 0
*[ default_freq 0]
i2s6_sync_clk 0 0 0 0 0 0
*[ default_freq 0]
i2s5_sync_clk 0 0 0 0 0 0
*[ default_freq 0]
i2s4_sync_clk 0 0 0 0 0 0
*[ default_freq 0]
i2s3_sync_clk 0 0 0 0 0 0
*[ default_freq 0]
i2s2_sync_clk 0 0 0 0 0 0
*[ default_freq 0]
nvjpg 0 0 857600000 857600000 0 0
*[ default_freq 0]
nvenc 0 0 1164800000 1164800000 0 0
*[ default_freq 0]
vic 0 0 1024000000 1024000000 0 0
*[ default_freq 0]
nvdec 0 0 1203200000 1203200000 0 0
*[ default_freq 0]
tsecb 0 0 716800000 716800000 0 0
*[ default_freq 0]
tsec 0 0 716800000 716800000 0 0
*[ default_freq 0]
emc 0 0 408000000 408000000 0 0
*[ default_freq 0]
osc 2 2 38400000 38400000 0 0
*[ default_freq 0]
usb2_hsic_trk 1 1 9600000 9600000 0 0
*[ default_freq 0]
hsic_trk 0 0 9600000 9600000 0 0
*[ default_freq 0]
usb2_trk 1 1 9600000 9600000 0 0
*[ default_freq 0]
spi2 0 0 38400000 38400000 0 0
*[ default_freq 0]
nafll_disp 0 0 0 0 0 0
*[ default_freq 0]
dflldisp_div 0 0 0 0 0 0
*[ default_freq 0]
pwm4 1 1 38400000 38400000 0 0
*[ default_freq 0]
clk_m 5 5 19200000 19200000 0 0
*[ default_freq 0]
spdif_out 0 0 19200000 19200000 0 0
*[ default_freq 0]
tach 1 1 1010526 1010526 0 0
*[ default_freq 0]
hda2hdmicodec 2 2 19200000 19200000 0 0
*[ default_freq 0]
spi4 0 0 19200000 19200000 0 0
*[ default_freq 0]
spi1 0 0 19200000 19200000 0 0
*[ default_freq 0]
fuse 1 1 19200000 19200000 0 0
*[ default_freq 0]
kfuse 0 0 19200000 19200000 0 0
*[ default_freq 0]
nvdisplay_p2 2 2 19200000 19200000 0 0
*[ default_freq 0]
i2s6 0 0 19200000 19200000 0 0
*[ default_freq 0]
i2s5 0 0 19200000 19200000 0 0
*[ default_freq 0]
i2s4 0 0 19200000 19200000 0 0
*[ default_freq 0]
i2s3 0 0 19200000 19200000 0 0
*[ default_freq 0]
i2s2 0 0 19200000 19200000 0 0
*[ default_freq 0]
actmon 2 2 19200000 19200000 0 0
*[ default_freq 0]
mipi_cal 0 0 19200000 19200000 0 0
*[ default_freq 0]
dbgapb 0 0 19200000 19200000 0 0
*[ default_freq 0]
clk_32k 0 0 32768 32768 0 0
*[ default_freq 0]
aon_i2c_slow 0 0 32768 32768 0 0
*[ default_freq 0]
i2c_slow 0 0 32768 32768 0 0
*[ default_freq 0]
pll_ref 4 4 38400000 38400000 0 0
*[ default_freq 0]
pll_nvcsi 0 0 450000000 450000000 0 0
*[ default_freq 0]
nvcsi 0 0 225000000 19200000 0 0
*[ default_freq 0]
pll_e 0 0 38400000 38400000 0 0
*[ default_freq 0]
pll_c4_vco 0 0 784999218 784999218 0 0
*[ default_freq 0]
pll_c4_out0 0 0 196249804 196249804 0 0
*[ default_freq 0]
sdmmc4 0 0 196249804 196249804 0 0
*[ default_freq 0]
pll_c4_vco_div2 0 0 392499609 392499609 0 0
*[ default_freq 0]
pll_c4_out2 0 0 156999843 156999843 0 0
*[ default_freq 0]
pll_c4_out1 0 0 261666406 261666406 0 0
*[ default_freq 0]
pll_c4_out_mux 0 0 261666406 261666406 0 0
*[ default_freq 0]
pllc4_out 0 0 261666406 261666406 0 0
*[ default_freq 0]
pll_disphub 0 0 409600000 409600000 0 0
*[ default_freq 0]
plldisphub_div 0 0 409600000 409600000 0 0
*[ default_freq 0]
pll_a1 0 0 600000000 600000000 0 0
*[ default_freq 0]
aclk 0 0 300000000 300000000 0 0
*[ default_freq 0]
adspneon 0 0 300000000 300000000 0 0
*[ default_freq 0]
adsp 0 0 300000000 300000000 0 0
*[ default_freq 0]
pll_a_out1 0 0 150000000 150000000 0 0
*[ default_freq 0]
ape 0 0 150000000 150000000 0 0
*[ default_freq 0]
apb2ape 0 0 150000000 150000000 0 0
*[ default_freq 0]
pll_a_vco 0 0 258000000 258000000 0 0
*[ default_freq 0]
pll_a 0 0 270950390 270950400 0 0
*[ default_freq 0]
pll_a_out0 0 0 45158398 45158400 0 0
*[ default_freq 0]
i2s1 0 0 1411199 1411200 0 0
*[ default_freq 0]
aud_mclk 0 0 11289599 11289600 0 0
*[ default_freq 0]
dspk2 0 0 45158398 43000000 0 0
*[ default_freq 0]
dspk1 0 0 45158398 43000000 0 0
*[ default_freq 0]
dmic4 0 0 11289599 12285714 0 0
*[ default_freq 0]
dmic3 0 0 11289599 12285714 0 0
*[ default_freq 0]
dmic2 0 0 11289599 12285714 0 0
*[ default_freq 0]
dmic1 0 0 11289599 12285714 0 0
*[ default_freq 0]
ahub 0 0 45158398 45158400 0 0
*[ default_freq 0]
pll_d3 0 0 25806426 25806426 0 0
*[ default_freq 0]
pll_d2 2 2 148500000 148500000 0 0
*[ default_freq 0]
sor1 1 1 148500000 148350937 0 0
*[ default_freq 0]
nvdisplay_p1 5 5 148500000 148500000 0 0
*[ default_freq 0]
nvdisplay_disp 2 2 148500000 148350937 0 0
*[ default_freq 0]
pll_d 1 1 582000000 582000000 0 0
*[ default_freq 0]
pll_d_out1 1 1 582000000 582000000 0 0
*[ default_freq 0]
nvdisplay_p0 2 2 194000000 194000000 0 0
*[ default_freq 0]
nvdisplay_dsc 1 1 194000000 194000000 0 0
*[ default_freq 0]
pll_c2 0 0 307200000 307200000 0 0
*[ default_freq 0]
pll_u 2 2 38400000 38400000 0 0
*[ default_freq 0]
pll_u_480M 0 0 480000000 480000000 0 0
*[ default_freq 0]
pll_u_48M 0 0 48000000 48000000 0 0
*[ default_freq 0]
xusb_fs 0 0 48000000 48000000 0 0
*[ default_freq 0]
xusb_dev 0 0 48000000 48000000 0 0
*[ default_freq 0]
pll_refe_ref 1 1 60000000 60000000 0 0
*[ default_freq 0]
pllrefe_iddq 1 1 60000000 60000000 0 0
*[ default_freq 0]
pll_refe 1 1 625000000 625000000 0 0
*[ default_freq 0]
pll_refe_out1 3 3 625000000 625000000 0 0
*[ default_freq 0]
eqos_tx_clk 1 1 25000000 25000000 0 0
*[ default_freq 0]
eqos_ptp_ref_clk 1 1 125000000 125000000 0 0
*[ default_freq 0]
pllrefe_out1_div5 1 1 125000000 125000000 0 0
*[ default_freq 0]
eqos_axi_clk 1 1 125000000 125000000 0 0
*[ default_freq 0]
pll_refe_out 0 0 312500000 312500000 0 0
*[ default_freq 0]
pllrefe_out_gated 0 0 312500000 312500000 0 0
*[ default_freq 0]
pll_aon 0 0 480000000 480000000 0 0
*[ default_freq 0]
pll_c 0 0 307200000 307200000 0 0
*[ default_freq 0]
pll_p 4 4 408000000 408000000 0 0
*[ default_freq 0]
sata_oob 0 0 204000000 19200000 0 0
*[ default_freq 0]
pll_p_out5 1 1 204000000 204000000 0 0
*[ default_freq 0]
gpu 1 1 204000000 204000000 0 0
*[ default_freq 0]
pll_p_div17 1 1 24000000 24000000 0 0
*[ default_freq 0]
sor_safe 6 6 24000000 24000000 0 0
*[ default_freq 0]
dpaux1 0 0 24000000 24000000 0 0
*[ default_freq 0]
host1x 1 1 102000000 102000000 0 0
*[ default_freq 0]
pll_p_out0 14 14 408000000 408000000 0 0
*[ default_freq 0]
nvcsilp 0 0 204000000 19200000 0 0
*[ default_freq 0]
hda2codec_2x 2 2 48000000 48000000 0 0
*[ default_freq 0]
hda 2 2 51000000 51000000 0 0
*[ default_freq 0]
nvdisplayhub 2 2 19428571 18731250 0 0
*[ default_freq 0]
sdmmc1 0 0 6000000 6000000 0 0
*[ default_freq 0]
sce_apb 1 1 102000000 102000000 0 0
*[ default_freq 0]
sdmmc3 0 0 204000000 204000000 0 0
*[ default_freq 0]
xusb 1 1 102000000 102000000 0 0
*[ default_freq 0]
xusb_ss 0 0 102000000 102000000 0 0
*[ default_freq 0]
sata 0 0 102000000 19200000 0 0
*[ default_freq 0]
uartd 0 0 408000000 19200000 0 0
*[ default_freq 0]
uartc 0 0 408000000 38400000 0 0
*[ default_freq 0]
uartb 0 0 408000000 19200000 0 0
*[ default_freq 0]
uarta 1 1 408000000 408000000 0 0
*[ default_freq 0]
spdif_in 0 0 408000000 408000000 0 0
*[ default_freq 0]
pwm3 0 0 18545454 102000000 0 0
*[ default_freq 0]
pwm2 0 0 18545454 102000000 0 0
*[ default_freq 0]
pwm1 0 0 18545454 102000000 0 0
*[ default_freq 0]
uart_fst_mipi_cal 0 0 68000000 68000000 0 0
*[ default_freq 0]
i2c9 1 1 81600000 83200000 0 0
*[ default_freq 0]
i2c8 1 1 81600000 83200000 0 0
*[ default_freq 0]
i2c7 1 1 81600000 83200000 0 0
*[ default_freq 0]
i2c6 1 1 20400000 20700000 0 0
*[ default_freq 0]
i2c4 1 1 20400000 20700000 0 0
*[ default_freq 0]
i2c3 1 1 81600000 83200000 0 0
*[ default_freq 0]
i2c2 1 1 81600000 83200000 0 0
*[ default_freq 0]
i2c1 1 1 81600000 83200000 0 0
*[ default_freq 0]
pllp_grtcba 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grtbb 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_xusb 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_uphy 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_audio 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grtcab 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_boot 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grtcaa 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grtlb 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grtla 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grtba 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grtcbb 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_display 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grttb 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_grtta 0 0 408000000 408000000 0 0
*[ default_freq 0]
pllp_aon 0 0 408000000 408000000 0 0
*[ default_freq 0]
clk32k_in 0 0 32768 32768 0 0
*[ default_freq 0]