diff mbox series

[alsa-ucm-conf,4/5] bytcr-rt5640: Add support for a second headphones output

Message ID 20210929091144.4778-5-hdegoede@redhat.com (mailing list archive)
State New, archived
Headers show
Series bytcr-rt5640: Fixes and improvements | expand

Commit Message

Hans de Goede Sept. 29, 2021, 9:11 a.m. UTC
Some devices (HP Elitepad 1000 G2) have a second headphones output
(1 on the dock, 2nd on the tablet itself) which is implemented through
the line-out output of the codec combined with an external hp-amp.

The kernel has recently gotten support for this setup and will
advertise this to userspace by adding cfg-hp2:lineout to the
components string, add support for this.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 ucm2/bytcr-rt5640/HiFi-Components.conf |  9 +++++
 ucm2/bytcr-rt5640/HiFi.conf            | 18 ++++++++++
 ucm2/codecs/rt5640/HeadPhones2.conf    | 46 ++++++++++++++++++++++++++
 3 files changed, 73 insertions(+)
 create mode 100644 ucm2/codecs/rt5640/HeadPhones2.conf
diff mbox series

Patch

diff --git a/ucm2/bytcr-rt5640/HiFi-Components.conf b/ucm2/bytcr-rt5640/HiFi-Components.conf
index 39c7f36..3f941ac 100644
--- a/ucm2/bytcr-rt5640/HiFi-Components.conf
+++ b/ucm2/bytcr-rt5640/HiFi-Components.conf
@@ -16,6 +16,15 @@  If.mono {
 	True.Define.HaveSpeaker "1"
 }
 
+If.hp2 {
+	Condition {
+		Type String
+		Haystack "${CardComponents}"
+		Needle "cfg-hp2:lineout"
+	}
+	True.Define.HaveHeadPhones2 "yes"
+}
+
 If.dmic1 {
 	Condition {
 		Type String
diff --git a/ucm2/bytcr-rt5640/HiFi.conf b/ucm2/bytcr-rt5640/HiFi.conf
index 604e7d9..2e099bd 100644
--- a/ucm2/bytcr-rt5640/HiFi.conf
+++ b/ucm2/bytcr-rt5640/HiFi.conf
@@ -2,6 +2,7 @@ 
 
 Define.HaveAif ""
 Define.HaveSpeaker ""
+Define.HaveHeadPhones2 ""
 Define.HaveInternalMic ""
 Define.HaveHeadsetMic "yes"
 Define.StereoADC2Mux "DMIC1"
@@ -116,6 +117,23 @@  If.hp {
 	}
 }
 
+If.hp2 {
+	Condition { Type String Empty "${var:HaveHeadPhones2}" }
+	False {
+		Include.hs.File "/codecs/rt5640/HeadPhones2.conf"
+
+		SectionDevice."Headphones2" {
+			EnableSequence [
+				cset "name='Line Out Switch' on"
+			]
+
+			DisableSequence [
+				cset "name='Line Out Switch' off"
+			]
+		}
+	}
+}
+
 If.dmic {
 	Condition {
 		Type String
diff --git a/ucm2/codecs/rt5640/HeadPhones2.conf b/ucm2/codecs/rt5640/HeadPhones2.conf
new file mode 100644
index 0000000..b75e420
--- /dev/null
+++ b/ucm2/codecs/rt5640/HeadPhones2.conf
@@ -0,0 +1,46 @@ 
+# The 2nd headset jack uses lineout with an external HP-amp
+
+SectionDevice."Headphones2" {
+	Comment "Headphones 2"
+
+	ConflictingDevice [
+		"Speaker"
+		"Headphones"
+	]
+
+	EnableSequence [
+		cset "name='LOUT MIX OUTVOL L Switch' on"
+		cset "name='LOUT MIX OUTVOL R Switch' on"
+		cset "name='OUT Channel Switch' on"
+	]
+
+	DisableSequence [
+		cset "name='LOUT MIX OUTVOL L Switch' off"
+		cset "name='LOUT MIX OUTVOL R Switch' off"
+		cset "name='OUT Channel Switch' off"
+	]
+
+	Value {
+		PlaybackPriority 400
+		PlaybackPCM "hw:${CardId}"
+		JackControl "Line Out Jack"
+		PlaybackMixerElem "OUT"
+		PlaybackVolume "OUT Playback Volume"
+		If.HpAif1 {
+			Condition {
+				Type String
+				String1 "${var:HaveAif}"
+				String2 "1"
+			}
+			True.PlaybackMasterElem "DAC1"
+		}
+		If.HpAif2 {
+			Condition {
+				Type String
+				String1 "${var:HaveAif}"
+				String2 "2"
+			}
+			True.PlaybackMasterElem "DAC2"
+		}
+	}
+}