mailman.alsa-project.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

Sound-open-firmware

Thread Start a new thread
Download
Threads by month
  • ----- 2025 -----
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
sound-open-firmware@alsa-project.org

  • 4 participants
  • 1568 discussions
[Sound-open-firmware] jack detection via input/event on linux
by hede 04 Jun '22

04 Jun '22
Hi all, I don't know where to ask this question so please point me to the right direction if I'm wrong here and if you know a better place to ask this questions. I tried to ask it on the alsa-user list but there was not a single response - not even a negative one. I'm using a chromebook Lenovo IdeaPad i3 with Debian 11. Intel Jasper Lake platform, alsa modules snd_soc_rt5682, snd_soc_rt1015, etc. The sound generally works, except I have to manually set mixer settings to have sound and it's making click-noises with every new stream and the headphone jack detection doesn't work. And the internal microphone has 4 channels with gray noise on channels 3+4, because there are onle two channels connected in this device (there are two mono microphones / one stereo... don't know). The kernel is Linux 5.10 from the ChromeOS/chromiumOS project, the SOF firmware is sof-v2.1.1 (sof-jsl.*) from thesofproject, the alsa ucm is copied from the device filesystem (ChromeOS). For jack detection there is some input event device /dev/input/event9 "sof-rt5682 Headset Jack" which works. I can see input events via evtest if I insert or remove the headset. This device belongs to: cat /sys/devices/pci0000\:00/0000\:00\:1f.3/jsl_rt5682_rt1015/driver/jsl_rt5682_rt1015/modalias platform:jsl_rt5682_rt1015 I don't know if there should be some "device-internal" jack-detection-service for this besides the input event device the kernel offers to userland and how headphone jack detection works in general for alsa/pulseaudio. The documentation neither for SOF nor alsa nor pulseaudio was eye-opening for me, sorry :-( Everything I tried to modify the alsa ucm failed so far. For ChromeOS it seems the ChromeOS sound server "CRAS" is responsible for headphone jack detection. The alsa ucm seems to have special functionality for CRAS? (see below for the Hifi.conf) And the functionality which is offered by the SOF firmware+driver is not compatible with alsa/pulseaudio? Or does anybody know how to tell alsa or pulseaudio or maybe pipewire to listen to the input event device to enable headset output and switch to the headset device? regards hede ### evtest while inserting and removing the headset ### evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: Lid Switch /dev/input/event1: Power Button /dev/input/event2: AT Translated Set 2 keyboard /dev/input/event3: cros_ec_buttons /dev/input/event4: PRP0001:00 /dev/input/event5: ELAN901C:00 04F3:2D70 /dev/input/event6: ELAN901C:00 04F3:2D70 UNKNOWN /dev/input/event7: ELAN901C:00 04F3:2D70 UNKNOWN /dev/input/event8: Elan Touchpad /dev/input/event9: sof-rt5682 Headset Jack /dev/input/event10: sof-rt5682 HDMI/DP,pcm=2 /dev/input/event11: sof-rt5682 HDMI/DP,pcm=3 /dev/input/event12: sof-rt5682 HDMI/DP,pcm=4 Select the device event number [0-12]: 9 Input driver version is 1.0.1 Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0 Input device name: "sof-rt5682 Headset Jack" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 164 (KEY_PLAYPAUSE) Event code 582 (KEY_VOICECOMMAND) Event type 5 (EV_SW) Event code 2 (SW_HEADPHONE_INSERT) state 0 Event code 4 (SW_MICROPHONE_INSERT) state 0 Properties: Testing ... (interrupt to exit) Event: time 1654246154.225165, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 1 Event: time 1654246154.225165, -------------- SYN_REPORT ------------ Event: time 1654246156.347444, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 0 Event: time 1654246156.347444, -------------- SYN_REPORT ------------ #### #### amixer -c0 contents #### numid=20,iface=CARD,name='HDMI/DP,pcm=2 Jack' ; type=BOOLEAN,access=r-------,values=1 : values=off numid=26,iface=CARD,name='HDMI/DP,pcm=3 Jack' ; type=BOOLEAN,access=r-------,values=1 : values=off numid=32,iface=CARD,name='HDMI/DP,pcm=4 Jack' ; type=BOOLEAN,access=r-------,values=1 : values=off numid=16,iface=MIXER,name='Headphone Jack Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=69,iface=MIXER,name='ADCDAT Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'ADCDAT1' ; Item #1 'ADCDAT2' : values=0 numid=21,iface=MIXER,name='IEC958 Playback Con Mask' ; type=IEC958,access=r-------,values=1 : values=[AES0=0x0f AES1=0xff AES2=0x00 AES3=0x00] numid=27,iface=MIXER,name='IEC958 Playback Con Mask',index=1 ; type=IEC958,access=r-------,values=1 : values=[AES0=0x0f AES1=0xff AES2=0x00 AES3=0x00] numid=33,iface=MIXER,name='IEC958 Playback Con Mask',index=2 ; type=IEC958,access=r-------,values=1 : values=[AES0=0x0f AES1=0xff AES2=0x00 AES3=0x00] numid=22,iface=MIXER,name='IEC958 Playback Pro Mask' ; type=IEC958,access=r-------,values=1 : values=[AES0=0x0f AES1=0x00 AES2=0x00 AES3=0x00] numid=28,iface=MIXER,name='IEC958 Playback Pro Mask',index=1 ; type=IEC958,access=r-------,values=1 : values=[AES0=0x0f AES1=0x00 AES2=0x00 AES3=0x00] numid=34,iface=MIXER,name='IEC958 Playback Pro Mask',index=2 ; type=IEC958,access=r-------,values=1 : values=[AES0=0x0f AES1=0x00 AES2=0x00 AES3=0x00] numid=23,iface=MIXER,name='IEC958 Playback Default' ; type=IEC958,access=rw------,values=1 : values=[AES0=0x04 AES1=0x00 AES2=0x00 AES3=0x00] numid=29,iface=MIXER,name='IEC958 Playback Default',index=1 ; type=IEC958,access=rw------,values=1 : values=[AES0=0x04 AES1=0x00 AES2=0x00 AES3=0x00] numid=35,iface=MIXER,name='IEC958 Playback Default',index=2 ; type=IEC958,access=rw------,values=1 : values=[AES0=0x04 AES1=0x00 AES2=0x00 AES3=0x00] numid=24,iface=MIXER,name='IEC958 Playback Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=30,iface=MIXER,name='IEC958 Playback Switch',index=1 ; type=BOOLEAN,access=rw------,values=1 : values=on numid=36,iface=MIXER,name='IEC958 Playback Switch',index=2 ; type=BOOLEAN,access=rw------,values=1 : values=on numid=2,iface=MIXER,name='CBJ Boost Volume' ; type=INTEGER,access=rw---R--,values=1,min=0,max=8,step=0 : values=3 | dBrange- rangemin=0,,rangemax=0 | dBscale-min=0.00dB,step=0.00dB,mute=0 rangemin=1,,rangemax=1 | dBscale-min=20.00dB,step=0.00dB,mute=0 rangemin=2,,rangemax=2 | dBscale-min=24.00dB,step=0.00dB,mute=0 rangemin=3,,rangemax=5 | dBscale-min=30.00dB,step=5.00dB,mute=0 rangemin=6,,rangemax=6 | dBscale-min=44.00dB,step=0.00dB,mute=0 rangemin=7,,rangemax=7 | dBscale-min=50.00dB,step=0.00dB,mute=0 rangemin=8,,rangemax=8 | dBscale-min=52.00dB,step=0.00dB,mute=0 numid=70,iface=MIXER,name='DAC L Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'IF1' ; Item #1 'SOUND' : values=0 numid=76,iface=MIXER,name='DAC L1 Source' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'Stereo1 DAC Mixer' ; Item #1 'DAC1' : values=1 numid=71,iface=MIXER,name='DAC R Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'IF1' ; Item #1 'SOUND' : values=0 numid=77,iface=MIXER,name='DAC R1 Source' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'Stereo1 DAC Mixer' ; Item #1 'DAC1' : values=1 numid=73,iface=MIXER,name='DAC1 MIXL DAC1 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=72,iface=MIXER,name='DAC1 MIXL Stereo ADC Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=75,iface=MIXER,name='DAC1 MIXR DAC1 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=74,iface=MIXER,name='DAC1 MIXR Stereo ADC Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=1,iface=MIXER,name='DAC1 Playback Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=87,step=0 : values=79,79 | dBscale-min=-65.25dB,step=0.75dB,mute=0 numid=49,iface=MIXER,name='DETECT12.0 Detector Config' ; type=BYTES,access=-----RW-,values=304 ; ASoC TLV Byte control, skipping bytes dump numid=50,iface=MIXER,name='DETECT12.0 Hotword Model' ; type=BYTES,access=-----RW-,values=300000 ; ASoC TLV Byte control, skipping bytes dump numid=84,iface=MIXER,name='HPO Signal Demux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'Legacy' ; Item #1 'OneBit' : values=1 numid=82,iface=MIXER,name='HPOL Playback Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=83,iface=MIXER,name='HPOR Playback Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=17,iface=MIXER,name='Headset Mic Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=64,iface=MIXER,name='IF1 01 ADC Swap Mux' ; type=ENUMERATED,access=rw------,values=1,items=4 ; Item #0 'L/R' ; Item #1 'R/L' ; Item #2 'L/L' ; Item #3 'R/R' : values=2 numid=65,iface=MIXER,name='IF1 23 ADC Swap Mux' ; type=ENUMERATED,access=rw------,values=1,items=4 ; Item #0 'L/R' ; Item #1 'R/L' ; Item #2 'L/L' ; Item #3 'R/R' : values=0 numid=66,iface=MIXER,name='IF1 45 ADC Swap Mux' ; type=ENUMERATED,access=rw------,values=1,items=4 ; Item #0 'L/R' ; Item #1 'R/L' ; Item #2 'L/L' ; Item #3 'R/R' : values=0 numid=67,iface=MIXER,name='IF1 67 ADC Swap Mux' ; type=ENUMERATED,access=rw------,values=1,items=4 ; Item #0 'L/R' ; Item #1 'R/L' ; Item #2 'L/L' ; Item #3 'R/R' : values=0 numid=59,iface=MIXER,name='IF1_ADC Mux' ; type=ENUMERATED,access=rw------,values=1,items=4 ; Item #0 'Slot 0' ; Item #1 'Slot 2' ; Item #2 'Slot 4' ; Item #3 'Slot 6' : values=0 numid=68,iface=MIXER,name='IF2 ADC Swap Mux' ; type=ENUMERATED,access=rw------,values=1,items=4 ; Item #0 'L/R' ; Item #1 'R/L' ; Item #2 'L/L' ; Item #3 'R/R' : values=0 numid=48,iface=MIXER,name='KPBM11.0 KPB' ; type=BYTES,access=-----RW-,values=304 ; ASoC TLV Byte control, skipping bytes dump numid=8,iface=MIXER,name='Left Boost Mode' ; type=ENUMERATED,access=rw------,values=1,items=3 ; Item #0 'Bypass' ; Item #1 'Adaptive' ; Item #2 'Fixed Adaptive' : values=0 numid=10,iface=MIXER,name='Left Bypass Boost' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=7,iface=MIXER,name='Left DAC Playback Switch' ; type=BOOLEAN,access=rw------,values=2 : values=on,on numid=6,iface=MIXER,name='Left DAC Playback Volume' ; type=INTEGER,access=rw---R--,values=1,min=0,max=127,step=0 : values=127 | dBscale-min=-95.25dB,step=0.75dB,mute=0 numid=9,iface=MIXER,name='Left Mono LR Select' ; type=ENUMERATED,access=rw------,values=1,items=3 ; Item #0 'Left' ; Item #1 'Right' ; Item #2 'Left + Right average' : values=0 numid=18,iface=MIXER,name='Left Spk Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=41,iface=MIXER,name='PGA1.0 1 Master Playback Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0 : values=32,32 | dBscale-min=-64.00dB,step=2.00dB,mute=1 numid=47,iface=MIXER,name='PGA11.0 11 KWD Capture Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=80,step=0 : values=50,50 | dBscale-min=-50.00dB,step=1.00dB,mute=1 numid=42,iface=MIXER,name='PGA2.0 2 Master Playback Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0 : values=32,32 | dBscale-min=-64.00dB,step=2.00dB,mute=1 numid=43,iface=MIXER,name='PGA3.0 3 Master Capture Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=80,step=0 : values=50,50 | dBscale-min=-50.00dB,step=1.00dB,mute=1 numid=44,iface=MIXER,name='PGA5.0 5 Master Playback Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0 : values=32,32 | dBscale-min=-64.00dB,step=2.00dB,mute=1 numid=45,iface=MIXER,name='PGA6.0 6 Master Playback Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0 : values=32,32 | dBscale-min=-64.00dB,step=2.00dB,mute=1 numid=46,iface=MIXER,name='PGA7.0 7 Master Playback Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0 : values=32,32 | dBscale-min=-64.00dB,step=2.00dB,mute=1 numid=52,iface=MIXER,name='RECMIX1L CBJ Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=13,iface=MIXER,name='Right Boost Mode' ; type=ENUMERATED,access=rw------,values=1,items=3 ; Item #0 'Bypass' ; Item #1 'Adaptive' ; Item #2 'Fixed Adaptive' : values=0 numid=15,iface=MIXER,name='Right Bypass Boost' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=12,iface=MIXER,name='Right DAC Playback Switch' ; type=BOOLEAN,access=rw------,values=2 : values=on,on numid=11,iface=MIXER,name='Right DAC Playback Volume' ; type=INTEGER,access=rw---R--,values=1,min=0,max=127,step=0 : values=127 | dBscale-min=-95.25dB,step=0.75dB,mute=0 numid=14,iface=MIXER,name='Right Mono LR Select' ; type=ENUMERATED,access=rw------,values=1,items=3 ; Item #0 'Left' ; Item #1 'Right' ; Item #2 'Left + Right average' : values=1 numid=19,iface=MIXER,name='Right Spk Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=51,iface=MIXER,name='SELECTOR12.0 SELECTOR' ; type=BYTES,access=-----RW-,values=304 ; ASoC TLV Byte control, skipping bytes dump numid=5,iface=MIXER,name='STO1 ADC Boost Gain Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=3,step=0 : values=0,0 | dBscale-min=0.00dB,step=12.00dB,mute=0 numid=3,iface=MIXER,name='STO1 ADC Capture Switch' ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=4,iface=MIXER,name='STO1 ADC Capture Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=63,step=0 : values=23,23 | dBscale-min=-17.25dB,step=0.75dB,mute=0 numid=57,iface=MIXER,name='Stereo1 ADC L Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'ADC1 L' ; Item #1 'ADC1 R' : values=0 numid=53,iface=MIXER,name='Stereo1 ADC L1 Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'DAC MIX' ; Item #1 'ADC' : values=1 numid=55,iface=MIXER,name='Stereo1 ADC L2 Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'DAC MIX' ; Item #1 'DMIC' : values=0 numid=60,iface=MIXER,name='Stereo1 ADC MIXL ADC1 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=61,iface=MIXER,name='Stereo1 ADC MIXL ADC2 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=62,iface=MIXER,name='Stereo1 ADC MIXR ADC1 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=63,iface=MIXER,name='Stereo1 ADC MIXR ADC2 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=58,iface=MIXER,name='Stereo1 ADC R Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'ADC1 L' ; Item #1 'ADC1 R' : values=1 numid=54,iface=MIXER,name='Stereo1 ADC R1 Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'DAC MIX' ; Item #1 'ADC' : values=1 numid=56,iface=MIXER,name='Stereo1 ADC R2 Mux' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'DAC MIX' ; Item #1 'DMIC' : values=0 numid=78,iface=MIXER,name='Stereo1 DAC MIXL DAC L1 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=79,iface=MIXER,name='Stereo1 DAC MIXL DAC R1 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=80,iface=MIXER,name='Stereo1 DAC MIXR DAC L1 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=81,iface=MIXER,name='Stereo1 DAC MIXR DAC R1 Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=25,iface=PCM,name='ELD',device=2 ; type=BYTES,access=r--v----,values=0 : values= numid=38,iface=PCM,name='Playback Channel Map',device=2 ; type=INTEGER,access=rw---R--,values=8,min=0,max=36,step=0 : values=0,0,0,0,0,0,0,0 | container | chmap-variable=FL,FR numid=31,iface=PCM,name='ELD',device=3 ; type=BYTES,access=r--v----,values=0 : values= numid=39,iface=PCM,name='Playback Channel Map',device=3 ; type=INTEGER,access=rw---R--,values=8,min=0,max=36,step=0 : values=0,0,0,0,0,0,0,0 | container | chmap-variable=FL,FR numid=37,iface=PCM,name='ELD',device=4 ; type=BYTES,access=r--v----,values=0 : values= numid=40,iface=PCM,name='Playback Channel Map',device=4 ; type=INTEGER,access=rw---R--,values=8,min=0,max=36,step=0 : values=0,0,0,0,0,0,0,0 | container | chmap-variable=FL,FR #### #### /usr/share/alsa/ucm/sof-rt5682.rt1015p.1mic.botenflex/HiFi.conf #### SectionVerb { Value { FullySpecifiedUCM "1" } EnableSequence [ cdev "hw:sofrt5682" cset "name='Headphone Jack Switch' off" cset "name='HPOL Playback Switch' 1" cset "name='HPOR Playback Switch' 1" cset "name='Headset Mic Switch' off" cset "name='CBJ Boost Volume' 3" cset "name='RECMIX1L CBJ Switch' 1" cset "name='Stereo1 ADC L Mux' 0" cset "name='Stereo1 ADC L1 Mux' 1" cset "name='Stereo1 ADC R1 Mux' 1" cset "name='IF1 01 ADC Swap Mux' 2" cset "name='Left Spk Switch' off" cset "name='Right Spk Switch' off" ] DisableSequence [ ] } SectionDevice."Speaker".0 { Value { PlaybackPCM "hw:sofrt5682,0" DspName "speaker_eq" } EnableSequence [ cdev "hw:sofrt5682" cset "name='Left Spk Switch' on" cset "name='Right Spk Switch' on" ] DisableSequence [ cdev "hw:sofrt5682" cset "name='Left Spk Switch' off" cset "name='Right Spk Switch' off" ] } SectionDevice."Headphone".0 { Value { PlaybackPCM "hw:sofrt5682,1" PlaybackMixerElem "DAC1" JackDev "sof-rt5682 Headset Jack" JackSwitch "2" } EnableSequence [ cdev "hw:sofrt5682" cset "name='Stereo1 DAC MIXL DAC L1 Switch' 1" cset "name='Stereo1 DAC MIXR DAC R1 Switch' 1" cset "name='Headphone Jack Switch' on" ] DisableSequence [ cdev "hw:sofrt5682" cset "name='Headphone Jack Switch' off" cset "name='Stereo1 DAC MIXL DAC L1 Switch' 0" cset "name='Stereo1 DAC MIXR DAC R1 Switch' 0" ] } SectionDevice."Line Out".0 { Value { PlaybackPCM "hw:sofrt5682,1" PlaybackMixerElem "DAC1" JackDev "sof-rt5682 Headset Jack" JackSwitch "6" } EnableSequence [ cdev "hw:sofrt5682" cset "name='Stereo1 DAC MIXL DAC L1 Switch' 1" cset "name='Stereo1 DAC MIXR DAC R1 Switch' 1" cset "name='Headphone Jack Switch' on" ] DisableSequence [ cdev "hw:sofrt5682" cset "name='Headphone Jack Switch' off" cset "name='Stereo1 DAC MIXL DAC L1 Switch' 0" cset "name='Stereo1 DAC MIXR DAC R1 Switch' 0" ] } SectionDevice."Mic".0 { Value { CapturePCM "hw:sofrt5682,1" CaptureMixerElem "Headset Mic" JackDev "sof-rt5682 Headset Jack" } EnableSequence [ cdev "hw:sofrt5682" cset "name='Stereo1 ADC MIXL ADC1 Switch' 1" cset "name='Stereo1 ADC MIXR ADC1 Switch' 1" cset "name='Headset Mic Switch' on" ] DisableSequence [ cdev "hw:sofrt5682" cset "name='Headset Mic Switch' off" cset "name='Stereo1 ADC MIXL ADC1 Switch' 0" cset "name='Stereo1 ADC MIXR ADC1 Switch' 0" ] } SectionDevice."Front Mic".0 { Value { CapturePCM "hw:sofrt5682,5" CaptureChannelMap "0 1 -1 -1 -1 -1 -1 -1 -1 -1 -1" IntrinsicSensitivity "-2600" DspName "dmic_eq" } } SectionDevice."Rear Mic".0 { Value { CapturePCM "hw:sofrt5682,5" CaptureChannelMap "2 3 -1 -1 -1 -1 -1 -1 -1 -1 -1" IntrinsicSensitivity "-2600" DspName "dmic_eq" } } SectionDevice."HDMI1".0 { Value { PlaybackPCM "hw:sofrt5682,2" JackDev "sof-rt5682 HDMI/DP,pcm=2" } EnableSequence [ ] DisableSequence [ ] } SectionDevice."HDMI2".0 { Value { PlaybackPCM "hw:sofrt5682,3" JackDev "sof-rt5682 HDMI/DP,pcm=3" } EnableSequence [ ] DisableSequence [ ] } SectionDevice."HDMI3".0 { Value { PlaybackPCM "hw:sofrt5682,4" JackDev "sof-rt5682 HDMI/DP,pcm=4" } EnableSequence [ ] DisableSequence [ ] } ####
4 8
0 0
[Sound-open-firmware] [PATCH AUTOSEL 5.17 084/135] ASoC: SOF: amd: add missing platform_device_unregister in acp_pci_rn_probe
by Sasha Levin 30 May '22

30 May '22
From: Zheng Bin <zhengbin13(a)huawei.com> [ Upstream commit cbcab8cd737c74c20195c31d647e19f7cb49c9b8 ] acp_pci_rn_probe misses a call platform_device_unregister in error path, this patch fixes that. Signed-off-by: Zheng Bin <zhengbin13(a)huawei.com> Link: https://lore.kernel.org/r/20220512013728.4128903-1-zhengbin13@huawei.com Signed-off-by: Mark Brown <broonie(a)kernel.org> Signed-off-by: Sasha Levin <sashal(a)kernel.org> --- sound/soc/sof/amd/pci-rn.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/soc/sof/amd/pci-rn.c b/sound/soc/sof/amd/pci-rn.c index 392ffbdf6417..d809d151a38c 100644 --- a/sound/soc/sof/amd/pci-rn.c +++ b/sound/soc/sof/amd/pci-rn.c @@ -93,6 +93,7 @@ static int acp_pci_rn_probe(struct pci_dev *pci, const struct pci_device_id *pci res = devm_kzalloc(&pci->dev, sizeof(struct resource) * ARRAY_SIZE(renoir_res), GFP_KERNEL); if (!res) { sof_pci_remove(pci); + platform_device_unregister(dmic_dev); return -ENOMEM; } -- 2.35.1
1 0
0 0
[Sound-open-firmware] [PATCH AUTOSEL 5.18 102/159] ASoC: SOF: amd: add missing platform_device_unregister in acp_pci_rn_probe
by Sasha Levin 30 May '22

30 May '22
From: Zheng Bin <zhengbin13(a)huawei.com> [ Upstream commit cbcab8cd737c74c20195c31d647e19f7cb49c9b8 ] acp_pci_rn_probe misses a call platform_device_unregister in error path, this patch fixes that. Signed-off-by: Zheng Bin <zhengbin13(a)huawei.com> Link: https://lore.kernel.org/r/20220512013728.4128903-1-zhengbin13@huawei.com Signed-off-by: Mark Brown <broonie(a)kernel.org> Signed-off-by: Sasha Levin <sashal(a)kernel.org> --- sound/soc/sof/amd/pci-rn.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/soc/sof/amd/pci-rn.c b/sound/soc/sof/amd/pci-rn.c index 392ffbdf6417..d809d151a38c 100644 --- a/sound/soc/sof/amd/pci-rn.c +++ b/sound/soc/sof/amd/pci-rn.c @@ -93,6 +93,7 @@ static int acp_pci_rn_probe(struct pci_dev *pci, const struct pci_device_id *pci res = devm_kzalloc(&pci->dev, sizeof(struct resource) * ARRAY_SIZE(renoir_res), GFP_KERNEL); if (!res) { sof_pci_remove(pci); + platform_device_unregister(dmic_dev); return -ENOMEM; } -- 2.35.1
1 0
0 0
[Sound-open-firmware] [PATCH AUTOSEL 5.18 079/159] ASoC: SOF: ipc3-topology: Correct get_control_data for non bytes payload
by Sasha Levin 30 May '22

30 May '22
From: Peter Ujfalusi <peter.ujfalusi(a)linux.intel.com> [ Upstream commit a962890a5a3cce903ff7c7a19fadee63ed9efdc7 ] It is possible to craft a topology where sof_get_control_data() would do out of bounds access because it expects that it is only called when the payload is bytes type. Confusingly it also handles other types of controls, but the payload parsing implementation is only valid for bytes. Fix the code to count the non bytes controls and instead of storing a pointer to sof_abi_hdr in sof_widget_data (which is only valid for bytes), store the pointer to the data itself and add a new member to save the size of the data. In case of non bytes controls we store the pointer to the chanv itself, which is just an array of values at the end. In case of bytes control, drop the wrong cdata->data (wdata[i].pdata) check against NULL since it is incorrect and invalid in this context. The data is pointing to the end of cdata struct, so it should never be null. Reported-by: Sergey Senozhatsky <senozhatsky(a)chromium.org> Signed-off-by: Peter Ujfalusi <peter.ujfalusi(a)linux.intel.com> Reviewed-by: Sergey Senozhatsky <senozhatsky(a)chromium.org> Tested-by: Sergey Senozhatsky <senozhatsky(a)chromium.org> Link: https://lore.kernel.org/r/20220427185221.28928-1-peter.ujfalusi@linux.intel… Signed-off-by: Mark Brown <broonie(a)kernel.org> Signed-off-by: Sasha Levin <sashal(a)kernel.org> --- sound/soc/sof/ipc3-topology.c | 39 +++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/sound/soc/sof/ipc3-topology.c b/sound/soc/sof/ipc3-topology.c index 2f8450a8c0a1..af1bbd34213c 100644 --- a/sound/soc/sof/ipc3-topology.c +++ b/sound/soc/sof/ipc3-topology.c @@ -20,7 +20,8 @@ struct sof_widget_data { int ctrl_type; int ipc_cmd; - struct sof_abi_hdr *pdata; + void *pdata; + size_t pdata_size; struct snd_sof_control *control; }; @@ -784,16 +785,26 @@ static int sof_get_control_data(struct snd_soc_component *scomp, } cdata = wdata[i].control->ipc_control_data; - wdata[i].pdata = cdata->data; - if (!wdata[i].pdata) - return -EINVAL; - /* make sure data is valid - data can be updated at runtime */ - if (widget->dobj.widget.kcontrol_type[i] == SND_SOC_TPLG_TYPE_BYTES && - wdata[i].pdata->magic != SOF_ABI_MAGIC) - return -EINVAL; + if (widget->dobj.widget.kcontrol_type[i] == SND_SOC_TPLG_TYPE_BYTES) { + /* make sure data is valid - data can be updated at runtime */ + if (cdata->data->magic != SOF_ABI_MAGIC) + return -EINVAL; + + wdata[i].pdata = cdata->data->data; + wdata[i].pdata_size = cdata->data->size; + } else { + /* points to the control data union */ + wdata[i].pdata = cdata->chanv; + /* + * wdata[i].control->size is calculated with struct_size + * and includes the size of struct sof_ipc_ctrl_data + */ + wdata[i].pdata_size = wdata[i].control->size - + sizeof(struct sof_ipc_ctrl_data); + } - *size += wdata[i].pdata->size; + *size += wdata[i].pdata_size; /* get data type */ switch (cdata->cmd) { @@ -876,10 +887,12 @@ static int sof_process_load(struct snd_soc_component *scomp, */ if (ipc_data_size) { for (i = 0; i < widget->num_kcontrols; i++) { - memcpy(&process->data[offset], - wdata[i].pdata->data, - wdata[i].pdata->size); - offset += wdata[i].pdata->size; + if (!wdata[i].pdata_size) + continue; + + memcpy(&process->data[offset], wdata[i].pdata, + wdata[i].pdata_size); + offset += wdata[i].pdata_size; } } -- 2.35.1
1 0
0 0
[Sound-open-firmware] [PATCH v7 0/1] firmware: mtk: add adsp ipc protocol for SOF
by Allen-KH Cheng 25 May '22

25 May '22
This patch provides mediatek adsp ipc support for SOF. ADSP IPC protocol offers (send/recv) interfaces using mediatek-mailbox APIs. This patch was tested and confirmed to with SOF fw on MT8195 cherry board. Based on matthias.bgg/linux.git, v5.18-next/soc changes since v6: - rebase to matthias.bgg/linux.git, v5.18-next/soc - Prefer "GPL" over "GPL v2" for MODULE_LICENSE changes since v5: - fix WARNING: modpost: missing MODULE_LICENSE() in drivers/mailbox /mtk-adsp-mailbox.o. Add MODULE_LICENSE in the last line. - Due to WARNING: Missing or malformed SPDX-License-Identifier tag in line 1 in checkpatch, we don't remove SPDX-License in line 1. changes since v4: - add error message for wrong mbox chan changes since v3: - rebase on v5.16-rc8 - update reviewers changes since v2: - add out tag for two memory free phases changes since v1: - add comments for mtk_adsp_ipc_send and mtk_adsp_ipc_recv - remove useless MODULE_LICENSE - change label name to out_free Allen-KH Cheng (1): firmware: mediatek: add adsp ipc protocol interface drivers/firmware/Kconfig | 1 + drivers/firmware/Makefile | 1 + drivers/firmware/mediatek/Kconfig | 9 + drivers/firmware/mediatek/Makefile | 2 + drivers/firmware/mediatek/mtk-adsp-ipc.c | 161 ++++++++++++++++++ .../linux/firmware/mediatek/mtk-adsp-ipc.h | 65 +++++++ 6 files changed, 239 insertions(+) create mode 100644 drivers/firmware/mediatek/Kconfig create mode 100644 drivers/firmware/mediatek/Makefile create mode 100644 drivers/firmware/mediatek/mtk-adsp-ipc.c create mode 100644 include/linux/firmware/mediatek/mtk-adsp-ipc.h -- 2.18.0
3 4
0 0
[Sound-open-firmware] [PATCH] ASoC: SOF: mediatek: remove duplicate include in mt8195.c
by Wan Jiabing 20 May '22

20 May '22
Fix following checkincludes.pl warning: sound/soc/sof/mediatek/mt8195/mt8195.c: linux/of_platform.h is included more than once. Signed-off-by: Wan Jiabing <wanjiabing(a)vivo.com> --- sound/soc/sof/mediatek/mt8195/mt8195.c | 1 - 1 file changed, 1 deletion(-) diff --git a/sound/soc/sof/mediatek/mt8195/mt8195.c b/sound/soc/sof/mediatek/mt8195/mt8195.c index f4b24afb6f75..7278132300e0 100644 --- a/sound/soc/sof/mediatek/mt8195/mt8195.c +++ b/sound/soc/sof/mediatek/mt8195/mt8195.c @@ -12,7 +12,6 @@ #include <linux/delay.h> #include <linux/firmware.h> #include <linux/io.h> -#include <linux/of_platform.h> #include <linux/of_address.h> #include <linux/of_irq.h> #include <linux/of_platform.h> -- 2.36.1
2 1
0 0
[Sound-open-firmware] [PATCH v9 0/3] firmware: mtk: add adsp ipc protocol for SOF
by Tinghan Shen 17 May '22

17 May '22
This patch provides mediatek adsp ipc support for SOF. ADSP IPC protocol offers (send/recv) interfaces using mediatek-mailbox APIs. This patch was tested and confirmed to work with SOF fw on MT8195 cherry board and MT8186 krabby board. changes since v8: - fix patchset 2 and 3. move "depends on MTK_ADSP_IPC" from SND_SOC_SOF_MTK_COMMON to SND_SOC_SOF_MT8195/MT8186 to prevent generating wrong config. changes since v7: - rebase to linux-next/next-22020504 - use EXPORT_SYMBOL_GPL instead of EXPORT_SYMBOL in mtk-adsp-ipc.c - move mtk-adsp-ipc.c out from driver/firmware/mediatek - add user of mtk-adsp-ipc.h in patchset 2 and 3. changes since v6: - rebase to matthias.bgg/linux.git, v5.18-next/soc - Prefer "GPL" over "GPL v2" for MODULE_LICENSE changes since v5: - fix WARNING: modpost: missing MODULE_LICENSE() in drivers/mailbox /mtk-adsp-mailbox.o. Add MODULE_LICENSE in the last line. - Due to WARNING: Missing or malformed SPDX-License-Identifier tag in line 1 in checkpatch, we don't remove SPDX-License in line 1. changes since v4: - add error message for wrong mbox chan changes since v3: - rebase on v5.16-rc8 - update reviewers changes since v2: - add out tag for two memory free phases changes since v1: - add comments for mtk_adsp_ipc_send and mtk_adsp_ipc_recv - remove useless MODULE_LICENSE - change label name to out_free Allen-KH Cheng (1): ASoC: SOF: mediatek: Add ipc support for mt8195 TingHan Shen (1): firmware: mediatek: add adsp ipc protocol interface Tinghan Shen (1): ASoC: SOF: mediatek: Add mt8186 ipc support drivers/firmware/Kconfig | 9 + drivers/firmware/Makefile | 1 + drivers/firmware/mtk-adsp-ipc.c | 157 ++++++++++++++++++ .../linux/firmware/mediatek/mtk-adsp-ipc.h | 65 ++++++++ sound/soc/sof/mediatek/Kconfig | 2 + sound/soc/sof/mediatek/adsp_helper.h | 12 +- sound/soc/sof/mediatek/mt8186/mt8186-loader.c | 5 + sound/soc/sof/mediatek/mt8186/mt8186.c | 141 ++++++++++++++++ sound/soc/sof/mediatek/mt8195/mt8195.c | 138 ++++++++++++++- 9 files changed, 519 insertions(+), 11 deletions(-) create mode 100644 drivers/firmware/mtk-adsp-ipc.c create mode 100644 include/linux/firmware/mediatek/mtk-adsp-ipc.h -- 2.18.0
2 4
0 0
[Sound-open-firmware] [PATCH -next] ASoC: SOF: amd: add missing platform_device_unregister in acp_pci_rn_probe
by Zheng Bin 12 May '22

12 May '22
acp_pci_rn_probe misses a call platform_device_unregister in error path, this patch fixes that. Signed-off-by: Zheng Bin <zhengbin13(a)huawei.com> --- sound/soc/sof/amd/pci-rn.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/soc/sof/amd/pci-rn.c b/sound/soc/sof/amd/pci-rn.c index b8910bb7f27c..d5d9bcc2c997 100644 --- a/sound/soc/sof/amd/pci-rn.c +++ b/sound/soc/sof/amd/pci-rn.c @@ -101,6 +101,7 @@ static int acp_pci_rn_probe(struct pci_dev *pci, const struct pci_device_id *pci res = devm_kzalloc(&pci->dev, sizeof(struct resource) * ARRAY_SIZE(renoir_res), GFP_KERNEL); if (!res) { sof_pci_remove(pci); + platform_device_unregister(dmic_dev); return -ENOMEM; } -- 2.31.1
3 2
0 0
[Sound-open-firmware] [PATCH v8 0/3] firmware: mtk: add adsp ipc protocol for SOF
by Tinghan Shen 11 May '22

11 May '22
This patch provides mediatek adsp ipc support for SOF. ADSP IPC protocol offers (send/recv) interfaces using mediatek-mailbox APIs. This patch was tested and confirmed to work with SOF fw on MT8195 cherry board and MT8186 krabby board. changes since v7: - rebase to linux-next/next-22020504 - use EXPORT_SYMBOL_GPL instead of EXPORT_SYMBOL in mtk-adsp-ipc.c - move mtk-adsp-ipc.c out from driver/firmware/mediatek - add user of mtk-adsp-ipc.h in patchset 2 and 3. changes since v6: - rebase to matthias.bgg/linux.git, v5.18-next/soc - Prefer "GPL" over "GPL v2" for MODULE_LICENSE changes since v5: - fix WARNING: modpost: missing MODULE_LICENSE() in drivers/mailbox /mtk-adsp-mailbox.o. Add MODULE_LICENSE in the last line. - Due to WARNING: Missing or malformed SPDX-License-Identifier tag in line 1 in checkpatch, we don't remove SPDX-License in line 1. changes since v4: - add error message for wrong mbox chan changes since v3: - rebase on v5.16-rc8 - update reviewers changes since v2: - add out tag for two memory free phases changes since v1: - add comments for mtk_adsp_ipc_send and mtk_adsp_ipc_recv - remove useless MODULE_LICENSE - change label name to out_free Allen-KH Cheng (1): ASoC: SOF: mediatek: Add ipc support for mt8195 TingHan Shen (1): firmware: mediatek: add adsp ipc protocol interface Tinghan Shen (1): ASoC: SOF: mediatek: Add mt8186 ipc support drivers/firmware/Kconfig | 9 + drivers/firmware/Makefile | 1 + drivers/firmware/mtk-adsp-ipc.c | 157 ++++++++++++++++++ .../linux/firmware/mediatek/mtk-adsp-ipc.h | 65 ++++++++ sound/soc/sof/mediatek/Kconfig | 1 + sound/soc/sof/mediatek/adsp_helper.h | 12 +- sound/soc/sof/mediatek/mt8186/mt8186-loader.c | 5 + sound/soc/sof/mediatek/mt8186/mt8186.c | 141 ++++++++++++++++ sound/soc/sof/mediatek/mt8195/mt8195.c | 138 ++++++++++++++- 9 files changed, 518 insertions(+), 11 deletions(-) create mode 100644 drivers/firmware/mtk-adsp-ipc.c create mode 100644 include/linux/firmware/mediatek/mtk-adsp-ipc.h -- 2.18.0
1 3
0 0
[Sound-open-firmware] [PATCH AUTOSEL 5.15 08/19] ASoC: SOF: Fix NULL pointer exception in sof_pci_probe callback
by Sasha Levin 10 May '22

10 May '22
From: Ajit Kumar Pandey <AjitKumar.Pandey(a)amd.com> [ Upstream commit c61711c1c95791850be48dd65a1d72eb34ba719f ] We are accessing "desc->ops" in sof_pci_probe without checking "desc" pointer. This results in NULL pointer exception if pci_id->driver_data i.e desc pointer isn't defined in sof device probe: BUG: kernel NULL pointer dereference, address: 0000000000000060 PGD 0 P4D 0 Oops: 0000 [#1] PREEMPT SMP NOPTI RIP: 0010:sof_pci_probe+0x1e/0x17f [snd_sof_pci] Code: Unable to access opcode bytes at RIP 0xffffffffc043dff4. RSP: 0018:ffffac4b03b9b8d8 EFLAGS: 00010246 Add NULL pointer check for sof_dev_desc pointer to avoid such exception. Reviewed-by: Ranjani Sridharan <ranjani.sridharan(a)linux.intel.com> Signed-off-by: Ajit Kumar Pandey <AjitKumar.Pandey(a)amd.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart(a)linux.intel.com> Link: https://lore.kernel.org/r/20220426183357.102155-1-pierre-louis.bossart@linu… Signed-off-by: Mark Brown <broonie(a)kernel.org> Signed-off-by: Sasha Levin <sashal(a)kernel.org> --- sound/soc/sof/sof-pci-dev.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sound/soc/sof/sof-pci-dev.c b/sound/soc/sof/sof-pci-dev.c index bc9e70765678..b773289c928d 100644 --- a/sound/soc/sof/sof-pci-dev.c +++ b/sound/soc/sof/sof-pci-dev.c @@ -129,6 +129,11 @@ int sof_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) dev_dbg(&pci->dev, "PCI DSP detected"); + if (!desc) { + dev_err(dev, "error: no matching PCI descriptor\n"); + return -ENODEV; + } + if (!desc->ops) { dev_err(dev, "error: no matching PCI descriptor ops\n"); return -ENODEV; -- 2.35.1
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • ...
  • 157
  • Older →

HyperKitty Powered by HyperKitty version 1.3.8.