Blame SOURCES/alsa-lib-1.1.6-post.patch

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