diff mbox series

[alsa-ucm-conf,1/2] bytcr-rt5640: Add support for devices without speakers and/or an internal mic

Message ID 20210109210252.159162-1-hdegoede@redhat.com (mailing list archive)
State New, archived
Headers show
Series [alsa-ucm-conf,1/2] bytcr-rt5640: Add support for devices without speakers and/or an internal mic | expand

Commit Message

Hans de Goede Jan. 9, 2021, 9:02 p.m. UTC
There are kernel patches pending upstream for the bytcr-rt5640 machine-driver
to support devices without speakers and/or an internal mic.

Since the UCM profile already conditionally loads the speaker and
internal-mic codec include files, these will simply get skipped in this
case, so this almost works with the current UCM profile without changes.

The only troublesome part is the ConflictingDevice sections in the codec
HeadPhones.conf and HeadsetMic.conf files, which refer to resp. a "Speaker"
and a "Mic" device. Without any of the speaker or mic codec conf files
being included there will not by any "Speaker" / "Mic" devices leading
to an error while parsing the HeadPhones.conf / HeadsetMic.conf files.

This commit makes the ConflictingDevice section conditional, fixing this.

Cc: Rasmus Porsager <rasmus@beat.dk>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 ucm2/bytcr-rt5640/HiFi-Components.conf | 28 +++++++++++++++++++++-----
 ucm2/bytcr-rt5640/HiFi-LongName.conf   | 28 +++++++++++++++++++++-----
 ucm2/codecs/rt5640/HeadPhones.conf     | 14 ++++++++++---
 ucm2/codecs/rt5640/HeadsetMic.conf     | 14 ++++++++++---
 4 files changed, 68 insertions(+), 16 deletions(-)

Comments

Jaroslav Kysela Jan. 11, 2021, 6:59 p.m. UTC | #1
Dne 09. 01. 21 v 22:02 Hans de Goede napsal(a):
> There are kernel patches pending upstream for the bytcr-rt5640 machine-driver
> to support devices without speakers and/or an internal mic.
> 
> Since the UCM profile already conditionally loads the speaker and
> internal-mic codec include files, these will simply get skipped in this
> case, so this almost works with the current UCM profile without changes.
> 
> The only troublesome part is the ConflictingDevice sections in the codec
> HeadPhones.conf and HeadsetMic.conf files, which refer to resp. a "Speaker"
> and a "Mic" device. Without any of the speaker or mic codec conf files
> being included there will not by any "Speaker" / "Mic" devices leading
> to an error while parsing the HeadPhones.conf / HeadsetMic.conf files.
> 
> This commit makes the ConflictingDevice section conditional, fixing this.

Applied to the ucm repo. Thank you.

					Jaroslav
diff mbox series

Patch

diff --git a/ucm2/bytcr-rt5640/HiFi-Components.conf b/ucm2/bytcr-rt5640/HiFi-Components.conf
index 2ce4f59..a76b42d 100644
--- a/ucm2/bytcr-rt5640/HiFi-Components.conf
+++ b/ucm2/bytcr-rt5640/HiFi-Components.conf
@@ -1,10 +1,16 @@ 
+Define.HaveSpeaker ""
+Define.HaveInternalMic ""
+
 If.spk {
 	Condition {
 		Type String
 		Haystack "${CardComponents}"
 		Needle "cfg-spk:2"
 	}
-	True.Include.spk.File "/codecs/rt5640/Speaker.conf"
+	True {
+		Include.spk.File "/codecs/rt5640/Speaker.conf"
+		Define.HaveSpeaker "yes"
+	}
 }
 
 If.mono {
@@ -13,7 +19,10 @@  If.mono {
 		Haystack "${CardComponents}"
 		Needle "cfg-spk:1"
 	}
-	True.Include.mspk.File "/codecs/rt5640/MonoSpeaker.conf"
+	True {
+		Include.mspk.File "/codecs/rt5640/MonoSpeaker.conf"
+		Define.HaveSpeaker "yes"
+	}
 }
 
 Include.hs.File "/codecs/rt5640/HeadPhones.conf"
@@ -24,7 +33,10 @@  If.dmic1 {
 		Haystack "${CardComponents}"
 		Needle "cfg-mic:dmic1"
 	}
-	True.Include.dmic.File "/codecs/rt5640/DigitalMics.conf"
+	True {
+		Include.dmic.File "/codecs/rt5640/DigitalMics.conf"
+		Define.HaveInternalMic "yes"
+	}
 }
 
 If.in1 {
@@ -33,7 +45,10 @@  If.in1 {
 		Haystack "${CardComponents}"
 		Needle "cfg-mic:in1"
 	}
-	True.Include.mic1.File "/codecs/rt5640/IN1-InternalMic.conf"
+	True {
+		Include.mic1.File "/codecs/rt5640/IN1-InternalMic.conf"
+		Define.HaveInternalMic "yes"
+	}
 }
 
 If.in3 {
@@ -42,7 +57,10 @@  If.in3 {
 		Haystack "${CardComponents}"
 		Needle "cfg-mic:in3"
 	}
-	True.Include.mic3.File "/codecs/rt5640/IN3-InternalMic.conf"
+	True {
+		Include.mic3.File "/codecs/rt5640/IN3-InternalMic.conf"
+		Define.HaveInternalMic "yes"
+	}
 }
 
 Include.hsmic.File "/codecs/rt5640/HeadsetMic.conf"
diff --git a/ucm2/bytcr-rt5640/HiFi-LongName.conf b/ucm2/bytcr-rt5640/HiFi-LongName.conf
index c07f153..6cb5556 100644
--- a/ucm2/bytcr-rt5640/HiFi-LongName.conf
+++ b/ucm2/bytcr-rt5640/HiFi-LongName.conf
@@ -1,10 +1,16 @@ 
+Define.HaveSpeaker ""
+Define.HaveInternalMic ""
+
 If.spk {
 	Condition {
 		Type String
 		Haystack "${CardLongName}"
 		Needle "-stereo-spk"
 	}
-	True.Include.spk.File "/codecs/rt5640/Speaker.conf"
+	True {
+		Include.spk.File "/codecs/rt5640/Speaker.conf"
+		Define.HaveSpeaker "yes"
+	}
 }
 
 If.mono {
@@ -13,7 +19,10 @@  If.mono {
 		Haystack "${CardLongName}"
 		Needle "-mono-spk"
 	}
-	True.Include.mspk.File "/codecs/rt5640/MonoSpeaker.conf"
+	True {
+		Include.mspk.File "/codecs/rt5640/MonoSpeaker.conf"
+		Define.HaveSpeaker "yes"
+	}
 }
 
 Include.hs.File "/codecs/rt5640/HeadPhones.conf"
@@ -24,7 +33,10 @@  If.dmic1 {
 		Haystack "${CardLongName}"
 		Needle "-dmic1-mic"
 	}
-	True.Include.dmic.File "/codecs/rt5640/DigitalMics.conf"
+	True {
+		Include.dmic.File "/codecs/rt5640/DigitalMics.conf"
+		Define.HaveInternalMic "yes"
+	}
 }
 
 If.in1 {
@@ -33,7 +45,10 @@  If.in1 {
 		Haystack "${CardLongName}"
 		Needle "-in1-mic"
 	}
-	True.Include.mic1.File "/codecs/rt5640/IN1-InternalMic.conf"
+	True {
+		Include.mic1.File "/codecs/rt5640/IN1-InternalMic.conf"
+		Define.HaveInternalMic "yes"
+	}
 }
 
 If.in3 {
@@ -42,7 +57,10 @@  If.in3 {
 		Haystack "${CardLongName}"
 		Needle "-in3-mic"
 	}
-	True.Include.mic3.File "/codecs/rt5640/IN3-InternalMic.conf"
+	True {
+		Include.mic3.File "/codecs/rt5640/IN3-InternalMic.conf"
+		Define.HaveInternalMic "yes"
+	}
 }
 
 Include.hsmic.File "/codecs/rt5640/HeadsetMic.conf"
diff --git a/ucm2/codecs/rt5640/HeadPhones.conf b/ucm2/codecs/rt5640/HeadPhones.conf
index 42151d6..b7707e5 100644
--- a/ucm2/codecs/rt5640/HeadPhones.conf
+++ b/ucm2/codecs/rt5640/HeadPhones.conf
@@ -1,9 +1,17 @@ 
 SectionDevice."Headphones" {
 	Comment "Headphones"
 
-	ConflictingDevice [
-		"Speaker"
-	]
+	If.have-spk {
+		Condition {
+			Type String
+			Empty "${var:HaveSpeaker}"
+		}
+		False {
+			ConflictingDevice [
+				"Speaker"
+			]
+		}
+	}
 
 	EnableSequence [
  		cset "name='DAC MIXL INF1 Switch'  on"
diff --git a/ucm2/codecs/rt5640/HeadsetMic.conf b/ucm2/codecs/rt5640/HeadsetMic.conf
index 7a8dfb8..f88b611 100644
--- a/ucm2/codecs/rt5640/HeadsetMic.conf
+++ b/ucm2/codecs/rt5640/HeadsetMic.conf
@@ -1,9 +1,17 @@ 
 SectionDevice."Headset" {
 	Comment "Headset Microphone"
 
-	ConflictingDevice [
-		"Mic"
-	]
+	If.have-mic {
+		Condition {
+			Type String
+			Empty "${var:HaveInternalMic}"
+		}
+		False {
+			ConflictingDevice [
+				"Mic"
+			]
+		}
+	}
 
 	EnableSequence [
 		cset "name='Headset Mic Switch' on"