* [alsa-devel] [alsa-lib][PATCH] conf: SOF-Intel: map pcm device for sof driver
@ 2019-12-16 12:51 Hui Wang
2019-12-16 21:00 ` Jaroslav Kysela
0 siblings, 1 reply; 3+ messages in thread
From: Hui Wang @ 2019-12-16 12:51 UTC (permalink / raw)
To: alsa-devel, perex
On the machines with HDA codec, the sof driver will use the legacy hda
codec driver, as a result, most mixer controls are same as before.
There are only 2 difference:
- HDMI pcm index is 3, 4 and 5 instead of 3, 7, 8...
- dmic is on device 6, 7 instead of 0
After applying this patch, we will get (aplay -L):
hdmi:CARD=sofsklhdacard,DEV=0
sof-skl_hda_card,
HDMI Audio Output
hdmi:CARD=sofsklhdacard,DEV=1
sof-skl_hda_card,
HDMI Audio Output
hdmi:CARD=sofsklhdacard,DEV=2
sof-skl_hda_card,
HDMI Audio Output
and (arecord -L):
dmic:CARD=sofsklhdacard,DEV=0
sof-skl_hda_card,
Digital Mic connected to the PCH directly
dmic:CARD=sofsklhdacard,DEV=1
sof-skl_hda_card,
Digital Mic connected to the PCH directly
Then we could add minor changes in the pulseaudio configuration, after
that, all output and input devices will work under pulseaudio.
This is a supplement for ucm, the ucm for sof driver has higher
priority than this conf, if there is no ucm for sof driver, this conf
will take effect.
Signed-off-by: Hui Wang <hui.wang@canonical.com>
---
src/conf/alsa.conf | 4 +
src/conf/cards/Makefile.am | 3 +-
src/conf/cards/SOF-Intel.conf | 345 ++++++++++++++++++++++++++++++++++
src/conf/cards/aliases.conf | 1 +
src/conf/pcm/Makefile.am | 2 +-
src/conf/pcm/dmic.conf | 54 ++++++
6 files changed, 407 insertions(+), 2 deletions(-)
create mode 100644 src/conf/cards/SOF-Intel.conf
create mode 100644 src/conf/pcm/dmic.conf
diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf
index 09980586..28c11c81 100644
--- a/src/conf/alsa.conf
+++ b/src/conf/alsa.conf
@@ -101,6 +101,9 @@ defaults.pcm.iec958.card defaults.pcm.card
defaults.pcm.iec958.device defaults.pcm.device
defaults.pcm.modem.card defaults.pcm.card
defaults.pcm.modem.device defaults.pcm.device
+defaults.pcm.dmic.card defaults.pcm.card
+defaults.pcm.dmic.device 6
+
# truncate files via file or tee PCM
defaults.pcm.file_format "raw"
defaults.pcm.file_truncate true
@@ -141,6 +144,7 @@ pcm.dmix cards.pcm.dmix
pcm.dsnoop cards.pcm.dsnoop
pcm.modem cards.pcm.modem
pcm.phoneline cards.pcm.phoneline
+pcm.dmic cards.pcm.dmic
pcm.hw {
@args [ CARD DEV SUBDEV ]
diff --git a/src/conf/cards/Makefile.am b/src/conf/cards/Makefile.am
index 00999f01..b22386a0 100644
--- a/src/conf/cards/Makefile.am
+++ b/src/conf/cards/Makefile.am
@@ -58,7 +58,8 @@ cfg_files = aliases.conf \
VIA8237.conf \
VX222.conf \
VXPocket.conf \
- VXPocket440.conf
+ VXPocket440.conf \
+ SOF-Intel.conf
if BUILD_ALISP
cfg_files += aliases.alisp
diff --git a/src/conf/cards/SOF-Intel.conf b/src/conf/cards/SOF-Intel.conf
new file mode 100644
index 00000000..fe280d72
--- /dev/null
+++ b/src/conf/cards/SOF-Intel.conf
@@ -0,0 +1,345 @@
+#
+# Configuration for the Intel HD audio (with sof driver)
+#
+
+<confdir:pcm/front.conf>
+
+SOF-Intel.pcm.front.0 {
+ @args [ CARD ]
+ @args.CARD {
+ type string
+ }
+ type asym
+ playback.pcm {
+ type softvol
+ slave.pcm {
+ type hw
+ card $CARD
+ subdevice 0
+ }
+ control {
+ name "PCM Playback Volume"
+ card $CARD
+ }
+ }
+ capture.pcm {
+ type hw
+ card $CARD
+ }
+}
+
+# default with dmix+softvol & dsnoop
+SOF-Intel.pcm.default {
+ @args [ CARD ]
+ @args.CARD {
+ type string
+ }
+ type asym
+ playback.pcm {
+ type plug
+ slave.pcm {
+ type softvol
+ slave.pcm {
+ @func concat
+ strings [ "dmix:" $CARD ]
+ }
+ control {
+ name "PCM Playback Volume"
+ card $CARD
+ }
+ }
+ }
+ capture.pcm {
+ type plug
+ slave.pcm {
+ type softvol
+ slave.pcm {
+ @func concat
+ strings [ "dsnoop:" $CARD ]
+ }
+ control {
+ name "Digital Capture Volume"
+ card $CARD
+ }
+ min_dB -30.0
+ max_dB 30.0
+ resolution 121
+ }
+ # to avoid possible phase inversions with digital mics
+ route_policy copy
+ }
+ hint.device 0
+}
+
+<confdir:pcm/surround21.conf>
+<confdir:pcm/surround40.conf>
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+<confdir:pcm/surround71.conf>
+
+SOF-Intel.pcm.surround40.0 cards.SOF-Intel.pcm.front.0
+SOF-Intel.pcm.surround51.0 cards.SOF-Intel.pcm.front.0
+SOF-Intel.pcm.surround71.0 cards.SOF-Intel.pcm.front.0
+
+<confdir:pcm/iec958.conf>
+
+SOF-Intel.pcm.iec958.0 {
+ @args [ CARD AES0 AES1 AES2 AES3 ]
+ @args.CARD {
+ type string
+ }
+ @args.AES0 {
+ type integer
+ }
+ @args.AES1 {
+ type integer
+ }
+ @args.AES2 {
+ type integer
+ }
+ @args.AES3 {
+ type integer
+ }
+ type asym
+ playback.pcm {
+ type hooks
+ slave.pcm {
+ type hw
+ card $CARD
+ device 1
+ }
+ hooks.0 {
+ type ctl_elems
+ hook_args [
+ {
+ name "IEC958 Playback Default"
+ index 16
+ optional true
+ lock true
+ preserve true
+ value [ $AES0 $AES1 $AES2 $AES3 ]
+ }
+ {
+ name "IEC958 Playback Switch"
+ index 16
+ optional true
+ value true
+ # if this element is present, skip the rest
+ skip_rest true
+ }
+ {
+ name "IEC958 Playback Default"
+ lock true
+ preserve true
+ value [ $AES0 $AES1 $AES2 $AES3 ]
+ }
+ {
+ name "IEC958 Playback Switch"
+ value true
+ }
+ ]
+ }
+ }
+ capture.pcm {
+ type hooks
+ slave.pcm {
+ type hw
+ card $CARD
+ device 1
+ }
+ hooks.0 {
+ type ctl_elems
+ hook_args [
+ {
+ name "IEC958 Capture Switch"
+ lock true
+ preserve true
+ value true
+ }
+ ]
+ }
+ }
+ hint.device 1
+}
+
+<confdir:pcm/hdmi.conf>
+
+SOF-Intel.pcm.hdmi.common {
+ @args [ CARD DEVICE CTLINDEX AES0 AES1 AES2 AES3 ]
+ @args.CARD {
+ type string
+ }
+ @args.DEVICE {
+ type integer
+ }
+ @args.CTLINDEX {
+ type integer
+ }
+ @args.AES0 {
+ type integer
+ }
+ @args.AES1 {
+ type integer
+ }
+ @args.AES2 {
+ type integer
+ }
+ @args.AES3 {
+ type integer
+ }
+ type hooks
+ slave.pcm {
+ type hw
+ card $CARD
+ device $DEVICE
+ }
+ hooks.0 {
+ type ctl_elems
+ hook_args [
+ {
+ name "IEC958 Playback Default"
+ index $CTLINDEX
+ lock true
+ preserve true
+ value [ $AES0 $AES1 $AES2 $AES3 ]
+ }
+ {
+ name "IEC958 Playback Switch"
+ index $CTLINDEX
+ value true
+ }
+ ]
+ }
+ hint.device $DEVICE
+}
+
+SOF-Intel.pcm.hdmi.0 {
+ @args [ CARD AES0 AES1 AES2 AES3 ]
+ @args.CARD { type string }
+ @args.AES0 { type integer }
+ @args.AES1 { type integer }
+ @args.AES2 { type integer }
+ @args.AES3 { type integer }
+ @func refer
+ name {
+ @func concat
+ strings [
+ "cards.SOF-Intel.pcm.hdmi.common:"
+ "CARD=" $CARD ","
+ "DEVICE=3,"
+ "CTLINDEX=0,"
+ "AES0=" $AES0 ","
+ "AES1=" $AES1 ","
+ "AES2=" $AES2 ","
+ "AES3=" $AES3
+ ]
+ }
+}
+
+SOF-Intel.pcm.hdmi.1 {
+ @args [ CARD AES0 AES1 AES2 AES3 ]
+ @args.CARD { type string }
+ @args.AES0 { type integer }
+ @args.AES1 { type integer }
+ @args.AES2 { type integer }
+ @args.AES3 { type integer }
+ @func refer
+ name {
+ @func concat
+ strings [
+ "cards.SOF-Intel.pcm.hdmi.common:"
+ "CARD=" $CARD ","
+ "DEVICE=4,"
+ "CTLINDEX=1,"
+ "AES0=" $AES0 ","
+ "AES1=" $AES1 ","
+ "AES2=" $AES2 ","
+ "AES3=" $AES3
+ ]
+ }
+}
+
+SOF-Intel.pcm.hdmi.2 {
+ @args [ CARD AES0 AES1 AES2 AES3 ]
+ @args.CARD { type string }
+ @args.AES0 { type integer }
+ @args.AES1 { type integer }
+ @args.AES2 { type integer }
+ @args.AES3 { type integer }
+ @func refer
+ name {
+ @func concat
+ strings [
+ "cards.SOF-Intel.pcm.hdmi.common:"
+ "CARD=" $CARD ","
+ "DEVICE=5,"
+ "CTLINDEX=2,"
+ "AES0=" $AES0 ","
+ "AES1=" $AES1 ","
+ "AES2=" $AES2 ","
+ "AES3=" $AES3
+ ]
+ }
+}
+
+<confdir:pcm/dmic.conf>
+
+SOF-Intel.pcm.dmic.common {
+ @args [ CARD DEVICE ]
+ @args.CARD {
+ type string
+ }
+ @args.DEVICE {
+ type integer
+ }
+ type plug
+ slave.pcm {
+ type hw
+ card $CARD
+ device $DEVICE
+ }
+
+ hint.device $DEVICE
+}
+
+SOF-Intel.pcm.dmic.0 {
+ @args [ CARD ]
+ @args.CARD { type string }
+ @func refer
+ name {
+ @func concat
+ strings [
+ "cards.SOF-Intel.pcm.dmic.common:"
+ "CARD=" $CARD ","
+ "DEVICE=6"
+ ]
+ }
+}
+
+SOF-Intel.pcm.dmic.1 {
+ @args [ CARD ]
+ @args.CARD { type string }
+ @func refer
+ name {
+ @func concat
+ strings [
+ "cards.SOF-Intel.pcm.dmic.common:"
+ "CARD=" $CARD ","
+ "DEVICE=7"
+ ]
+ }
+}
+
+<confdir:pcm/modem.conf>
+
+SOF-Intel.pcm.modem.0 {
+ @args [ CARD ]
+ @args.CARD {
+ type string
+ }
+ type hw
+ card $CARD
+ device 6
+ hint.show off
+}
diff --git a/src/conf/cards/aliases.conf b/src/conf/cards/aliases.conf
index 18a920f4..0c44c1aa 100644
--- a/src/conf/cards/aliases.conf
+++ b/src/conf/cards/aliases.conf
@@ -57,6 +57,7 @@ CMI8786 cards.CMI8788
CMI8787 cards.CMI8788
pistachio cards.pistachio-card
VC4-HDMI cards.vc4-hdmi
+sof-skl_hda_car cards.SOF-Intel
<confdir:pcm/default.conf>
<confdir:pcm/dmix.conf>
diff --git a/src/conf/pcm/Makefile.am b/src/conf/pcm/Makefile.am
index c548660d..20da0448 100644
--- a/src/conf/pcm/Makefile.am
+++ b/src/conf/pcm/Makefile.am
@@ -3,7 +3,7 @@ cfg_files = default.conf front.conf rear.conf center_lfe.conf side.conf\
surround50.conf surround51.conf \
surround71.conf iec958.conf hdmi.conf modem.conf \
dmix.conf dsnoop.conf \
- dpl.conf
+ dpl.conf dmic.conf
EXTRA_DIST = $(cfg_files)
diff --git a/src/conf/pcm/dmic.conf b/src/conf/pcm/dmic.conf
new file mode 100644
index 00000000..1dce37c9
--- /dev/null
+++ b/src/conf/pcm/dmic.conf
@@ -0,0 +1,54 @@
+#
+# input from digital mic
+#
+
+pcm.!dmic {
+ @args [ CARD DEV ]
+ @args.CARD {
+ type string
+ default {
+ @func getenv
+ vars [
+ ALSA_PCM_CARD
+ ALSA_CARD
+ ]
+ default {
+ @func refer
+ name defaults.pcm.dmic.card
+ }
+ }
+ }
+ @args.DEV {
+ type integer
+ default {
+ default {
+ @func refer
+ name defaults.pcm.dmic.device
+ }
+ }
+ }
+ type empty
+ slave.pcm {
+ @func refer
+ name {
+ @func concat
+ strings [
+ "cards."
+ {
+ @func card_driver
+ card $CARD
+ }
+ ".pcm.dmic." $DEV ":"
+ "CARD=" $CARD
+ ]
+ }
+ }
+ hint {
+ show {
+ @func refer
+ name defaults.namehint.basic
+ }
+ description "Digital Mic connected to the PCH directly"
+ device $DEV
+ }
+}
--
2.17.1
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [alsa-devel] [alsa-lib][PATCH] conf: SOF-Intel: map pcm device for sof driver
2019-12-16 12:51 [alsa-devel] [alsa-lib][PATCH] conf: SOF-Intel: map pcm device for sof driver Hui Wang
@ 2019-12-16 21:00 ` Jaroslav Kysela
2019-12-20 1:30 ` Hui Wang
0 siblings, 1 reply; 3+ messages in thread
From: Jaroslav Kysela @ 2019-12-16 21:00 UTC (permalink / raw)
To: Hui Wang, alsa-devel
Dne 16. 12. 19 v 13:51 Hui Wang napsal(a):
> On the machines with HDA codec, the sof driver will use the legacy hda
> codec driver, as a result, most mixer controls are same as before.
>
> There are only 2 difference:
> - HDMI pcm index is 3, 4 and 5 instead of 3, 7, 8...
> - dmic is on device 6, 7 instead of 0
>
> After applying this patch, we will get (aplay -L):
> hdmi:CARD=sofsklhdacard,DEV=0
> sof-skl_hda_card,
> HDMI Audio Output
> hdmi:CARD=sofsklhdacard,DEV=1
> sof-skl_hda_card,
> HDMI Audio Output
> hdmi:CARD=sofsklhdacard,DEV=2
> sof-skl_hda_card,
> HDMI Audio Output
>
> and (arecord -L):
> dmic:CARD=sofsklhdacard,DEV=0
> sof-skl_hda_card,
> Digital Mic connected to the PCH directly
> dmic:CARD=sofsklhdacard,DEV=1
> sof-skl_hda_card,
> Digital Mic connected to the PCH directly
>
> Then we could add minor changes in the pulseaudio configuration, after
> that, all output and input devices will work under pulseaudio.
>
> This is a supplement for ucm, the ucm for sof driver has higher
> priority than this conf, if there is no ucm for sof driver, this conf
> will take effect.
Exactly. The dmic definitions should not be a standard in my eyes. I would not
like to accept this. I can accept the standard definitions for the playback
devices for this driver, but UCM will replace everything. It's better to
define the special PA config for now until we resolve all the UCM issues like:
http://people.redhat.com/~jkysela/sof/carbon-x1-pulse.tar.gz2
The 2nd PA UCM patchset which is working with the current UCM in ALSA's repos
for this hardware:
https://gitlab.freedesktop.org/pulseaudio/pulseaudio/merge_requests/217
But it is just a start. There are plenty unresolved abstraction issues with this.
Jaroslav
--
Jaroslav Kysela <perex@perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [alsa-devel] [alsa-lib][PATCH] conf: SOF-Intel: map pcm device for sof driver
2019-12-16 21:00 ` Jaroslav Kysela
@ 2019-12-20 1:30 ` Hui Wang
0 siblings, 0 replies; 3+ messages in thread
From: Hui Wang @ 2019-12-20 1:30 UTC (permalink / raw)
To: Jaroslav Kysela, alsa-devel
On 2019/12/17 上午5:00, Jaroslav Kysela wrote:
> Dne 16. 12. 19 v 13:51 Hui Wang napsal(a):
>> On the machines with HDA codec, the sof driver will use the legacy hda
>> codec driver, as a result, most mixer controls are same as before.
>>
>> There are only 2 difference:
>> - HDMI pcm index is 3, 4 and 5 instead of 3, 7, 8...
>> - dmic is on device 6, 7 instead of 0
>>
>> After applying this patch, we will get (aplay -L):
>> hdmi:CARD=sofsklhdacard,DEV=0
>> sof-skl_hda_card,
>> HDMI Audio Output
>> hdmi:CARD=sofsklhdacard,DEV=1
>> sof-skl_hda_card,
>> HDMI Audio Output
>> hdmi:CARD=sofsklhdacard,DEV=2
>> sof-skl_hda_card,
>> HDMI Audio Output
>>
>> and (arecord -L):
>> dmic:CARD=sofsklhdacard,DEV=0
>> sof-skl_hda_card,
>> Digital Mic connected to the PCH directly
>> dmic:CARD=sofsklhdacard,DEV=1
>> sof-skl_hda_card,
>> Digital Mic connected to the PCH directly
>>
>> Then we could add minor changes in the pulseaudio configuration, after
>> that, all output and input devices will work under pulseaudio.
>>
>> This is a supplement for ucm, the ucm for sof driver has higher
>> priority than this conf, if there is no ucm for sof driver, this conf
>> will take effect.
>
> Exactly. The dmic definitions should not be a standard in my eyes. I
> would not like to accept this. I can accept the standard definitions
> for the playback devices for this driver, but UCM will replace
> everything. It's better to define the special PA config for now until
> we resolve all the UCM issues like:
>
> http://people.redhat.com/~jkysela/sof/carbon-x1-pulse.tar.gz2
>
> The 2nd PA UCM patchset which is working with the current UCM in
> ALSA's repos for this hardware:
>
> https://gitlab.freedesktop.org/pulseaudio/pulseaudio/merge_requests/217
>
> But it is just a start. There are plenty unresolved abstraction issues
> with this.
Yes, ucm is more powerful and should be the default choice for users
with sof driver+hda codec. But there are 2 issues:
1. too complicated, not easy to backport all patches to old version
linux distribution, like ubuntu 18.04 LTS (with alsa-lib 1.1.3 and PA v11.1)
2. no generic ucm confs for most machines, need to write ucm confs
machine by machine (existing PA can runtime decide/build a machine's
conf, no need to write conf machine by machine)
After we have sth like below: (if the name dmic is not good, we could
change it to be a more reasonable name)
dmic:CARD=sofsklhdacard,DEV=0
sof-skl_hda_card,
Digital Mic connected to the PCH directly
dmic:CARD=sofsklhdacard,DEV=1
sof-skl_hda_card,
Digital Mic connected to the PCH directly
We just need to do a simple change in the PA's conf, the audio basically
could work (include the audio-device-selection-popup-dialogue and
mic-mute led on Lenovo machine). Of course it doesn't work perfectly so
far, because dmic is not connected to the codec, so it is in a
standalone source in the PA, we need to write some code to handle it.
This is the simple change in the PA's conf:
https://pastebin.ubuntu.com/p/Tnmkr6D2Kv/
Thanks,
Hui.
>
> Jaroslav
>
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-12-20 1:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-16 12:51 [alsa-devel] [alsa-lib][PATCH] conf: SOF-Intel: map pcm device for sof driver Hui Wang
2019-12-16 21:00 ` Jaroslav Kysela
2019-12-20 1:30 ` Hui Wang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox