You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2779 lines
91 KiB
2779 lines
91 KiB
6 years ago
|
From 93e03bdc2a3dcd5d12516f5de78e14d88a32ff2c Mon Sep 17 00:00:00 2001
|
||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||
|
Date: Wed, 4 Apr 2018 09:58:12 +0200
|
||
|
Subject: [PATCH 01/26] alsa.conf: change the location for add-on configs to
|
||
|
/etc/alsa/conf.d
|
||
|
|
||
|
The add-on configuration files should be placed to a volatile place.
|
||
|
|
||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||
|
---
|
||
|
src/conf/alsa.conf | 8 +-------
|
||
|
1 file changed, 1 insertion(+), 7 deletions(-)
|
||
|
|
||
|
diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf
|
||
|
index f22918fb..bb00ff40 100644
|
||
|
--- a/src/conf/alsa.conf
|
||
|
+++ b/src/conf/alsa.conf
|
||
|
@@ -8,13 +8,7 @@
|
||
|
{
|
||
|
func load
|
||
|
files [
|
||
|
- {
|
||
|
- @func concat
|
||
|
- strings [
|
||
|
- { @func datadir }
|
||
|
- "/alsa.conf.d/"
|
||
|
- ]
|
||
|
- }
|
||
|
+ "/etc/alsa/conf.d"
|
||
|
"/etc/asound.conf"
|
||
|
"~/.asoundrc"
|
||
|
]
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 78505dccd23546cc77e5221cb21c01325bc0138d Mon Sep 17 00:00:00 2001
|
||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||
|
Date: Wed, 4 Apr 2018 10:02:49 +0200
|
||
|
Subject: [PATCH 02/26] conf: remove alsa.conf.d from the datadir
|
||
|
|
||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||
|
---
|
||
|
src/conf/Makefile.am | 2 +-
|
||
|
src/conf/alsa.conf.d/Makefile.am | 8 --------
|
||
|
src/conf/alsa.conf.d/README | 2 --
|
||
|
3 files changed, 1 insertion(+), 11 deletions(-)
|
||
|
delete mode 100644 src/conf/alsa.conf.d/Makefile.am
|
||
|
delete mode 100644 src/conf/alsa.conf.d/README
|
||
|
|
||
|
diff --git a/src/conf/Makefile.am b/src/conf/Makefile.am
|
||
|
index ef2ea9c1..2b46f95c 100644
|
||
|
--- a/src/conf/Makefile.am
|
||
|
+++ b/src/conf/Makefile.am
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-SUBDIRS=cards pcm alsa.conf.d
|
||
|
+SUBDIRS=cards pcm
|
||
|
|
||
|
if BUILD_UCM
|
||
|
SUBDIRS += ucm
|
||
|
diff --git a/src/conf/alsa.conf.d/Makefile.am b/src/conf/alsa.conf.d/Makefile.am
|
||
|
deleted file mode 100644
|
||
|
index c91661e9..00000000
|
||
|
--- a/src/conf/alsa.conf.d/Makefile.am
|
||
|
+++ /dev/null
|
||
|
@@ -1,8 +0,0 @@
|
||
|
-alsaconfigdir = @ALSA_CONFIG_DIR@
|
||
|
-alsadir = $(alsaconfigdir)/alsa.conf.d
|
||
|
-cfg_files = README
|
||
|
-
|
||
|
-alsa_DATA = $(cfg_files)
|
||
|
-
|
||
|
-EXTRA_DIST = \
|
||
|
- $(cfg_files)
|
||
|
diff --git a/src/conf/alsa.conf.d/README b/src/conf/alsa.conf.d/README
|
||
|
deleted file mode 100644
|
||
|
index 99978848..00000000
|
||
|
--- a/src/conf/alsa.conf.d/README
|
||
|
+++ /dev/null
|
||
|
@@ -1,2 +0,0 @@
|
||
|
-You can place files named *.conf in this folder and they will be processed
|
||
|
-when initialising alsa-lib.
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 17bc74d3a25f0d4b1ca25d2d92fcad9c2a9d7f79 Mon Sep 17 00:00:00 2001
|
||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||
|
Date: Tue, 10 Apr 2018 08:57:07 +0200
|
||
|
Subject: [PATCH 03/26] configure: remove src/conf/alsa.conf.d/Makefile
|
||
|
|
||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||
|
---
|
||
|
configure.ac | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/configure.ac b/configure.ac
|
||
|
index cce195ae..5bc1994f 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -713,7 +713,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
|
||
|
src/rawmidi/Makefile src/timer/Makefile \
|
||
|
src/hwdep/Makefile src/seq/Makefile src/ucm/Makefile \
|
||
|
src/alisp/Makefile src/topology/Makefile \
|
||
|
- src/conf/Makefile src/conf/alsa.conf.d/Makefile \
|
||
|
+ src/conf/Makefile \
|
||
|
src/conf/cards/Makefile \
|
||
|
src/conf/pcm/Makefile \
|
||
|
src/conf/ucm/Makefile \
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 3778a30bb0095c7d3275735718f33058e3c198d5 Mon Sep 17 00:00:00 2001
|
||
|
From: Kirill Marinushkin <k.marinushkin@gmail.com>
|
||
|
Date: Mon, 16 Apr 2018 20:26:38 +0200
|
||
|
Subject: [PATCH 04/26] ASoC: topology: Fix bclk and fsync inversion in
|
||
|
set_link_hw_format()
|
||
|
|
||
|
The values of bclk and fsync are inverted WRT the codec. But the existing
|
||
|
solution already works for Broadwell, see the alsa-lib config:
|
||
|
|
||
|
`alsa-lib/src/conf/topology/broadwell/broadwell.conf`
|
||
|
|
||
|
This commit provides the backwards-compatible solution to fix this misuse.
|
||
|
This commit goes in pair with the corresponding patch for linux.
|
||
|
|
||
|
Signed-off-by: Kirill Marinushkin <k.marinushkin@gmail.com>
|
||
|
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Tested-by: Pan Xiuli <xiuli.pan@linux.intel.com>
|
||
|
Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Cc: Jaroslav Kysela <perex@perex.cz>
|
||
|
Cc: Takashi Iwai <tiwai@suse.de>
|
||
|
Cc: Mark Brown <broonie@kernel.org>
|
||
|
Cc: Liam Girdwood <liam.r.girdwood@linux.intel.com>
|
||
|
Cc: linux-kernel@vger.kernel.org
|
||
|
Cc: alsa-devel@alsa-project.org
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
include/sound/asoc.h | 16 ++++++++++++++--
|
||
|
include/topology.h | 4 ++--
|
||
|
src/conf/topology/broadwell/broadwell.conf | 4 ++--
|
||
|
src/topology/pcm.c | 30 ++++++++++++++++++++++++++----
|
||
|
4 files changed, 44 insertions(+), 10 deletions(-)
|
||
|
|
||
|
diff --git a/include/sound/asoc.h b/include/sound/asoc.h
|
||
|
index 0f5d9f9a..89b00703 100644
|
||
|
--- a/include/sound/asoc.h
|
||
|
+++ b/include/sound/asoc.h
|
||
|
@@ -156,6 +156,18 @@
|
||
|
#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
|
||
|
#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3)
|
||
|
|
||
|
+/* DAI topology BCLK parameter
|
||
|
+ * For the backwards capability, by default codec is bclk master
|
||
|
+ */
|
||
|
+#define SND_SOC_TPLG_BCLK_CM 0 /* codec is bclk master */
|
||
|
+#define SND_SOC_TPLG_BCLK_CS 1 /* codec is bclk slave */
|
||
|
+
|
||
|
+/* DAI topology FSYNC parameter
|
||
|
+ * For the backwards capability, by default codec is fsync master
|
||
|
+ */
|
||
|
+#define SND_SOC_TPLG_FSYNC_CM 0 /* codec is fsync master */
|
||
|
+#define SND_SOC_TPLG_FSYNC_CS 1 /* codec is fsync slave */
|
||
|
+
|
||
|
/*
|
||
|
* Block Header.
|
||
|
* This header precedes all object and object arrays below.
|
||
|
@@ -311,8 +323,8 @@ struct snd_soc_tplg_hw_config {
|
||
|
__u8 clock_gated; /* 1 if clock can be gated to save power */
|
||
|
__u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */
|
||
|
__u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */
|
||
|
- __u8 bclk_master; /* 1 for master of BCLK, 0 for slave */
|
||
|
- __u8 fsync_master; /* 1 for master of FSYNC, 0 for slave */
|
||
|
+ __u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */
|
||
|
+ __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
|
||
|
__u8 mclk_direction; /* 0 for input, 1 for output */
|
||
|
__le16 reserved; /* for 32bit alignment */
|
||
|
__le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */
|
||
|
diff --git a/include/topology.h b/include/topology.h
|
||
|
index 8779da4d..5d7b46df 100644
|
||
|
--- a/include/topology.h
|
||
|
+++ b/include/topology.h
|
||
|
@@ -1000,8 +1000,8 @@ struct snd_tplg_hw_config_template {
|
||
|
unsigned char clock_gated; /* 1 if clock can be gated to save power */
|
||
|
unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */
|
||
|
unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
|
||
|
- unsigned char bclk_master; /* 1 for master of BCLK, 0 for slave */
|
||
|
- unsigned char fsync_master; /* 1 for master of FSYNC, 0 for slave */
|
||
|
+ unsigned char bclk_master; /* SND_SOC_TPLG_BCLK_ value */
|
||
|
+ unsigned char fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
|
||
|
unsigned char mclk_direction; /* 0 for input, 1 for output */
|
||
|
unsigned short reserved; /* for 32bit alignment */
|
||
|
unsigned int mclk_rate; /* MCLK or SYSCLK freqency in Hz */
|
||
|
diff --git a/src/conf/topology/broadwell/broadwell.conf b/src/conf/topology/broadwell/broadwell.conf
|
||
|
index b8405d93..09fc4daa 100644
|
||
|
--- a/src/conf/topology/broadwell/broadwell.conf
|
||
|
+++ b/src/conf/topology/broadwell/broadwell.conf
|
||
|
@@ -393,8 +393,8 @@ SectionGraph."dsp" {
|
||
|
SectionHWConfig."CodecHWConfig" {
|
||
|
id "1"
|
||
|
format "I2S" # physical audio format.
|
||
|
- bclk "master" # Platform is master of bit clock
|
||
|
- fsync "master" # platform is master of fsync
|
||
|
+ bclk "codec_slave" # platform is master of bit clock (codec is slave)
|
||
|
+ fsync "codec_slave" # platform is master of fsync (codec is slave)
|
||
|
}
|
||
|
|
||
|
SectionLink."Codec" {
|
||
|
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
||
|
index bb47b9af..d0395182 100644
|
||
|
--- a/src/topology/pcm.c
|
||
|
+++ b/src/topology/pcm.c
|
||
|
@@ -1141,8 +1141,19 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
- if (!strcmp(val, "master"))
|
||
|
- hw_cfg->bclk_master = true;
|
||
|
+ if (!strcmp(val, "master")) {
|
||
|
+ /* For backwards capability,
|
||
|
+ * "master" == "codec is slave"
|
||
|
+ */
|
||
|
+ SNDERR("warning: deprecated bclk value '%s'\n",
|
||
|
+ val);
|
||
|
+
|
||
|
+ hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CS;
|
||
|
+ } else if (!strcmp(val, "codec_slave")) {
|
||
|
+ hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CS;
|
||
|
+ } else if (!strcmp(val, "codec_master")) {
|
||
|
+ hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CM;
|
||
|
+ }
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
@@ -1167,8 +1178,19 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
- if (!strcmp(val, "master"))
|
||
|
- hw_cfg->fsync_master = true;
|
||
|
+ if (!strcmp(val, "master")) {
|
||
|
+ /* For backwards capability,
|
||
|
+ * "master" == "codec is slave"
|
||
|
+ */
|
||
|
+ SNDERR("warning: deprecated fsync value '%s'\n",
|
||
|
+ val);
|
||
|
+
|
||
|
+ hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CS;
|
||
|
+ } else if (!strcmp(val, "codec_slave")) {
|
||
|
+ hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CS;
|
||
|
+ } else if (!strcmp(val, "codec_master")) {
|
||
|
+ hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CM;
|
||
|
+ }
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From bdb709ab2a091743980c9154950c01f0c540476b Mon Sep 17 00:00:00 2001
|
||
|
From: Kirill Marinushkin <k.marinushkin@gmail.com>
|
||
|
Date: Mon, 16 Apr 2018 20:26:39 +0200
|
||
|
Subject: [PATCH 05/26] ASoC: topology: Add missing clock gating parameter when
|
||
|
parsing hw_configs
|
||
|
|
||
|
Clock gating parameter is a part of `dai_fmt`. It is supported by
|
||
|
`alsa-lib` when creating a topology binary file, but ignored by kernel
|
||
|
when loading this topology file.
|
||
|
|
||
|
After applying this commit, the clock gating parameter is not ignored any
|
||
|
more. This solution is backwards compatible. The existing behaviour is
|
||
|
not broken, because by default the parameter value is 0 and is ignored.
|
||
|
|
||
|
snd_soc_tplg_hw_config.clock_gated = 0 => no effect
|
||
|
snd_soc_tplg_hw_config.clock_gated = 1 => SND_SOC_DAIFMT_GATED
|
||
|
snd_soc_tplg_hw_config.clock_gated = 2 => SND_SOC_DAIFMT_CONT
|
||
|
|
||
|
For example, the following config, based on
|
||
|
alsa-lib/src/conf/topology/broadwell/broadwell.conf, is now supported:
|
||
|
|
||
|
~~~~
|
||
|
SectionHWConfig."CodecHWConfig" {
|
||
|
id "1"
|
||
|
format "I2S" # physical audio format.
|
||
|
pm_gate_clocks "true" # clock can be gated
|
||
|
}
|
||
|
|
||
|
SectionLink."Codec" {
|
||
|
|
||
|
# used for binding to the physical link
|
||
|
id "0"
|
||
|
|
||
|
hw_configs [
|
||
|
"CodecHWConfig"
|
||
|
]
|
||
|
|
||
|
default_hw_conf_id "1"
|
||
|
}
|
||
|
~~~~
|
||
|
|
||
|
Signed-off-by: Kirill Marinushkin <k.marinushkin@gmail.com>
|
||
|
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Cc: Jaroslav Kysela <perex@perex.cz>
|
||
|
Cc: Takashi Iwai <tiwai@suse.de>
|
||
|
Cc: Mark Brown <broonie@kernel.org>
|
||
|
Cc: Pan Xiuli <xiuli.pan@linux.intel.com>
|
||
|
Cc: Liam Girdwood <liam.r.girdwood@linux.intel.com>
|
||
|
Cc: linux-kernel@vger.kernel.org
|
||
|
Cc: alsa-devel@alsa-project.org
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
include/sound/asoc.h | 7 ++++++-
|
||
|
include/topology.h | 2 +-
|
||
|
src/topology/pcm.c | 6 +++++-
|
||
|
3 files changed, 12 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/include/sound/asoc.h b/include/sound/asoc.h
|
||
|
index 89b00703..297e837c 100644
|
||
|
--- a/include/sound/asoc.h
|
||
|
+++ b/include/sound/asoc.h
|
||
|
@@ -135,6 +135,11 @@
|
||
|
#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
|
||
|
#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
|
||
|
|
||
|
+/* DAI clock gating */
|
||
|
+#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0
|
||
|
+#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1
|
||
|
+#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2
|
||
|
+
|
||
|
/* DAI physical PCM data formats.
|
||
|
* Add new formats to the end of the list.
|
||
|
*/
|
||
|
@@ -320,7 +325,7 @@ struct snd_soc_tplg_hw_config {
|
||
|
__le32 size; /* in bytes of this structure */
|
||
|
__le32 id; /* unique ID - - used to match */
|
||
|
__le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */
|
||
|
- __u8 clock_gated; /* 1 if clock can be gated to save power */
|
||
|
+ __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */
|
||
|
__u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */
|
||
|
__u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */
|
||
|
__u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */
|
||
|
diff --git a/include/topology.h b/include/topology.h
|
||
|
index 5d7b46df..3793115c 100644
|
||
|
--- a/include/topology.h
|
||
|
+++ b/include/topology.h
|
||
|
@@ -997,7 +997,7 @@ struct snd_tplg_pcm_template {
|
||
|
struct snd_tplg_hw_config_template {
|
||
|
int id; /* unique ID - - used to match */
|
||
|
unsigned int fmt; /* SND_SOC_DAI_FORMAT_ format value */
|
||
|
- unsigned char clock_gated; /* 1 if clock can be gated to save power */
|
||
|
+ unsigned char clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */
|
||
|
unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */
|
||
|
unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
|
||
|
unsigned char bclk_master; /* SND_SOC_TPLG_BCLK_ value */
|
||
|
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
||
|
index d0395182..b53f6b03 100644
|
||
|
--- a/src/topology/pcm.c
|
||
|
+++ b/src/topology/pcm.c
|
||
|
@@ -1233,7 +1233,11 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
return -EINVAL;
|
||
|
|
||
|
if (!strcmp(val, "true"))
|
||
|
- hw_cfg->clock_gated = true;
|
||
|
+ hw_cfg->clock_gated =
|
||
|
+ SND_SOC_TPLG_DAI_CLK_GATE_GATED;
|
||
|
+ else
|
||
|
+ hw_cfg->clock_gated =
|
||
|
+ SND_SOC_TPLG_DAI_CLK_GATE_CONT;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 7cf73b56e4505ad194f5789293494a6ebaa1feff Mon Sep 17 00:00:00 2001
|
||
|
From: Kirill Marinushkin <k.marinushkin@gmail.com>
|
||
|
Date: Mon, 16 Apr 2018 20:26:40 +0200
|
||
|
Subject: [PATCH 06/26] ASoC: topology: Add definitions for mclk_direction
|
||
|
values
|
||
|
|
||
|
Current comment makes not clear the direction of mclk. Previously, similar
|
||
|
description caused a misunderstanding for bclk_master and fsync_master.
|
||
|
|
||
|
This commit solves the potential confusion the same way it is solved for
|
||
|
bclk_master and fsync_master.
|
||
|
|
||
|
Signed-off-by: Kirill Marinushkin <k.marinushkin@gmail.com>
|
||
|
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Cc: Jaroslav Kysela <perex@perex.cz>
|
||
|
Cc: Takashi Iwai <tiwai@suse.de>
|
||
|
Cc: Mark Brown <broonie@kernel.org>
|
||
|
Cc: Pan Xiuli <xiuli.pan@linux.intel.com>
|
||
|
Cc: Liam Girdwood <liam.r.girdwood@linux.intel.com>
|
||
|
Cc: alsa-devel@alsa-project.org
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
include/sound/asoc.h | 6 +++++-
|
||
|
include/topology.h | 2 +-
|
||
|
src/topology/pcm.c | 15 +++++++++++++--
|
||
|
3 files changed, 19 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/include/sound/asoc.h b/include/sound/asoc.h
|
||
|
index 297e837c..bb8aec78 100644
|
||
|
--- a/include/sound/asoc.h
|
||
|
+++ b/include/sound/asoc.h
|
||
|
@@ -140,6 +140,10 @@
|
||
|
#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1
|
||
|
#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2
|
||
|
|
||
|
+/* DAI mclk_direction */
|
||
|
+#define SND_SOC_TPLG_MCLK_CO 0 /* for codec, mclk is output */
|
||
|
+#define SND_SOC_TPLG_MCLK_CI 1 /* for codec, mclk is input */
|
||
|
+
|
||
|
/* DAI physical PCM data formats.
|
||
|
* Add new formats to the end of the list.
|
||
|
*/
|
||
|
@@ -330,7 +334,7 @@ struct snd_soc_tplg_hw_config {
|
||
|
__u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */
|
||
|
__u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */
|
||
|
__u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
|
||
|
- __u8 mclk_direction; /* 0 for input, 1 for output */
|
||
|
+ __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
|
||
|
__le16 reserved; /* for 32bit alignment */
|
||
|
__le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */
|
||
|
__le32 bclk_rate; /* BCLK freqency in Hz */
|
||
|
diff --git a/include/topology.h b/include/topology.h
|
||
|
index 3793115c..27da7308 100644
|
||
|
--- a/include/topology.h
|
||
|
+++ b/include/topology.h
|
||
|
@@ -1002,7 +1002,7 @@ struct snd_tplg_hw_config_template {
|
||
|
unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
|
||
|
unsigned char bclk_master; /* SND_SOC_TPLG_BCLK_ value */
|
||
|
unsigned char fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
|
||
|
- unsigned char mclk_direction; /* 0 for input, 1 for output */
|
||
|
+ unsigned char mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
|
||
|
unsigned short reserved; /* for 32bit alignment */
|
||
|
unsigned int mclk_rate; /* MCLK or SYSCLK freqency in Hz */
|
||
|
unsigned int bclk_rate; /* BCLK freqency in Hz */
|
||
|
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
||
|
index b53f6b03..2ce1651b 100644
|
||
|
--- a/src/topology/pcm.c
|
||
|
+++ b/src/topology/pcm.c
|
||
|
@@ -1223,8 +1223,19 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
- if (!strcmp(val, "master"))
|
||
|
- hw_cfg->mclk_direction = true;
|
||
|
+ if (!strcmp(val, "master")) {
|
||
|
+ /* For backwards capability,
|
||
|
+ * "master" == "for codec, mclk is input"
|
||
|
+ */
|
||
|
+ SNDERR("warning: deprecated mclk value '%s'\n",
|
||
|
+ val);
|
||
|
+
|
||
|
+ hw_cfg->mclk_direction = SND_SOC_TPLG_MCLK_CI;
|
||
|
+ } else if (!strcmp(val, "codec_mclk_in")) {
|
||
|
+ hw_cfg->mclk_direction = SND_SOC_TPLG_MCLK_CI;
|
||
|
+ } else if (!strcmp(val, "codec_mclk_out")) {
|
||
|
+ hw_cfg->mclk_direction = SND_SOC_TPLG_MCLK_CO;
|
||
|
+ }
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 4493f6a560a315970f5b068126120526a04ae6a2 Mon Sep 17 00:00:00 2001
|
||
|
From: Kirill Marinushkin <k.marinushkin@gmail.com>
|
||
|
Date: Mon, 16 Apr 2018 20:26:41 +0200
|
||
|
Subject: [PATCH 07/26] ASoC: topology: Add alias conf parameter names for
|
||
|
hw_configs
|
||
|
|
||
|
Currently, some parameter names in conf differ from field names in struct.
|
||
|
These look like typos.
|
||
|
|
||
|
This commit suggests to add aliases for such parameters, so that the names
|
||
|
in conf are similar to names in struct. This solution is backwards
|
||
|
compatible.
|
||
|
|
||
|
If the difference between conf names and struct names is done on purpose -
|
||
|
this commit can be dropped.
|
||
|
|
||
|
Signed-off-by: Kirill Marinushkin <k.marinushkin@gmail.com>
|
||
|
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Cc: Jaroslav Kysela <perex@perex.cz>
|
||
|
Cc: Takashi Iwai <tiwai@suse.de>
|
||
|
Cc: Mark Brown <broonie@kernel.org>
|
||
|
Cc: Pan Xiuli <xiuli.pan@linux.intel.com>
|
||
|
Cc: Liam Girdwood <liam.r.girdwood@linux.intel.com>
|
||
|
Cc: alsa-devel@alsa-project.org
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/topology/pcm.c | 30 ++++++++++++++++++++----------
|
||
|
1 file changed, 20 insertions(+), 10 deletions(-)
|
||
|
|
||
|
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
||
|
index 2ce1651b..8ebfafd8 100644
|
||
|
--- a/src/topology/pcm.c
|
||
|
+++ b/src/topology/pcm.c
|
||
|
@@ -1126,7 +1126,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "format") == 0) {
|
||
|
+ if (strcmp(id, "format") == 0 ||
|
||
|
+ strcmp(id, "fmt") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1137,7 +1138,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "bclk") == 0) {
|
||
|
+ if (strcmp(id, "bclk") == 0 ||
|
||
|
+ strcmp(id, "bclk_master") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1157,7 +1159,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "bclk_freq") == 0) {
|
||
|
+ if (strcmp(id, "bclk_freq") == 0 ||
|
||
|
+ strcmp(id, "bclk_rate") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1165,7 +1168,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "bclk_invert") == 0) {
|
||
|
+ if (strcmp(id, "bclk_invert") == 0 ||
|
||
|
+ strcmp(id, "invert_bclk") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1174,7 +1178,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "fsync") == 0) {
|
||
|
+ if (strcmp(id, "fsync") == 0 ||
|
||
|
+ strcmp(id, "fsync_master") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1194,7 +1199,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "fsync_invert") == 0) {
|
||
|
+ if (strcmp(id, "fsync_invert") == 0 ||
|
||
|
+ strcmp(id, "invert_fsync") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1203,7 +1209,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "fsync_freq") == 0) {
|
||
|
+ if (strcmp(id, "fsync_freq") == 0 ||
|
||
|
+ strcmp(id, "fsync_rate") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1211,7 +1218,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "mclk_freq") == 0) {
|
||
|
+ if (strcmp(id, "mclk_freq") == 0 ||
|
||
|
+ strcmp(id, "mclk_rate") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1219,7 +1227,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "mclk") == 0) {
|
||
|
+ if (strcmp(id, "mclk") == 0 ||
|
||
|
+ strcmp(id, "mclk_direction") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
@@ -1239,7 +1248,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if (strcmp(id, "pm_gate_clocks") == 0) {
|
||
|
+ if (strcmp(id, "pm_gate_clocks") == 0 ||
|
||
|
+ strcmp(id, "clock_gated") == 0) {
|
||
|
if (snd_config_get_string(n, &val) < 0)
|
||
|
return -EINVAL;
|
||
|
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 23a20cda111232b5d21dde12d10e19e4ecb71cea Mon Sep 17 00:00:00 2001
|
||
|
From: Ricard Wanderlof <ricard.wanderlof@axis.com>
|
||
|
Date: Wed, 18 Apr 2018 17:03:09 +0200
|
||
|
Subject: [PATCH 08/26] pcm: softvol: Allow up to 90 dB of gain
|
||
|
|
||
|
The gain algorithm used in softvol can handle gain factors of up to
|
||
|
32767 which is slightly more than 90 dB, so allow a max_dB of 90 dB.
|
||
|
This doesn't affect existing asound.conf files, but does allow a
|
||
|
max_dB of up to 90 dB when needed.
|
||
|
|
||
|
Tested using Audacity that there is no undue distorsion or other
|
||
|
artefacts when 90 dB of gain is applied to a suitable signal (i.e.
|
||
|
a signal quiet enough not be clipped whan applying 90 dB of gain).
|
||
|
|
||
|
Signed-off-by: Ricard Wanderlof <ricardw@axis.com>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/pcm/pcm_softvol.c | 6 +++++-
|
||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/src/pcm/pcm_softvol.c b/src/pcm/pcm_softvol.c
|
||
|
index 8bb4a397..0eaeacef 100644
|
||
|
--- a/src/pcm/pcm_softvol.c
|
||
|
+++ b/src/pcm/pcm_softvol.c
|
||
|
@@ -59,7 +59,11 @@ typedef struct {
|
||
|
#define PRESET_RESOLUTION 256
|
||
|
#define PRESET_MIN_DB -51.0
|
||
|
#define ZERO_DB 0.0
|
||
|
-#define MAX_DB_UPPER_LIMIT 50
|
||
|
+/*
|
||
|
+ * The gain algorithm as it stands supports gain factors up to 32767, which
|
||
|
+ * is a fraction more than 90 dB, so set 90 dB as the maximum possible gain.
|
||
|
+ */
|
||
|
+#define MAX_DB_UPPER_LIMIT 90
|
||
|
|
||
|
static const unsigned int preset_dB_value[PRESET_RESOLUTION] = {
|
||
|
0x00b8, 0x00bd, 0x00c1, 0x00c5, 0x00ca, 0x00cf, 0x00d4, 0x00d9,
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 181f8e251bc05832f9c9401544e680ea0572a2e3 Mon Sep 17 00:00:00 2001
|
||
|
From: Hui Wang <hui.wang@canonical.com>
|
||
|
Date: Wed, 2 May 2018 14:08:05 +0800
|
||
|
Subject: [PATCH 09/26] ucm: adding the folder of card_long_name when finding
|
||
|
verb conf file
|
||
|
|
||
|
The board configuration file and verb conf file are allowed to be
|
||
|
in the folder named of card_long_name, so when finding the verb conf
|
||
|
file, we need to check if it is in the folder of card_long_name or
|
||
|
card_name.
|
||
|
|
||
|
Signed-off-by: Hui Wang <hui.wang@canonical.com>
|
||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||
|
---
|
||
|
src/ucm/parser.c | 10 ++++++++--
|
||
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
||
|
index 2d76152f..219edb96 100644
|
||
|
--- a/src/ucm/parser.c
|
||
|
+++ b/src/ucm/parser.c
|
||
|
@@ -1056,6 +1056,7 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr,
|
||
|
char filename[MAX_FILE];
|
||
|
char *env = getenv(ALSA_CONFIG_UCM_VAR);
|
||
|
int err;
|
||
|
+ char *folder_name;
|
||
|
|
||
|
/* allocate verb */
|
||
|
verb = calloc(1, sizeof(struct use_case_verb));
|
||
|
@@ -1082,12 +1083,17 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr,
|
||
|
}
|
||
|
|
||
|
/* open Verb file for reading */
|
||
|
+ if (!strncmp(uc_mgr->conf_file_name, uc_mgr->card_long_name, MAX_CARD_LONG_NAME))
|
||
|
+ folder_name = uc_mgr->card_long_name;
|
||
|
+ else
|
||
|
+ folder_name = uc_mgr->card_name;
|
||
|
+
|
||
|
if (env)
|
||
|
snprintf(filename, sizeof(filename), "%s/%s/%s",
|
||
|
- env, uc_mgr->card_name, file);
|
||
|
+ env, folder_name, file);
|
||
|
else
|
||
|
snprintf(filename, sizeof(filename), "%s/ucm/%s/%s",
|
||
|
- snd_config_topdir(), uc_mgr->card_name, file);
|
||
|
+ snd_config_topdir(), folder_name, file);
|
||
|
filename[sizeof(filename)-1] = '\0';
|
||
|
|
||
|
err = uc_mgr_config_load(filename, &cfg);
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 81db276f8c2235adc83e9698b0174265f6482655 Mon Sep 17 00:00:00 2001
|
||
|
From: Hui Wang <hui.wang@canonical.com>
|
||
|
Date: Wed, 2 May 2018 14:08:06 +0800
|
||
|
Subject: [PATCH 10/26] conf/ucm: increase the input volume for LineIn
|
||
|
|
||
|
Otherwise, the boost value is 0, and the sound captured from that
|
||
|
LineIn jack is too weak for users.
|
||
|
|
||
|
Signed-off-by: Hui Wang <hui.wang@canonical.com>
|
||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||
|
---
|
||
|
src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf | 1 +
|
||
|
1 file changed, 1 insertion(+)
|
||
|
|
||
|
diff --git a/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf b/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf
|
||
|
index 50967896..ece780da 100644
|
||
|
--- a/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf
|
||
|
+++ b/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf
|
||
|
@@ -99,6 +99,7 @@ SectionDevice."LineIn" {
|
||
|
EnableSequence [
|
||
|
cdev "hw:PCH"
|
||
|
cset "name='Input Source' Line"
|
||
|
+ cset "name='Line Boost Volume' 3"
|
||
|
]
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From f7c38c29d1be8bab9dd4f406aea3b0e9151c1c06 Mon Sep 17 00:00:00 2001
|
||
|
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Date: Sat, 28 Apr 2018 21:51:56 +0200
|
||
|
Subject: [PATCH 11/26] conf/ucm: chtrt5645: Cleanup and playback fixes
|
||
|
|
||
|
Apply cleanup and playback fixes changes from:
|
||
|
https://github.com/plbossart/UCM.git
|
||
|
|
||
|
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
[hdegoede@redhat.com: Modify commit msg and paths for merging into alsa-lib]
|
||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/conf/ucm/chtrt5645/HiFi.conf | 157 ++++++++++++++++++++++++++++++++-------
|
||
|
1 file changed, 129 insertions(+), 28 deletions(-)
|
||
|
|
||
|
diff --git a/src/conf/ucm/chtrt5645/HiFi.conf b/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
index 0c2c83cc..f63392d4 100644
|
||
|
--- a/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
+++ b/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
@@ -11,51 +11,146 @@ SectionVerb {
|
||
|
EnableSequence [
|
||
|
cdev "hw:chtrt5645"
|
||
|
|
||
|
- # Enable audio output path
|
||
|
- cset "name='codec_out1 mix 0 pcm0_in Switch' on"
|
||
|
- cset "name='media0_out mix 0 media1_in Switch' on"
|
||
|
+ # media mixer settings
|
||
|
+ # compress
|
||
|
+ cset "name='media0_in Gain 0 Switch' on"
|
||
|
+ cset "name='media0_in Gain 0 Volume' 0"
|
||
|
|
||
|
- cset "name='media1_in Gain 0 Ramp Delay' 50"
|
||
|
+ # normal
|
||
|
cset "name='media1_in Gain 0 Switch' on"
|
||
|
- cset "name='media1_in Gain 0 Volume' 80% 80%"
|
||
|
+ cset "name='media1_in Gain 0 Volume' 0"
|
||
|
+ # swm loopback
|
||
|
+ cset "name='media2_in Gain 0 Switch' off"
|
||
|
+ cset "name='media2_in Gain 0 Volume' 0%"
|
||
|
+ # deep buffer
|
||
|
+ cset "name='media3_in Gain 0 Switch' on"
|
||
|
+ cset "name='media3_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ cset "name='media0_out mix 0 media0_in Switch' on"
|
||
|
+ cset "name='media0_out mix 0 media1_in Switch' on"
|
||
|
+ cset "name='media0_out mix 0 media2_in Switch' off"
|
||
|
+ cset "name='media0_out mix 0 media3_in Switch' on"
|
||
|
+
|
||
|
+ cset "name='media1_out mix 0 media0_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media1_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media2_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media3_in Switch' off"
|
||
|
|
||
|
- cset "name='pcm0_in Gain 0 Ramp Delay' 50"
|
||
|
cset "name='pcm0_in Gain 0 Switch' on"
|
||
|
- cset "name='pcm0_in Gain 0 Volume' 80% 80%"
|
||
|
+ cset "name='pcm0_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ cset "name='pcm1_in Gain 0 Switch' off"
|
||
|
+ cset "name='pcm1_in Gain 0 Volume' 0%"
|
||
|
+
|
||
|
+ # codec0_out settings (used if ssp2 is connected to aif1)
|
||
|
+ cset "name='codec_out0 mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 pcm0_in Switch' on"
|
||
|
+ cset "name='codec_out0 mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='codec_out0 Gain 0 Switch' on"
|
||
|
+ cset "name='codec_out0 Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # modem_out settings (used if ssp0 is connected to aif2)
|
||
|
+ cset "name='modem_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='modem_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='modem_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 pcm0_in Switch' on"
|
||
|
+ cset "name='modem_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='modem_out Gain 0 Switch' on"
|
||
|
+ cset "name='modem_out Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # input settings
|
||
|
+ # pcm1_out settings
|
||
|
+
|
||
|
+ # input used when SSP2 is connected
|
||
|
+ cset "name='codec_in0 Gain 0 Switch' on"
|
||
|
+ cset "name='codec_in0 Gain 0 Volume' 0"
|
||
|
|
||
|
- cset "name='codec_out1 Gain 0 Ramp Delay' 50"
|
||
|
- cset "name='codec_out1 Gain 0 Switch' on"
|
||
|
- cset "name='codec_out1 Gain 0 Volume' 70% 70%"
|
||
|
+ # input used when SSP0 is connected
|
||
|
+ cset "name='modem_in Gain 0 Switch' on"
|
||
|
+ cset "name='modem_in Gain 0 Volume' 0"
|
||
|
|
||
|
- # Enable audio input path
|
||
|
- cset "name='pcm1_out mix 0 media_loop2_in Switch' on"
|
||
|
- cset "name='media_loop2_out mix 0 codec_in0 Switch' on"
|
||
|
+ cset "name='pcm1_out mix 0 codec_in0 Switch' on"
|
||
|
+ cset "name='pcm1_out mix 0 modem_in Switch' on"
|
||
|
+ cset "name='pcm1_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 sprot_loop_in Switch' off"
|
||
|
|
||
|
- cset "name='codec_in0 Gain 0 Ramp Delay' 50"
|
||
|
- cset "name='codec_in0 Gain 0 Switch' on"
|
||
|
- cset "name='codec_in0 Gain 0 Volume' 80% 80%"
|
||
|
+ cset "name='pcm1_out Gain 0 Switch' on"
|
||
|
+ cset "name='pcm1_out Gain 0 Volume' 0"
|
||
|
|
||
|
- cset "name='media_loop2_out Gain 0 Ramp Delay' 50"
|
||
|
- cset "name='media_loop2_out Gain 0 Switch' on"
|
||
|
- cset "name='media_loop2_out Gain 0 Volume' 80% 80%"
|
||
|
+ # disable codec_out1
|
||
|
+ cset "name='codec_out1 mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='codec_out1 Gain 0 Switch' off"
|
||
|
+ cset "name='codec_out1 Gain 0 Volume' 0%"
|
||
|
|
||
|
- cset "name='pcm1_out Gain 0 Ramp Delay' 50"
|
||
|
- cset "name='pcm1_out Gain 0 Switch' on"
|
||
|
- cset "name='pcm1_out Gain 0 Volume' 80% 80%"
|
||
|
+ # disable codec_in1
|
||
|
+ cset "name='codec_in1 Gain 0 Switch' off"
|
||
|
+ cset "name='codec_in1 Gain 0 Volume' 0%"
|
||
|
+
|
||
|
+ # disable all loops
|
||
|
+ cset "name='media_loop1_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='media_loop2_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='sprot_loop_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 sprot_loop_in Switch' off"
|
||
|
|
||
|
# Output Configuration
|
||
|
- cset "name='DAC L2 Mux' 'IF1 DAC'"
|
||
|
- cset "name='DAC R2 Mux' 'IF1 DAC'"
|
||
|
+ cset "name='DAC1 L Mux' IF1 DAC"
|
||
|
+ cset "name='DAC1 R Mux' IF1 DAC"
|
||
|
+ cset "name='DAC1 MIXL DAC1 Switch' 1"
|
||
|
+ cset "name='DAC1 MIXR DAC1 Switch' 1"
|
||
|
+ cset "name='Stereo DAC MIXL DAC L1 Switch' 1"
|
||
|
+ cset "name='Stereo DAC MIXR DAC R1 Switch' 1"
|
||
|
+
|
||
|
+ cset "name='DAC L2 Mux' IF2 DAC"
|
||
|
+ cset "name='DAC R2 Mux' IF2 DAC"
|
||
|
cset "name='Mono DAC MIXL DAC L2 Switch' on"
|
||
|
cset "name='Mono DAC MIXR DAC R2 Switch' on"
|
||
|
cset "name='DAC2 Playback Switch' on"
|
||
|
|
||
|
+ cset "name='HPOVOL MIXL DAC1 Switch' on"
|
||
|
+ cset "name='HPOVOL MIXR DAC1 Switch' on"
|
||
|
cset "name='HPOVOL MIXL DAC2 Switch' on"
|
||
|
cset "name='HPOVOL MIXR DAC2 Switch' on"
|
||
|
cset "name='HPO MIX HPVOL Switch' on"
|
||
|
cset "name='HPOVOL L Switch' on"
|
||
|
cset "name='HPOVOL R Switch' on"
|
||
|
|
||
|
+ cset "name='SPK MIXL DAC L1 Switch' on"
|
||
|
+ cset "name='SPK MIXR DAC R1 Switch' on"
|
||
|
cset "name='SPK MIXL DAC L2 Switch' on"
|
||
|
cset "name='SPK MIXR DAC R2 Switch' on"
|
||
|
cset "name='SPOL MIX SPKVOL L Switch' on"
|
||
|
@@ -105,15 +200,18 @@ SectionDevice."Speaker" {
|
||
|
}
|
||
|
|
||
|
ConflictingDevice [
|
||
|
- "Headphone"
|
||
|
+ "Headphones"
|
||
|
]
|
||
|
|
||
|
EnableSequence [
|
||
|
cdev "hw:chtrt5645"
|
||
|
|
||
|
+ cset "name='Headphone Switch' off"
|
||
|
+ cset "name='Headphone Channel Switch' off"
|
||
|
+
|
||
|
cset "name='Ext Spk Switch' on"
|
||
|
cset "name='Speaker Channel Switch' on"
|
||
|
- cset "name='Speaker Playback Volume' 39"
|
||
|
+ cset "name='Speaker Playback Volume' 31"
|
||
|
]
|
||
|
|
||
|
DisableSequence [
|
||
|
@@ -124,7 +222,7 @@ SectionDevice."Speaker" {
|
||
|
]
|
||
|
}
|
||
|
|
||
|
-SectionDevice."Headphone".0 {
|
||
|
+SectionDevice."Headphones" {
|
||
|
Comment "Headphones"
|
||
|
|
||
|
Value {
|
||
|
@@ -140,9 +238,12 @@ SectionDevice."Headphone".0 {
|
||
|
EnableSequence [
|
||
|
cdev "hw:chtrt5645"
|
||
|
|
||
|
+ cset "name='Ext Spk Switch' off"
|
||
|
+ cset "name='Speaker Channel Switch' off"
|
||
|
+
|
||
|
cset "name='Headphone Switch' on"
|
||
|
cset "name='Headphone Channel Switch' on"
|
||
|
- cset "name='Headphone Playback Volume' 39"
|
||
|
+ cset "name='Headphone Playback Volume' 31"
|
||
|
]
|
||
|
|
||
|
DisableSequence [
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 4c0d983d7b4402e7275455ac43f39049b45037ea Mon Sep 17 00:00:00 2001
|
||
|
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Date: Sat, 28 Apr 2018 21:51:57 +0200
|
||
|
Subject: [PATCH 12/26] conf/ucm: chtrt5645: Microphone recording fixes
|
||
|
|
||
|
Apply microphone recording changes from:
|
||
|
https://github.com/plbossart/UCM.git
|
||
|
|
||
|
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||
|
[hdegoede@redhat.com: Drop non generic DMIC changes]
|
||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/conf/ucm/chtrt5645/HiFi.conf | 50 ++++++++++++++++++++++++++++++++--------
|
||
|
1 file changed, 41 insertions(+), 9 deletions(-)
|
||
|
|
||
|
diff --git a/src/conf/ucm/chtrt5645/HiFi.conf b/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
index f63392d4..b97a9c00 100644
|
||
|
--- a/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
+++ b/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
@@ -4,8 +4,8 @@ SectionVerb {
|
||
|
TQ "HiFi"
|
||
|
|
||
|
# ALSA PCM device for HiFi
|
||
|
- PlaybackPCM "hw:chtrt5645,0"
|
||
|
- CapturePCM "hw:chtrt5645,0"
|
||
|
+ PlaybackPCM "hw:chtrt5645"
|
||
|
+ CapturePCM "hw:chtrt5645"
|
||
|
}
|
||
|
|
||
|
EnableSequence [
|
||
|
@@ -255,7 +255,7 @@ SectionDevice."Headphones" {
|
||
|
}
|
||
|
|
||
|
SectionDevice."Mic".0 {
|
||
|
- Comment "Internal Microphone"
|
||
|
+ Comment "Internal Analog Microphones"
|
||
|
|
||
|
Value {
|
||
|
CaptureChannels "2"
|
||
|
@@ -266,15 +266,33 @@ SectionDevice."Mic".0 {
|
||
|
cdev "hw:chtrt5645"
|
||
|
|
||
|
cset "name='Int Mic Switch' on"
|
||
|
- cset "name='Sto1 ADC MIXL ADC2 Switch' on"
|
||
|
- cset "name='Sto1 ADC MIXR ADC2 Switch' on"
|
||
|
+
|
||
|
+ cset "name='Sto1 ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC1 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC2 Switch' off"
|
||
|
+
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC2 Switch' off"
|
||
|
+
|
||
|
+ cset "name='RECMIXL BST1 Switch' on"
|
||
|
+ cset "name='RECMIXR BST1 Switch' on"
|
||
|
+
|
||
|
]
|
||
|
|
||
|
DisableSequence [
|
||
|
cdev "hw:chtrt5645"
|
||
|
|
||
|
- cset "name='Sto1 ADC MIXL ADC2 Switch' off"
|
||
|
- cset "name='Sto1 ADC MIXR ADC2 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' off"
|
||
|
+
|
||
|
+ cset "name='RECMIXL BST1 Switch' off"
|
||
|
+ cset "name='RECMIXR BST1 Switch' off"
|
||
|
+
|
||
|
cset "name='Int Mic Switch' off"
|
||
|
]
|
||
|
}
|
||
|
@@ -292,19 +310,33 @@ SectionDevice."HSMic".0 {
|
||
|
cdev "hw:chtrt5645"
|
||
|
|
||
|
cset "name='Headset Mic Switch' on"
|
||
|
- cset "name='RECMIXL BST1 Switch' on"
|
||
|
- cset "name='RECMIXR BST1 Switch' on"
|
||
|
+
|
||
|
cset "name='Sto1 ADC MIXL ADC1 Switch' on"
|
||
|
cset "name='Sto1 ADC MIXR ADC1 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC2 Switch' off"
|
||
|
+
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC2 Switch' off"
|
||
|
+
|
||
|
+ cset "name='RECMIXL BST1 Switch' on"
|
||
|
+ cset "name='RECMIXR BST1 Switch' on"
|
||
|
+
|
||
|
]
|
||
|
|
||
|
DisableSequence [
|
||
|
cdev "hw:chtrt5645"
|
||
|
|
||
|
cset "name='Headset Mic Switch' off"
|
||
|
+
|
||
|
cset "name='RECMIXL BST1 Switch' off"
|
||
|
cset "name='RECMIXR BST1 Switch' off"
|
||
|
cset "name='Sto1 ADC MIXL ADC1 Switch' off"
|
||
|
cset "name='Sto1 ADC MIXR ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' on"
|
||
|
+
|
||
|
]
|
||
|
}
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 76bc53e69a12163a86e6746fd3011de6b1652043 Mon Sep 17 00:00:00 2001
|
||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||
|
Date: Sat, 28 Apr 2018 21:51:58 +0200
|
||
|
Subject: [PATCH 13/26] conf/ucm: chtrt5645: Fix recording from internal analog
|
||
|
microphone
|
||
|
|
||
|
The internal analog mic switch is called 'Int Analog Mic Switch'
|
||
|
(not 'Int Mic Switch') and is connected to BST2 not BST1.
|
||
|
|
||
|
Also change the analog mic volume levels so that we get better
|
||
|
audio / less noise.
|
||
|
|
||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/conf/ucm/chtrt5645/HiFi.conf | 38 ++++++++++++++++++++++++--------------
|
||
|
1 file changed, 24 insertions(+), 14 deletions(-)
|
||
|
|
||
|
diff --git a/src/conf/ucm/chtrt5645/HiFi.conf b/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
index b97a9c00..e81866cf 100644
|
||
|
--- a/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
+++ b/src/conf/ucm/chtrt5645/HiFi.conf
|
||
|
@@ -160,15 +160,24 @@ SectionVerb {
|
||
|
|
||
|
# Input Configuration
|
||
|
cset "name='Stereo1 DMIC Mux' 0"
|
||
|
+ cset "name='Stereo1 ADC1 Mux' 1"
|
||
|
cset "name='Stereo1 ADC2 Mux' 1"
|
||
|
cset "name='ADC Capture Switch' on"
|
||
|
- cset "name='ADC Capture Volume' 31"
|
||
|
- cset "name='ADC Boost Capture Volume' 3"
|
||
|
- cset "name='Mono ADC Capture Volume' 63"
|
||
|
- cset "name='Mono ADC Boost Capture Volume' 2"
|
||
|
- cset "name='IN Capture Volume' 63"
|
||
|
+ # 55/63
|
||
|
+ cset "name='ADC Capture Volume' 55"
|
||
|
+ # set ADC Boost to 0/3, higher vals cause a lot of white noise
|
||
|
+ cset "name='ADC Boost Capture Volume' 0"
|
||
|
+ # 55/63
|
||
|
+ cset "name='Mono ADC Capture Volume' 55"
|
||
|
+ # 0/3
|
||
|
+ cset "name='Mono ADC Boost Capture Volume' 0"
|
||
|
+ # 27/31
|
||
|
+ cset "name='IN Capture Volume' 27"
|
||
|
cset "name='I2S2 Func Switch' on"
|
||
|
-
|
||
|
+ # 3/12 the headphone mic tends to be quite loud
|
||
|
+ cset "name='IN1 Boost' 3"
|
||
|
+ # 8/8 the internal analog mic tends to be quite soft
|
||
|
+ cset "name='IN2 Boost' 8"
|
||
|
]
|
||
|
|
||
|
DisableSequence [
|
||
|
@@ -243,7 +252,8 @@ SectionDevice."Headphones" {
|
||
|
|
||
|
cset "name='Headphone Switch' on"
|
||
|
cset "name='Headphone Channel Switch' on"
|
||
|
- cset "name='Headphone Playback Volume' 31"
|
||
|
+ # 25/39 higher values cause crackling on some boards
|
||
|
+ cset "name='Headphone Playback Volume' 25"
|
||
|
]
|
||
|
|
||
|
DisableSequence [
|
||
|
@@ -255,7 +265,7 @@ SectionDevice."Headphones" {
|
||
|
}
|
||
|
|
||
|
SectionDevice."Mic".0 {
|
||
|
- Comment "Internal Analog Microphones"
|
||
|
+ Comment "Internal Analog Microphone"
|
||
|
|
||
|
Value {
|
||
|
CaptureChannels "2"
|
||
|
@@ -265,7 +275,7 @@ SectionDevice."Mic".0 {
|
||
|
EnableSequence [
|
||
|
cdev "hw:chtrt5645"
|
||
|
|
||
|
- cset "name='Int Mic Switch' on"
|
||
|
+ cset "name='Int Analog Mic Switch' on"
|
||
|
|
||
|
cset "name='Sto1 ADC MIXL ADC1 Switch' on"
|
||
|
cset "name='Sto1 ADC MIXR ADC1 Switch' on"
|
||
|
@@ -277,8 +287,8 @@ SectionDevice."Mic".0 {
|
||
|
cset "name='Mono ADC MIXL ADC2 Switch' off"
|
||
|
cset "name='Mono ADC MIXR ADC2 Switch' off"
|
||
|
|
||
|
- cset "name='RECMIXL BST1 Switch' on"
|
||
|
- cset "name='RECMIXR BST1 Switch' on"
|
||
|
+ cset "name='RECMIXL BST2 Switch' on"
|
||
|
+ cset "name='RECMIXR BST2 Switch' on"
|
||
|
|
||
|
]
|
||
|
|
||
|
@@ -290,10 +300,10 @@ SectionDevice."Mic".0 {
|
||
|
cset "name='Mono ADC MIXL ADC1 Switch' off"
|
||
|
cset "name='Mono ADC MIXR ADC1 Switch' off"
|
||
|
|
||
|
- cset "name='RECMIXL BST1 Switch' off"
|
||
|
- cset "name='RECMIXR BST1 Switch' off"
|
||
|
+ cset "name='RECMIXL BST2 Switch' off"
|
||
|
+ cset "name='RECMIXR BST2 Switch' off"
|
||
|
|
||
|
- cset "name='Int Mic Switch' off"
|
||
|
+ cset "name='Int Analog Mic Switch' off"
|
||
|
]
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From c22a7f423ddef2a1376bc84f2aafc0a167192ab6 Mon Sep 17 00:00:00 2001
|
||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||
|
Date: Sat, 28 Apr 2018 21:51:59 +0200
|
||
|
Subject: [PATCH 14/26] conf/ucm: chtrt5645: At config for the Asus T100HA
|
||
|
|
||
|
The Asus T100HA uses a digital mic rather then an analog one, add
|
||
|
long-name config specific for the T100HA, which is a copy of the standard
|
||
|
chtrt5645 config with the internal analog mic section replaced with one
|
||
|
for the digital mic found on the Asus T100HA.
|
||
|
|
||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
configure.ac | 1 +
|
||
|
.../ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN.conf | 5 +
|
||
|
.../HiFi.conf | 348 +++++++++++++++++++++
|
||
|
.../Makefile.am | 4 +
|
||
|
src/conf/ucm/Makefile.am | 1 +
|
||
|
5 files changed, 359 insertions(+)
|
||
|
create mode 100644 src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN.conf
|
||
|
create mode 100644 src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/HiFi.conf
|
||
|
create mode 100644 src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/Makefile.am
|
||
|
|
||
|
diff --git a/configure.ac b/configure.ac
|
||
|
index 5bc1994f..94baf055 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -717,6 +717,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
|
||
|
src/conf/cards/Makefile \
|
||
|
src/conf/pcm/Makefile \
|
||
|
src/conf/ucm/Makefile \
|
||
|
+ src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/Makefile \
|
||
|
src/conf/ucm/broadwell-rt286/Makefile \
|
||
|
src/conf/ucm/broxton-rt298/Makefile \
|
||
|
src/conf/ucm/bytcr-rt5651/Makefile \
|
||
|
diff --git a/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN.conf b/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN.conf
|
||
|
new file mode 100644
|
||
|
index 00000000..5afe5f0b
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN.conf
|
||
|
@@ -0,0 +1,5 @@
|
||
|
+Comment "Intel SoC Audio Device"
|
||
|
+SectionUseCase."HiFi" {
|
||
|
+ File "../ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/HiFi.conf"
|
||
|
+ Comment "Default"
|
||
|
+}
|
||
|
diff --git a/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/HiFi.conf b/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/HiFi.conf
|
||
|
new file mode 100644
|
||
|
index 00000000..78bf9823
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/HiFi.conf
|
||
|
@@ -0,0 +1,348 @@
|
||
|
+SectionVerb {
|
||
|
+ # ALSA PCM
|
||
|
+ Value {
|
||
|
+ TQ "HiFi"
|
||
|
+
|
||
|
+ # ALSA PCM device for HiFi
|
||
|
+ PlaybackPCM "hw:chtrt5645"
|
||
|
+ CapturePCM "hw:chtrt5645"
|
||
|
+ }
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ # media mixer settings
|
||
|
+ # compress
|
||
|
+ cset "name='media0_in Gain 0 Switch' on"
|
||
|
+ cset "name='media0_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # normal
|
||
|
+ cset "name='media1_in Gain 0 Switch' on"
|
||
|
+ cset "name='media1_in Gain 0 Volume' 0"
|
||
|
+ # swm loopback
|
||
|
+ cset "name='media2_in Gain 0 Switch' off"
|
||
|
+ cset "name='media2_in Gain 0 Volume' 0%"
|
||
|
+ # deep buffer
|
||
|
+ cset "name='media3_in Gain 0 Switch' on"
|
||
|
+ cset "name='media3_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ cset "name='media0_out mix 0 media0_in Switch' on"
|
||
|
+ cset "name='media0_out mix 0 media1_in Switch' on"
|
||
|
+ cset "name='media0_out mix 0 media2_in Switch' off"
|
||
|
+ cset "name='media0_out mix 0 media3_in Switch' on"
|
||
|
+
|
||
|
+ cset "name='media1_out mix 0 media0_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media1_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media2_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media3_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='pcm0_in Gain 0 Switch' on"
|
||
|
+ cset "name='pcm0_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ cset "name='pcm1_in Gain 0 Switch' off"
|
||
|
+ cset "name='pcm1_in Gain 0 Volume' 0%"
|
||
|
+
|
||
|
+ # codec0_out settings (used if ssp2 is connected to aif1)
|
||
|
+ cset "name='codec_out0 mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 pcm0_in Switch' on"
|
||
|
+ cset "name='codec_out0 mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='codec_out0 Gain 0 Switch' on"
|
||
|
+ cset "name='codec_out0 Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # modem_out settings (used if ssp0 is connected to aif2)
|
||
|
+ cset "name='modem_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='modem_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='modem_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 pcm0_in Switch' on"
|
||
|
+ cset "name='modem_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='modem_out Gain 0 Switch' on"
|
||
|
+ cset "name='modem_out Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # input settings
|
||
|
+ # pcm1_out settings
|
||
|
+
|
||
|
+ # input used when SSP2 is connected
|
||
|
+ cset "name='codec_in0 Gain 0 Switch' on"
|
||
|
+ cset "name='codec_in0 Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # input used when SSP0 is connected
|
||
|
+ cset "name='modem_in Gain 0 Switch' on"
|
||
|
+ cset "name='modem_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ cset "name='pcm1_out mix 0 codec_in0 Switch' on"
|
||
|
+ cset "name='pcm1_out mix 0 modem_in Switch' on"
|
||
|
+ cset "name='pcm1_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='pcm1_out Gain 0 Switch' on"
|
||
|
+ cset "name='pcm1_out Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # disable codec_out1
|
||
|
+ cset "name='codec_out1 mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='codec_out1 Gain 0 Switch' off"
|
||
|
+ cset "name='codec_out1 Gain 0 Volume' 0%"
|
||
|
+
|
||
|
+ # disable codec_in1
|
||
|
+ cset "name='codec_in1 Gain 0 Switch' off"
|
||
|
+ cset "name='codec_in1 Gain 0 Volume' 0%"
|
||
|
+
|
||
|
+ # disable all loops
|
||
|
+ cset "name='media_loop1_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='media_loop2_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='sprot_loop_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ # Output Configuration
|
||
|
+ cset "name='DAC1 L Mux' IF1 DAC"
|
||
|
+ cset "name='DAC1 R Mux' IF1 DAC"
|
||
|
+ cset "name='DAC1 MIXL DAC1 Switch' 1"
|
||
|
+ cset "name='DAC1 MIXR DAC1 Switch' 1"
|
||
|
+ cset "name='Stereo DAC MIXL DAC L1 Switch' 1"
|
||
|
+ cset "name='Stereo DAC MIXR DAC R1 Switch' 1"
|
||
|
+
|
||
|
+ cset "name='DAC L2 Mux' IF2 DAC"
|
||
|
+ cset "name='DAC R2 Mux' IF2 DAC"
|
||
|
+ cset "name='Mono DAC MIXL DAC L2 Switch' on"
|
||
|
+ cset "name='Mono DAC MIXR DAC R2 Switch' on"
|
||
|
+ cset "name='DAC2 Playback Switch' on"
|
||
|
+
|
||
|
+ cset "name='HPOVOL MIXL DAC1 Switch' on"
|
||
|
+ cset "name='HPOVOL MIXR DAC1 Switch' on"
|
||
|
+ cset "name='HPOVOL MIXL DAC2 Switch' on"
|
||
|
+ cset "name='HPOVOL MIXR DAC2 Switch' on"
|
||
|
+ cset "name='HPO MIX HPVOL Switch' on"
|
||
|
+ cset "name='HPOVOL L Switch' on"
|
||
|
+ cset "name='HPOVOL R Switch' on"
|
||
|
+
|
||
|
+ cset "name='SPK MIXL DAC L1 Switch' on"
|
||
|
+ cset "name='SPK MIXR DAC R1 Switch' on"
|
||
|
+ cset "name='SPK MIXL DAC L2 Switch' on"
|
||
|
+ cset "name='SPK MIXR DAC R2 Switch' on"
|
||
|
+ cset "name='SPOL MIX SPKVOL L Switch' on"
|
||
|
+ cset "name='SPOR MIX SPKVOL R Switch' on"
|
||
|
+ cset "name='SPKVOL L Switch' on"
|
||
|
+ cset "name='SPKVOL R Switch' on"
|
||
|
+
|
||
|
+ # Input Configuration
|
||
|
+ cset "name='Stereo1 DMIC Mux' 0"
|
||
|
+ cset "name='Stereo1 ADC1 Mux' 1"
|
||
|
+ cset "name='Stereo1 ADC2 Mux' 1"
|
||
|
+ cset "name='ADC Capture Switch' on"
|
||
|
+ # 55/63
|
||
|
+ cset "name='ADC Capture Volume' 55"
|
||
|
+ # set ADC Boost to 0/3, higher vals cause a lot of white noise
|
||
|
+ cset "name='ADC Boost Capture Volume' 0"
|
||
|
+ # 55/63
|
||
|
+ cset "name='Mono ADC Capture Volume' 55"
|
||
|
+ # 0/3
|
||
|
+ cset "name='Mono ADC Boost Capture Volume' 0"
|
||
|
+ # 27/31
|
||
|
+ cset "name='IN Capture Volume' 27"
|
||
|
+ cset "name='I2S2 Func Switch' on"
|
||
|
+ # 3/12 the headphone mic tends to be quite loud
|
||
|
+ cset "name='IN1 Boost' 3"
|
||
|
+ # 8/8 the internal analog mic tends to be quite soft
|
||
|
+ cset "name='IN2 Boost' 8"
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ # Disable audio output path
|
||
|
+ cset "name='codec_out1 mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='media0_out mix 0 media1_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='media1_in Gain 0 Switch' off"
|
||
|
+ cset "name='pcm0_in Gain 0 Switch' off"
|
||
|
+ cset "name='codec_out1 Gain 0 Switch' off"
|
||
|
+
|
||
|
+ # Disable audio input path
|
||
|
+ cset "name='pcm1_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 codec_in0 Switch' off"
|
||
|
+
|
||
|
+ cset "name='media_loop2_out Gain 0 Switch' off"
|
||
|
+ cset "name='pcm1_out Gain 0 Switch' off"
|
||
|
+ cset "name='codec_in0 Gain 0 Switch' off"
|
||
|
+ ]
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."Speaker" {
|
||
|
+ Comment "Speaker"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ PlaybackChannels "2"
|
||
|
+ }
|
||
|
+
|
||
|
+ ConflictingDevice [
|
||
|
+ "Headphones"
|
||
|
+ ]
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Headphone Switch' off"
|
||
|
+ cset "name='Headphone Channel Switch' off"
|
||
|
+
|
||
|
+ cset "name='Ext Spk Switch' on"
|
||
|
+ cset "name='Speaker Channel Switch' on"
|
||
|
+ cset "name='Speaker Playback Volume' 31"
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Ext Spk Switch' off"
|
||
|
+ cset "name='Speaker Channel Switch' off"
|
||
|
+ ]
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."Headphones" {
|
||
|
+ Comment "Headphones"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ PlaybackChannels "2"
|
||
|
+ JackControl "Headphone Jack"
|
||
|
+ JackHWMute "Speaker"
|
||
|
+ }
|
||
|
+
|
||
|
+ ConflictingDevice [
|
||
|
+ "Speaker"
|
||
|
+ ]
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Ext Spk Switch' off"
|
||
|
+ cset "name='Speaker Channel Switch' off"
|
||
|
+
|
||
|
+ cset "name='Headphone Switch' on"
|
||
|
+ cset "name='Headphone Channel Switch' on"
|
||
|
+ # 25/39 higher values cause crackling on some boards
|
||
|
+ cset "name='Headphone Playback Volume' 25"
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Headphone Switch' off"
|
||
|
+ cset "name='Headphone Channel Switch' off"
|
||
|
+ ]
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."DMic".0 {
|
||
|
+ Comment "Internal Microphone"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ CaptureChannels "2"
|
||
|
+ CapturePriority "150"
|
||
|
+ }
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Int Mic Switch' on"
|
||
|
+
|
||
|
+ cset "name='Stereo1 DMIC Mux' DMIC1"
|
||
|
+ cset "name='Stereo1 ADC2 Mux' DMIC"
|
||
|
+ cset "name='Mono ADC L2 Mux' DMIC"
|
||
|
+ cset "name='Mono ADC R2 Mux' DMIC"
|
||
|
+
|
||
|
+ cset "name='Sto1 ADC MIXL ADC1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC2 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC2 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXL ADC2 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC2 Switch' on"
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Sto1 ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC2 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC2 Switch' off"
|
||
|
+ cset "name='Int Mic Switch' off"
|
||
|
+ ]
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."HSMic".0 {
|
||
|
+ Comment "Headset Microphone"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ CaptureChannels "2"
|
||
|
+ JackControl "Headset Mic Jack"
|
||
|
+ JackHWMute "DMic"
|
||
|
+ }
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Headset Mic Switch' on"
|
||
|
+
|
||
|
+ cset "name='Sto1 ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC1 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC2 Switch' off"
|
||
|
+
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC2 Switch' off"
|
||
|
+
|
||
|
+ cset "name='RECMIXL BST1 Switch' on"
|
||
|
+ cset "name='RECMIXR BST1 Switch' on"
|
||
|
+
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Headset Mic Switch' off"
|
||
|
+
|
||
|
+ cset "name='RECMIXL BST1 Switch' off"
|
||
|
+ cset "name='RECMIXR BST1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' on"
|
||
|
+
|
||
|
+ ]
|
||
|
+}
|
||
|
diff --git a/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/Makefile.am b/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/Makefile.am
|
||
|
new file mode 100644
|
||
|
index 00000000..dd8b372a
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN/Makefile.am
|
||
|
@@ -0,0 +1,4 @@
|
||
|
+alsaconfigdir = @ALSA_CONFIG_DIR@
|
||
|
+ucmdir = $(alsaconfigdir)/ucm/ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN
|
||
|
+ucm_DATA = ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN.conf HiFi.conf
|
||
|
+EXTRA_DIST = $(ucm_DATA)
|
||
|
diff --git a/src/conf/ucm/Makefile.am b/src/conf/ucm/Makefile.am
|
||
|
index 3b4f13a8..e496ca89 100644
|
||
|
--- a/src/conf/ucm/Makefile.am
|
||
|
+++ b/src/conf/ucm/Makefile.am
|
||
|
@@ -1,4 +1,5 @@
|
||
|
SUBDIRS=\
|
||
|
+ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN \
|
||
|
broadwell-rt286 \
|
||
|
broxton-rt298 \
|
||
|
bytcr-rt5651 \
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 5a2df9449d0b17e3579bde60ba48244ba24ea604 Mon Sep 17 00:00:00 2001
|
||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||
|
Date: Sat, 28 Apr 2018 21:52:00 +0200
|
||
|
Subject: [PATCH 15/26] conf/ucm: chtrt5645: At config for the Lenovo Ideapad
|
||
|
Miix 320
|
||
|
|
||
|
The Lenovo Ideapad Miix 320 uses a digital mic connected to the DMIC2 input
|
||
|
(unlike the Asus T100HA which has it connected to the DMIC1 input), add a
|
||
|
long-name config specific for the Miix 320, which is a copy of the standard
|
||
|
chtrt5645 config with the internal analog mic section replaced with one
|
||
|
for a digital mic connected to the DMIC2 input.
|
||
|
|
||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
configure.ac | 1 +
|
||
|
.../HiFi.conf | 350 +++++++++++++++++++++
|
||
|
...ENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216.conf | 5 +
|
||
|
.../Makefile.am | 4 +
|
||
|
src/conf/ucm/Makefile.am | 1 +
|
||
|
5 files changed, 361 insertions(+)
|
||
|
create mode 100644 src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/HiFi.conf
|
||
|
create mode 100644 src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216.conf
|
||
|
create mode 100644 src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/Makefile.am
|
||
|
|
||
|
diff --git a/configure.ac b/configure.ac
|
||
|
index 94baf055..3ee989eb 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -729,6 +729,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
|
||
|
src/conf/ucm/gpd-win-pocket-rt5645/Makefile \
|
||
|
src/conf/ucm/HDAudio-Gigabyte-ALC1220DualCodecs/Makefile \
|
||
|
src/conf/ucm/HDAudio-Lenovo-DualCodecs/Makefile \
|
||
|
+ src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/Makefile \
|
||
|
src/conf/ucm/PandaBoard/Makefile \
|
||
|
src/conf/ucm/PandaBoardES/Makefile \
|
||
|
src/conf/ucm/PAZ00/Makefile \
|
||
|
diff --git a/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/HiFi.conf b/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/HiFi.conf
|
||
|
new file mode 100644
|
||
|
index 00000000..8cc9c7f2
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/HiFi.conf
|
||
|
@@ -0,0 +1,350 @@
|
||
|
+SectionVerb {
|
||
|
+ # ALSA PCM
|
||
|
+ Value {
|
||
|
+ TQ "HiFi"
|
||
|
+
|
||
|
+ # ALSA PCM device for HiFi
|
||
|
+ PlaybackPCM "hw:chtrt5645"
|
||
|
+ CapturePCM "hw:chtrt5645"
|
||
|
+ }
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ # media mixer settings
|
||
|
+ # compress
|
||
|
+ cset "name='media0_in Gain 0 Switch' on"
|
||
|
+ cset "name='media0_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # normal
|
||
|
+ cset "name='media1_in Gain 0 Switch' on"
|
||
|
+ cset "name='media1_in Gain 0 Volume' 0"
|
||
|
+ # swm loopback
|
||
|
+ cset "name='media2_in Gain 0 Switch' off"
|
||
|
+ cset "name='media2_in Gain 0 Volume' 0%"
|
||
|
+ # deep buffer
|
||
|
+ cset "name='media3_in Gain 0 Switch' on"
|
||
|
+ cset "name='media3_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ cset "name='media0_out mix 0 media0_in Switch' on"
|
||
|
+ cset "name='media0_out mix 0 media1_in Switch' on"
|
||
|
+ cset "name='media0_out mix 0 media2_in Switch' off"
|
||
|
+ cset "name='media0_out mix 0 media3_in Switch' on"
|
||
|
+
|
||
|
+ cset "name='media1_out mix 0 media0_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media1_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media2_in Switch' off"
|
||
|
+ cset "name='media1_out mix 0 media3_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='pcm0_in Gain 0 Switch' on"
|
||
|
+ cset "name='pcm0_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ cset "name='pcm1_in Gain 0 Switch' off"
|
||
|
+ cset "name='pcm1_in Gain 0 Volume' 0%"
|
||
|
+
|
||
|
+ # codec0_out settings (used if ssp2 is connected to aif1)
|
||
|
+ cset "name='codec_out0 mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 pcm0_in Switch' on"
|
||
|
+ cset "name='codec_out0 mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='codec_out0 mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='codec_out0 Gain 0 Switch' on"
|
||
|
+ cset "name='codec_out0 Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # modem_out settings (used if ssp0 is connected to aif2)
|
||
|
+ cset "name='modem_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='modem_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='modem_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 pcm0_in Switch' on"
|
||
|
+ cset "name='modem_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='modem_out mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='modem_out Gain 0 Switch' on"
|
||
|
+ cset "name='modem_out Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # input settings
|
||
|
+ # pcm1_out settings
|
||
|
+
|
||
|
+ # input used when SSP2 is connected
|
||
|
+ cset "name='codec_in0 Gain 0 Switch' on"
|
||
|
+ cset "name='codec_in0 Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # input used when SSP0 is connected
|
||
|
+ cset "name='modem_in Gain 0 Switch' on"
|
||
|
+ cset "name='modem_in Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ cset "name='pcm1_out mix 0 codec_in0 Switch' on"
|
||
|
+ cset "name='pcm1_out mix 0 modem_in Switch' on"
|
||
|
+ cset "name='pcm1_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='pcm1_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='pcm1_out Gain 0 Switch' on"
|
||
|
+ cset "name='pcm1_out Gain 0 Volume' 0"
|
||
|
+
|
||
|
+ # disable codec_out1
|
||
|
+ cset "name='codec_out1 mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='codec_out1 mix 0 sprot_loop_in Switch' off"
|
||
|
+ cset "name='codec_out1 Gain 0 Switch' off"
|
||
|
+ cset "name='codec_out1 Gain 0 Volume' 0%"
|
||
|
+
|
||
|
+ # disable codec_in1
|
||
|
+ cset "name='codec_in1 Gain 0 Switch' off"
|
||
|
+ cset "name='codec_in1 Gain 0 Volume' 0%"
|
||
|
+
|
||
|
+ # disable all loops
|
||
|
+ cset "name='media_loop1_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='media_loop1_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='media_loop2_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='sprot_loop_out mix 0 codec_in0 Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 codec_in1 Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 media_loop1_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 pcm1_in Switch' off"
|
||
|
+ cset "name='sprot_loop_out mix 0 sprot_loop_in Switch' off"
|
||
|
+
|
||
|
+ # Output Configuration
|
||
|
+ cset "name='DAC1 L Mux' IF1 DAC"
|
||
|
+ cset "name='DAC1 R Mux' IF1 DAC"
|
||
|
+ cset "name='DAC1 MIXL DAC1 Switch' 1"
|
||
|
+ cset "name='DAC1 MIXR DAC1 Switch' 1"
|
||
|
+ cset "name='Stereo DAC MIXL DAC L1 Switch' 1"
|
||
|
+ cset "name='Stereo DAC MIXR DAC R1 Switch' 1"
|
||
|
+
|
||
|
+ cset "name='DAC L2 Mux' IF2 DAC"
|
||
|
+ cset "name='DAC R2 Mux' IF2 DAC"
|
||
|
+ cset "name='Mono DAC MIXL DAC L2 Switch' on"
|
||
|
+ cset "name='Mono DAC MIXR DAC R2 Switch' on"
|
||
|
+ cset "name='DAC2 Playback Switch' on"
|
||
|
+
|
||
|
+ cset "name='HPOVOL MIXL DAC1 Switch' on"
|
||
|
+ cset "name='HPOVOL MIXR DAC1 Switch' on"
|
||
|
+ cset "name='HPOVOL MIXL DAC2 Switch' on"
|
||
|
+ cset "name='HPOVOL MIXR DAC2 Switch' on"
|
||
|
+ cset "name='HPO MIX HPVOL Switch' on"
|
||
|
+ cset "name='HPOVOL L Switch' on"
|
||
|
+ cset "name='HPOVOL R Switch' on"
|
||
|
+
|
||
|
+ cset "name='SPK MIXL DAC L1 Switch' on"
|
||
|
+ cset "name='SPK MIXR DAC R1 Switch' on"
|
||
|
+ cset "name='SPK MIXL DAC L2 Switch' on"
|
||
|
+ cset "name='SPK MIXR DAC R2 Switch' on"
|
||
|
+ cset "name='SPOL MIX SPKVOL L Switch' on"
|
||
|
+ cset "name='SPOR MIX SPKVOL R Switch' on"
|
||
|
+ cset "name='SPKVOL L Switch' on"
|
||
|
+ cset "name='SPKVOL R Switch' on"
|
||
|
+
|
||
|
+ # Input Configuration
|
||
|
+ cset "name='Stereo1 DMIC Mux' 0"
|
||
|
+ cset "name='Stereo1 ADC1 Mux' 1"
|
||
|
+ cset "name='Stereo1 ADC2 Mux' 1"
|
||
|
+ cset "name='ADC Capture Switch' on"
|
||
|
+ # 55/63
|
||
|
+ cset "name='ADC Capture Volume' 55"
|
||
|
+ # set ADC Boost to 0/3, higher vals cause a lot of white noise
|
||
|
+ cset "name='ADC Boost Capture Volume' 0"
|
||
|
+ # 55/63
|
||
|
+ cset "name='Mono ADC Capture Volume' 55"
|
||
|
+ # 0/3
|
||
|
+ cset "name='Mono ADC Boost Capture Volume' 0"
|
||
|
+ # 27/31
|
||
|
+ cset "name='IN Capture Volume' 27"
|
||
|
+ cset "name='I2S2 Func Switch' on"
|
||
|
+ # 3/12 the headphone mic tends to be quite loud
|
||
|
+ cset "name='IN1 Boost' 3"
|
||
|
+ # 8/8 the internal analog mic tends to be quite soft
|
||
|
+ cset "name='IN2 Boost' 8"
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ # Disable audio output path
|
||
|
+ cset "name='codec_out1 mix 0 pcm0_in Switch' off"
|
||
|
+ cset "name='media0_out mix 0 media1_in Switch' off"
|
||
|
+
|
||
|
+ cset "name='media1_in Gain 0 Switch' off"
|
||
|
+ cset "name='pcm0_in Gain 0 Switch' off"
|
||
|
+ cset "name='codec_out1 Gain 0 Switch' off"
|
||
|
+
|
||
|
+ # Disable audio input path
|
||
|
+ cset "name='pcm1_out mix 0 media_loop2_in Switch' off"
|
||
|
+ cset "name='media_loop2_out mix 0 codec_in0 Switch' off"
|
||
|
+
|
||
|
+ cset "name='media_loop2_out Gain 0 Switch' off"
|
||
|
+ cset "name='pcm1_out Gain 0 Switch' off"
|
||
|
+ cset "name='codec_in0 Gain 0 Switch' off"
|
||
|
+ ]
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."Speaker" {
|
||
|
+ Comment "Speaker"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ PlaybackChannels "2"
|
||
|
+ }
|
||
|
+
|
||
|
+ ConflictingDevice [
|
||
|
+ "Headphones"
|
||
|
+ ]
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Headphone Switch' off"
|
||
|
+ cset "name='Headphone Channel Switch' off"
|
||
|
+
|
||
|
+ cset "name='Ext Spk Switch' on"
|
||
|
+ cset "name='Speaker Channel Switch' on"
|
||
|
+ cset "name='Speaker Playback Volume' 31"
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Ext Spk Switch' off"
|
||
|
+ cset "name='Speaker Channel Switch' off"
|
||
|
+ ]
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."Headphones" {
|
||
|
+ Comment "Headphones"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ PlaybackChannels "2"
|
||
|
+ JackControl "Headphone Jack"
|
||
|
+ JackHWMute "Speaker"
|
||
|
+ }
|
||
|
+
|
||
|
+ ConflictingDevice [
|
||
|
+ "Speaker"
|
||
|
+ ]
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Ext Spk Switch' off"
|
||
|
+ cset "name='Speaker Channel Switch' off"
|
||
|
+
|
||
|
+ cset "name='Headphone Switch' on"
|
||
|
+ cset "name='Headphone Channel Switch' on"
|
||
|
+ # 25/39 higher values cause crackling on some boards
|
||
|
+ cset "name='Headphone Playback Volume' 25"
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Headphone Switch' off"
|
||
|
+ cset "name='Headphone Channel Switch' off"
|
||
|
+ ]
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."DMic".0 {
|
||
|
+ Comment "Internal Microphone"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ CaptureChannels "2"
|
||
|
+ CapturePriority "150"
|
||
|
+ }
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Int Mic Switch' on"
|
||
|
+
|
||
|
+ cset "name='Stereo1 DMIC Mux' DMIC2"
|
||
|
+ cset "name='Stereo1 ADC2 Mux' DMIC"
|
||
|
+ cset "name='Mono DMIC L Mux' DMIC2"
|
||
|
+ cset "name='Mono DMIC R Mux' DMIC2"
|
||
|
+ cset "name='Mono ADC L2 Mux' DMIC"
|
||
|
+ cset "name='Mono ADC R2 Mux' DMIC"
|
||
|
+
|
||
|
+ cset "name='Sto1 ADC MIXL ADC1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC2 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC2 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXL ADC2 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC2 Switch' on"
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Sto1 ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC2 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC2 Switch' off"
|
||
|
+ cset "name='Int Mic Switch' off"
|
||
|
+ ]
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."HSMic".0 {
|
||
|
+ Comment "Headset Microphone"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ CaptureChannels "2"
|
||
|
+ JackControl "Headset Mic Jack"
|
||
|
+ JackHWMute "DMic"
|
||
|
+ }
|
||
|
+
|
||
|
+ EnableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Headset Mic Switch' on"
|
||
|
+
|
||
|
+ cset "name='Sto1 ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC1 Switch' on"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC2 Switch' off"
|
||
|
+
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXL ADC2 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXR ADC2 Switch' off"
|
||
|
+
|
||
|
+ cset "name='RECMIXL BST1 Switch' on"
|
||
|
+ cset "name='RECMIXR BST1 Switch' on"
|
||
|
+
|
||
|
+ ]
|
||
|
+
|
||
|
+ DisableSequence [
|
||
|
+ cdev "hw:chtrt5645"
|
||
|
+
|
||
|
+ cset "name='Headset Mic Switch' off"
|
||
|
+
|
||
|
+ cset "name='RECMIXL BST1 Switch' off"
|
||
|
+ cset "name='RECMIXR BST1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXL ADC1 Switch' off"
|
||
|
+ cset "name='Sto1 ADC MIXR ADC1 Switch' off"
|
||
|
+ cset "name='Mono ADC MIXL ADC1 Switch' on"
|
||
|
+ cset "name='Mono ADC MIXR ADC1 Switch' on"
|
||
|
+
|
||
|
+ ]
|
||
|
+}
|
||
|
diff --git a/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216.conf b/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216.conf
|
||
|
new file mode 100644
|
||
|
index 00000000..50bda000
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216.conf
|
||
|
@@ -0,0 +1,5 @@
|
||
|
+Comment "Intel SoC Audio Device"
|
||
|
+SectionUseCase."HiFi" {
|
||
|
+ File "../LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/HiFi.conf"
|
||
|
+ Comment "Default"
|
||
|
+}
|
||
|
diff --git a/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/Makefile.am b/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/Makefile.am
|
||
|
new file mode 100644
|
||
|
index 00000000..18963c21
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216/Makefile.am
|
||
|
@@ -0,0 +1,4 @@
|
||
|
+alsaconfigdir = @ALSA_CONFIG_DIR@
|
||
|
+ucmdir = $(alsaconfigdir)/ucm/LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216
|
||
|
+ucm_DATA = LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216.conf HiFi.conf
|
||
|
+EXTRA_DIST = $(ucm_DATA)
|
||
|
diff --git a/src/conf/ucm/Makefile.am b/src/conf/ucm/Makefile.am
|
||
|
index e496ca89..02df25f0 100644
|
||
|
--- a/src/conf/ucm/Makefile.am
|
||
|
+++ b/src/conf/ucm/Makefile.am
|
||
|
@@ -11,6 +11,7 @@ GoogleNyan \
|
||
|
gpd-win-pocket-rt5645 \
|
||
|
HDAudio-Gigabyte-ALC1220DualCodecs \
|
||
|
HDAudio-Lenovo-DualCodecs \
|
||
|
+LENOVO-80XF-LenovoMIIX320_10ICR-LNVNB161216 \
|
||
|
PandaBoard \
|
||
|
PandaBoardES \
|
||
|
PAZ00 \
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 8ebb40c96970c913719a75deb2fe82ba2e257386 Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Iwai <tiwai@suse.de>
|
||
|
Date: Wed, 2 May 2018 16:23:21 +0200
|
||
|
Subject: [PATCH 16/26] conf/ucm: Add a UCM profile for Dell WD15 Dock
|
||
|
USB-audio
|
||
|
|
||
|
USB-audio device on Dell WD15 docking station provides two individual
|
||
|
PCM streams, one for headphone and another for line out. A UCM
|
||
|
profile gives the proper roles for these.
|
||
|
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/conf/ucm/Dell-WD15-Dock/Dell-WD15-Dock.conf | 5 +++++
|
||
|
src/conf/ucm/Dell-WD15-Dock/HiFi.conf | 26 +++++++++++++++++++++++++
|
||
|
src/conf/ucm/Dell-WD15-Dock/Makefile.am | 4 ++++
|
||
|
src/conf/ucm/Makefile.am | 1 +
|
||
|
4 files changed, 36 insertions(+)
|
||
|
create mode 100644 src/conf/ucm/Dell-WD15-Dock/Dell-WD15-Dock.conf
|
||
|
create mode 100644 src/conf/ucm/Dell-WD15-Dock/HiFi.conf
|
||
|
create mode 100644 src/conf/ucm/Dell-WD15-Dock/Makefile.am
|
||
|
|
||
|
diff --git a/src/conf/ucm/Dell-WD15-Dock/Dell-WD15-Dock.conf b/src/conf/ucm/Dell-WD15-Dock/Dell-WD15-Dock.conf
|
||
|
new file mode 100644
|
||
|
index 00000000..f4f0a8d9
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/Dell-WD15-Dock/Dell-WD15-Dock.conf
|
||
|
@@ -0,0 +1,5 @@
|
||
|
+Comment "USB-audio on Dell WD15 docking station"
|
||
|
+SectionUseCase."HiFi" {
|
||
|
+ File "HiFi.conf"
|
||
|
+ Comment "Default"
|
||
|
+}
|
||
|
diff --git a/src/conf/ucm/Dell-WD15-Dock/HiFi.conf b/src/conf/ucm/Dell-WD15-Dock/HiFi.conf
|
||
|
new file mode 100644
|
||
|
index 00000000..b07f3440
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/Dell-WD15-Dock/HiFi.conf
|
||
|
@@ -0,0 +1,26 @@
|
||
|
+SectionDevice."Headphone" {
|
||
|
+ Comment "Headphone"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ PlaybackChannels "2"
|
||
|
+ PlaybackPCM "hw:WD15Dock,0"
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."LineOut" {
|
||
|
+ Comment "Line Out"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ PlaybackChannels "2"
|
||
|
+ PlaybackPCM "hw:WD15Dock,1"
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+SectionDevice."Mic" {
|
||
|
+ Comment "Microphone"
|
||
|
+
|
||
|
+ Value {
|
||
|
+ CaptureChannels "2"
|
||
|
+ CapturePCM "hw:WD15Dock,0"
|
||
|
+ }
|
||
|
+}
|
||
|
diff --git a/src/conf/ucm/Dell-WD15-Dock/Makefile.am b/src/conf/ucm/Dell-WD15-Dock/Makefile.am
|
||
|
new file mode 100644
|
||
|
index 00000000..7ab58730
|
||
|
--- /dev/null
|
||
|
+++ b/src/conf/ucm/Dell-WD15-Dock/Makefile.am
|
||
|
@@ -0,0 +1,4 @@
|
||
|
+alsaconfigdir = @ALSA_CONFIG_DIR@
|
||
|
+ucmdir = $(alsaconfigdir)/ucm/Dell-WD15-Dock
|
||
|
+ucm_DATA = Dell-WD15-Dock.conf HiFi.conf
|
||
|
+EXTRA_DIST = $(ucm_DATA)
|
||
|
diff --git a/src/conf/ucm/Makefile.am b/src/conf/ucm/Makefile.am
|
||
|
index 02df25f0..38fc6b25 100644
|
||
|
--- a/src/conf/ucm/Makefile.am
|
||
|
+++ b/src/conf/ucm/Makefile.am
|
||
|
@@ -7,6 +7,7 @@ chtrt5645 \
|
||
|
chtrt5645-mono-speaker-analog-mic \
|
||
|
DAISY-I2S \
|
||
|
DB410c \
|
||
|
+Dell-WD15-Dock \
|
||
|
GoogleNyan \
|
||
|
gpd-win-pocket-rt5645 \
|
||
|
HDAudio-Gigabyte-ALC1220DualCodecs \
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 44f499bb22f3923f966e11a234455e3d06936b8b Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Iwai <tiwai@suse.de>
|
||
|
Date: Thu, 3 May 2018 08:40:20 +0200
|
||
|
Subject: [PATCH 17/26] configure: Fix forgotten ucm entry
|
||
|
|
||
|
The previous commit forgot to add to configure.ac. Fix it.
|
||
|
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
configure.ac | 1 +
|
||
|
1 file changed, 1 insertion(+)
|
||
|
|
||
|
diff --git a/configure.ac b/configure.ac
|
||
|
index 3ee989eb..693b5d53 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -725,6 +725,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
|
||
|
src/conf/ucm/chtrt5645-mono-speaker-analog-mic/Makefile \
|
||
|
src/conf/ucm/DAISY-I2S/Makefile \
|
||
|
src/conf/ucm/DB410c/Makefile \
|
||
|
+ src/conf/ucm/Dell-WD15-Dock/Makefile \
|
||
|
src/conf/ucm/GoogleNyan/Makefile \
|
||
|
src/conf/ucm/gpd-win-pocket-rt5645/Makefile \
|
||
|
src/conf/ucm/HDAudio-Gigabyte-ALC1220DualCodecs/Makefile \
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 5eb78219f6bc0114cbb6518dae1c9256a63ec23a Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Date: Tue, 15 May 2018 21:36:34 +0900
|
||
|
Subject: [PATCH 18/26] control: add a series of macro for offset of several
|
||
|
types of TLV
|
||
|
|
||
|
In development period for Linux v4.18, a series of SNDRV_CTL_TLVO_XXX
|
||
|
macro was introduced to kernel stuffs for position offset of TLV data.
|
||
|
|
||
|
This commit adds these macros to backport header in this library.
|
||
|
|
||
|
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
include/sound/tlv.h | 16 ++++++++++++++++
|
||
|
1 file changed, 16 insertions(+)
|
||
|
|
||
|
diff --git a/include/sound/tlv.h b/include/sound/tlv.h
|
||
|
index b4df440c..2ea47685 100644
|
||
|
--- a/include/sound/tlv.h
|
||
|
+++ b/include/sound/tlv.h
|
||
|
@@ -41,6 +41,10 @@
|
||
|
#define SNDRV_CTL_TLVD_LENGTH(...) \
|
||
|
((unsigned int)sizeof((const unsigned int[]) { __VA_ARGS__ }))
|
||
|
|
||
|
+/* Accessor offsets for TLV data items */
|
||
|
+#define SNDRV_CTL_TLVO_TYPE 0
|
||
|
+#define SNDRV_CTL_TLVO_LEN 1
|
||
|
+
|
||
|
#define SNDRV_CTL_TLVD_CONTAINER_ITEM(...) \
|
||
|
SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_CONTAINER, __VA_ARGS__)
|
||
|
#define SNDRV_CTL_TLVD_DECLARE_CONTAINER(name, ...) \
|
||
|
@@ -60,6 +64,10 @@
|
||
|
SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \
|
||
|
}
|
||
|
|
||
|
+/* Accessor offsets for min, mute and step items in dB scale type TLV */
|
||
|
+#define SNDRV_CTL_TLVO_DB_SCALE_MIN 2
|
||
|
+#define SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP 3
|
||
|
+
|
||
|
/* dB scale specified with min/max values instead of step */
|
||
|
#define SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \
|
||
|
SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX, (min_dB), (max_dB))
|
||
|
@@ -74,6 +82,10 @@
|
||
|
SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \
|
||
|
}
|
||
|
|
||
|
+/* Accessor offsets for min, max items in db-minmax types of TLV. */
|
||
|
+#define SNDRV_CTL_TLVO_DB_MINMAX_MIN 2
|
||
|
+#define SNDRV_CTL_TLVO_DB_MINMAX_MAX 3
|
||
|
+
|
||
|
/* linear volume between min_dB and max_dB (.01dB unit) */
|
||
|
#define SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \
|
||
|
SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_LINEAR, (min_dB), (max_dB))
|
||
|
@@ -82,6 +94,10 @@
|
||
|
SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \
|
||
|
}
|
||
|
|
||
|
+/* Accessor offsets for min, max items in db-linear type of TLV. */
|
||
|
+#define SNDRV_CTL_TLVO_DB_LINEAR_MIN 2
|
||
|
+#define SNDRV_CTL_TLVO_DB_LINEAR_MAX 3
|
||
|
+
|
||
|
/* dB range container:
|
||
|
* Items in dB range container must be ordered by their values and by their
|
||
|
* dB values. This implies that larger values must correspond with larger
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From f61193c96c52cbd99e22d9cbb94937374ce2cb39 Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Date: Tue, 15 May 2018 21:36:35 +0900
|
||
|
Subject: [PATCH 19/26] control: use position offset macro of TLV data
|
||
|
|
||
|
A series of SNDRV_CTL_TLVO_XXX macro was introduced for position offset
|
||
|
of TLV data. This commit applies a code optimization.
|
||
|
|
||
|
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/control/control.c | 12 ++++----
|
||
|
src/control/control_hw.c | 6 ++--
|
||
|
src/control/control_local.h | 1 +
|
||
|
src/control/tlv.c | 72 ++++++++++++++++++++++++---------------------
|
||
|
4 files changed, 51 insertions(+), 40 deletions(-)
|
||
|
|
||
|
diff --git a/src/control/control.c b/src/control/control.c
|
||
|
index 11f7815a..82cd1a05 100644
|
||
|
--- a/src/control/control.c
|
||
|
+++ b/src/control/control.c
|
||
|
@@ -938,10 +938,10 @@ int snd_ctl_elem_tlv_read(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
||
|
* and compare the returned value after ioctl for checking
|
||
|
* the validity of TLV.
|
||
|
*/
|
||
|
- tlv[0] = -1;
|
||
|
- tlv[1] = 0;
|
||
|
+ tlv[SNDRV_CTL_TLVO_TYPE] = -1;
|
||
|
+ tlv[SNDRV_CTL_TLVO_LEN] = 0;
|
||
|
err = snd_ctl_tlv_do(ctl, 0, id, tlv, tlv_size);
|
||
|
- if (err >= 0 && tlv[0] == (unsigned int)-1)
|
||
|
+ if (err >= 0 && tlv[SNDRV_CTL_TLVO_TYPE] == (unsigned int)-1)
|
||
|
err = -ENXIO;
|
||
|
return err;
|
||
|
}
|
||
|
@@ -967,7 +967,8 @@ int snd_ctl_elem_tlv_write(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
||
|
const unsigned int *tlv)
|
||
|
{
|
||
|
assert(ctl && id && (id->name[0] || id->numid) && tlv);
|
||
|
- return snd_ctl_tlv_do(ctl, 1, id, (unsigned int *)tlv, tlv[1] + 2 * sizeof(unsigned int));
|
||
|
+ return snd_ctl_tlv_do(ctl, 1, id, (unsigned int *)tlv,
|
||
|
+ tlv[SNDRV_CTL_TLVO_LEN] + 2 * sizeof(unsigned int));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
@@ -991,7 +992,8 @@ int snd_ctl_elem_tlv_command(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
||
|
const unsigned int *tlv)
|
||
|
{
|
||
|
assert(ctl && id && (id->name[0] || id->numid) && tlv);
|
||
|
- return snd_ctl_tlv_do(ctl, -1, id, (unsigned int *)tlv, tlv[1] + 2 * sizeof(unsigned int));
|
||
|
+ return snd_ctl_tlv_do(ctl, -1, id, (unsigned int *)tlv,
|
||
|
+ tlv[SNDRV_CTL_TLVO_LEN] + 2 * sizeof(unsigned int));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
diff --git a/src/control/control_hw.c b/src/control/control_hw.c
|
||
|
index 4cbd306f..68eca522 100644
|
||
|
--- a/src/control/control_hw.c
|
||
|
+++ b/src/control/control_hw.c
|
||
|
@@ -240,11 +240,13 @@ static int snd_ctl_hw_elem_tlv(snd_ctl_t *handle, int op_flag,
|
||
|
return -errno;
|
||
|
}
|
||
|
if (op_flag == 0) {
|
||
|
- if (xtlv->tlv[1] + 2 * sizeof(unsigned int) > tlv_size) {
|
||
|
+ unsigned int size;
|
||
|
+ size = xtlv->tlv[SNDRV_CTL_TLVO_LEN] + 2 * sizeof(unsigned int);
|
||
|
+ if (size > tlv_size) {
|
||
|
free(xtlv);
|
||
|
return -EFAULT;
|
||
|
}
|
||
|
- memcpy(tlv, xtlv->tlv, xtlv->tlv[1] + 2 * sizeof(unsigned int));
|
||
|
+ memcpy(tlv, xtlv->tlv, size);
|
||
|
}
|
||
|
free(xtlv);
|
||
|
return 0;
|
||
|
diff --git a/src/control/control_local.h b/src/control/control_local.h
|
||
|
index 30218c6c..9568968e 100644
|
||
|
--- a/src/control/control_local.h
|
||
|
+++ b/src/control/control_local.h
|
||
|
@@ -20,6 +20,7 @@
|
||
|
*/
|
||
|
|
||
|
#include "local.h"
|
||
|
+#include <sound/tlv.h>
|
||
|
|
||
|
typedef struct _snd_ctl_ops {
|
||
|
int (*close)(snd_ctl_t *handle);
|
||
|
diff --git a/src/control/tlv.c b/src/control/tlv.c
|
||
|
index 467023b3..d6944b52 100644
|
||
|
--- a/src/control/tlv.c
|
||
|
+++ b/src/control/tlv.c
|
||
|
@@ -65,8 +65,8 @@ int snd_tlv_parse_dB_info(unsigned int *tlv,
|
||
|
int err;
|
||
|
|
||
|
*db_tlvp = NULL;
|
||
|
- type = tlv[0];
|
||
|
- size = tlv[1];
|
||
|
+ type = tlv[SNDRV_CTL_TLVO_TYPE];
|
||
|
+ size = tlv[SNDRV_CTL_TLVO_LEN];
|
||
|
tlv_size -= 2 * sizeof(int);
|
||
|
if (size > tlv_size) {
|
||
|
SNDERR("TLV size error");
|
||
|
@@ -83,7 +83,7 @@ int snd_tlv_parse_dB_info(unsigned int *tlv,
|
||
|
return err; /* error */
|
||
|
if (err > 0)
|
||
|
return err; /* found */
|
||
|
- len = int_index(tlv[1]) + 2;
|
||
|
+ len = int_index(tlv[SNDRV_CTL_TLVO_LEN]) + 2;
|
||
|
size -= len * sizeof(int);
|
||
|
tlv += len;
|
||
|
}
|
||
|
@@ -131,10 +131,10 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
{
|
||
|
int err;
|
||
|
|
||
|
- switch (tlv[0]) {
|
||
|
+ switch (tlv[SNDRV_CTL_TLVO_TYPE]) {
|
||
|
case SND_CTL_TLVT_DB_RANGE: {
|
||
|
unsigned int pos, len;
|
||
|
- len = int_index(tlv[1]);
|
||
|
+ len = int_index(tlv[SNDRV_CTL_TLVO_LEN]);
|
||
|
if (len > MAX_TLV_RANGE_SIZE)
|
||
|
return -EINVAL;
|
||
|
pos = 2;
|
||
|
@@ -167,22 +167,23 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
}
|
||
|
case SND_CTL_TLVT_DB_SCALE: {
|
||
|
int step;
|
||
|
- if (tlv[3] & 0x10000)
|
||
|
+ if (tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0x10000)
|
||
|
*min = SND_CTL_TLV_DB_GAIN_MUTE;
|
||
|
else
|
||
|
- *min = (int)tlv[2];
|
||
|
- step = (tlv[3] & 0xffff);
|
||
|
- *max = (int)tlv[2] + step * (rangemax - rangemin);
|
||
|
+ *min = (int)tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN];
|
||
|
+ step = (tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0xffff);
|
||
|
+ *max = (int)tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN] +
|
||
|
+ step * (rangemax - rangemin);
|
||
|
return 0;
|
||
|
}
|
||
|
case SND_CTL_TLVT_DB_MINMAX:
|
||
|
case SND_CTL_TLVT_DB_LINEAR:
|
||
|
- *min = (int)tlv[2];
|
||
|
- *max = (int)tlv[3];
|
||
|
+ *min = (int)tlv[SNDRV_CTL_TLVO_DB_LINEAR_MIN];
|
||
|
+ *max = (int)tlv[SNDRV_CTL_TLVO_DB_LINEAR_MAX];
|
||
|
return 0;
|
||
|
case SND_CTL_TLVT_DB_MINMAX_MUTE:
|
||
|
*min = SND_CTL_TLV_DB_GAIN_MUTE;
|
||
|
- *max = (int)tlv[3];
|
||
|
+ *max = (int)tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
|
||
|
return 0;
|
||
|
}
|
||
|
return -EINVAL;
|
||
|
@@ -200,10 +201,12 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
long volume, long *db_gain)
|
||
|
{
|
||
|
- switch (tlv[0]) {
|
||
|
+ unsigned int type = tlv[SNDRV_CTL_TLVO_TYPE];
|
||
|
+
|
||
|
+ switch (type) {
|
||
|
case SND_CTL_TLVT_DB_RANGE: {
|
||
|
unsigned int pos, len;
|
||
|
- len = int_index(tlv[1]);
|
||
|
+ len = int_index(tlv[SNDRV_CTL_TLVO_LEN]);
|
||
|
if (len > MAX_TLV_RANGE_SIZE)
|
||
|
return -EINVAL;
|
||
|
pos = 2;
|
||
|
@@ -220,9 +223,9 @@ int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
}
|
||
|
case SND_CTL_TLVT_DB_SCALE: {
|
||
|
int min, step, mute;
|
||
|
- min = tlv[2];
|
||
|
- step = (tlv[3] & 0xffff);
|
||
|
- mute = (tlv[3] >> 16) & 1;
|
||
|
+ min = tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN];
|
||
|
+ step = (tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0xffff);
|
||
|
+ mute = (tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] >> 16) & 1;
|
||
|
if (mute && volume <= rangemin)
|
||
|
*db_gain = SND_CTL_TLV_DB_GAIN_MUTE;
|
||
|
else
|
||
|
@@ -232,10 +235,10 @@ int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
case SND_CTL_TLVT_DB_MINMAX:
|
||
|
case SND_CTL_TLVT_DB_MINMAX_MUTE: {
|
||
|
int mindb, maxdb;
|
||
|
- mindb = tlv[2];
|
||
|
- maxdb = tlv[3];
|
||
|
+ mindb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MIN];
|
||
|
+ maxdb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
|
||
|
if (volume <= rangemin || rangemax <= rangemin) {
|
||
|
- if (tlv[0] == SND_CTL_TLVT_DB_MINMAX_MUTE)
|
||
|
+ if (type == SND_CTL_TLVT_DB_MINMAX_MUTE)
|
||
|
*db_gain = SND_CTL_TLV_DB_GAIN_MUTE;
|
||
|
else
|
||
|
*db_gain = mindb;
|
||
|
@@ -248,8 +251,8 @@ int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
}
|
||
|
#ifndef HAVE_SOFT_FLOAT
|
||
|
case SND_CTL_TLVT_DB_LINEAR: {
|
||
|
- int mindb = tlv[2];
|
||
|
- int maxdb = tlv[3];
|
||
|
+ int mindb = tlv[SNDRV_CTL_TLVO_DB_LINEAR_MIN];
|
||
|
+ int maxdb = tlv[SNDRV_CTL_TLVO_DB_LINEAR_MAX];
|
||
|
if (volume <= rangemin || rangemax <= rangemin)
|
||
|
*db_gain = mindb;
|
||
|
else if (volume >= rangemax)
|
||
|
@@ -289,11 +292,13 @@ int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
long db_gain, long *value, int xdir)
|
||
|
{
|
||
|
- switch (tlv[0]) {
|
||
|
+ unsigned int type = tlv[SNDRV_CTL_TLVO_TYPE];
|
||
|
+
|
||
|
+ switch (type) {
|
||
|
case SND_CTL_TLVT_DB_RANGE: {
|
||
|
long dbmin, dbmax, prev_submax;
|
||
|
unsigned int pos, len;
|
||
|
- len = int_index(tlv[1]);
|
||
|
+ len = int_index(tlv[SNDRV_CTL_TLVO_LEN]);
|
||
|
if (len < 6 || len > MAX_TLV_RANGE_SIZE)
|
||
|
return -EINVAL;
|
||
|
pos = 2;
|
||
|
@@ -324,13 +329,14 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
return 0;
|
||
|
}
|
||
|
case SND_CTL_TLVT_DB_SCALE: {
|
||
|
- int min, step, max;
|
||
|
- min = tlv[2];
|
||
|
- step = (tlv[3] & 0xffff);
|
||
|
+ int min, step, max, mute;
|
||
|
+ min = tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN];
|
||
|
+ step = tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0xffff;
|
||
|
+ mute = tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] & 0x10000;
|
||
|
max = min + (int)(step * (rangemax - rangemin));
|
||
|
if (db_gain <= min)
|
||
|
if (db_gain > SND_CTL_TLV_DB_GAIN_MUTE && xdir > 0 &&
|
||
|
- (tlv[3] & 0x10000))
|
||
|
+ mute)
|
||
|
*value = rangemin + 1;
|
||
|
else
|
||
|
*value = rangemin;
|
||
|
@@ -348,11 +354,11 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
case SND_CTL_TLVT_DB_MINMAX:
|
||
|
case SND_CTL_TLVT_DB_MINMAX_MUTE: {
|
||
|
int min, max;
|
||
|
- min = tlv[2];
|
||
|
- max = tlv[3];
|
||
|
+ min = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MIN];
|
||
|
+ max = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
|
||
|
if (db_gain <= min)
|
||
|
if (db_gain > SND_CTL_TLV_DB_GAIN_MUTE && xdir > 0 &&
|
||
|
- tlv[0] == SND_CTL_TLVT_DB_MINMAX_MUTE)
|
||
|
+ type == SND_CTL_TLVT_DB_MINMAX_MUTE)
|
||
|
*value = rangemin + 1;
|
||
|
else
|
||
|
*value = rangemin;
|
||
|
@@ -370,8 +376,8 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||
|
#ifndef HAVE_SOFT_FLOAT
|
||
|
case SND_CTL_TLVT_DB_LINEAR: {
|
||
|
int min, max;
|
||
|
- min = tlv[2];
|
||
|
- max = tlv[3];
|
||
|
+ min = tlv[SNDRV_CTL_TLVO_DB_LINEAR_MIN];
|
||
|
+ max = tlv[SNDRV_CTL_TLVO_DB_LINEAR_MAX];
|
||
|
if (db_gain <= min)
|
||
|
*value = rangemin;
|
||
|
else if (db_gain >= max)
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 33f0888f0da191af49f17916f6548076d7125ea9 Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Date: Tue, 15 May 2018 21:36:36 +0900
|
||
|
Subject: [PATCH 20/26] hcontrol: use position offset macro of TLV data
|
||
|
|
||
|
A series of SNDRV_CTL_TLVO_XXX macro was introduced for position offset
|
||
|
of TLV data. This commit applies a code optimization.
|
||
|
|
||
|
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/control/hcontrol.c | 4 ++--
|
||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/src/control/hcontrol.c b/src/control/hcontrol.c
|
||
|
index 7e775248..0cac8956 100644
|
||
|
--- a/src/control/hcontrol.c
|
||
|
+++ b/src/control/hcontrol.c
|
||
|
@@ -870,7 +870,7 @@ int snd_hctl_elem_tlv_write(snd_hctl_elem_t *elem, const unsigned int *tlv)
|
||
|
{
|
||
|
assert(elem);
|
||
|
assert(tlv);
|
||
|
- assert(tlv[1] >= 4);
|
||
|
+ assert(tlv[SNDRV_CTL_TLVO_LEN] >= 4);
|
||
|
return snd_ctl_elem_tlv_write(elem->hctl->ctl, &elem->id, tlv);
|
||
|
}
|
||
|
|
||
|
@@ -886,7 +886,7 @@ int snd_hctl_elem_tlv_command(snd_hctl_elem_t *elem, const unsigned int *tlv)
|
||
|
{
|
||
|
assert(elem);
|
||
|
assert(tlv);
|
||
|
- assert(tlv[1] >= 4);
|
||
|
+ assert(tlv[SNDRV_CTL_TLVO_LEN] >= 4);
|
||
|
return snd_ctl_elem_tlv_command(elem->hctl->ctl, &elem->id, tlv);
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From b0b720513ee35ec0a5afada0b240310f2f2e1b30 Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Date: Tue, 15 May 2018 21:36:37 +0900
|
||
|
Subject: [PATCH 21/26] pcm: hw: use position offset macro of TLV data
|
||
|
|
||
|
A series of SNDRV_CTL_TLVO_XXX macro was introduced for position offset
|
||
|
of TLV data. This commit applies a code optimization.
|
||
|
|
||
|
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/pcm/pcm_hw.c | 10 ++++++----
|
||
|
1 file changed, 6 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c
|
||
|
index 65b198c5..a728b23b 100644
|
||
|
--- a/src/pcm/pcm_hw.c
|
||
|
+++ b/src/pcm/pcm_hw.c
|
||
|
@@ -1199,6 +1199,7 @@ snd_pcm_query_chmaps_from_hw(int card, int dev, int subdev,
|
||
|
snd_ctl_t *ctl;
|
||
|
snd_ctl_elem_id_t id = {0};
|
||
|
unsigned int tlv[2048], *start;
|
||
|
+ unsigned int type;
|
||
|
snd_pcm_chmap_query_t **map;
|
||
|
int i, ret, nums;
|
||
|
|
||
|
@@ -1223,9 +1224,10 @@ snd_pcm_query_chmaps_from_hw(int card, int dev, int subdev,
|
||
|
/* FIXME: the parser below assumes that the TLV only contains
|
||
|
* chmap-related blocks
|
||
|
*/
|
||
|
- if (tlv[0] != SND_CTL_TLVT_CONTAINER) {
|
||
|
- if (!is_chmap_type(tlv[0])) {
|
||
|
- SYSMSG("Invalid TLV type %d\n", tlv[0]);
|
||
|
+ type = tlv[SNDRV_CTL_TLVO_TYPE];
|
||
|
+ if (type != SND_CTL_TLVT_CONTAINER) {
|
||
|
+ if (!is_chmap_type(type)) {
|
||
|
+ SYSMSG("Invalid TLV type %d\n", type);
|
||
|
return NULL;
|
||
|
}
|
||
|
start = tlv;
|
||
|
@@ -1234,7 +1236,7 @@ snd_pcm_query_chmaps_from_hw(int card, int dev, int subdev,
|
||
|
unsigned int *p;
|
||
|
int size;
|
||
|
start = tlv + 2;
|
||
|
- size = tlv[1];
|
||
|
+ size = tlv[SNDRV_CTL_TLVO_LEN];
|
||
|
nums = 0;
|
||
|
for (p = start; size > 0; ) {
|
||
|
if (!is_chmap_type(p[0])) {
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 6dc2ed4090bee0e5516839173166c6a35c3d80be Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Date: Tue, 15 May 2018 21:36:38 +0900
|
||
|
Subject: [PATCH 22/26] pcm: softvol: use position offset macro of TLV data
|
||
|
|
||
|
A series of SNDRV_CTL_TLVO_XXX macro was introduced for position offset
|
||
|
of TLV data. This commit applies a code optimization.
|
||
|
|
||
|
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/pcm/pcm_softvol.c | 11 +++++++----
|
||
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/src/pcm/pcm_softvol.c b/src/pcm/pcm_softvol.c
|
||
|
index 0eaeacef..f08208f8 100644
|
||
|
--- a/src/pcm/pcm_softvol.c
|
||
|
+++ b/src/pcm/pcm_softvol.c
|
||
|
@@ -31,6 +31,8 @@
|
||
|
#include "pcm_local.h"
|
||
|
#include "pcm_plugin.h"
|
||
|
|
||
|
+#include <sound/tlv.h>
|
||
|
+
|
||
|
#ifndef PIC
|
||
|
/* entry for static linking */
|
||
|
const char *_snd_module_pcm_softvol = "";
|
||
|
@@ -708,10 +710,11 @@ static void snd_pcm_softvol_dump(snd_pcm_t *pcm, snd_output_t *out)
|
||
|
static int add_tlv_info(snd_pcm_softvol_t *svol, snd_ctl_elem_info_t *cinfo)
|
||
|
{
|
||
|
unsigned int tlv[4];
|
||
|
- tlv[0] = SND_CTL_TLVT_DB_SCALE;
|
||
|
- tlv[1] = 2 * sizeof(int);
|
||
|
- tlv[2] = (int)(svol->min_dB * 100);
|
||
|
- tlv[3] = (int)((svol->max_dB - svol->min_dB) * 100 / svol->max_val);
|
||
|
+ tlv[SNDRV_CTL_TLVO_TYPE] = SND_CTL_TLVT_DB_SCALE;
|
||
|
+ tlv[SNDRV_CTL_TLVO_LEN] = 2 * sizeof(int);
|
||
|
+ tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN] = (int)(svol->min_dB * 100);
|
||
|
+ tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] =
|
||
|
+ (int)((svol->max_dB - svol->min_dB) * 100 / svol->max_val);
|
||
|
return snd_ctl_elem_tlv_write(svol->ctl, &cinfo->id, tlv);
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 275a438d425c3477be21e1929061f0c1605876f2 Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Date: Tue, 15 May 2018 21:36:39 +0900
|
||
|
Subject: [PATCH 23/26] test: use position offset macro of TLV data
|
||
|
|
||
|
A series of SNDRV_CTL_TLVO_XXX macro was introduced for position offset
|
||
|
of TLV data. This commit applies a code optimization.
|
||
|
|
||
|
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
test/user-ctl-element-set.c | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/test/user-ctl-element-set.c b/test/user-ctl-element-set.c
|
||
|
index e94152b9..fee130e2 100644
|
||
|
--- a/test/user-ctl-element-set.c
|
||
|
+++ b/test/user-ctl-element-set.c
|
||
|
@@ -660,7 +660,7 @@ static int check_tlv(struct elem_set_trial *trial)
|
||
|
if (err < 0)
|
||
|
return err;
|
||
|
|
||
|
- len = tlv[1] + sizeof(unsigned int) * 2;
|
||
|
+ len = tlv[SNDRV_CTL_TLVO_LEN] + sizeof(unsigned int) * 2;
|
||
|
curr = malloc(len);
|
||
|
if (curr == NULL) {
|
||
|
free(tlv);
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 9ee3e4338f46f18a5cddc267bbb19c7a222c5801 Mon Sep 17 00:00:00 2001
|
||
|
From: Takashi Iwai <tiwai@suse.de>
|
||
|
Date: Tue, 22 May 2018 14:10:59 +0200
|
||
|
Subject: [PATCH 24/26] conf: USB-audio: Fix for Xonar U7 SPDIF device
|
||
|
|
||
|
Add the entry for Xonar U7 to make SPDIF working on it.
|
||
|
|
||
|
Reported-by: Steve Banks <eassbank@gmail.com>
|
||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||
|
---
|
||
|
src/conf/cards/USB-Audio.conf | 1 +
|
||
|
1 file changed, 1 insertion(+)
|
||
|
|
||
|
diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf
|
||
|
index 2b8f9a29..05779c47 100644
|
||
|
--- a/src/conf/cards/USB-Audio.conf
|
||
|
+++ b/src/conf/cards/USB-Audio.conf
|
||
|
@@ -38,6 +38,7 @@ USB-Audio.pcm.surround40_type {
|
||
|
USB-Audio.pcm.iec958_device {
|
||
|
# "NoiseBlaster 3000" 42
|
||
|
"USB Sound Blaster HD" 1
|
||
|
+ "Xonar U7" 1
|
||
|
|
||
|
# The below don't have digital in/out, so prevent them from being opened.
|
||
|
"Andrea PureAudio USB-SA Headset" 999
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From 4740dd97bf54d67f0edef80e1b9e86c04c8ed402 Mon Sep 17 00:00:00 2001
|
||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||
|
Date: Wed, 23 May 2018 10:33:40 +0200
|
||
|
Subject: [PATCH 25/26] pcm: add missing flags initialization for the fallback
|
||
|
control data
|
||
|
|
||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||
|
---
|
||
|
src/pcm/pcm_hw.c | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c
|
||
|
index a728b23b..59a24200 100644
|
||
|
--- a/src/pcm/pcm_hw.c
|
||
|
+++ b/src/pcm/pcm_hw.c
|
||
|
@@ -1018,7 +1018,7 @@ static int map_status_and_control_data(snd_pcm_t *pcm, bool force_fallback)
|
||
|
snd_pcm_set_appl_ptr(pcm, &hw->mmap_control->appl_ptr, hw->fd,
|
||
|
SNDRV_PCM_MMAP_OFFSET_CONTROL);
|
||
|
if (hw->mmap_control_fallbacked) {
|
||
|
- unsigned int flags;
|
||
|
+ unsigned int flags = 0;
|
||
|
/* read appl_ptr and avail_min from kernel when device opened
|
||
|
* with SND_PCM_APPEND flag
|
||
|
*/
|
||
|
--
|
||
|
2.13.6
|
||
|
|
||
|
|
||
|
From ad5aea89226f131f27790c98c4638e4596060f81 Mon Sep 17 00:00:00 2001
|
||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||
|
Date: Wed, 23 May 2018 10:36:17 +0200
|
||
|
Subject: [PATCH 26/26] pcm ioplug: fix some coverity issues (switch, missing
|
||
|
unlock in snd_pcm_ioplug_drain())
|
||
|
|
||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||
|
---
|
||
|
src/pcm/pcm_ioplug.c | 3 +++
|
||
|
1 file changed, 3 insertions(+)
|
||
|
|
||
|
diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c
|
||
|
index db64853b..4d44ae22 100644
|
||
|
--- a/src/pcm/pcm_ioplug.c
|
||
|
+++ b/src/pcm/pcm_ioplug.c
|
||
|
@@ -533,6 +533,7 @@ static int snd_pcm_ioplug_drain(snd_pcm_t *pcm)
|
||
|
case SND_PCM_STATE_OPEN:
|
||
|
case SND_PCM_STATE_DISCONNECTED:
|
||
|
case SND_PCM_STATE_SUSPENDED:
|
||
|
+ snd_pcm_unlock(pcm);
|
||
|
return -EBADFD;
|
||
|
case SND_PCM_STATE_PREPARED:
|
||
|
if (pcm->stream == SND_PCM_STREAM_PLAYBACK) {
|
||
|
@@ -545,6 +546,8 @@ static int snd_pcm_ioplug_drain(snd_pcm_t *pcm)
|
||
|
case SND_PCM_STATE_RUNNING:
|
||
|
io->data->state = SND_PCM_STATE_DRAINING;
|
||
|
break;
|
||
|
+ default:
|
||
|
+ break;
|
||
|
}
|
||
|
|
||
|
if (io->data->state == SND_PCM_STATE_DRAINING) {
|
||
|
--
|
||
|
2.13.6
|
||
|
|