HDA: use device labels
This is huge cleanup using new device labels in 'Syntax 8' to remove a lot of conditions. The future extensions will be simplier. Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
7e08d4e6b0
commit
d2d810a35f
6 changed files with 114 additions and 354 deletions
|
|
@ -1,10 +1,10 @@
|
|||
Syntax 6
|
||||
Syntax 8
|
||||
|
||||
Define.Use "" # a non-empty string to use UCM configuration for HDA devices
|
||||
Define.Done "" # a non-empty string to skip the end error
|
||||
|
||||
Define.AcpCardId "$${find-card:field=name,return=id,regex='^acp(|6[23x]|-pdm-mach)$'}"
|
||||
Define.DeviceMic "Mic"
|
||||
Define.MicType "hda"
|
||||
|
||||
If.dualcodec {
|
||||
Condition {
|
||||
|
|
@ -26,7 +26,7 @@ If.acp {
|
|||
}
|
||||
False {
|
||||
Define.Use y
|
||||
Define.DeviceMic "Mic2"
|
||||
Define.MicType "acp"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
SectionDevice."Mic1" {
|
||||
SectionDevice."Mic:acp" {
|
||||
Comment "Digital Microphone"
|
||||
|
||||
Value {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
# Generic HDA devices for analog I/O
|
||||
|
||||
Define.LineDevice ""
|
||||
Define.spkvol "Speaker"
|
||||
Define.hpvol "Headphone"
|
||||
Define.hpjack "Headphone Jack"
|
||||
|
|
@ -44,16 +43,6 @@ If.lineout {
|
|||
}
|
||||
}
|
||||
|
||||
If.linefront {
|
||||
Condition {
|
||||
Type ControlExists
|
||||
Control "name='Front Playback Volume'"
|
||||
}
|
||||
True.Define {
|
||||
LineDevice "1"
|
||||
}
|
||||
}
|
||||
|
||||
If.hpvol {
|
||||
Condition {
|
||||
Type ControlExists
|
||||
|
|
@ -188,7 +177,7 @@ If.line {
|
|||
Type String
|
||||
Empty "${var:loctl}"
|
||||
}
|
||||
False.SectionDevice."Line${var:LineDevice}" {
|
||||
False.SectionDevice."Line:main" {
|
||||
Comment "Line Output"
|
||||
|
||||
If.conflict {
|
||||
|
|
@ -234,18 +223,12 @@ If.linefront {
|
|||
Type ControlExists
|
||||
Control "name='Front Playback Switch'"
|
||||
}
|
||||
True.SectionDevice."Line2" {
|
||||
True.SectionDevice."Line:front" {
|
||||
Comment "Second Line Output"
|
||||
|
||||
If.line1exists {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:loctl}"
|
||||
}
|
||||
False.ConflictingDevice [
|
||||
"Line${var:LineDevice}"
|
||||
]
|
||||
}
|
||||
ConflictingDevice [
|
||||
"Line:main"
|
||||
]
|
||||
|
||||
EnableSequence [
|
||||
cset "name='Front Playback Switch' on"
|
||||
|
|
|
|||
|
|
@ -1,12 +1,8 @@
|
|||
# Generic handling of analog microphones on HDA devices
|
||||
|
||||
# Microphone related variables on entry
|
||||
# If DMIC is present:
|
||||
# (DeviceDmic == "Mic1")
|
||||
# DeviceMic == "Mic2"
|
||||
#
|
||||
# If DMIC is not present:
|
||||
# DeviceMic == "Mic"
|
||||
# MicType == "hda" # HDA microphone
|
||||
# MicType != "hda" # other microphone type (AMD 'acp', Intel 'sof-dsp')
|
||||
|
||||
# Microphone related variables as used internally
|
||||
# HDA codecs can offer input source selection (mux) via "Input Source" or
|
||||
|
|
@ -21,31 +17,11 @@
|
|||
# This leads to up to maximum of four possible input devices.
|
||||
|
||||
Define.SourceControl ""
|
||||
Define.MicExtraPriority 0
|
||||
Define.MicJackControl ""
|
||||
Define.MicHPJackControl ""
|
||||
Define.MicHSJackControl ""
|
||||
|
||||
# DeviceMic is pre-configured
|
||||
Define.DeviceMicName ""
|
||||
Define.DeviceMicComment ""
|
||||
Define.DeviceMicPriority ""
|
||||
Define.DeviceMicJack ""
|
||||
Define.DeviceMic2 ""
|
||||
Define.DeviceMic2Name ""
|
||||
Define.DeviceMic2Comment ""
|
||||
Define.DeviceMic2Priority ""
|
||||
Define.DeviceMic2Jack ""
|
||||
Define.DeviceMic3 ""
|
||||
Define.DeviceMic3Name ""
|
||||
Define.DeviceMic3Comment ""
|
||||
Define.DeviceMic3Priority ""
|
||||
Define.DeviceMic3Jack ""
|
||||
Define.DeviceMic4 ""
|
||||
Define.DeviceMic4Name ""
|
||||
Define.DeviceMic4Comment ""
|
||||
Define.DeviceMic4Priority ""
|
||||
Define.DeviceMic4Jack ""
|
||||
|
||||
# evaluate the microphone jack name
|
||||
If.micjack {
|
||||
Condition {
|
||||
|
|
@ -119,39 +95,77 @@ If.inputsourcectl {
|
|||
}
|
||||
}
|
||||
|
||||
# Set initial names and priorities for the SectionDevices based on the presence
|
||||
# of DMIC (DMIC is named as 'Mic1')
|
||||
# Extra priority for systems with DMIC presence (MicType != 'hda')
|
||||
If.micdevs {
|
||||
# DeviceMic == "Mic2" indicates DMIC presence
|
||||
Condition {
|
||||
Type String
|
||||
String1 "${var:DeviceMic}"
|
||||
String2 "Mic2"
|
||||
String1 "${var:MicType}"
|
||||
String2 "hda"
|
||||
}
|
||||
True.Define {
|
||||
# DeviceMic "Mic2" - already set (Mic1 is DMIC)
|
||||
DeviceMicPriority 200
|
||||
DeviceMic2 "Mic3"
|
||||
DeviceMic2Priority 300
|
||||
DeviceMic3 "Mic4"
|
||||
DeviceMic3Priority 400
|
||||
DeviceMic4 "Mic5"
|
||||
DeviceMic4Priority 500
|
||||
False.Define.MicExtraPriority 100
|
||||
}
|
||||
|
||||
# Macro HDAMicEnum - Create the SectionDevice for HDA inputs
|
||||
#
|
||||
# Arguments:
|
||||
# DevName - Name of the device (used as SectionDevice."${var:__DevName}"
|
||||
# Enum - Name of the source/input enum
|
||||
# Comment - Long name of the SectionDevice
|
||||
# Jack - Jack control if available
|
||||
# Priority - CapturePriority
|
||||
DefineMacro.HDAMicEnum.SectionDevice."${var:__DevName}" {
|
||||
Comment "${var:__Comment}"
|
||||
|
||||
EnableSequence [
|
||||
cset "name='${var:SourceControl}' '${var:__Enum}'"
|
||||
]
|
||||
|
||||
Value {
|
||||
CapturePriority "${eval:($__Priority+$MicExtraPriority)}"
|
||||
CapturePCM "hw:${CardId}"
|
||||
CaptureMixerElem "Capture"
|
||||
CaptureVolume "Capture Volume"
|
||||
CaptureSwitch "Capture Switch"
|
||||
CaptureMasterElem "${var:__Enum} Boost"
|
||||
}
|
||||
False.Define {
|
||||
DeviceMic "Mic1"
|
||||
DeviceMicPriority 100
|
||||
DeviceMic2 "Mic2"
|
||||
DeviceMic2Priority 200
|
||||
DeviceMic3 "Mic3"
|
||||
DeviceMic3Priority 300
|
||||
DeviceMic4 "Mic4"
|
||||
DeviceMic4Priority 400
|
||||
If.jack {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:-__Jack}"
|
||||
}
|
||||
False.Value.JackControl "${var:__Jack}"
|
||||
}
|
||||
|
||||
ConflictingDevice [
|
||||
"Mic:hda-int"
|
||||
"Mic:hda-hp"
|
||||
"Mic:hda"
|
||||
"Headset:hda-mic"
|
||||
]
|
||||
}
|
||||
|
||||
# Macro HDAMicSwitch - Create the SectionDevice for HDA inputs (switches)
|
||||
#
|
||||
# Arguments:
|
||||
# DevName - Name of the device (used as SectionDevice."${var:__DevName}"
|
||||
# Name - Name of the controls
|
||||
# Comment - Long name of the SectionDevice
|
||||
# Jack - Jack control if available
|
||||
# Priority - CapturePriority
|
||||
DefineMacro.HDAMicSwitch.SectionDevice."${var:__DevName}" {
|
||||
Comment "${var:__Comment}"
|
||||
|
||||
Value {
|
||||
CapturePriority "${eval:($__Priority+$MicExtraPriority)}"
|
||||
CapturePCM "hw:${CardId}"
|
||||
CaptureMixerElem "${var:__Name}"
|
||||
CaptureVolume "${var:__Name} Volume"
|
||||
CaptureSwitch "${var:__Name} Switch"
|
||||
CaptureMasterElem "${var:__Name} Boost"
|
||||
JackControl "${var:__Jack}"
|
||||
}
|
||||
}
|
||||
|
||||
# Scan the Microphone configuration in the system and set the definitions for
|
||||
# the SectionDevice creations for them.
|
||||
If.micsetup {
|
||||
Condition {
|
||||
Type String
|
||||
|
|
@ -160,292 +174,56 @@ If.micsetup {
|
|||
False {
|
||||
# the input selection is via ENUM, the possible types are
|
||||
# Internal, Headset, Headphone and just 'Mic'
|
||||
|
||||
# Internal Mic
|
||||
If.internalmic {
|
||||
Condition {
|
||||
Type ControlExists
|
||||
Control "name='${var:SourceControl}'"
|
||||
ControlEnum "Internal Mic"
|
||||
}
|
||||
True.Define {
|
||||
DeviceMicName "Internal Mic"
|
||||
DeviceMicComment "Internal Stereo Microphone"
|
||||
}
|
||||
Macro.in.HDAMicEnum {
|
||||
DevName "Mic:hda-int"
|
||||
Comment "Internal Stereo Microphone"
|
||||
Enum "Internal Mic"
|
||||
Priority 100
|
||||
}
|
||||
|
||||
# Headphone Mic (Stereo Microphone in Headphone Jack)
|
||||
If.hpmic {
|
||||
Condition {
|
||||
Type ControlExists
|
||||
Control "name='${var:SourceControl}'"
|
||||
ControlEnum "Headphone Mic"
|
||||
}
|
||||
True.If.whichdev {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMicName}"
|
||||
}
|
||||
True.Define {
|
||||
DeviceMicName "Headphone Mic"
|
||||
DeviceMicComment "Headphones Stereo Microphone"
|
||||
DeviceMicJack "${var:MicHPJackControl}"
|
||||
}
|
||||
False.Define {
|
||||
DeviceMic2Name "Headphone Mic"
|
||||
DeviceMic2Comment "Headphones Stereo Microphone"
|
||||
DeviceMic2Jack "${var:MicHPJackControl}"
|
||||
}
|
||||
}
|
||||
Macro.hp.HDAMicEnum {
|
||||
DevName "Mic:hda-hp"
|
||||
Comment "Headphones Stereo Microphone"
|
||||
Enum "Headphone Mic"
|
||||
Priority 200
|
||||
Jack "${var:MicHPJackControl}"
|
||||
}
|
||||
|
||||
# Just 'Mic'
|
||||
If.justmic {
|
||||
Condition {
|
||||
Type ControlExists
|
||||
Control "name='${var:SourceControl}'"
|
||||
ControlEnum "Mic"
|
||||
}
|
||||
True.If.whichdev {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMicName}"
|
||||
}
|
||||
True.Define {
|
||||
DeviceMicName "Mic"
|
||||
DeviceMicComment "Stereo Microphone"
|
||||
DeviceMicJack "${var:MicJackControl}"
|
||||
}
|
||||
False.If.whichdev2 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMic2Name}"
|
||||
}
|
||||
True.Define {
|
||||
DeviceMic2Name "Mic"
|
||||
DeviceMic2Comment "Stereo Microphone"
|
||||
DeviceMic2Jack "${var:MicJackControl}"
|
||||
}
|
||||
False.Define {
|
||||
DeviceMic3Name "Mic"
|
||||
DeviceMic3Comment "Stereo Microphone"
|
||||
DeviceMic3Jack "${var:MicJackControl}"
|
||||
}
|
||||
}
|
||||
}
|
||||
Macro.mi.HDAMicEnum {
|
||||
DevName "Mic:hda"
|
||||
Comment "Stereo Microphone"
|
||||
Enum "Mic"
|
||||
Priority 300
|
||||
Jack "${var:MicJackControl}"
|
||||
}
|
||||
|
||||
# Headset Mono Mic
|
||||
If.hsmic {
|
||||
Condition {
|
||||
Type ControlExists
|
||||
Control "name='${var:SourceControl}'"
|
||||
ControlEnum "Headset Mic"
|
||||
}
|
||||
True.If.whichdev {
|
||||
# Override the DeviceMicX (which is used as
|
||||
# SectionDevice name) for headset mic as per
|
||||
# UCM naming convention, reference:
|
||||
# https://github.com/alsa-project/alsa-lib/blob/master/include/use-case.h
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMicName}"
|
||||
}
|
||||
True.Define {
|
||||
DeviceMic "Headset"
|
||||
DeviceMicName "Headset Mic"
|
||||
DeviceMicComment "Headset Mono Microphone"
|
||||
DeviceMicJack "${var:MicHSJackControl}"
|
||||
}
|
||||
False.If.whichdev2 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMic2Name}"
|
||||
}
|
||||
True.Define {
|
||||
DeviceMic2 "Headset"
|
||||
DeviceMic2Name "Headset Mic"
|
||||
DeviceMic2Comment "Headset Mono Microphone"
|
||||
DeviceMic2Jack "${var:MicHSJackControl}"
|
||||
}
|
||||
False.If.whichdev3 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMic2Name}"
|
||||
}
|
||||
True.Define {
|
||||
DeviceMic3 "Headset"
|
||||
DeviceMic3Name "Headset Mic"
|
||||
DeviceMic3Comment "Headset Mono Microphone"
|
||||
DeviceMic3Jack "${var:MicHSJackControl}"
|
||||
}
|
||||
False.Define {
|
||||
DeviceMic4 "Headset"
|
||||
DeviceMic4Name "Headset Mic"
|
||||
DeviceMic4Comment "Headset Mono Microphone"
|
||||
DeviceMic4Jack "${var:MicHSJackControl}"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Macro.hs.HDAMicEnum {
|
||||
DevName "Headset:hda-mic"
|
||||
Comment "Headset Mono Microphone"
|
||||
Enum "Headset Mic"
|
||||
Priority 400
|
||||
Jack "${var:MicHSJackControl}"
|
||||
}
|
||||
}
|
||||
True {
|
||||
# the input selection is via switches, the possible types are
|
||||
# Mic and Front Mic
|
||||
Define {
|
||||
DeviceMicName "Mic"
|
||||
DeviceMicComment "Stereo Microphone"
|
||||
DeviceMicJack "${var:MicJackControl}"
|
||||
DeviceMicPriority 200
|
||||
Macro.mic.HDAMicSwitch {
|
||||
DevName "Mic:hda"
|
||||
Comment "Stereo Microphone"
|
||||
Name "Mic"
|
||||
Priority 100
|
||||
Jack "${var:MicJackControl}"
|
||||
}
|
||||
|
||||
If.fmic {
|
||||
Condition {
|
||||
Type ControlExists
|
||||
Control "name='Front Mic Playback Switch'"
|
||||
}
|
||||
True.Define {
|
||||
DeviceMic2Name "Front Mic"
|
||||
DeviceMic2Comment "Front Stereo Microphone"
|
||||
DeviceMic2Jack "Front Mic Jack"
|
||||
DeviceMic2Priority 300
|
||||
True.Macro.fmic.HDAMicSwitch {
|
||||
DevName "Mic:hda-front"
|
||||
Comment "Front Stereo Microphone"
|
||||
Name "Front Mic"
|
||||
Priority 200
|
||||
Jack "Front Mic Jack"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Macro HDACaptureDevice - Create the SectionDevice for HDA inputs
|
||||
#
|
||||
# Arguments:
|
||||
# DevName - Name of the device (used as SectionDevice."${var:__DevName}"
|
||||
# MicName - Name of the Microphone
|
||||
# DevComment - Long name of the SectionDevice
|
||||
# JackName - Jack control if available
|
||||
# Priority - CapturePriority
|
||||
# ConflictCondition1 - (string) if not empty, set ConflictingDevice 1
|
||||
# ConflictDev1 - Name of the ConflictingDevice 1
|
||||
# ConflictCondition2 - (string) if not empty, set ConflictingDevice 2
|
||||
# ConflictDev2 - Name of the ConflictingDevice 2
|
||||
# ConflictCondition3 - (string) if not empty, set ConflictingDevice 3
|
||||
# ConflictDev3 - Name of the ConflictingDevice 3
|
||||
DefineMacro.HDACaptureDevice.SectionDevice."${var:__DevName}" {
|
||||
Comment "${var:__DevComment}"
|
||||
|
||||
If.micsetup {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:SourceControl}"
|
||||
}
|
||||
False.EnableSequence [
|
||||
cset "name='${var:SourceControl}' '${var:__MicName}'"
|
||||
]
|
||||
}
|
||||
|
||||
Value {
|
||||
CapturePriority "${var:__Priority}"
|
||||
CapturePCM "hw:${CardId}"
|
||||
CaptureMixerElem "Capture"
|
||||
CaptureVolume "Capture Volume"
|
||||
CaptureSwitch "Capture Switch"
|
||||
CaptureMasterElem "${var:__MicName} Boost"
|
||||
}
|
||||
If.jack {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:__JackName}"
|
||||
}
|
||||
False.Value.JackControl "${var:__JackName}"
|
||||
}
|
||||
|
||||
If.conflict1 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:-__ConflictCondition1}"
|
||||
}
|
||||
False.ConflictingDevice [
|
||||
"${var:-__ConflictDev1}"
|
||||
]
|
||||
}
|
||||
If.conflict2 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:-__ConflictCondition2}"
|
||||
}
|
||||
False.ConflictingDevice [
|
||||
"${var:-__ConflictDev2}"
|
||||
]
|
||||
}
|
||||
If.conflict3 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:-__ConflictCondition3}"
|
||||
}
|
||||
False.ConflictingDevice [
|
||||
"${var:-__ConflictDev3}"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
If.mic1 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMicName}"
|
||||
}
|
||||
False.Macro.0.HDACaptureDevice {
|
||||
DevName "${var:DeviceMic}"
|
||||
MicName "${var:DeviceMicName}"
|
||||
DevComment "${var:DeviceMicComment}"
|
||||
JackName "${var:DeviceMicJack}"
|
||||
Priority "${var:DeviceMicPriority}"
|
||||
ConflictCondition1 "${var:DeviceMic2Name}" ConflictDev1 "${var:DeviceMic2}"
|
||||
ConflictCondition2 "${var:DeviceMic3Name}" ConflictDev2 "${var:DeviceMic3}"
|
||||
ConflictCondition3 "${var:DeviceMic4Name}" ConflictDev3 "${var:DeviceMic4}"
|
||||
}
|
||||
}
|
||||
|
||||
If.mic2 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMic2Name}"
|
||||
}
|
||||
False.Macro.1.HDACaptureDevice {
|
||||
DevName "${var:DeviceMic2}"
|
||||
MicName "${var:DeviceMic2Name}"
|
||||
DevComment "${var:DeviceMic2Comment}"
|
||||
JackName "${var:DeviceMic2Jack}"
|
||||
Priority "${var:DeviceMic2Priority}"
|
||||
ConflictCondition1 "${var:DeviceMic3Name}" ConflictDev1 "${var:DeviceMic3}"
|
||||
ConflictCondition2 "${var:DeviceMic4Name}" ConflictDev2 "${var:DeviceMic4}"
|
||||
}
|
||||
}
|
||||
|
||||
If.mic3 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMic3Name}"
|
||||
}
|
||||
False.Macro.1.HDACaptureDevice {
|
||||
DevName "${var:DeviceMic3}"
|
||||
MicName "${var:DeviceMic3Name}"
|
||||
DevComment "${var:DeviceMic3Comment}"
|
||||
JackName "${var:DeviceMic3Jack}"
|
||||
Priority "${var:DeviceMic3Priority}"
|
||||
ConflictCondition1 "${var:DeviceMic4Name}" ConflictDev1 "${var:DeviceMic4}"
|
||||
}
|
||||
}
|
||||
|
||||
If.mic4 {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceMic4Name}"
|
||||
}
|
||||
False.Macro.1.HDACaptureDevice {
|
||||
DevName "${var:DeviceMic4}"
|
||||
MicName "${var:DeviceMic4Name}"
|
||||
DevComment "${var:DeviceMic4Comment}"
|
||||
JackName "${var:DeviceMic4Jack}"
|
||||
Priority "${var:DeviceMic4Priority}"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@ Include.sof-analog.File "HiFi-sof.conf"
|
|||
If.dmic {
|
||||
Condition {
|
||||
Type String
|
||||
Empty "${var:DeviceDmic}"
|
||||
String1 "${var:MicType}"
|
||||
String2 "sof-dsp"
|
||||
}
|
||||
Before.SectionDevice "${var:DeviceMic}"
|
||||
False.SectionDevice."${var:DeviceDmic}" {
|
||||
True.SectionDevice."Mic:sof-dsp" {
|
||||
Comment "Digital Microphone"
|
||||
|
||||
Value {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
Syntax 7
|
||||
Syntax 8
|
||||
|
||||
Include.led.File "/common/ctl/led.conf"
|
||||
Include.card-init.File "/lib/card-init.conf"
|
||||
Include.dsp-variables.File "dsp.conf"
|
||||
|
||||
Define {
|
||||
DeviceMic "Mic"
|
||||
MicType "hda"
|
||||
DeviceDmic ""
|
||||
Iec61937Pcms1 ""
|
||||
}
|
||||
|
|
@ -24,8 +24,7 @@ If.devdmic {
|
|||
Needle "cfg-dmics:"
|
||||
}
|
||||
True {
|
||||
Define.DeviceDmic "Mic1"
|
||||
Define.DeviceMic "Mic2"
|
||||
Define.MicType "sof-dsp"
|
||||
#
|
||||
# users expect to turn the LED on when only internal
|
||||
# mic is off, but it makes sense to turn this LED
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue