TX2 Asoc with Max98090 Rcv/LineOut

I successfully added Max98090 driver on TX2 with release 32.1, and heard sound form Headphone.

Now I want to use the Rcv/LineOut Mux if Max98090 to palyback,
I just added the following referring to max98090.c:

In dtsi:
	"x LineOut",  "x RCVR",
	"x LineOut",  "x RCVL";

In machinr_driver:
	SND_SOC_DAPM_LINE("x Headphone", NULL),

But I met the error after executing the commands:

nvidia@nvidia-desktop:~$ amixer -c 1 cset name="I2S1 Mux" ADMAIF3
numid=942,iface=MIXER,name='I2S1 Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=81
  ; Item #0 'None'
  ; Item #1 'ADMAIF1'
  ; Item #2 'ADMAIF2'
  ; Item #3 'ADMAIF3'
  ; Item #4 'ADMAIF4'
  ; Item #5 'ADMAIF5'
  ; Item #6 'ADMAIF6'
  ; Item #7 'ADMAIF7'
  ; Item #8 'ADMAIF8'
  ; Item #9 'ADMAIF9'
  ; Item #10 'ADMAIF10'
  ; Item #11 'ADMAIF11'
  ; Item #12 'ADMAIF12'
  ; Item #13 'ADMAIF13'
  ; Item #14 'ADMAIF14'
  ; Item #15 'ADMAIF15'
  ; Item #16 'ADMAIF16'
  ; Item #17 'I2S1'
  ; Item #18 'I2S2'
  ; Item #19 'I2S3'
  ; Item #20 'I2S4'
  ; Item #21 'I2S5'
  ; Item #22 'I2S6'
  ; Item #23 'SFC1'
  ; Item #24 'SFC2'
  ; Item #25 'SFC3'
  ; Item #26 'SFC4'
  ; Item #27 'MIXER1-1'
  ; Item #28 'MIXER1-2'
  ; Item #29 'MIXER1-3'
  ; Item #30 'MIXER1-4'
  ; Item #31 'MIXER1-5'
  ; Item #32 'AMX1'
  ; Item #33 'AMX2'
  ; Item #34 'AMX3'
  ; Item #35 'AMX4'
  ; Item #36 'ARAD1'
  ; Item #37 'AFC1'
  ; Item #38 'AFC2'
  ; Item #39 'AFC3'
  ; Item #40 'AFC4'
  ; Item #41 'AFC5'
  ; Item #42 'AFC6'
  ; Item #43 'OPE1'
  ; Item #44 'SPKPROT1'
  ; Item #45 'MVC1'
  ; Item #46 'MVC2'
  ; Item #47 'IQC1-1'
  ; Item #48 'IQC1-2'
  ; Item #49 'IQC2-1'
  ; Item #50 'IQC2-2'
  ; Item #51 'DMIC1'
  ; Item #52 'DMIC2'
  ; Item #53 'DMIC3'
  ; Item #54 'DMIC4'
  ; Item #55 'ADX1-1'
  ; Item #56 'ADX1-2'
  ; Item #57 'ADX1-3'
  ; Item #58 'ADX1-4'
  ; Item #59 'ADX2-1'
  ; Item #60 'ADX2-2'
  ; Item #61 'ADX2-3'
  ; Item #62 'ADX2-4'
  ; Item #63 'ADX3-1'
  ; Item #64 'ADX3-2'
  ; Item #65 'ADX3-3'
  ; Item #66 'ADX3-4'
  ; Item #67 'ADX4-1'
  ; Item #68 'ADX4-2'
  ; Item #69 'ADX4-3'
  ; Item #70 'ADX4-4'
  ; Item #71 'ADMAIF17'
  ; Item #72 'ADMAIF18'
  ; Item #73 'ADMAIF19'
  ; Item #74 'ADMAIF20'
  ; Item #75 'ASRC1-1'
  ; Item #76 'ASRC1-2'
  ; Item #77 'ASRC1-3'
  ; Item #78 'ASRC1-4'
  ; Item #79 'ASRC1-5'
  ; Item #80 'ASRC1-6'
  : values=3
nvidia@nvidia-desktop:~$ 
nvidia@nvidia-desktop:~$ 
nvidia@nvidia-desktop:~$ aplay -D hw:1,2 Desktop/that.wav 
Playing WAVE 'Desktop/that.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
underrun!!! (at least 2.966 ms long)
underrun!!! (at least 1.860 ms long)
underrun!!! (at least 3.293 ms long)
underrun!!! (at least 2.964 ms long)
underrun!!! (at least 3.786 ms long)
underrun!!! (at least 2.737 ms long)
underrun!!! (at least 3.375 ms long)
underrun!!! (at least 3.449 ms long)
underrun!!! (at least 2.793 ms long)
underrun!!! (at least 2.966 ms long)
underrun!!! (at least 2.975 ms long)
underrun!!! (at least 2.256 ms long)
underrun!!! (at least 1.677 ms long)
underrun!!! (at least 1.391 ms long)
underrun!!! (at least 1.690 ms long)
underrun!!! (at least 2.369 ms long)

I checked the /sys/kernel/debug/tracing:

nvidia@nvidia-desktop:~$ sudo cat /sys/kernel/debug/tracing/trace
[sudo] password for nvidia: 
# tracer: nop
#
# entries-in-buffer/entries-written: 136/136   #P:6
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
      pulseaudio-6984  [002] ....   257.070661: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.070803: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [002] ....   257.070813: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.258614: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.259815: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> Capture 1
      pulseaudio-6984  [002] ....   257.259831: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> ADMAIF1 Transmit-ADMAIF1 CIF Transmit
      pulseaudio-6984  [002] ....   257.260426: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
      pulseaudio-6984  [002] ....   257.260680: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.273386: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.273493: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [002] ....   257.273505: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   257.435115: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   257.435173: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> Capture 1
      pulseaudio-6984  [001] ....   257.435175: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> ADMAIF1 Transmit-ADMAIF1 CIF Transmit
      pulseaudio-6984  [001] ....   257.435222: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
      pulseaudio-6984  [001] ....   257.435233: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   257.458108: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   257.458210: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [001] ....   257.458218: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   257.623777: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   257.623862: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [001] ....   257.623873: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.624629: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.624673: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> Capture 1
      pulseaudio-6984  [002] ....   257.624698: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> ADMAIF1 Transmit-ADMAIF1 CIF Transmit
      pulseaudio-6984  [002] ....   257.624734: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
      pulseaudio-6984  [002] ....   257.624741: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.627103: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.627210: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [002] ....   257.627222: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.628500: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.628565: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> Capture 1
      pulseaudio-6984  [002] ....   257.628567: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> ADMAIF1 Transmit-ADMAIF1 CIF Transmit
      pulseaudio-6984  [002] ....   257.628606: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
      pulseaudio-6984  [002] ....   257.628614: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.629068: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.629107: snd_soc_dapm_path: *ADMAIF1 Receive <- (direct) <- Playback 1
      pulseaudio-6984  [002] ....   257.629109: snd_soc_dapm_path: *ADMAIF1 Receive <- (direct) <- ADMAIF1 CIF Receive-ADMAIF1 Receive
      pulseaudio-6984  [002] ....   257.629149: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
      pulseaudio-6984  [002] ....   257.629156: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.634409: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.634511: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [002] ....   257.634520: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.788272: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.788360: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [002] ....   257.788370: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   257.789157: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   257.789205: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> Capture 1
      pulseaudio-6984  [001] ....   257.789208: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> ADMAIF1 Transmit-ADMAIF1 CIF Transmit
      pulseaudio-6984  [001] ....   257.789241: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
      pulseaudio-6984  [001] ....   257.789247: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.795594: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.795723: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [002] ....   257.795735: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.796471: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.796504: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> Capture 1
      pulseaudio-6984  [002] ....   257.796506: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> ADMAIF1 Transmit-ADMAIF1 CIF Transmit
      pulseaudio-6984  [002] ....   257.796536: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
      pulseaudio-6984  [002] ....   257.796542: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.796963: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.796994: snd_soc_dapm_path: *ADMAIF1 Receive <- (direct) <- Playback 1
      pulseaudio-6984  [002] ....   257.796996: snd_soc_dapm_path: *ADMAIF1 Receive <- (direct) <- ADMAIF1 CIF Receive-ADMAIF1 Receive
      pulseaudio-6984  [002] ....   257.797025: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
      pulseaudio-6984  [002] ....   257.797030: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.820113: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [002] ....   257.820197: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [002] ....   257.820206: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   258.081835: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
      pulseaudio-6984  [001] ....   258.081941: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
      pulseaudio-6984  [001] ....   258.081972: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   258.361369: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   258.361468: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [000] ....   258.361477: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   258.516738: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   258.521073: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [000] ....   258.521230: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   258.710041: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   258.711849: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [000] ....   258.711900: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   259.085977: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   259.088041: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [000] ....   259.088069: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   259.462126: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [000] ....   259.464303: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [000] ....   259.464349: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   259.839926: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   259.840806: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   259.840840: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   260.215095: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   260.216202: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   260.216400: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   260.591769: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   260.592452: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   260.592545: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   260.968050: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   260.968602: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   260.968626: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   261.715367: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   261.715754: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   261.715783: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   262.091949: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   262.092394: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   262.092766: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   262.467762: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   262.468247: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   262.468527: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   262.845404: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   262.847034: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   262.847480: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   263.223460: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   263.224142: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   263.224423: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
 alsa-source-ADM-6987  [002] ....   263.366593: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
 alsa-source-ADM-6987  [002] ....   263.368263: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> Capture 1
 alsa-source-ADM-6987  [002] ....   263.368288: snd_soc_dapm_path: *ADMAIF1 Transmit -> (direct) -> ADMAIF1 Transmit-ADMAIF1 CIF Transmit
 alsa-source-ADM-6987  [002] ....   263.369073: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
 alsa-source-ADM-6987  [002] ....   263.369412: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
 alsa-sink-ADMAI-6986  [001] ....   263.379620: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
 alsa-sink-ADMAI-6986  [001] ....   263.379740: snd_soc_dapm_path: *ADMAIF1 Receive <- (direct) <- Playback 1
 alsa-sink-ADMAI-6986  [001] ....   263.379746: snd_soc_dapm_path: *ADMAIF1 Receive <- (direct) <- ADMAIF1 CIF Receive-ADMAIF1 Receive
 alsa-sink-ADMAI-6986  [001] ....   263.379884: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
 alsa-sink-ADMAI-6986  [001] ....   263.380023: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [001] ....   263.599142: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [001] ....   263.600195: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [001] ....   263.600230: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [001] ....   263.974714: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [001] ....   263.975916: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [001] ....   263.976028: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   264.350824: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   264.352064: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 0 neighbour
           aplay-6980  [002] ....   264.352246: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   265.131171: snd_soc_dapm_start: card=tegra-snd-t186ref-max98090
           aplay-6980  [002] ....   265.132533: snd_soc_dapm_path: *ADMAIF3 Receive <- (direct) <- Playback 3
           aplay-6980  [002] ....   265.132559: snd_soc_dapm_path: *ADMAIF3 Receive <- (direct) <- ADMAIF3 CIF Receive-ADMAIF3 Receive
           aplay-6980  [002] ....   265.133434: snd_soc_dapm_walk_done: tegra-snd-t186ref-max98090: checks 2 power, 2 path, 2 neighbour
           aplay-6980  [002] ....   265.133851: snd_soc_dapm_done: card=tegra-snd-t186ref-max98090

It seeemed that I2S1 didn’t be routed to ADMAIF3. What could have caused the above error?

Hello!

Looks like the route for the Line Out is not complete. Can you try add the ‘x LineOut’ DAPM Line to the machine driver?

SND_SOC_DAPM_LINE("x LineOut", NULL),

Regards,
Jon

Thank you for replying.

I‘m so sorry for attaching the error code… …

My code is exactly what you mentioned above:

SND_SOC_DAPM_LINE("x LineOut", NULL),

And I also tried the SPK of max98090 as follow:

In dtsi:
    	"x SpkOut",  "x SPKR",
    	"x SpkOut",  "x SPKL";

In machinr_driver:
    	SND_SOC_DAPM_SPK("x SpkOut", NULL),

I got the same error in result.

So only the headphone playback can work now.
Will the different config of Max98090 affect the I2S Routing in TX2?

Hello!

Yes for LineOut, looking at the max98090 driver there are different mixer settings that need to be set. Can you try …

$ amixer -c tegrasndt186ref cset name='x Left Receiver Mixer Left DAC Switch' on
$ amixer -c tegrasndt186ref cset name='x Right Receiver Mixer Right DAC Switch' on
$ amixer -c tegrasndt186ref cset name='x Left Receiver Mixer LINEA Switch' on
$ amixer -c tegrasndt186ref cset name='x Right Receiver Mixer LINEA Switch' on
$ amixer -c tegrasndt186ref cset name='x LINMOD Mux' 'Left and Right'

Regards,
Jon

Thx for your help.

I got how to configure the widgets and playback the audio.

Now, When I executed the command “aplay”, I can hear the sound.
However, when I ran the test in “system setting->sound” on desktop( the ubuntu system is official ), I can’t hear the sound.

So I measured the clock signal by oscilloscope. When I opened the sound test of the desktop system, the aud_mclk could be detected, while the i2s_clk couldn’t.

It seems that the system program would not route the I2S channel, even though I had executed the command “amixer -c tegrasndt186ref cset name=‘I2S1 Mux’ ADMAIF3”

Is there any way to fix the route between ‘I2S Mux’ and ‘ADMAIF’ in kernel layer?
Thx in advance.

Hello!

What specific ‘aplay’ command are you using for testing? Is it something like …

$ aplay -D hw:tegrasndt210ref,2 -c 2 -r 48000 -f S16_LE <wavfile>

When using the Ubuntu desktop, pulseaudio needs to know what subdevice on the soundcard to route the audio to. There are a few ways to do this, but for L4T by default we provide /etc/asound.conf which sets the default …

pcm.!default {
        type plug
        slave {
                pcm "hw:tegrasndt210ref,0"
                channels 2
                rate 48000
        }
}

If you have the same as above, change the pcm device from “hw:tegrasndt210ref,0” to “hw:tegrasndt210ref,2” (or whatever you are using in the aplay command).

You can test that the default pcm device is correct by omitted the ‘-D’ option when using aplay …

$ aplay -c 2 -r 48000 -f S16_LE <wavfile>

If this works, then so should the audio test via the Ubuntu desktop.

Regards,
Jon

Hi Jon,

Thank you very much.
It worked as you said.

I have another question about recording:
I measured the signal of i2s_sdout with amplitude of 1.8V, is this voltage high for i2s_sdin on tx2?

Hello!

Yes the default is 3.3V for the I2S signals on header J21. This can be switched to 1.8V by switching the jumper on header J24 to position 2-3.

Regards,
Jon

Hi Jon,

I’m sorry to forget to make it clear that I tested the asoc on my custom board now.

Is there any way to switched 3.3V to 1.8V in the software?

Another, if the amplitude of i2s_sdout signal(when aplay) is 1.8V, may I think that 1.8V is high for i2s_sdin signal(when arecord) of the same i2s group?

Hello!

So the DAP1/I2S1 pins are powered by the vddio_pexctl_aud rail and this is 1.8V on the TX2 module. Unless you have a level shifter like the one found on the TX2 carrier board, then these can only operate at 1.8V. In other words, they are 1.8V IO unless you have changed this on your custom board.

Regards,
Jon

Hi Jon,

Thank you. I got

I’ve already successful debugged most working modes of max98090 on my tx2 custom board except recording.

I can hear sounds from the mic of max98090, so there should be no problem with the hardware design of mic input.
And I measured the signals of mclk & i2s when recording, which were confirmed to be correct by Maxium FAE, so the register configuration by widgets-routing should be ok, too.

However, the recorded data is either 0x0000 or 0xffff as follow:

5249 4646 c4ea 1a00 5741 5645 666d 7420
1000 0000 0100 0200 44ac 0000 10b1 0200
0400 1000 6461 7461 a0ea 1a00 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff ffff ffff ffff ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff ffff ffff
ffff ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
0000 ffff 0000 ffff 0000 ffff 0000 ffff
... ...

Did i2s_sdin of tx2 not work? But I checked the configuration if i2s1 pins, which seemed to be no problem:

Bank: 0 Reg: 0x02431028 Val: 0x00000400 -> dap1_fs_pj3
Bank: 0 Reg: 0x02431030 Val: 0x00000458 -> dap1_din_pj2
Bank: 0 Reg: 0x02431038 Val: 0x00000400 -> dap1_dout_pj1
Bank: 0 Reg: 0x02431040 Val: 0x00000400 -> dap1_sclk_pj0

Or, is there anything wrong with the routing I configured between i2s1 & admaif or I missed some configuration of routing on tx2?

amixer -c tegrasndt186ref cset name=“ADMAIF3 Mux” I2S1
arecord -D hw:tegrasndt186ref,2 -r 44100 -c 2 -f S16_LE <outputfile.wav>

Hello!

I can confirm that the I2S DIN does work and that we do validate this functionality.

Given that you are receiving either 0x0000 or 0xffff indicates that you are receiving data. Have you checked the data on the I2S DIN pin to see if this does actually correspond to what is being received?

Regards,
Jon

Hi Jon,

Thank you for your help.
I’ve gotten the recording audio on tx2, though the sound was on and off.

The problem on #11 may have been caused by that I turned on all the routes inside the max98090 when debugging with the command “alsamixer”, resulting in high frequency noise interference during recording.

Hello!

I've drived max98090 on the custom tx2-4gb board with l4t-r32.3 for playback by:
amixer -c tegrasndt186ref cset name="I2S1 Mux" ADMAIF2
aplay -Dhw:tegrasndt186ref,1 <wavfile>

But I couldn’t record by:

amixer -c tegrasndt186ref cset name='x Left ADC Mixer LINEA Switch' on
amixer -c tegrasndt186ref cset name='x Right ADC Mixer LINEA Switch' on
amixer -c tegrasndt186ref cset name="ADMAIF3 Mux" I2S1

arecord -D hw:tegrasndt186ref,2 -r 44100 -c 2 -f S16_LE output.wav
Recording WAVE 'output.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
arecord: pcm_read:2103: read error: Input/output error

I changed device-tree & machine-driver as:

tegra_sound: sound {
        nvidia,audio-routing =
                "IN1",          "x Mic",
                "IN2",          "x Mic",
                "IN34",         "x Mic",
                "x Mic",        "MICBIAS",

                "x Headphone",  "x HPR",
                "x Headphone",  "x HPL";

        nvidia,xbar = <&tegra_axbar>;

        max98090_dai_link: nvidia,dai-link-1 {
                link-name = "max98090";
                cpu-dai = <&tegra_i2s1>;
                codec-dai = <&acodec>;
                cpu-dai-name = "I2S1";
                codec-dai-name = "HiFi";
                format = "i2s";
                bit-format = "s16_le";
                bclk_ratio = <0>;
                srate = <48000>;
                num-channel = <2>;
                ignore_suspend;
                name-prefix = "x";
                status = "okay";
        };
};
static const struct snd_soc_dapm_widget tegra_machine_dapm_widgets[] = {
//      SND_SOC_DAPM_SPK("x Int Spk", NULL),
//      SND_SOC_DAPM_HP("x Headphone Jack", NULL),
//      SND_SOC_DAPM_MIC("x Int Mic", NULL),
//      SND_SOC_DAPM_MIC("x Mic Jack", NULL),
//
//      SND_SOC_DAPM_SPK("d1 Headphone", NULL),
//      SND_SOC_DAPM_SPK("d2 Headphone", NULL),

//      SND_SOC_DAPM_HP("w Headphone", NULL),
        SND_SOC_DAPM_HP("x Headphone", NULL),
//      SND_SOC_DAPM_HP("y Headphone", NULL),
//      SND_SOC_DAPM_HP("z Headphone", NULL),
//      SND_SOC_DAPM_HP("l Headphone", NULL),
//      SND_SOC_DAPM_HP("m Headphone", NULL),
//      SND_SOC_DAPM_HP("n Headphone", NULL),
//      SND_SOC_DAPM_HP("o Headphone", NULL),
//      SND_SOC_DAPM_HP("s Headphone", NULL),

//      SND_SOC_DAPM_MIC("Int Mic", NULL),
//      SND_SOC_DAPM_MIC("w Mic", NULL),
        SND_SOC_DAPM_MIC("x Mic", NULL),
//      SND_SOC_DAPM_MIC("y Mic", NULL),
//      SND_SOC_DAPM_MIC("z Mic", NULL),
//      SND_SOC_DAPM_MIC("l Mic", NULL),
//      SND_SOC_DAPM_MIC("m Mic", NULL),
//      SND_SOC_DAPM_MIC("n Mic", NULL),
//      SND_SOC_DAPM_MIC("o Mic", NULL),
//      SND_SOC_DAPM_MIC("a Mic", NULL),
//      SND_SOC_DAPM_MIC("b Mic", NULL),
//      SND_SOC_DAPM_MIC("c Mic", NULL),
//      SND_SOC_DAPM_MIC("d Mic", NULL),
//      SND_SOC_DAPM_MIC("s Mic", NULL),
};

Does the modification in device-tree & machine-driver work.Or should I turn on some other amixer switches?

Hello!

The error you are seeing indicates that I2S interface is not receiving any data. However, that is odd as it appears that the Tegra I2S interface is the I2S master in this case. Can you …

$ amixer -c tegrasndt186ref cset name="ADMAIF3 Mux" I2S1
$ echo 0 | sudo tee /sys/kernel/debug/tracing/trace
$ echo 0 | sudo tee /sys/kernel/debug/tracing/events/enable
$ echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_on
$ echo 1 | sudo tee /sys/kernel/debug/tracing/events/asoc/snd_soc_dapm_widget_power/enable
$ arecord -D hw:tegrasndt186ref,2 -r 44100 -c 2 -f S16_LE output.wav
$ sudo cat /sys/kernel/debug/tracing/trace

Regards,
Jon

Hi Jon,

Thank you for your reply.
I'm sorry that I didn't pay attention to my mistakes in devicetree:

the audio-routing should be named with name-prefix, the correct one is:

"x MIC1",       "x Mic",
"x MIC2",       "x Mic",
"x Mic",        "x MICBIAS",

Then I’ve run “arecord” successful.

Hello!

Thanks for the update and sorry for the delay. Yes looked like you were missing some routes. OK, great to hear you have figured it out.

Thanks!
Jon