# command-line sequence to switch playback/capture
# alsaucm -c cht-bsw-rt5672 set _verb HiFi set _enadev Headphones
# alsaucm -c cht-bsw-rt5672 set _verb HiFi set _enadev Speaker
# alsaucm -c cht-bsw-rt5672 set _verb HiFi set _enadev MonoSpeaker
# alsaucm -c cht-bsw-rt5672 set _verb HiFi set _enadev HeadsetMic
# alsaucm -c cht-bsw-rt5672 set _verb HiFi set _enadev DMIC1
# alsaucm -c cht-bsw-rt5672 set _verb HiFi set _enadev DMIC2

SectionVerb {
    
    Value {
        TQ "HiFi"
        PlaybackPCM "hw:chtbswrt5672"
        CapturePCM "hw:chtbswrt5672"
    }
    
    EnableSequence [
        cdev "hw:chtbswrt5672"
        
        # Mixer
        
        # compress
        cset "name='media0_in Gain 0 Switch' on"
        cset "name='media0_in Gain 0 Volume' 0"

        # normal
        cset "name='media1_in Gain 0 Switch' on"
        cset "name='media1_in Gain 0 Volume' 0"

        # swm loopback
        cset "name='media2_in Gain 0 Switch' off"
        cset "name='media2_in Gain 0 Volume' 0%"

        # deep buffer
        cset "name='media3_in Gain 0 Switch' on"
        cset "name='media3_in Gain 0 Volume' 0"

        cset "name='media0_out mix 0 media0_in Switch' on"
        cset "name='media0_out mix 0 media1_in Switch' on"
        cset "name='media0_out mix 0 media2_in Switch' off"
        cset "name='media0_out mix 0 media3_in Switch' on"

        cset "name='media1_out mix 0 media0_in Switch' off"
        cset "name='media1_out mix 0 media1_in Switch' off"
        cset "name='media1_out mix 0 media2_in Switch' off"
        cset "name='media1_out mix 0 media3_in Switch' off"

        cset "name='pcm0_in Gain 0 Switch' on"
        cset "name='pcm0_in Gain 0 Volume' 0"

        cset "name='pcm1_in Gain 0 Switch' off"
        cset "name='pcm1_in Gain 0 Volume' 0%"

        # codec0_out settings (used if ssp2 is connected to aif1)
        cset "name='codec_out0 mix 0 codec_in0 Switch' off"
        cset "name='codec_out0 mix 0 codec_in1 Switch' off"
        cset "name='codec_out0 mix 0 media_loop1_in Switch' off"
        cset "name='codec_out0 mix 0 media_loop2_in Switch' off"
        cset "name='codec_out0 mix 0 pcm0_in Switch' on"
        cset "name='codec_out0 mix 0 pcm1_in Switch' off"
        cset "name='codec_out0 mix 0 sprot_loop_in Switch' off"
        cset "name='codec_out0 Gain 0 Switch' on"
        cset "name='codec_out0 Gain 0 Volume' 0"

        # modem_out settings (used if ssp0 is connected to aif2)
        cset "name='modem_out mix 0 codec_in0 Switch' off"
        cset "name='modem_out mix 0 codec_in1 Switch' off"
        cset "name='modem_out mix 0 media_loop1_in Switch' off"
        cset "name='modem_out mix 0 media_loop2_in Switch' off"
        cset "name='modem_out mix 0 pcm0_in Switch' on"
        cset "name='modem_out mix 0 pcm1_in Switch' off"
        cset "name='modem_out mix 0 sprot_loop_in Switch' off"
        cset "name='modem_out Gain 0 Switch' on"
        cset "name='modem_out Gain 0 Volume' 0"

        # input used when SSP2 is connected
        cset "name='codec_in0 Gain 0 Switch' on"
        cset "name='codec_in0 Gain 0 Volume' 0"

        # input used when SSP0 is connected
        cset "name='modem_in Gain 0 Switch' on"
        cset "name='modem_in Gain 0 Volume' 0"

        cset "name='pcm1_out mix 0 codec_in0 Switch' on"
        cset "name='pcm1_out mix 0 modem_in Switch' on"
        cset "name='pcm1_out mix 0 codec_in1 Switch' off"
        cset "name='pcm1_out mix 0 media_loop1_in Switch' off"
        cset "name='pcm1_out mix 0 media_loop2_in Switch' off"
        cset "name='pcm1_out mix 0 pcm0_in Switch' off"
        cset "name='pcm1_out mix 0 pcm1_in Switch' off"
        cset "name='pcm1_out mix 0 sprot_loop_in Switch' off"

        cset "name='pcm1_out Gain 0 Switch' on"
        cset "name='pcm1_out Gain 0 Volume' 0"

        # disable codec_out1
        cset "name='codec_out1 mix 0 codec_in0 Switch' off"
        cset "name='codec_out1 mix 0 codec_in1 Switch' off"
        cset "name='codec_out1 mix 0 media_loop1_in Switch' off"
        cset "name='codec_out1 mix 0 media_loop2_in Switch' off"
        cset "name='codec_out1 mix 0 pcm0_in Switch' off"
        cset "name='codec_out1 mix 0 pcm1_in Switch' off"
        cset "name='codec_out1 mix 0 sprot_loop_in Switch' off"
        cset "name='codec_out1 Gain 0 Switch' off"
        cset "name='codec_out1 Gain 0 Volume' 0%"

        # disable codec_in1
        cset "name='codec_in1 Gain 0 Switch' off"
        cset "name='codec_in1 Gain 0 Volume' 0%"

        # disable all loops
        cset "name='media_loop1_out mix 0 codec_in0 Switch' off"
        cset "name='media_loop1_out mix 0 codec_in1 Switch' off"
        cset "name='media_loop1_out mix 0 media_loop1_in Switch' off"
        cset "name='media_loop1_out mix 0 media_loop2_in Switch' off"
        cset "name='media_loop1_out mix 0 pcm0_in Switch' off"
        cset "name='media_loop1_out mix 0 pcm1_in Switch' off"
        cset "name='media_loop1_out mix 0 sprot_loop_in Switch' off"

        cset "name='media_loop2_out mix 0 codec_in0 Switch' off"
        cset "name='media_loop2_out mix 0 codec_in1 Switch' off"
        cset "name='media_loop2_out mix 0 media_loop1_in Switch' off"
        cset "name='media_loop2_out mix 0 media_loop2_in Switch' off"
        cset "name='media_loop2_out mix 0 pcm0_in Switch' off"
        cset "name='media_loop2_out mix 0 pcm1_in Switch' off"
        cset "name='media_loop2_out mix 0 sprot_loop_in Switch' off"

        cset "name='sprot_loop_out mix 0 codec_in0 Switch' off"
        cset "name='sprot_loop_out mix 0 codec_in1 Switch' off"
        cset "name='sprot_loop_out mix 0 media_loop1_in Switch' off"
        cset "name='sprot_loop_out mix 0 media_loop2_in Switch' off"
        cset "name='sprot_loop_out mix 0 pcm0_in Switch' off"
        cset "name='sprot_loop_out mix 0 pcm1_in Switch' off"
        cset "name='sprot_loop_out mix 0 sprot_loop_in Switch' off"
        
        # 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 MIXR DAC R1 Switch' on"

        # 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"
    ]

    DisableSequence [
        cdev "hw:chtbswrt5672"

        # disable audio output path
        cset "name='codec_out1 mix 0 pcm0_in Switch' off"
        cset "name='media0_out mix 0 media1_in Switch' off"

        cset "name='media1_in Gain 0 Switch' off"
        cset "name='pcm0_in Gain 0 Switch' off"
        cset "name='codec_out1 Gain 0 Switch' off"

        # disable audio input path
        cset "name='pcm1_out mix 0 media_loop2_in Switch' off"
        cset "name='media_loop2_out mix 0 codec_in0 Switch' off"

        cset "name='media_loop2_out Gain 0 Switch' off"
        cset "name='pcm1_out Gain 0 Switch' off"
        cset "name='codec_in0 Gain 0 Switch' off"
    ]
	
}

SectionDevice."Speaker" {
    Comment "Speaker"

    Value {
        PlaybackChannels "2"
    }

    ConflictingDevice [
        "Headphones"
	"MonoSpeaker"
    ]

    EnableSequence [
        cdev "hw:chtbswrt5672"
        cset "name='Ext Spk Switch' on"
    ]

    DisableSequence [
        cdev "hw:chtbswrt5672"
        cset "name='Ext Spk Switch' off"
    ]
}

SectionDevice."MonoSpeaker" {
    Comment "MonoSpeaker"

    Value {
        PlaybackChannels "2"
    }

    ConflictingDevice [
        "Headphones"
	"Speaker"
    ]

    EnableSequence [
        cdev "hw:chtbswrt5672"
        cset "name='Ext Spk Switch' on"
	cset "name='Stereo DAC MIXL DAC R1 Switch' on"
    ]

    DisableSequence [
        cdev "hw:chtbswrt5672"
        cset "name='Ext Spk Switch' off"
	cset "name='Stereo DAC MIXL DAC R1 Switch' off"
    ]
}

SectionDevice."Headphones" {
    Comment "Headphones"

    Value {
        PlaybackChannels "2"
        JackControl "Headphone Jack"
    }

    ConflictingDevice [
        "Speaker"
	"MonoSpeaker"
    ]

    EnableSequence [
        cdev "hw:chtbswrt5672"
        cset "name='Headphone Switch' on"
    ]

    DisableSequence [
        cdev "hw:chtbswrt5672"
        cset "name='Headphone Switch' off"
    ]
}

SectionDevice."DMIC1" {
    Comment "DMIC1 Internal Microphones"

    Value {
        CaptureChannels "2"
    }

    ConflictingDevice [
        "HeadsetMic"
        "DMIC2"
    ]
    
    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"
        cset "name='Sto1 ADC MIXL ADC1 Switch' off"
        cset "name='Sto1 ADC MIXR ADC1 Switch' off"
    ]

    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"
    ]
}

SectionDevice."DMIC2" {
    Comment "DMIC2 Internal Microphones"

    Value {
        CaptureChannels "2"
    }

    ConflictingDevice [
        "HeadsetMic"
        "DMIC1"
    ]

    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"
        cset "name='Sto1 ADC MIXL ADC1 Switch' off"
        cset "name='Sto1 ADC MIXR ADC1 Switch' off"
    ]

    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"
    ]
}

SectionDevice."HeadsetMic" {
         Comment "Headset Mic"
	 
	 Value {
		JackControl "Headset Mic Jack"
		#FIXME CaptureControl "MIC2"
	}

	ConflictingDevice [
		"DMIC1"
		"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='Mono ADC L1 Mux' ADC1"
		cset "name='Mono ADC R1 Mux' ADC1"
		cset "name='Mono ADC MIXL ADC2 Switch' off"
       		cset "name='Mono ADC MIXR ADC2 Switch' off"
        	cset "name='Mono ADC MIXL ADC1 Switch' on"
       		cset "name='Mono ADC MIXR ADC1 Switch' on"
	]

	DisableSequence [
		cdev "hw:chtbswrt5672"

		cset "name='Headset Mic Switch' off"
        	cset "name='RECMIXL BST1 Switch' off"
		cset "name='RECMIXR BST1 Switch' off"
		cset "name='Mono ADC L1 Mux' ADC1"
		cset "name='Mono ADC R1 Mux' ADC1"
		cset "name='Mono ADC MIXL ADC2 Switch' on"
       		cset "name='Mono ADC MIXR ADC2 Switch' on"
        	cset "name='Mono ADC MIXL ADC1 Switch' off"
       		cset "name='Mono ADC MIXR ADC1 Switch' off"
	]

	Value {
		CaptureChannels 2
	}
}
