From a77c0d40d2cca079de8aba2924cb64549b217809 Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Mon, 19 Sep 2022 10:04:19 +0300 Subject: [PATCH] tegra: Add UCM for MAX98089 based LG Optimus 4X HD and Vu Maxim MAX98089 based LG Optimus 4X HD and Vu are powered by NVIDIA Tegra30 SoC. They feature 2-channel speaker, built-in stereo microphone and 4-pin 3.5mm jack for headphones and headset. Fixes: https://github.com/alsa-project/alsa-ucm-conf/pull/291 Tested-by: Andreas Westman Dorcsak # LG P880 T30 Tested-by: Svyatoslav Ryhel # LG P895 T30 Signed-off-by: Svyatoslav Ryhel Signed-off-by: Jaroslav Kysela --- ucm2/Tegra/max98089/lge-x3-HiFi.conf | 148 ++++++++++++++++++ ucm2/Tegra/max98089/lge-x3-VoiceCall.conf | 125 +++++++++++++++ ucm2/Tegra/max98089/lge-x3.conf | 47 ++++++ .../tegra/LG Optimus 4X HD MAX98089.conf | 1 + ucm2/conf.d/tegra/LG Optimus Vu MAX98089.conf | 1 + 5 files changed, 322 insertions(+) create mode 100644 ucm2/Tegra/max98089/lge-x3-HiFi.conf create mode 100644 ucm2/Tegra/max98089/lge-x3-VoiceCall.conf create mode 100644 ucm2/Tegra/max98089/lge-x3.conf create mode 120000 ucm2/conf.d/tegra/LG Optimus 4X HD MAX98089.conf create mode 120000 ucm2/conf.d/tegra/LG Optimus Vu MAX98089.conf diff --git a/ucm2/Tegra/max98089/lge-x3-HiFi.conf b/ucm2/Tegra/max98089/lge-x3-HiFi.conf new file mode 100644 index 00000000..3738d724 --- /dev/null +++ b/ucm2/Tegra/max98089/lge-x3-HiFi.conf @@ -0,0 +1,148 @@ +# Use case Configuration for MAX98089 on LG Optimus 4X HD/Vu P880/P895 + +SectionDevice."Speaker" { + Comment "Speaker" + + ConflictingDevice [ + "Headphones" + ] + + EnableSequence [ + cset "name='Speaker Switch' on" + cset "name='Int Spk Switch' on" + + cset "name='Left SPK Mixer Left DAC1 Switch' on" + cset "name='Left SPK Mixer Left DAC2 Switch' on" + cset "name='Left SPK Mixer Right DAC1 Switch' on" + cset "name='Left SPK Mixer Right DAC2 Switch' on" + ] + + DisableSequence [ + cset "name='Speaker Switch' off" + cset "name='Int Spk Switch' off" + + cset "name='Left SPK Mixer Left DAC1 Switch' off" + cset "name='Left SPK Mixer Left DAC2 Switch' off" + cset "name='Left SPK Mixer Right DAC1 Switch' off" + cset "name='Left SPK Mixer Right DAC2 Switch' off" + ] + + Value { + PlaybackPCM "hw:${CardId}" + PlaybackChannels 2 + PlaybackPriority 300 + + PlaybackMixerElem "Speaker" + } +} + +SectionDevice."Headphones" { + Comment "Headphones" + + ConflictingDevice [ + "Speaker" + ] + + EnableSequence [ + cset "name='Headphone Switch' on" + + cset "name='Left HP Mixer Left DAC1 Switch' on" + cset "name='Left HP Mixer Left DAC2 Switch' on" + cset "name='Right HP Mixer Right DAC1 Switch' on" + cset "name='Right HP Mixer Right DAC2 Switch' on" + ] + + DisableSequence [ + cset "name='Headphone Switch' off" + + cset "name='Left HP Mixer Left DAC1 Switch' off" + cset "name='Left HP Mixer Left DAC2 Switch' off" + cset "name='Right HP Mixer Right DAC1 Switch' off" + cset "name='Right HP Mixer Right DAC2 Switch' off" + ] + + Value { + PlaybackPCM "hw:${CardId}" + PlaybackChannels 2 + PlaybackPriority 100 + + PlaybackMixerElem "Headphone" + + JackControl "Headphone Jack" + } +} + +SectionDevice."Mic1" { + Comment "Internal Microphone" + + ConflictingDevice [ + "Mic2" + ] + + EnableSequence [ + # Main MIC + cset "name='Internal Mic 1 Switch' on" + cset "name='DAI1 ADC Filter' fc=258/fs=16k" + + cset "name='Left ADC Mixer MIC1 Switch' on" + cset "name='Right ADC Mixer MIC1 Switch' on" + + # Secondary MIC + cset "name='Int Mic Switch' on" + cset "name='Internal Mic 2 Switch' on" + + cset "name='Left ADC Mixer MIC2 Switch' on" + cset "name='Right ADC Mixer MIC2 Switch' on" + ] + + DisableSequence [ + # Main MIC + cset "name='Internal Mic 1 Switch' off" + cset "name='DAI1 ADC Filter' off" + + cset "name='Left ADC Mixer MIC1 Switch' off" + cset "name='Right ADC Mixer MIC1 Switch' off" + + # Secondary MIC + cset "name='Int Mic Switch' off" + cset "name='Internal Mic 2 Switch' off" + + cset "name='Left ADC Mixer MIC2 Switch' off" + cset "name='Right ADC Mixer MIC2 Switch' off" + ] + + Value { + CapturePCM "hw:${CardId}" + CaptureChannels 2 + CapturePriority 200 + } +} + +SectionDevice."Mic2" { + Comment "External Microphone" + + ConflictingDevice [ + "Mic1" + ] + + EnableSequence [ + cset "name='Mic Jack Switch' on" + + cset "name='Left ADC Mixer INA1 Switch' on" + cset "name='Right ADC Mixer INA1 Switch' on" + ] + + DisableSequence [ + cset "name='Mic Jack Switch' off" + + cset "name='Left ADC Mixer INA1 Switch' off" + cset "name='Right ADC Mixer INA1 Switch' off" + ] + + Value { + CapturePCM "hw:${CardId}" + CapturePriority 100 + + JackControl "Mic Jack" + } +} diff --git a/ucm2/Tegra/max98089/lge-x3-VoiceCall.conf b/ucm2/Tegra/max98089/lge-x3-VoiceCall.conf new file mode 100644 index 00000000..1634c7b7 --- /dev/null +++ b/ucm2/Tegra/max98089/lge-x3-VoiceCall.conf @@ -0,0 +1,125 @@ +# Use case Configuration for MAX98089 on LG Optimus 4X HD/Vu P880/P895 + +SectionDevice."Speaker" { + Comment "Speaker" + + ConflictingDevice [ + "Earpiece" + ] + + EnableSequence [ + cset "name='Speaker Switch' on" + cset "name='Int Spk Switch' on" + + cset "name='Left SPK Mixer Left DAC1 Switch' on" + cset "name='Left SPK Mixer Left DAC2 Switch' on" + cset "name='Left SPK Mixer Right DAC1 Switch' on" + cset "name='Left SPK Mixer Right DAC2 Switch' on" + ] + + DisableSequence [ + cset "name='Speaker Switch' off" + cset "name='Int Spk Switch' off" + + cset "name='Left SPK Mixer Left DAC1 Switch' off" + cset "name='Left SPK Mixer Left DAC2 Switch' off" + cset "name='Left SPK Mixer Right DAC1 Switch' off" + cset "name='Left SPK Mixer Right DAC2 Switch' off" + ] + + Value { + PlaybackPCM "hw:${CardId}" + PlaybackChannels 2 + PlaybackPriority 100 + + PlaybackMixerElem "Speaker" + } +} + +SectionDevice."Earpiece" { + Comment "Earpiece" + + ConflictingDevice [ + "Speaker" + ] + + EnableSequence [ + cset "name='Receiver Switch' on" + cset "name='Earpiece Switch' on" + + cset "name='Left REC Mixer Left DAC1 Switch' on" + cset "name='Left REC Mixer Left DAC2 Switch' on" + cset "name='Left REC Mixer Right DAC1 Switch' on" + cset "name='Left REC Mixer Right DAC2 Switch' on" + + cset "name='Right REC Mixer Left DAC1 Switch' on" + cset "name='Right REC Mixer Left DAC2 Switch' on" + cset "name='Right REC Mixer Right DAC1 Switch' on" + cset "name='Right REC Mixer Right DAC2 Switch' on" + ] + + DisableSequence [ + cset "name='Receiver Switch' off" + cset "name='Earpiece Switch' off" + + cset "name='Left REC Mixer Left DAC1 Switch' off" + cset "name='Left REC Mixer Left DAC2 Switch' off" + cset "name='Left REC Mixer Right DAC1 Switch' off" + cset "name='Left REC Mixer Right DAC2 Switch' off" + + cset "name='Right REC Mixer Left DAC1 Switch' off" + cset "name='Right REC Mixer Left DAC2 Switch' off" + cset "name='Right REC Mixer Right DAC1 Switch' off" + cset "name='Right REC Mixer Right DAC2 Switch' off" + ] + + Value { + PlaybackPCM "hw:${CardId}" + PlaybackChannels 2 + PlaybackPriority 200 + + PlaybackMixerElem "Receiver" + } +} + +SectionDevice."Mic1" { + Comment "Internal Microphone" + + EnableSequence [ + # Main MIC + cset "name='Internal Mic 1 Switch' on" + cset "name='DAI1 ADC Filter' fc=258/fs=16k" + + cset "name='Left ADC Mixer MIC1 Switch' on" + cset "name='Right ADC Mixer MIC1 Switch' on" + + # Secondary MIC + cset "name='Int Mic Switch' on" + cset "name='Internal Mic 2 Switch' on" + + cset "name='Left ADC Mixer MIC2 Switch' on" + cset "name='Right ADC Mixer MIC2 Switch' on" + ] + + DisableSequence [ + # Main MIC + cset "name='Internal Mic 1 Switch' off" + cset "name='DAI1 ADC Filter' off" + + cset "name='Left ADC Mixer MIC1 Switch' off" + cset "name='Right ADC Mixer MIC1 Switch' off" + + # Secondary MIC + cset "name='Int Mic Switch' off" + cset "name='Internal Mic 2 Switch' off" + + cset "name='Left ADC Mixer MIC2 Switch' off" + cset "name='Right ADC Mixer MIC2 Switch' off" + ] + + Value { + CapturePCM "hw:${CardId}" + CaptureChannels 2 + CapturePriority 200 + } +} diff --git a/ucm2/Tegra/max98089/lge-x3.conf b/ucm2/Tegra/max98089/lge-x3.conf new file mode 100644 index 00000000..994a6065 --- /dev/null +++ b/ucm2/Tegra/max98089/lge-x3.conf @@ -0,0 +1,47 @@ +# Use case Configuration for MAX98089 on LG Optimus 4X HD/Vu P880/P895 + +Syntax 4 + +BootSequence [ + cset "name='MIC1 Volume' 10" + cset "name='MIC1 Boost Volume' 1" + cset "name='MIC2 Volume' 10" + cset "name='MIC2 Boost Volume' 1" + + cset "name='INA Volume' 5" + cset "name='INB Volume' 5" + + cset "name='ADCL Volume' 15" + cset "name='ADCR Volume' 15" + + cset "name='DAI1 Filter Mode' Music" + + cset "name='EQ1 Switch' off" + cset "name='EQ2 Switch' off" + + cset "name='Speaker Switch' off" + cset "name='Int Spk Switch' off" + cset "name='Headphone Switch' off" + cset "name='Earpiece Switch' off" + cset "name='Receiver Switch' off" + + cset "name='Int Mic Switch' off" + cset "name='Internal Mic 1 Switch' off" + cset "name='Internal Mic 2 Switch' off" + cset "name='Mic Jack Switch' off" + + cset "name='Right SPK Mixer Left DAC1 Switch' on" + cset "name='Right SPK Mixer Left DAC2 Switch' on" + cset "name='Right SPK Mixer Right DAC1 Switch' on" + cset "name='Right SPK Mixer Right DAC2 Switch' on" +] + +SectionUseCase."HiFi" { + File "/Tegra/max98089/lge-x3-HiFi.conf" + Comment "Play HiFi quality Music" +} + +SectionUseCase."Voice Call" { + File "/Tegra/max98089/lge-x3-VoiceCall.conf" + Comment "Make a phone call" +} diff --git a/ucm2/conf.d/tegra/LG Optimus 4X HD MAX98089.conf b/ucm2/conf.d/tegra/LG Optimus 4X HD MAX98089.conf new file mode 120000 index 00000000..e569b859 --- /dev/null +++ b/ucm2/conf.d/tegra/LG Optimus 4X HD MAX98089.conf @@ -0,0 +1 @@ +../../Tegra/max98089/lge-x3.conf \ No newline at end of file diff --git a/ucm2/conf.d/tegra/LG Optimus Vu MAX98089.conf b/ucm2/conf.d/tegra/LG Optimus Vu MAX98089.conf new file mode 120000 index 00000000..e569b859 --- /dev/null +++ b/ucm2/conf.d/tegra/LG Optimus Vu MAX98089.conf @@ -0,0 +1 @@ +../../Tegra/max98089/lge-x3.conf \ No newline at end of file