[alsa-devel] [PATCH 1/2] conf/ucm: Add UCM profile for cht-bsw-rt5672 boards

Hans de Goede hdegoede at redhat.com
Tue Sep 3 16:54:23 CEST 2019


Hi,

On 03-09-19 16:09, Pierre-Louis Bossart wrote:
> 
> 
> On 8/31/19 9:58 AM, Hans de Goede wrote:
>> Add an UCM profile for Intel boards with a RT5672 codec.
>>
>> Re-use the existing platform enable and disable sequences for BYT/CHT SST
>> support and add a codecs/rt5672 dir with codec specific enable / disable
>> sequences for the various inputs and outputs.
>>
>> This is partly based on earlier work done here:
>> https://github.com/plbossart/UCM/tree/master/cht-bsw-rt5672
> 
> Thanks for restarting this Hans.
> 
> I can't recall if I did any work here, took default settings from Bard Liao (when he was a Realtek) or if I just took examples from a Chromebook UCM file. I know there's a Dell tablet which uses this codec, but I just can't recall other devices.

I only have the Lenovo Thinkpad 8 with this codec.

> Also how does the selection of the configs work, I don't see the same thing as in bytcr_rt5640/51 to play with the card long name and quirks. Do you expect the user to select the 'right' configs based on experimental trial-and-error.

Like with the chtrt5645 and chtnau8824 there is no need for any
kernel side quirks depending on the input/output config.

So the plan is to have a default profile which
allows selecting all possible inputs / outputs (including
ones not present) and then have DMI name based profiles,
like the profile added for the Lenovo Thinkpad 8 in the
second patch in this series, which only include the
relevant inputs / outputs for that specific device
(as we are doing already for the chtrt5645 and chtnau8824
profiles)

Regards,

Hans

> 
>>
>> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
>> ---
>>   configure.ac                                  |  2 +
>>   src/conf/ucm/Makefile.am                      |  1 +
>>   src/conf/ucm/cht-bsw-rt5672/HiFi.conf         | 27 +++++++++++
>>   src/conf/ucm/cht-bsw-rt5672/Makefile.am       |  4 ++
>>   .../ucm/cht-bsw-rt5672/cht-bsw-rt5672.conf    |  6 +++
>>   src/conf/ucm/codecs/Makefile.am               |  1 +
>>   src/conf/ucm/codecs/rt5672/DMIC1.conf         | 28 +++++++++++
>>   src/conf/ucm/codecs/rt5672/DMIC2.conf         | 28 +++++++++++
>>   src/conf/ucm/codecs/rt5672/EnableSeq.conf     | 48 +++++++++++++++++++
>>   src/conf/ucm/codecs/rt5672/HeadPhones.conf    | 23 +++++++++
>>   src/conf/ucm/codecs/rt5672/HeadsetMic.conf    | 38 +++++++++++++++
>>   src/conf/ucm/codecs/rt5672/Makefile.am        |  5 ++
>>   src/conf/ucm/codecs/rt5672/MonoSpeaker.conf   | 26 ++++++++++
>>   src/conf/ucm/codecs/rt5672/Speaker.conf       | 22 +++++++++
>>   14 files changed, 259 insertions(+)
>>   create mode 100644 src/conf/ucm/cht-bsw-rt5672/HiFi.conf
>>   create mode 100644 src/conf/ucm/cht-bsw-rt5672/Makefile.am
>>   create mode 100644 src/conf/ucm/cht-bsw-rt5672/cht-bsw-rt5672.conf
>>   create mode 100644 src/conf/ucm/codecs/rt5672/DMIC1.conf
>>   create mode 100644 src/conf/ucm/codecs/rt5672/DMIC2.conf
>>   create mode 100644 src/conf/ucm/codecs/rt5672/EnableSeq.conf
>>   create mode 100644 src/conf/ucm/codecs/rt5672/HeadPhones.conf
>>   create mode 100644 src/conf/ucm/codecs/rt5672/HeadsetMic.conf
>>   create mode 100644 src/conf/ucm/codecs/rt5672/Makefile.am
>>   create mode 100644 src/conf/ucm/codecs/rt5672/MonoSpeaker.conf
>>   create mode 100644 src/conf/ucm/codecs/rt5672/Speaker.conf
>>
>> diff --git a/configure.ac b/configure.ac
>> index 2e955760..9ccca7aa 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -741,6 +741,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
>>         src/conf/ucm/bytcr-rt5651-stereo-spk-in1-mic/Makefile \
>>         src/conf/ucm/bytcr-rt5651-stereo-spk-in2-mic/Makefile \
>>         src/conf/ucm/bytcr-rt5651-stereo-spk-in12-mic/Makefile \
>> +      src/conf/ucm/cht-bsw-rt5672/Makefile \
>>         src/conf/ucm/chtnau8824/Makefile \
>>         src/conf/ucm/chtrt5645/Makefile \
>>         src/conf/ucm/chtrt5645-mono-speaker-analog-mic/Makefile \
>> @@ -772,6 +773,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
>>         src/conf/ucm/codecs/rt5640/Makefile \
>>         src/conf/ucm/codecs/rt5645/Makefile \
>>         src/conf/ucm/codecs/rt5651/Makefile \
>> +      src/conf/ucm/codecs/rt5672/Makefile \
>>         src/conf/ucm/platforms/Makefile \
>>         src/conf/ucm/platforms/bytcr/Makefile \
>>         src/conf/topology/Makefile \
>> diff --git a/src/conf/ucm/Makefile.am b/src/conf/ucm/Makefile.am
>> index 02257048..2ed4e1a3 100644
>> --- a/src/conf/ucm/Makefile.am
>> +++ b/src/conf/ucm/Makefile.am
>> @@ -25,6 +25,7 @@ bytcr-rt5651-stereo-spk-dmic-mic \
>>   bytcr-rt5651-stereo-spk-in1-mic \
>>   bytcr-rt5651-stereo-spk-in2-mic \
>>   bytcr-rt5651-stereo-spk-in12-mic \
>> +cht-bsw-rt5672 \
>>   chtnau8824 \
>>   chtrt5645 \
>>   chtrt5645-mono-speaker-analog-mic \
>> diff --git a/src/conf/ucm/cht-bsw-rt5672/HiFi.conf b/src/conf/ucm/cht-bsw-rt5672/HiFi.conf
>> new file mode 100644
>> index 00000000..b83099d8
>> --- /dev/null
>> +++ b/src/conf/ucm/cht-bsw-rt5672/HiFi.conf
>> @@ -0,0 +1,27 @@
>> +# Adapted from https://github.com/plbossart/UCM/tree/master/cht-bsw-rt5672
>> +
>> +SectionVerb {
>> +    EnableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        <platforms/bytcr/PlatformEnableSeq.conf>
>> +        <codecs/rt5672/EnableSeq.conf>
>> +    ]
>> +
>> +    DisableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        <platforms/bytcr/PlatformDisableSeq.conf>
>> +    ]
>> +
>> +    Value {
>> +        PlaybackPCM "hw:chtbswrt5672"
>> +        CapturePCM "hw:chtbswrt5672"
>> +    }
>> +}
>> +
>> +<codecs/rt5672/Speaker.conf>
>> +<codecs/rt5672/MonoSpeaker.conf>
>> +<codecs/rt5672/HeadPhones.conf>
>> +
>> +<codecs/rt5672/DMIC1.conf>
>> +<codecs/rt5672/DMIC2.conf>
>> +<codecs/rt5672/HeadsetMic.conf>
>> diff --git a/src/conf/ucm/cht-bsw-rt5672/Makefile.am b/src/conf/ucm/cht-bsw-rt5672/Makefile.am
>> new file mode 100644
>> index 00000000..c3d557fa
>> --- /dev/null
>> +++ b/src/conf/ucm/cht-bsw-rt5672/Makefile.am
>> @@ -0,0 +1,4 @@
>> +alsaconfigdir = @ALSA_CONFIG_DIR@
>> +ucmdir = $(alsaconfigdir)/ucm/cht-bsw-rt5672
>> +ucm_DATA = cht-bsw-rt5672.conf HiFi.conf
>> +EXTRA_DIST = $(ucm_DATA)
>> diff --git a/src/conf/ucm/cht-bsw-rt5672/cht-bsw-rt5672.conf b/src/conf/ucm/cht-bsw-rt5672/cht-bsw-rt5672.conf
>> new file mode 100644
>> index 00000000..c79024d9
>> --- /dev/null
>> +++ b/src/conf/ucm/cht-bsw-rt5672/cht-bsw-rt5672.conf
>> @@ -0,0 +1,6 @@
>> +# Adapted from https://github.com/plbossart/UCM/tree/master/cht-bsw-rt5672
>> +
>> +SectionUseCase."HiFi" {
>> +    File "HiFi.conf"
>> +    Comment "Play HiFi quality Music"
>> +}
>> diff --git a/src/conf/ucm/codecs/Makefile.am b/src/conf/ucm/codecs/Makefile.am
>> index 5987b9cf..17c4ebf9 100644
>> --- a/src/conf/ucm/codecs/Makefile.am
>> +++ b/src/conf/ucm/codecs/Makefile.am
>> @@ -4,4 +4,5 @@ es8316 \
>>   rt5640 \
>>   rt5645 \
>>   rt5651 \
>> +rt5672 \
>>   nau8824
>> diff --git a/src/conf/ucm/codecs/rt5672/DMIC1.conf b/src/conf/ucm/codecs/rt5672/DMIC1.conf
>> new file mode 100644
>> index 00000000..9a8db1a5
>> --- /dev/null
>> +++ b/src/conf/ucm/codecs/rt5672/DMIC1.conf
>> @@ -0,0 +1,28 @@
>> +SectionDevice."DigitalMic-DMIC1" {
>> +    Comment "Internal Digital Microphone on DMIC1"
>> +
>> +    ConflictingDevice [
>> +        "DigitalMic-DMIC2"
>> +        "HeadsetMic"
>> +    ]
>> +
>> +    EnableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Int Mic Switch' on"
>> +        cset "name='Stereo1 DMIC Mux' DMIC1"
>> +        cset "name='Stereo1 ADC 2 Mux' DMIC"
>> +        cset "name='Sto1 ADC MIXL ADC2 Switch' on"
>> +        cset "name='Sto1 ADC MIXR ADC2 Switch' on"
>> +    ]
>> +
>> +    DisableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Int Mic Switch' off"
>> +        cset "name='Sto1 ADC MIXL ADC2 Switch' off"
>> +        cset "name='Sto1 ADC MIXR ADC2 Switch' off"
>> +    ]
>> +
>> +    Value {
>> +        CaptureChannels 2
>> +    }
>> +}
>> diff --git a/src/conf/ucm/codecs/rt5672/DMIC2.conf b/src/conf/ucm/codecs/rt5672/DMIC2.conf
>> new file mode 100644
>> index 00000000..b960436e
>> --- /dev/null
>> +++ b/src/conf/ucm/codecs/rt5672/DMIC2.conf
>> @@ -0,0 +1,28 @@
>> +SectionDevice."DigitalMic-DMIC2" {
>> +    Comment "Internal Digital Microphone on DMIC2"
>> +
>> +    ConflictingDevice [
>> +        "DigitalMic-DMIC1"
>> +        "HeadsetMic"
>> +    ]
>> +
>> +    EnableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Int Mic Switch' on"
>> +        cset "name='Stereo1 DMIC Mux' DMIC2"
>> +        cset "name='Stereo1 ADC 2 Mux' DMIC"
>> +        cset "name='Sto1 ADC MIXL ADC2 Switch' on"
>> +        cset "name='Sto1 ADC MIXR ADC2 Switch' on"
>> +    ]
>> +
>> +    DisableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Int Mic Switch' off"
>> +        cset "name='Sto1 ADC MIXL ADC2 Switch' off"
>> +        cset "name='Sto1 ADC MIXR ADC2 Switch' off"
>> +    ]
>> +
>> +    Value {
>> +        CaptureChannels 2
>> +    }
>> +}
>> diff --git a/src/conf/ucm/codecs/rt5672/EnableSeq.conf b/src/conf/ucm/codecs/rt5672/EnableSeq.conf
>> new file mode 100644
>> index 00000000..bd4f357c
>> --- /dev/null
>> +++ b/src/conf/ucm/codecs/rt5672/EnableSeq.conf
>> @@ -0,0 +1,48 @@
>> +# Playback (I2S1)
>> +
>> +# common
>> +cset "name='DAC1 L Mux' IF1 DAC"
>> +cset "name='DAC1 R Mux' IF1 DAC"
>> +cset "name='DAC1 MIXL DAC1 Switch' on"
>> +cset "name='DAC1 MIXR DAC1 Switch' on"
>> +cset "name='Stereo DAC MIXL DAC L1 Switch' on"
>> +cset "name='Stereo DAC MIXL DAC R1 Switch' off"
>> +cset "name='Stereo DAC MIXR DAC R1 Switch' on"
>> +cset "name='Stereo DAC MIXR DAC L1 Switch' off"
>> +
>> +# speaker
>> +cset "name='PDM1 L Mux' Stereo DAC"
>> +cset "name='PDM1 R Mux' Stereo DAC"
>> +
>> +# headphone
>> +cset "name='HPOVOL MIXL DAC1 Switch' on"
>> +cset "name='HPOVOL MIXR DAC1 Switch' on"
>> +cset "name='HPO MIX HPVOL Switch' on"
>> +
>> +# line out
>> +# cset "name='OUT MIXL DAC L1 Switch' on"
>> +# cset "name='OUT MIXR DAC R1 Switch' on"
>> +# cset "name='LOUT MIX OUTMIX L Switch' on"
>> +# cset "name='LOUT MIX OUTMIX R Switch' on"
>> +
>> +# 47=0dB, 0.375 dB/step
>> +cset "name='ADC Capture Volume' 47"
>> +cset "name='ADC Capture Switch' on"
>> +
>> +# Headset mic is quite soft, boost it a bit, 1 = 20dB which is the first
>> +# available boost step
>> +cset "name='IN1 Boost Volume' 1"
>> +
>> +# Start with all outputs / inputs disabled
>> +cset "name='Ext Spk Switch' off"
>> +cset "name='Headphone Switch' off"
>> +cset "name='Int Mic Switch' off"
>> +cset "name='Headset Mic Switch' off"
>> +cset "name='Sto1 ADC MIXL ADC1 Switch' off"
>> +cset "name='Sto1 ADC MIXR ADC1 Switch' off"
>> +cset "name='Sto1 ADC MIXL ADC2 Switch' off"
>> +cset "name='Sto1 ADC MIXR ADC2 Switch' off"
>> +cset "name='RECMIXL BST1 Switch' off"
>> +cset "name='RECMIXR BST1 Switch' off"
>> +cset "name='RECMIXL BST2 Switch' off"
>> +cset "name='RECMIXR BST2 Switch' off"
>> diff --git a/src/conf/ucm/codecs/rt5672/HeadPhones.conf b/src/conf/ucm/codecs/rt5672/HeadPhones.conf
>> new file mode 100644
>> index 00000000..cb8aad2d
>> --- /dev/null
>> +++ b/src/conf/ucm/codecs/rt5672/HeadPhones.conf
>> @@ -0,0 +1,23 @@
>> +SectionDevice."Headphones" {
>> +    Comment "Headphones"
>> +
>> +    ConflictingDevice [
>> +        "Speaker"
>> +        "MonoSpeaker"
>> +    ]
>> +
>> +    EnableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Headphone Switch' on"
>> +    ]
>> +
>> +    DisableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Headphone Switch' off"
>> +    ]
>> +
>> +    Value {
>> +        PlaybackChannels "2"
>> +        JackControl "Headphone Jack"
>> +    }
>> +}
>> diff --git a/src/conf/ucm/codecs/rt5672/HeadsetMic.conf b/src/conf/ucm/codecs/rt5672/HeadsetMic.conf
>> new file mode 100644
>> index 00000000..cc6d8d56
>> --- /dev/null
>> +++ b/src/conf/ucm/codecs/rt5672/HeadsetMic.conf
>> @@ -0,0 +1,38 @@
>> +SectionDevice."HeadsetMic" {
>> +    Comment "Headset Microphone"
>> +
>> +    ConflictingDevice [
>> +        "DigitalMic-DMIC1"
>> +        "DigitalMic-DMIC2"
>> +    ]
>> +
>> +    EnableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Headset Mic Switch' on"
>> +            cset "name='RECMIXL BST1 Switch' on"
>> +        cset "name='RECMIXR BST1 Switch' on"
>> +        cset "name='Sto1 ADC MIXL ADC1 Switch' on"
>> +        cset "name='Sto1 ADC MIXR ADC1 Switch' on"
>> +        # For unknown reasons the headset mic sound is only recorded
>> +        # on the left channel, we tweak the data-stream reception to
>> +        # use the left samples for both slots, so that we get a stereo
>> +        # stream with the mic sound on both channels
>> +        cset "name='codec_in rx deinterleaver codec_in0_1' 1"
>> +    ]
>> +
>> +    DisableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Headset Mic Switch' off"
>> +            cset "name='RECMIXL BST1 Switch' off"
>> +        cset "name='RECMIXR BST1 Switch' off"
>> +        cset "name='Sto1 ADC MIXL ADC1 Switch' off"
>> +        cset "name='Sto1 ADC MIXR ADC1 Switch' off"
>> +        # Undo data-stream reception mono-mix workaround
>> +        cset "name='codec_in rx deinterleaver codec_in0_1' 2"
>> +    ]
>> +
>> +    Value {
>> +        CaptureChannels "2"
>> +        JackControl "Headset Mic Jack"
>> +    }
>> +}
>> diff --git a/src/conf/ucm/codecs/rt5672/Makefile.am b/src/conf/ucm/codecs/rt5672/Makefile.am
>> new file mode 100644
>> index 00000000..feba0b76
>> --- /dev/null
>> +++ b/src/conf/ucm/codecs/rt5672/Makefile.am
>> @@ -0,0 +1,5 @@
>> +alsaconfigdir = @ALSA_CONFIG_DIR@
>> +ucmdir = $(alsaconfigdir)/ucm/codecs/rt5672
>> +ucm_DATA = DMIC1.conf DMIC2.conf EnableSeq.conf HeadPhones.conf \
>> +       HeadsetMic.conf MonoSpeaker.conf Speaker.conf
>> +EXTRA_DIST = $(ucm_DATA)
>> diff --git a/src/conf/ucm/codecs/rt5672/MonoSpeaker.conf b/src/conf/ucm/codecs/rt5672/MonoSpeaker.conf
>> new file mode 100644
>> index 00000000..828a1154
>> --- /dev/null
>> +++ b/src/conf/ucm/codecs/rt5672/MonoSpeaker.conf
>> @@ -0,0 +1,26 @@
>> +SectionDevice."MonoSpeaker" {
>> +    Comment "Mono Speaker"
>> +
>> +    ConflictingDevice [
>> +        "Speaker"
>> +        "Headphones"
>> +    ]
>> +
>> +    EnableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Stereo DAC MIXR DAC R1 Switch' off"
>> +        cset "name='Stereo DAC MIXL DAC R1 Switch' on"
>> +        cset "name='Ext Spk Switch' on"
>> +    ]
>> +
>> +    DisableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Ext Spk Switch' off"
>> +        cset "name='Stereo DAC MIXL DAC R1 Switch' off"
>> +        cset "name='Stereo DAC MIXR DAC R1 Switch' on"
>> +    ]
>> +
>> +    Value {
>> +        PlaybackChannels "2"
>> +    }
>> +}
>> diff --git a/src/conf/ucm/codecs/rt5672/Speaker.conf b/src/conf/ucm/codecs/rt5672/Speaker.conf
>> new file mode 100644
>> index 00000000..f9291e53
>> --- /dev/null
>> +++ b/src/conf/ucm/codecs/rt5672/Speaker.conf
>> @@ -0,0 +1,22 @@
>> +SectionDevice."Speaker" {
>> +    Comment "Speakers"
>> +
>> +    ConflictingDevice [
>> +        "MonoSpeaker"
>> +        "Headphones"
>> +    ]
>> +
>> +    EnableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Ext Spk Switch' on"
>> +    ]
>> +
>> +    DisableSequence [
>> +        cdev "hw:chtbswrt5672"
>> +        cset "name='Ext Spk Switch' off"
>> +    ]
>> +
>> +    Value {
>> +        PlaybackChannels "2"
>> +    }
>> +}
>>


More information about the Alsa-devel mailing list