diff -Nru alsa-lib-1.1.3/debian/changelog alsa-lib-1.1.3/debian/changelog --- alsa-lib-1.1.3/debian/changelog 2017-02-14 03:12:05.000000000 +0800 +++ alsa-lib-1.1.3/debian/changelog 2018-05-04 09:15:08.000000000 +0800 @@ -1,3 +1,20 @@ +alsa-lib (1.1.3-5ubuntu1) bionic; urgency=medium + + * debian/patches/0009-ucm-Assure-the-user-input-card-name-not-to-exceed-ma.patch + * debian/patches/0010-ucm-Load-device-specific-configuration-file-based-on.patch + * debian/patches/0011-conf-ucm-Add-dual-HD-audio-codecs-config-for-Lenovo.patch + * debian/patches/0012-ucm-adding-the-folder-of-card_long_name-when-finding.patch + * debian/patches/0013-conf-ucm-increase-the-input-volume-for-LineIn.patch + - Backport 5 patches to make audio work on Lenovo machines with dual audio + codecs. (LP: #1768830) + 0009-xxx.patch: 2b9b3f01 + 0010-xxx.patch: 4b9297e6 + 0011-xxx.patch: b7e56af8 (minor change for fixing patch conflict) + 0012-xxx.patch: 181f8e25 (minor change for fixing patch conflict) + 0013-xxx.patch: 81db276f + + -- Hui Wang Fri, 04 May 2018 09:15:08 +0800 + alsa-lib (1.1.3-5) unstable; urgency=medium [ Jordi Mallach ] diff -Nru alsa-lib-1.1.3/debian/patches/0009-ucm-Assure-the-user-input-card-name-not-to-exceed-ma.patch alsa-lib-1.1.3/debian/patches/0009-ucm-Assure-the-user-input-card-name-not-to-exceed-ma.patch --- alsa-lib-1.1.3/debian/patches/0009-ucm-Assure-the-user-input-card-name-not-to-exceed-ma.patch 1970-01-01 08:00:00.000000000 +0800 +++ alsa-lib-1.1.3/debian/patches/0009-ucm-Assure-the-user-input-card-name-not-to-exceed-ma.patch 2018-05-03 20:45:54.000000000 +0800 @@ -0,0 +1,50 @@ +From 2b9b3f013467765219c8ab8a50943d3c7db68f75 Mon Sep 17 00:00:00 2001 +From: Mengdong Lin +Date: Wed, 18 Jan 2017 11:52:35 +0800 +Subject: [PATCH] ucm: Assure the user input card name not to exceed max size + of card long name + +Users can load a card's UCM configuration file by giving the card short +name or long name, which should not exceed the maximum card long name +defined by the kernel. The kernel uses an 80-character buffer to store +the card long name. + +Signed-off-by: Mengdong Lin +Signed-off-by: Takashi Iwai +--- + src/ucm/parser.c | 6 ++++++ + src/ucm/ucm_local.h | 1 + + 2 files changed, 7 insertions(+) + +diff --git a/src/ucm/parser.c b/src/ucm/parser.c +index f520abc5..f61201a6 100644 +--- a/src/ucm/parser.c ++++ b/src/ucm/parser.c +@@ -1335,6 +1335,12 @@ static int load_master_config(const char *card_name, snd_config_t **cfg) + char *env = getenv(ALSA_CONFIG_UCM_VAR); + int err; + ++ if (strnlen(card_name, MAX_CARD_LONG_NAME) == MAX_CARD_LONG_NAME) { ++ uc_error("error: invalid card name %s (at most %d chars)\n", ++ card_name, MAX_CARD_LONG_NAME - 1); ++ return -EINVAL; ++ } ++ + snprintf(filename, sizeof(filename)-1, + "%s/%s/%s.conf", env ? env : ALSA_USE_CASE_DIR, + card_name, card_name); +diff --git a/src/ucm/ucm_local.h b/src/ucm/ucm_local.h +index 6d3302f9..e41aafa4 100644 +--- a/src/ucm/ucm_local.h ++++ b/src/ucm/ucm_local.h +@@ -41,6 +41,7 @@ + #include "use-case.h" + + #define MAX_FILE 256 ++#define MAX_CARD_LONG_NAME 80 + #define ALSA_USE_CASE_DIR ALSA_CONFIG_DIR "/ucm" + + #define SEQUENCE_ELEMENT_TYPE_CDEV 1 +-- +2.17.0 + diff -Nru alsa-lib-1.1.3/debian/patches/0010-ucm-Load-device-specific-configuration-file-based-on.patch alsa-lib-1.1.3/debian/patches/0010-ucm-Load-device-specific-configuration-file-based-on.patch --- alsa-lib-1.1.3/debian/patches/0010-ucm-Load-device-specific-configuration-file-based-on.patch 1970-01-01 08:00:00.000000000 +0800 +++ alsa-lib-1.1.3/debian/patches/0010-ucm-Load-device-specific-configuration-file-based-on.patch 2018-05-03 20:45:56.000000000 +0800 @@ -0,0 +1,184 @@ +From 4b9297e65f541f1a6c1b4a036f66936b9cafe030 Mon Sep 17 00:00:00 2001 +From: Mengdong Lin +Date: Wed, 18 Jan 2017 11:53:35 +0800 +Subject: [PATCH] ucm: Load device-specific configuration file based on the + card long name + +Intel DSP platform drivers are used by many different devices. For user +space to differentiate them, ASoC machine drivers may use the DMI info +(vendor-product-version-board) as card long name. Possible card long names +are: +DellInc.-XPS139343-01-0310JH +ASUSTeKCOMPUTERINC.-T100TA-1.0-T100TA +Circuitco-MinnowboardMaxD0PLATFORM-D0-MinnowBoardMAX +... + +If we want to define a device-specific UCM config file for a card, we +need to use the card long name as the name of both the directory that +contains the UCM config file and the UCM config file itself, like +longname/longname.conf + +When being asked to load configuration file of a card, UCM will try to +find the card in the local machine and get its long name. If the card +long name is available, try to load the file longname/longname.conf to +get the best device-specific configuration; if this file is not available, +fall back to load the default configuration file shortname/shortname.conf +as before. + +This update is backward compatible, because if ASoC machine drivers don't +explicity use DMI or other means to set the card long name, ASoC core +will use the card short name as the long name. And so UCM will load the +config file that matches both the card short name and the long name. + +Signed-off-by: Mengdong Lin +Signed-off-by: Takashi Iwai +--- + src/ucm/parser.c | 99 +++++++++++++++++++++++++++++++++++++++++++-- + src/ucm/ucm_local.h | 2 + + 2 files changed, 97 insertions(+), 4 deletions(-) + +diff --git a/src/ucm/parser.c b/src/ucm/parser.c +index f61201a6..798bf48e 100644 +--- a/src/ucm/parser.c ++++ b/src/ucm/parser.c +@@ -56,6 +56,9 @@ static const char * const component_dir[] = { + NULL, /* terminator */ + }; + ++static int filename_filter(const struct dirent *dirent); ++static int is_component_directory(const char *dir); ++ + static int parse_sequence(snd_use_case_mgr_t *uc_mgr, + struct list_head *base, + snd_config_t *cfg); +@@ -1329,6 +1332,66 @@ static int parse_master_file(snd_use_case_mgr_t *uc_mgr, snd_config_t *cfg) + return 0; + } + ++/* find the card in the local machine and store the card long name */ ++static int get_card_long_name(snd_use_case_mgr_t *mgr) ++{ ++ const char *card_name = mgr->card_name; ++ snd_ctl_t *handle; ++ int card, err; ++ snd_ctl_card_info_t *info; ++ const char *_name, *_long_name; ++ ++ snd_ctl_card_info_alloca(&info); ++ ++ card = -1; ++ if (snd_card_next(&card) < 0 || card < 0) { ++ uc_error("no soundcards found..."); ++ return -1; ++ } ++ ++ while (card >= 0) { ++ char name[32]; ++ ++ sprintf(name, "hw:%d", card); ++ err = snd_ctl_open(&handle, name, 0); ++ if (err < 0) { ++ uc_error("control open (%i): %s", card, ++ snd_strerror(err)); ++ goto next_card; ++ } ++ ++ err = snd_ctl_card_info(handle, info); ++ if (err < 0) { ++ uc_error("control hardware info (%i): %s", card, ++ snd_strerror(err)); ++ snd_ctl_close(handle); ++ goto next_card; ++ } ++ ++ /* Find the local card by comparing the given name with the ++ * card short name and long name. The given card name may be ++ * either a short name or long name, because users may open ++ * the card by either of the two names. ++ */ ++ _name = snd_ctl_card_info_get_name(info); ++ _long_name = snd_ctl_card_info_get_longname(info); ++ if (!strcmp(card_name, _name) ++ || !strcmp(card_name, _long_name)) { ++ strcpy(mgr->card_long_name, _long_name); ++ snd_ctl_close(handle); ++ return 0; ++ } ++ ++ snd_ctl_close(handle); ++next_card: ++ if (snd_card_next(&card) < 0) { ++ uc_error("snd_card_next"); ++ break; ++ } ++ } ++ ++ return -1; ++} + static int load_master_config(const char *card_name, snd_config_t **cfg) + { + char filename[MAX_FILE]; +@@ -1356,15 +1419,43 @@ static int load_master_config(const char *card_name, snd_config_t **cfg) + return 0; + } + +-/* load master use case file for sound card */ ++/* load master use case file for sound card ++ * ++ * The same ASoC machine driver can be shared by many different devices. ++ * For user space to differentiate them and get the best device-specific ++ * configuration, ASoC machine drivers may use the DMI info ++ * (vendor-product-version-board) as the card long name. And user space can ++ * define configuration files like longnamei/longname.conf for a specific device. ++ * ++ * This function will try to find the card in the local machine and get its ++ * long name, then load the file longname/longname.conf to get the best ++ * device-specific configuration. If the card is not found in the local ++ * machine or the device-specific file is not available, fall back to load ++ * the default configuration file name/name.conf. ++ */ + int uc_mgr_import_master_config(snd_use_case_mgr_t *uc_mgr) + { + snd_config_t *cfg; + int err; + +- err = load_master_config(uc_mgr->card_name, &cfg); +- if (err < 0) +- return err; ++ err = get_card_long_name(uc_mgr); ++ if (err == 0) /* load file that maches the card long name */ ++ err = load_master_config(uc_mgr->card_long_name, &cfg); ++ ++ if (err == 0) { ++ /* got device-specific file that matches the card long name */ ++ strcpy(uc_mgr->conf_file_name, uc_mgr->card_long_name); ++ } else { ++ /* Fall back to the file that maches the given card name, ++ * either short name or long name (users may open a card by ++ * its name or long name). ++ */ ++ err = load_master_config(uc_mgr->card_name, &cfg); ++ if (err < 0) ++ return err; ++ strcpy(uc_mgr->conf_file_name, uc_mgr->card_name); ++ } ++ + err = parse_master_file(uc_mgr, cfg); + snd_config_delete(cfg); + if (err < 0) +diff --git a/src/ucm/ucm_local.h b/src/ucm/ucm_local.h +index e41aafa4..299a5b96 100644 +--- a/src/ucm/ucm_local.h ++++ b/src/ucm/ucm_local.h +@@ -191,6 +191,8 @@ struct use_case_verb { + */ + struct snd_use_case_mgr { + char *card_name; ++ char card_long_name[MAX_CARD_LONG_NAME]; ++ char conf_file_name[MAX_CARD_LONG_NAME]; + char *comment; + + /* use case verb, devices and modifier configs parsed from files */ +-- +2.17.0 + diff -Nru alsa-lib-1.1.3/debian/patches/0011-conf-ucm-Add-dual-HD-audio-codecs-config-for-Lenovo.patch alsa-lib-1.1.3/debian/patches/0011-conf-ucm-Add-dual-HD-audio-codecs-config-for-Lenovo.patch --- alsa-lib-1.1.3/debian/patches/0011-conf-ucm-Add-dual-HD-audio-codecs-config-for-Lenovo.patch 1970-01-01 08:00:00.000000000 +0800 +++ alsa-lib-1.1.3/debian/patches/0011-conf-ucm-Add-dual-HD-audio-codecs-config-for-Lenovo.patch 2018-05-03 20:45:57.000000000 +0800 @@ -0,0 +1,214 @@ +From b7e56af82a600262b7f641c5920a914b3303fd56 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 5 Dec 2017 14:53:11 +0100 +Subject: [PATCH] conf/ucm: Add dual HD-audio codecs config for Lenovo + +Some recent Lenovo laptops have dual codecs and we need to switch them +accordingly. The kernel side already contains a fix and gives the +unique longname string for identifying the board, and here we hook up +the corresponding UCM profile. + +The profile was corrected and tested by Hui Wang on Lenovo p520. + +Tested-by: Kailang +Tested-by: Hui Wang +Signed-off-by: Takashi Iwai +--- + configure.ac | 1 + + .../HDAudio-Lenovo-DualCodecs.conf | 5 + + .../ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf | 145 ++++++++++++++++++ + .../ucm/HDAudio-Lenovo-DualCodecs/Makefile.am | 4 + + src/conf/ucm/Makefile.am | 1 + + 5 files changed, 156 insertions(+) + create mode 100644 src/conf/ucm/HDAudio-Lenovo-DualCodecs/HDAudio-Lenovo-DualCodecs.conf + create mode 100644 src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf + create mode 100644 src/conf/ucm/HDAudio-Lenovo-DualCodecs/Makefile.am + +Index: alsa-lib-1.1.3/configure.ac +=================================================================== +--- alsa-lib-1.1.3.orig/configure.ac ++++ alsa-lib-1.1.3/configure.ac +@@ -672,6 +672,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/pict + src/conf/ucm/tegraalc5632/Makefile \ + src/conf/ucm/PAZ00/Makefile \ + src/conf/ucm/GoogleNyan/Makefile \ ++ src/conf/ucm/HDAudio-Lenovo-DualCodecs/Makefile \ + src/conf/ucm/broadwell-rt286/Makefile \ + src/conf/ucm/skylake-rt286/Makefile \ + src/conf/ucm/VEYRON-I2S/Makefile \ +Index: alsa-lib-1.1.3/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HDAudio-Lenovo-DualCodecs.conf +=================================================================== +--- /dev/null ++++ alsa-lib-1.1.3/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HDAudio-Lenovo-DualCodecs.conf +@@ -0,0 +1,5 @@ ++Comment "Lenovo laptop with dual HD-audio codecs" ++SectionUseCase."HiFi" { ++ File "HiFi.conf" ++ Comment "Default" ++} +Index: alsa-lib-1.1.3/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf +=================================================================== +--- /dev/null ++++ alsa-lib-1.1.3/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf +@@ -0,0 +1,145 @@ ++SectionVerb { ++ Value { ++ TQ "HiFi" ++ } ++ ++ EnableSequence [ ++ cdev "hw:PCH" ++ cset "name='Front Playback Volume' 100%" ++ cset "name='Front Playback Switch' on" ++ cset "name='Rear-Panel Capture Volume' 100%" ++ cset "name='Rear-Panel Capture Switch' on" ++ ] ++ ++ DisableSequence [ ++ cdev "hw:PCH" ++ cset "name='Front Playback Volume' 0" ++ cset "name='Front Playback Switch' off" ++ cset "name='Rear-Panel Capture Volume' 0" ++ cset "name='Rear-Panel Capture Switch' off" ++ ] ++} ++ ++SectionDevice."Speaker" { ++ Comment "Speaker" ++ ++ Value { ++ PlaybackChannels "2" ++ PlaybackPCM "hw:PCH,4" ++ } ++ ++ ConflictingDevice [ ++ "Headphone" ++ ] ++ ++ EnableSequence [ ++ cdev "hw:PCH" ++ cset "name='Speaker Playback Switch' on" ++ cset "name='Speaker Playback Volume' 100%" ++ ] ++ ++ DisableSequence [ ++ cdev "hw:PCH" ++ cset "name='Speaker Playback Volume' 0" ++ cset "name='Speaker Playback Switch' off" ++ ] ++} ++ ++SectionDevice."LineOut" { ++ Comment "Line Out" ++ ++ Value { ++ PlaybackChannels "2" ++ PlaybackPCM "hw:PCH,0" ++ JackControl "Line Out Jack" ++ JackHWMute "Speaker" ++ } ++} ++ ++SectionDevice."Headphone" { ++ Comment "Headphone" ++ ++ Value { ++ PlaybackChannels "2" ++ PlaybackPCM "hw:PCH,4" ++ JackControl "Front Headphone Jack" ++ JackHWMute "Speaker" ++ } ++ ++ ConflictingDevice [ ++ "Speaker" ++ ] ++ ++ EnableSequence [ ++ cdev "hw:PCH" ++ cset "name='Headphone Playback Switch' on" ++ cset "name='Headphone Playback Volume' 100%" ++ ] ++ ++ DisableSequence [ ++ cdev "hw:PCH" ++ cset "name='Headphone Playback Volume' 0" ++ cset "name='Headphone Playback Switch' off" ++ ] ++} ++ ++SectionDevice."LineIn" { ++ Comment "Rear Line In" ++ ++ Value { ++ CaptureChannels "2" ++ CapturePCM "hw:PCH,0" ++ JackControl "Line Jack" ++ } ++ ++ ConflictingDevice [ ++ "RearMic" ++ ] ++ ++ EnableSequence [ ++ cdev "hw:PCH" ++ cset "name='Input Source' Line" ++ ] ++} ++ ++SectionDevice."RearMic" { ++ Comment "Rear Microphone" ++ ++ Value { ++ CaptureChannels "2" ++ CapturePCM "hw:PCH,0" ++ # CapturePriority "150" ++ JackHWMute "LineIn" ++ } ++ ++ ConflictingDevice [ ++ "LineIn" ++ ] ++ ++ EnableSequence [ ++ cdev "hw:PCH" ++ cset "name='Input Source' Rear Mic" ++ ] ++} ++ ++SectionDevice."FrontMic" { ++ Comment "Front Microphone" ++ ++ Value { ++ CaptureChannels "2" ++ CapturePCM "hw:PCH,4" ++ JackControl "Front Mic Jack" ++ } ++ ++ EnableSequence [ ++ cdev "hw:PCH" ++ cset "name='Front-Panel Capture Volume' 100%" ++ cset "name='Front-Panel Capture Switch' on" ++ ] ++ ++ DisableSequence [ ++ cdev "hw:PCH" ++ cset "name='Front-Panel Capture Volume' 0" ++ cset "name='Front-Panel Capture Switch' off" ++ ] ++} +Index: alsa-lib-1.1.3/src/conf/ucm/HDAudio-Lenovo-DualCodecs/Makefile.am +=================================================================== +--- /dev/null ++++ alsa-lib-1.1.3/src/conf/ucm/HDAudio-Lenovo-DualCodecs/Makefile.am +@@ -0,0 +1,4 @@ ++alsaconfigdir = @ALSA_CONFIG_DIR@ ++ucmdir = $(alsaconfigdir)/ucm/HDAudio-Lenovo-DualCodecs ++ucm_DATA = HDAudio-Lenovo-DualCodecs.conf HiFi.conf ++EXTRA_DIST = $(ucm_DATA) +Index: alsa-lib-1.1.3/src/conf/ucm/Makefile.am +=================================================================== +--- alsa-lib-1.1.3.orig/src/conf/ucm/Makefile.am ++++ alsa-lib-1.1.3/src/conf/ucm/Makefile.am +@@ -1 +1 @@ +-SUBDIRS=DAISY-I2S PandaBoard PandaBoardES SDP4430 tegraalc5632 PAZ00 GoogleNyan broadwell-rt286 skylake-rt286 VEYRON-I2S chtrt5645 DB410c apq8064-tabla-snd-card Tuna tegra-rt5640 Manta-I2S Manta-SPDIF msm8974-taiko-mtp-snd-card ++SUBDIRS=DAISY-I2S PandaBoard PandaBoardES SDP4430 tegraalc5632 PAZ00 GoogleNyan HDAudio-Lenovo-DualCodecs broadwell-rt286 skylake-rt286 VEYRON-I2S chtrt5645 DB410c apq8064-tabla-snd-card Tuna tegra-rt5640 Manta-I2S Manta-SPDIF msm8974-taiko-mtp-snd-card diff -Nru alsa-lib-1.1.3/debian/patches/0012-ucm-adding-the-folder-of-card_long_name-when-finding.patch alsa-lib-1.1.3/debian/patches/0012-ucm-adding-the-folder-of-card_long_name-when-finding.patch --- alsa-lib-1.1.3/debian/patches/0012-ucm-adding-the-folder-of-card_long_name-when-finding.patch 1970-01-01 08:00:00.000000000 +0800 +++ alsa-lib-1.1.3/debian/patches/0012-ucm-adding-the-folder-of-card_long_name-when-finding.patch 2018-05-03 20:45:57.000000000 +0800 @@ -0,0 +1,45 @@ +From 181f8e251bc05832f9c9401544e680ea0572a2e3 Mon Sep 17 00:00:00 2001 +From: Hui Wang +Date: Wed, 2 May 2018 14:08:05 +0800 +Subject: [PATCH] ucm: adding the folder of card_long_name when finding verb + conf file + +The board configuration file and verb conf file are allowed to be +in the folder named of card_long_name, so when finding the verb conf +file, we need to check if it is in the folder of card_long_name or +card_name. + +Signed-off-by: Hui Wang +Signed-off-by: Jaroslav Kysela +--- + src/ucm/parser.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +Index: alsa-lib-1.1.3/src/ucm/parser.c +=================================================================== +--- alsa-lib-1.1.3.orig/src/ucm/parser.c ++++ alsa-lib-1.1.3/src/ucm/parser.c +@@ -1055,6 +1055,7 @@ static int parse_verb_file(snd_use_case_ + char filename[MAX_FILE]; + char *env = getenv(ALSA_CONFIG_UCM_VAR); + int err; ++ char *folder_name; + + /* allocate verb */ + verb = calloc(1, sizeof(struct use_case_verb)); +@@ -1081,9 +1082,14 @@ static int parse_verb_file(snd_use_case_ + } + + /* open Verb file for reading */ ++ if (!strncmp(uc_mgr->conf_file_name, uc_mgr->card_long_name, MAX_CARD_LONG_NAME)) ++ folder_name = uc_mgr->card_long_name; ++ else ++ folder_name = uc_mgr->card_name; ++ + snprintf(filename, sizeof(filename), "%s/%s/%s", + env ? env : ALSA_USE_CASE_DIR, +- uc_mgr->card_name, file); ++ folder_name, file); + filename[sizeof(filename)-1] = '\0'; + + err = uc_mgr_config_load(filename, &cfg); diff -Nru alsa-lib-1.1.3/debian/patches/0013-conf-ucm-increase-the-input-volume-for-LineIn.patch alsa-lib-1.1.3/debian/patches/0013-conf-ucm-increase-the-input-volume-for-LineIn.patch --- alsa-lib-1.1.3/debian/patches/0013-conf-ucm-increase-the-input-volume-for-LineIn.patch 1970-01-01 08:00:00.000000000 +0800 +++ alsa-lib-1.1.3/debian/patches/0013-conf-ucm-increase-the-input-volume-for-LineIn.patch 2018-05-03 20:45:58.000000000 +0800 @@ -0,0 +1,29 @@ +From 81db276f8c2235adc83e9698b0174265f6482655 Mon Sep 17 00:00:00 2001 +From: Hui Wang +Date: Wed, 2 May 2018 14:08:06 +0800 +Subject: [PATCH] conf/ucm: increase the input volume for LineIn + +Otherwise, the boost value is 0, and the sound captured from that +LineIn jack is too weak for users. + +Signed-off-by: Hui Wang +Signed-off-by: Jaroslav Kysela +--- + src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf b/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf +index 5096789..ece780d 100644 +--- a/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf ++++ b/src/conf/ucm/HDAudio-Lenovo-DualCodecs/HiFi.conf +@@ -99,6 +99,7 @@ SectionDevice."LineIn" { + EnableSequence [ + cdev "hw:PCH" + cset "name='Input Source' Line" ++ cset "name='Line Boost Volume' 3" + ] + } + +-- +2.7.4 + diff -Nru alsa-lib-1.1.3/debian/patches/series alsa-lib-1.1.3/debian/patches/series --- alsa-lib-1.1.3/debian/patches/series 2017-01-25 00:35:03.000000000 +0800 +++ alsa-lib-1.1.3/debian/patches/series 2018-05-04 09:14:49.000000000 +0800 @@ -6,3 +6,8 @@ 0006-Enabled-extended-namehints-in-alsa.conf.patch 0007-Add-a-configuration-for-tegra-alc5632-based-cards.patch 0008-topology-Fix-incorrect-license-in-source-comments.patch +0009-ucm-Assure-the-user-input-card-name-not-to-exceed-ma.patch +0010-ucm-Load-device-specific-configuration-file-based-on.patch +0011-conf-ucm-Add-dual-HD-audio-codecs-config-for-Lenovo.patch +0012-ucm-adding-the-folder-of-card_long_name-when-finding.patch +0013-conf-ucm-increase-the-input-volume-for-LineIn.patch