diff mbox series

[alsa-ucm-conf] bytcr-wm5102: Add new UCM profile for BYT boards with a WM5102 codec

Message ID 20210209190859.70997-1-hdegoede@redhat.com (mailing list archive)
State New, archived
Headers show
Series [alsa-ucm-conf] bytcr-wm5102: Add new UCM profile for BYT boards with a WM5102 codec | expand

Commit Message

Hans de Goede Feb. 9, 2021, 7:08 p.m. UTC
Add new UCM profile for BYT boards with a WM5102 codec. This has been
tested with both the SST and the SOF driver on a
Lenovo Yoga Tablet 2 1051L.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 ucm2/SOF/HiFi.conf                      |  9 +++++++++
 ucm2/bytcr-wm5102/HiFi.conf             | 27 +++++++++++++++++++++++++
 ucm2/bytcr-wm5102/bytcr-wm5102.conf     |  6 ++++++
 ucm2/codecs/wm5102/EnableSeq.conf       | 16 +++++++++++++++
 ucm2/codecs/wm5102/HeadPhones.conf      | 23 +++++++++++++++++++++
 ucm2/codecs/wm5102/IN1-HeadsetMic.conf  | 24 ++++++++++++++++++++++
 ucm2/codecs/wm5102/IN3-InternalMic.conf | 23 +++++++++++++++++++++
 ucm2/codecs/wm5102/Speaker.conf         | 22 ++++++++++++++++++++
 8 files changed, 150 insertions(+)
 create mode 100644 ucm2/bytcr-wm5102/HiFi.conf
 create mode 100644 ucm2/bytcr-wm5102/bytcr-wm5102.conf
 create mode 100644 ucm2/codecs/wm5102/EnableSeq.conf
 create mode 100644 ucm2/codecs/wm5102/HeadPhones.conf
 create mode 100644 ucm2/codecs/wm5102/IN1-HeadsetMic.conf
 create mode 100644 ucm2/codecs/wm5102/IN3-InternalMic.conf
 create mode 100644 ucm2/codecs/wm5102/Speaker.conf

Comments

Jaroslav Kysela Feb. 9, 2021, 7:56 p.m. UTC | #1
Dne 09. 02. 21 v 20:08 Hans de Goede napsal(a):
> Add new UCM profile for BYT boards with a WM5102 codec. This has been
> tested with both the SST and the SOF driver on a
> Lenovo Yoga Tablet 2 1051L.

Hans,

	could you also add the configuration for the hardware volume mixer controls?

			Thank you,
				Jaroslav
Hans de Goede Feb. 9, 2021, 8:47 p.m. UTC | #2
Hi Jaroslav,

On 2/9/21 8:56 PM, Jaroslav Kysela wrote:
> Dne 09. 02. 21 v 20:08 Hans de Goede napsal(a):
>> Add new UCM profile for BYT boards with a WM5102 codec. This has been
>> tested with both the SST and the SOF driver on a
>> Lenovo Yoga Tablet 2 1051L.
> 
> Hans,
> 
> 	could you also add the configuration for the hardware volume mixer controls?

I definitely plan to look into those, but that is going to be a
codec by codec thing.

I want to start with the codecs which are used in devices with mute LEDs,
to see if I can get the LEDs to work in combination with testing the kernel
generic alsa led-trigger kernel-patch you send.

So I would prefer for you to merge this as is for now. Together with the
wm5102 kernel bits which just landed in -next for 5.12, this will result
in working audio at the same level as all the other Intel ASoC using
devices.

There are only so much hours in a day... I do want to add HW volume
control support to all the codecs used on Intel BYT/CHT boards but this
will be something which I need to do on a case by case bases and in
my spare time, so this will take a while.

My priority ordering for upcoming UCM work roughly is:

1. Finish testing all codecs with SOF and fix any SOF only UCM
   (or kernel) issues
2. Add hw volume control for codecs used on devices with mute LEDs
3. Add hw volume control for the most popular codecs
   (all the rt56?? codecs, which also overlaps with 2.)
4. Deal with the remaining codecs

The wm5102 firmly falls under 4. it is only used in 1 Lenovo design
and I only ended up working on it at all because I happen to have
such a Lenovo tablet and Pierre-Louis pointed out to me that there
already was a machine-driver available in some Android kernels.

Regards,

Hans
Jaroslav Kysela Feb. 11, 2021, 7:16 p.m. UTC | #3
Dne 09. 02. 21 v 20:08 Hans de Goede napsal(a):
> Add new UCM profile for BYT boards with a WM5102 codec. This has been
> tested with both the SST and the SOF driver on a
> Lenovo Yoga Tablet 2 1051L.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

The patch was applied to the alsa-ucm-conf repository.

					Jaroslav
diff mbox series

Patch

diff --git a/ucm2/SOF/HiFi.conf b/ucm2/SOF/HiFi.conf
index af0d8c9..adf8cc5 100644
--- a/ucm2/SOF/HiFi.conf
+++ b/ucm2/SOF/HiFi.conf
@@ -79,6 +79,15 @@  If.bytcht_max98090 {
 	True.Include.main.File "/chtmax98090/HiFi.conf"
 }
 
+If.bytcht_wm5102 {
+	Condition {
+		Type String
+		Haystack "${CardName}"
+		Needle "bytcht wm5102"
+	}
+	True.Include.main.File "/bytcr-wm5102/HiFi.conf"
+}
+
 If.bdw_rt286 {
 	Condition {
 		Type String
diff --git a/ucm2/bytcr-wm5102/HiFi.conf b/ucm2/bytcr-wm5102/HiFi.conf
new file mode 100644
index 0000000..1269868
--- /dev/null
+++ b/ucm2/bytcr-wm5102/HiFi.conf
@@ -0,0 +1,27 @@ 
+SectionVerb {
+
+	Value {
+		TQ "HiFi"
+	}
+
+	Include.e.File "/codecs/wm5102/EnableSeq.conf"
+
+	If.Controls {
+		Condition {
+			Type ControlExists
+			Control "name='media0_in Gain 0 Switch'"
+		}
+		True {
+			Include.pe {
+				File "/platforms/bytcr/PlatformEnableSeq.conf"
+				Before.EnableSequence "0"
+			}
+			Include.pd.File "/platforms/bytcr/PlatformDisableSeq.conf"
+		}
+	}
+}
+
+Include.spk.File "/codecs/wm5102/Speaker.conf"
+Include.hp.File "/codecs/wm5102/HeadPhones.conf"
+Include.mic.File "/codecs/wm5102/IN3-InternalMic.conf"
+Include.headset.File "/codecs/wm5102/IN1-HeadsetMic.conf"
diff --git a/ucm2/bytcr-wm5102/bytcr-wm5102.conf b/ucm2/bytcr-wm5102/bytcr-wm5102.conf
new file mode 100644
index 0000000..af966ef
--- /dev/null
+++ b/ucm2/bytcr-wm5102/bytcr-wm5102.conf
@@ -0,0 +1,6 @@ 
+Syntax 3
+
+SectionUseCase."HiFi" {
+	File "HiFi.conf"
+	Comment "Play HiFi quality Music"
+}
diff --git a/ucm2/codecs/wm5102/EnableSeq.conf b/ucm2/codecs/wm5102/EnableSeq.conf
new file mode 100644
index 0000000..6a857a2
--- /dev/null
+++ b/ucm2/codecs/wm5102/EnableSeq.conf
@@ -0,0 +1,16 @@ 
+EnableSequence [
+	# Route AIF1 to the speakers and headphones
+	cset "name='SPKOUTL Input 1' AIF1RX1"
+	cset "name='SPKOUTR Input 1' AIF1RX2"
+	cset "name='HPOUT1L Input 1' AIF1RX1"
+	cset "name='HPOUT1R Input 1' AIF1RX2"
+
+	# Both mics are quite soft by default, boost then
+	cset "name='IN1L Volume' 28"
+	cset "name='IN3L Volume' 28"
+
+	cset "name='Headphone Switch' off"
+	cset "name='Headset Mic Switch' off"
+	cset "name='Internal Mic Switch' off"
+	cset "name='Speaker Switch' off"
+]
diff --git a/ucm2/codecs/wm5102/HeadPhones.conf b/ucm2/codecs/wm5102/HeadPhones.conf
new file mode 100644
index 0000000..cb29347
--- /dev/null
+++ b/ucm2/codecs/wm5102/HeadPhones.conf
@@ -0,0 +1,23 @@ 
+SectionDevice."Headphones" {
+	Comment "Headphones"
+
+	Value {
+		PlaybackPriority 200
+		PlaybackPCM "hw:${CardId}"
+		JackControl "Headphone Jack"
+	}
+
+	ConflictingDevice [
+		"Speaker"
+	]
+
+	EnableSequence [
+		cset "name='HPOUT1 Digital Switch' on"
+		cset "name='Headphone Switch' on"
+	]
+
+	DisableSequence [
+		cset "name='HPOUT1 Digital Switch' off"
+		cset "name='Headphone Switch' off"
+	]
+}
diff --git a/ucm2/codecs/wm5102/IN1-HeadsetMic.conf b/ucm2/codecs/wm5102/IN1-HeadsetMic.conf
new file mode 100644
index 0000000..a607487
--- /dev/null
+++ b/ucm2/codecs/wm5102/IN1-HeadsetMic.conf
@@ -0,0 +1,24 @@ 
+SectionDevice."Headset" {
+	Comment "Headset Microphone"
+
+	ConflictingDevice [
+		"Mic"
+	]
+
+	EnableSequence [
+		cset "name='AIF1TX1 Input 1' IN1L"
+		cset "name='AIF1TX2 Input 1' IN1L"
+
+		cset "name='Headset Mic Switch' on"
+	]
+
+	DisableSequence [
+		cset "name='Headset Mic Switch' off"
+	]
+
+	Value {
+		CapturePriority 200
+		CapturePCM "hw:${CardId}"
+		JackControl "Headset Mic Jack"
+	}
+}
diff --git a/ucm2/codecs/wm5102/IN3-InternalMic.conf b/ucm2/codecs/wm5102/IN3-InternalMic.conf
new file mode 100644
index 0000000..3a03ac3
--- /dev/null
+++ b/ucm2/codecs/wm5102/IN3-InternalMic.conf
@@ -0,0 +1,23 @@ 
+SectionDevice."Mic" {
+	Comment "Internal Microphone"
+
+	ConflictingDevice [
+		"Headset"
+	]
+
+	EnableSequence [
+		cset "name='AIF1TX1 Input 1' IN3L"
+		cset "name='AIF1TX2 Input 1' IN3L"
+
+		cset "name='Internal Mic Switch' on"
+	]
+
+	DisableSequence [
+		cset "name='Internal Mic Switch' off"
+	]
+
+	Value {
+		CapturePriority 100
+		CapturePCM "hw:${CardId}"
+	}
+}
diff --git a/ucm2/codecs/wm5102/Speaker.conf b/ucm2/codecs/wm5102/Speaker.conf
new file mode 100644
index 0000000..9f631f5
--- /dev/null
+++ b/ucm2/codecs/wm5102/Speaker.conf
@@ -0,0 +1,22 @@ 
+SectionDevice."Speaker" {
+	Comment "Speakers"
+
+	Value {
+		PlaybackPriority 100
+		PlaybackPCM "hw:${CardId}"
+	}
+
+	ConflictingDevice [
+		"Headphones"
+	]
+
+	EnableSequence [
+		cset "name='Speaker Digital Switch' on"
+		cset "name='Speaker Switch' on"
+	]
+
+	DisableSequence [
+		cset "name='Speaker Digital Switch' off"
+		cset "name='Speaker Switch' off"
+	]
+}