diff --git a/0001-Check-for-thread-specific-locale-support.patch b/0001-Check-for-thread-specific-locale-support.patch deleted file mode 100644 index 55672ed..0000000 --- a/0001-Check-for-thread-specific-locale-support.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 51ef640cee37f73d771e784e81196ff7c15f53ff Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= -Date: Wed, 21 Apr 2010 18:37:47 +0200 -Subject: [PATCH 01/21] Check for thread-specific locale support -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Rémi Denis-Courmont -Signed-off-by: Jaroslav Kysela ---- - configure.in | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/configure.in b/configure.in -index f6df502..abc4687 100644 ---- a/configure.in -+++ b/configure.in -@@ -64,6 +64,7 @@ dnl Checks for library functions. - AC_PROG_GCC_TRADITIONAL - AC_CHECK_FUNC([hsearch_r], [HAVE_HSEARCH_R=yes]) - AM_CONDITIONAL(ALSA_HSEARCH_R, [test "x$HAVE_HSEARCH_R" != xyes]) -+AC_CHECK_FUNCS([uselocale]) - - SAVE_LIBRARY_VERSION - AC_SUBST(LIBTOOL_VERSION_INFO) --- -1.7.2.1 - diff --git a/0002-Use-thread-safe-locale-functions-if-available.patch b/0002-Use-thread-safe-locale-functions-if-available.patch deleted file mode 100644 index 91ce510..0000000 --- a/0002-Use-thread-safe-locale-functions-if-available.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 8d80d5f344ae5e32d24122cbf8e759fdd1e1a60d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= -Date: Wed, 21 Apr 2010 18:37:48 +0200 -Subject: [PATCH 02/21] Use thread-safe locale functions if available -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -setlocale() is not thread-safe. It can actually trigger a crash if -another thread uses locale informations at the same time in the process. -Library code should use POSIX newlocale/duplocale/uselocale/freelocale -instead. Those functions only change the locale data for the calling -thread. - -Signed-off-by: Rémi Denis-Courmont -Signed-off-by: Jaroslav Kysela ---- - src/conf.c | 16 ++++++++++++++++ - 1 files changed, 16 insertions(+), 0 deletions(-) - -diff --git a/src/conf.c b/src/conf.c -index 570c90f..5d8c5c9 100644 ---- a/src/conf.c -+++ b/src/conf.c -@@ -499,22 +499,38 @@ static int safe_strtod(const char *str, double *val) - { - char *end; - double v; -+#ifdef HAVE_USELOCALE -+ locale_t saved_locale, c_locale; -+#else - char *saved_locale; - char locstr[64]; /* enough? */ -+#endif - int err; - - if (!*str) - return -EINVAL; -+#ifdef HAVE_USELOCALE -+ c_locale = newlocale(LC_NUMERIC_MASK, "C", 0); -+ saved_locale = uselocale(c_locale); -+#else - saved_locale = setlocale(LC_NUMERIC, NULL); - if (saved_locale) { - snprintf(locstr, sizeof(locstr), "%s", saved_locale); - setlocale(LC_NUMERIC, "C"); - } -+#endif - errno = 0; - v = strtod(str, &end); - err = -errno; -+#ifdef HAVE_USELOCALE -+ if (c_locale != (locale_t)0) { -+ uselocale(saved_locale); -+ freelocale(c_locale); -+ } -+#else - if (saved_locale) - setlocale(LC_NUMERIC, locstr); -+#endif - if (err) - return err; - if (*end) --- -1.7.2.1 - diff --git a/0003-seq-Fix-for-snd_seq_parse_address.patch b/0003-seq-Fix-for-snd_seq_parse_address.patch deleted file mode 100644 index 0361909..0000000 --- a/0003-seq-Fix-for-snd_seq_parse_address.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 19892334499ed21ed4dc30084ad8700253f9cb2f Mon Sep 17 00:00:00 2001 -From: Pedro Lopez-Cabanillas -Date: Thu, 22 Apr 2010 15:42:20 +0200 -Subject: [PATCH 03/21] seq: Fix for snd_seq_parse_address() - -snd_seq_parse_address() uses strncmp() to compare the client name -in the string argument with the existing clients, until it finds one -name matching the same leading characters. This may produce wrong -results when there are two sequencer clients with similar names. - -Example: "KMidimon" : "Kmid" - -Signed-off-by: Pedro Lopez-Cabanillas -Signed-off-by: Jaroslav Kysela ---- - src/seq/seqmid.c | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -diff --git a/src/seq/seqmid.c b/src/seq/seqmid.c -index 86a4970..894c3a2 100644 ---- a/src/seq/seqmid.c -+++ b/src/seq/seqmid.c -@@ -414,7 +414,8 @@ int snd_seq_parse_address(snd_seq_t *seq, snd_seq_addr_t *addr, const char *arg) - return -EINVAL; - cinfo.client = -1; - while (snd_seq_query_next_client(seq, &cinfo) >= 0) { -- if (! strncmp(arg, cinfo.name, len)) { -+ if ((strlen(cinfo.name) == len) && -+ ! strncmp(arg, cinfo.name, len)) { - addr->client = cinfo.client; - return 0; - } --- -1.7.2.1 - diff --git a/0004-control-tlv-Check-dB-range-only-within-the-control-s.patch b/0004-control-tlv-Check-dB-range-only-within-the-control-s.patch deleted file mode 100644 index f38229e..0000000 --- a/0004-control-tlv-Check-dB-range-only-within-the-control-s.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 30ad5ed04017f7e77b25cf40f18c26396903cd23 Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi -Date: Wed, 19 May 2010 08:19:26 +0200 -Subject: [PATCH 04/21] control: tlv: Check dB range only within the control's volume range - -The DB_RANGE need to be used on some HW, since the gain on -volume control is not continuous, and has to be divided into -several sub DB_SCALE ranges. -ASoC has a feature to override the HW default volume range, -and in this case when the volume range is less than the -HW maximum we do not need to go through the whole DB_RANGE, -but we need to stop where the kcontrol's maximum tell us. - -Signed-off-by: Peter Ujfalusi -Signed-off-by: Jaroslav Kysela ---- - src/control/tlv.c | 11 ++++++++--- - 1 files changed, 8 insertions(+), 3 deletions(-) - -diff --git a/src/control/tlv.c b/src/control/tlv.c -index cfd9b97..0ff052e 100644 ---- a/src/control/tlv.c -+++ b/src/control/tlv.c -@@ -140,10 +140,13 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax, - pos = 2; - while (pos + 4 <= len) { - long rmin, rmax; -- rangemin = (int)tlv[pos]; -- rangemax = (int)tlv[pos + 1]; -+ long submin, submax; -+ submin = (int)tlv[pos]; -+ submax = (int)tlv[pos + 1]; -+ if (rangemax < submax) -+ submax = rangemax; - err = snd_tlv_get_dB_range(tlv + pos + 2, -- rangemin, rangemax, -+ submin, submax, - &rmin, &rmax); - if (err < 0) - return err; -@@ -156,6 +159,8 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax, - *min = rmin; - *max = rmax; - } -+ if (rangemax == submax) -+ return 0; - pos += int_index(tlv[pos + 3]) + 4; - } - return 0; --- -1.7.2.1 - diff --git a/0005-alisp-Fix-a-string-format-ambiguity.patch b/0005-alisp-Fix-a-string-format-ambiguity.patch deleted file mode 100644 index 1da5526..0000000 --- a/0005-alisp-Fix-a-string-format-ambiguity.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 191c57805a791925ab5992f127a1cb5f4ab56c9c Mon Sep 17 00:00:00 2001 -From: Colin Guthrie -Date: Sun, 28 Feb 2010 22:25:26 +0000 -Subject: [PATCH 05/21] alisp - Fix a string format ambiguity - -Signed-off-by: Takashi Iwai ---- - src/alisp/alisp.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/alisp/alisp.c b/src/alisp/alisp.c -index f3580f9..7575f55 100644 ---- a/src/alisp/alisp.c -+++ b/src/alisp/alisp.c -@@ -1712,7 +1712,7 @@ static struct alisp_object * F_princ(struct alisp_instance *instance, struct ali - delete_tree(instance, p1); - p1 = eval(instance, car(p)); - if (alisp_compare_type(p1, ALISP_OBJ_STRING)) -- snd_output_printf(instance->out, p1->value.s); -+ snd_output_printf(instance->out, "%s", p1->value.s); - else - princ_object(instance->out, p1); - n = cdr(p); --- -1.7.2.1 - diff --git a/0006-tlv-Check-out-of-range-dB-with-SND_CTL_TLVT_DB_RANGE.patch b/0006-tlv-Check-out-of-range-dB-with-SND_CTL_TLVT_DB_RANGE.patch deleted file mode 100644 index 2353585..0000000 --- a/0006-tlv-Check-out-of-range-dB-with-SND_CTL_TLVT_DB_RANGE.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 16a2cad39b7ee29e34b92d39d72eebfc88f8dc22 Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi -Date: Tue, 20 Jul 2010 10:34:52 +0300 -Subject: [PATCH 06/21] tlv: Check out of range dB with SND_CTL_TLVT_DB_RANGE - -When converting from dB value to raw value, the control's -full range was not checked in case of SND_CTL_TLVT_DB_RANGE. - -Check out of range dB values, and return apropriate raw -value for the caller. - -Signed-off-by: Peter Ujfalusi -Signed-off-by: Takashi Iwai ---- - src/control/tlv.c | 12 +++++++++++- - 1 files changed, 11 insertions(+), 1 deletions(-) - -diff --git a/src/control/tlv.c b/src/control/tlv.c -index 0ff052e..9f26f35 100644 ---- a/src/control/tlv.c -+++ b/src/control/tlv.c -@@ -285,13 +285,23 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, - { - switch (tlv[0]) { - case SND_CTL_TLVT_DB_RANGE: { -+ long dbmin, dbmax; - unsigned int pos, len; - len = int_index(tlv[1]); - if (len > MAX_TLV_RANGE_SIZE) - return -EINVAL; -+ if (snd_tlv_get_dB_range(tlv, rangemin, rangemax, -+ &dbmin, &dbmax)) -+ return -EINVAL; -+ if (db_gain <= dbmin) { -+ *value = rangemin; -+ return 0; -+ } else if (db_gain >= dbmax) { -+ *value = rangemax; -+ return 0; -+ } - pos = 2; - while (pos + 4 <= len) { -- long dbmin, dbmax; - rangemin = (int)tlv[pos]; - rangemax = (int)tlv[pos + 1]; - if (!snd_tlv_get_dB_range(tlv + pos + 2, --- -1.7.2.1 - diff --git a/0007-tlv-Handle-holes-in-SND_CTL_TLVT_DB_RANGE-array.patch b/0007-tlv-Handle-holes-in-SND_CTL_TLVT_DB_RANGE-array.patch deleted file mode 100644 index 06b2793..0000000 --- a/0007-tlv-Handle-holes-in-SND_CTL_TLVT_DB_RANGE-array.patch +++ /dev/null @@ -1,76 +0,0 @@ -From d81ce4ea7af917f992aa0529c29db590d566ae7a Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi -Date: Tue, 20 Jul 2010 10:34:53 +0300 -Subject: [PATCH 07/21] tlv: Handle 'holes' in SND_CTL_TLVT_DB_RANGE array - -When converting from dB to raw value, and DB_RANGE is -used with non overlapping map, dB value in between the -sub ranges will be not found. - -For example, if the control has the following: -0: -10dB -1: -5dB -2: 0dB -3: 2dB -4: 4dB - -static const unsigned int nonoverlapping_tlv[] = { - TLV_DB_RANGE_HEAD(2), - 0, 2, TLV_DB_SCALE_ITEM(-1000, 500, 0), - 3, 4, TLV_DB_SCALE_ITEM(200, 200, 0), -}; - -Range 1: -10 .. 0dB -Range 2: 2 .. 4dB - -If user asks for 1dB the snd_tlv_convert_from_dB will not find -the raw value, since the 1dB is not part of either range. - -To fix this, we will store the previous non maching range's -maximum raw value. If the dB value is not found in the next range, -we will check, if the requested dB value is in between the current -and the previous range, and if it is than pick the apropriate raw -value based on the xdir (up or down rounding). - -Signed-off-by: Peter Ujfalusi -Signed-off-by: Takashi Iwai ---- - src/control/tlv.c | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -diff --git a/src/control/tlv.c b/src/control/tlv.c -index 9f26f35..49f9afe 100644 ---- a/src/control/tlv.c -+++ b/src/control/tlv.c -@@ -285,7 +285,7 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, - { - switch (tlv[0]) { - case SND_CTL_TLVT_DB_RANGE: { -- long dbmin, dbmax; -+ long dbmin, dbmax, prev_rangemax; - unsigned int pos, len; - len = int_index(tlv[1]); - if (len > MAX_TLV_RANGE_SIZE) -@@ -301,6 +301,7 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, - return 0; - } - pos = 2; -+ prev_rangemax = 0; - while (pos + 4 <= len) { - rangemin = (int)tlv[pos]; - rangemax = (int)tlv[pos + 1]; -@@ -311,6 +312,11 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, - return snd_tlv_convert_from_dB(tlv + pos + 2, - rangemin, rangemax, - db_gain, value, xdir); -+ else if (db_gain < dbmin) { -+ *value = xdir ? rangemin : prev_rangemax; -+ return 0; -+ } -+ prev_rangemax = rangemax; - pos += int_index(tlv[pos + 3]) + 4; - } - return -EINVAL; --- -1.7.2.1 - diff --git a/0008-tlv-Remove-tailing-tab-after-snd_ctl_get_dB_range-fu.patch b/0008-tlv-Remove-tailing-tab-after-snd_ctl_get_dB_range-fu.patch deleted file mode 100644 index 7673d5d..0000000 --- a/0008-tlv-Remove-tailing-tab-after-snd_ctl_get_dB_range-fu.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 2a94d80407f620c256021707503b14377d4701d1 Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi -Date: Tue, 20 Jul 2010 10:34:54 +0300 -Subject: [PATCH 08/21] tlv: Remove tailing tab after snd_ctl_get_dB_range function - -Cosmetic fix. -There was a tab instead of new line after snd_ctl_get_dB_range -function. - -Signed-off-by: Peter Ujfalusi -Signed-off-by: Takashi Iwai ---- - src/control/tlv.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/control/tlv.c b/src/control/tlv.c -index 49f9afe..ba52752 100644 ---- a/src/control/tlv.c -+++ b/src/control/tlv.c -@@ -442,7 +442,7 @@ int snd_ctl_get_dB_range(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, - return snd_tlv_get_dB_range(info.tlv, info.minval, info.maxval, - min, max); - } -- -+ - /** - * \brief Convert the volume value to dB on the given control element - * \param ctl the control handler --- -1.7.2.1 - diff --git a/0009-Memory-leak-in-namehint.c.patch b/0009-Memory-leak-in-namehint.c.patch deleted file mode 100644 index 8f10ae7..0000000 --- a/0009-Memory-leak-in-namehint.c.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 8dde984237d9bce99236355b85df9c438badb59f Mon Sep 17 00:00:00 2001 -From: John Lindgren -Date: Wed, 21 Jul 2010 00:38:37 +0200 -Subject: [PATCH 09/21] Memory leak in namehint.c - -Get_card_name() can be called more than once on the same list, so it -must free the previous list->cardname before replacing it. - -Signed-off-by: John Lindgren -Signed-off-by: Jaroslav Kysela ---- - src/control/namehint.c | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -diff --git a/src/control/namehint.c b/src/control/namehint.c -index 78572d8..1819292 100644 ---- a/src/control/namehint.c -+++ b/src/control/namehint.c -@@ -471,6 +471,8 @@ static int get_card_name(struct hint_list *list, int card) - char scard[16], *s; - int err; - -+ free(list->cardname); -+ list->cardname = NULL; - err = snd_card_get_name(card, &list->cardname); - if (err <= 0) - return 0; --- -1.7.2.1 - diff --git a/0010-pcm-ladspa-fix-small-memory-leak-in-snd_pcm_ladspa_f.patch b/0010-pcm-ladspa-fix-small-memory-leak-in-snd_pcm_ladspa_f.patch deleted file mode 100644 index bca72e9..0000000 --- a/0010-pcm-ladspa-fix-small-memory-leak-in-snd_pcm_ladspa_f.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 3f589c9369a7514850e2f5afe4e9d486708f12ef Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Thu, 22 Jul 2010 11:33:20 +0200 -Subject: [PATCH 10/21] pcm - ladspa: fix small memory leak in snd_pcm_ladspa_free_instances() - -Signed-off-by: Jaroslav Kysela ---- - src/pcm/pcm_ladspa.c | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -diff --git a/src/pcm/pcm_ladspa.c b/src/pcm/pcm_ladspa.c -index 5161820..c413c10 100644 ---- a/src/pcm/pcm_ladspa.c -+++ b/src/pcm/pcm_ladspa.c -@@ -341,6 +341,8 @@ static void snd_pcm_ladspa_free_instances(snd_pcm_t *pcm, snd_pcm_ladspa_t *lads - free(instance->output.m_data[idx]); - free(instance->output.m_data); - } -+ free(instance->input.data); -+ free(instance->output.data); - list_del(&(instance->list)); - snd_pcm_ladspa_free_eps(&instance->input); - snd_pcm_ladspa_free_eps(&instance->output); --- -1.7.2.1 - diff --git a/0011-pcm_plug-fix-comparison-always-true.patch b/0011-pcm_plug-fix-comparison-always-true.patch deleted file mode 100644 index c6b9c5e..0000000 --- a/0011-pcm_plug-fix-comparison-always-true.patch +++ /dev/null @@ -1,27 +0,0 @@ -From db7545a077eecee0a8c32759ee77340f9e7c9d15 Mon Sep 17 00:00:00 2001 -From: Anssi Hannula -Date: Mon, 2 Aug 2010 18:50:08 +0300 -Subject: [PATCH 11/21] pcm_plug: fix comparison always true - -Signed-off-by: Anssi Hannula -Signed-off-by: Takashi Iwai ---- - src/pcm/pcm_plug.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/pcm/pcm_plug.c b/src/pcm/pcm_plug.c -index 967cf46..e9d2923 100644 ---- a/src/pcm/pcm_plug.c -+++ b/src/pcm/pcm_plug.c -@@ -485,7 +485,7 @@ static int snd_pcm_plug_change_format(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_p - /* No conversion is needed */ - if (clt->format == slv->format && - clt->rate == slv->rate && -- clt->channels == clt->channels) -+ clt->channels == slv->channels) - return 0; - - if (snd_pcm_format_linear(slv->format)) { --- -1.7.2.1 - diff --git a/0012-test-latency-fix-timediff-calculation.patch b/0012-test-latency-fix-timediff-calculation.patch deleted file mode 100644 index 4923630..0000000 --- a/0012-test-latency-fix-timediff-calculation.patch +++ /dev/null @@ -1,26 +0,0 @@ -From eb3768563a29189156b7117d975930aee8133586 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 4 Aug 2010 19:47:01 +0200 -Subject: [PATCH 12/21] test/latency: fix timediff calculation - -Signed-off-by: Jaroslav Kysela ---- - test/latency.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/test/latency.c b/test/latency.c -index 304e012..03d65a2 100644 ---- a/test/latency.c -+++ b/test/latency.c -@@ -321,7 +321,7 @@ long timediff(snd_timestamp_t t1, snd_timestamp_t t2) - l = (signed long) t1.tv_usec - (signed long) t2.tv_usec; - if (l < 0) { - t1.tv_sec--; -- l = -l; -+ l = 1000000 + l; - l %= 1000000; - } - return (t1.tv_sec * 1000000) + l; --- -1.7.2.1 - diff --git a/0013-HDA-Intel-present-all-4-HDMI-outputs-instead-of-just.patch b/0013-HDA-Intel-present-all-4-HDMI-outputs-instead-of-just.patch deleted file mode 100644 index c07338a..0000000 --- a/0013-HDA-Intel-present-all-4-HDMI-outputs-instead-of-just.patch +++ /dev/null @@ -1,166 +0,0 @@ -From e6d5dcf1f625984605d362338d71162de45a6c60 Mon Sep 17 00:00:00 2001 -From: Anssi Hannula -Date: Tue, 3 Aug 2010 20:27:49 +0300 -Subject: [PATCH 13/21] HDA-Intel: present all 4 HDMI outputs instead of just the first one - -Commit 92608badc519a8c1f65d93743396517aaa582b53 in linux kernel added -the possibility of 3 additional HDMI devices on indexes 7-9. - -Present all those additional devices using the "hdmi" alias as well. - -Signed-off-by: Anssi Hannula -Signed-off-by: Takashi Iwai ---- - src/conf/cards/HDA-Intel.conf | 108 +++++++++++++++++++++++++++++++++++++++-- - 1 files changed, 104 insertions(+), 4 deletions(-) - -diff --git a/src/conf/cards/HDA-Intel.conf b/src/conf/cards/HDA-Intel.conf -index d3ac002..726e8c9 100644 ---- a/src/conf/cards/HDA-Intel.conf -+++ b/src/conf/cards/HDA-Intel.conf -@@ -142,11 +142,17 @@ HDA-Intel.pcm.iec958.0 { - - - --HDA-Intel.pcm.hdmi.0 { -- @args [ CARD AES0 AES1 AES2 AES3 ] -+HDA-Intel.pcm.hdmi.common { -+ @args [ CARD DEVICE CTLINDEX AES0 AES1 AES2 AES3 ] - @args.CARD { - type string - } -+ @args.DEVICE { -+ type integer -+ } -+ @args.CTLINDEX { -+ type integer -+ } - @args.AES0 { - type integer - } -@@ -163,26 +169,120 @@ HDA-Intel.pcm.hdmi.0 { - slave.pcm { - type hw - card $CARD -- device 3 -+ device $DEVICE - } - hooks.0 { - type ctl_elems - hook_args [ - { - name "IEC958 Playback Default" -+ index $CTLINDEX - lock true - preserve true - value [ $AES0 $AES1 $AES2 $AES3 ] - } - { - name "IEC958 Playback Switch" -+ index $CTLINDEX - lock true - preserve true - value true - } - ] - } -- hint.device 3 -+ hint.device $DEVICE -+} -+ -+HDA-Intel.pcm.hdmi.0 { -+ @args [ CARD AES0 AES1 AES2 AES3 ] -+ @args.CARD { type string } -+ @args.AES0 { type integer } -+ @args.AES1 { type integer } -+ @args.AES2 { type integer } -+ @args.AES3 { type integer } -+ @func refer -+ name { -+ @func concat -+ strings [ -+ "cards.HDA-Intel.pcm.hdmi.common:" -+ "CARD=" $CARD "," -+ "DEVICE=3," -+ "CTLINDEX=0," -+ "AES0=" $AES0 "," -+ "AES1=" $AES1 "," -+ "AES2=" $AES2 "," -+ "AES3=" $AES3 -+ ] -+ } -+} -+ -+HDA-Intel.pcm.hdmi.1 { -+ @args [ CARD AES0 AES1 AES2 AES3 ] -+ @args.CARD { type string } -+ @args.AES0 { type integer } -+ @args.AES1 { type integer } -+ @args.AES2 { type integer } -+ @args.AES3 { type integer } -+ @func refer -+ name { -+ @func concat -+ strings [ -+ "cards.HDA-Intel.pcm.hdmi.common:" -+ "CARD=" $CARD "," -+ "DEVICE=7," -+ "CTLINDEX=1," -+ "AES0=" $AES0 "," -+ "AES1=" $AES1 "," -+ "AES2=" $AES2 "," -+ "AES3=" $AES3 -+ ] -+ } -+} -+ -+HDA-Intel.pcm.hdmi.2 { -+ @args [ CARD AES0 AES1 AES2 AES3 ] -+ @args.CARD { type string } -+ @args.AES0 { type integer } -+ @args.AES1 { type integer } -+ @args.AES2 { type integer } -+ @args.AES3 { type integer } -+ @func refer -+ name { -+ @func concat -+ strings [ -+ "cards.HDA-Intel.pcm.hdmi.common:" -+ "CARD=" $CARD "," -+ "DEVICE=8," -+ "CTLINDEX=2," -+ "AES0=" $AES0 "," -+ "AES1=" $AES1 "," -+ "AES2=" $AES2 "," -+ "AES3=" $AES3 -+ ] -+ } -+} -+ -+HDA-Intel.pcm.hdmi.3 { -+ @args [ CARD AES0 AES1 AES2 AES3 ] -+ @args.CARD { type string } -+ @args.AES0 { type integer } -+ @args.AES1 { type integer } -+ @args.AES2 { type integer } -+ @args.AES3 { type integer } -+ @func refer -+ name { -+ @func concat -+ strings [ -+ "cards.HDA-Intel.pcm.hdmi.common:" -+ "CARD=" $CARD "," -+ "DEVICE=9," -+ "CTLINDEX=3," -+ "AES0=" $AES0 "," -+ "AES1=" $AES1 "," -+ "AES2=" $AES2 "," -+ "AES3=" $AES3 -+ ] -+ } - } - - --- -1.7.2.1 - diff --git a/0014-pcm-add-defaults.pcm.minperiodtime-parsing.patch b/0014-pcm-add-defaults.pcm.minperiodtime-parsing.patch deleted file mode 100644 index db1ac3d..0000000 --- a/0014-pcm-add-defaults.pcm.minperiodtime-parsing.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 09879a4bb58199f64abcb8df506f917c8efc2383 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 11 Aug 2010 19:45:40 +0200 -Subject: [PATCH 14/21] pcm: add defaults.pcm.minperiodtime parsing - -Some broken applications like Audacious don't set any timing parameters. -While the alsa-lib behaviour is to select the smallest period size and -biggest buffer size, the result is the generation of thousands -interrupts per second. - -The default value in alsa.conf is 5000usec. - -Signed-off-by: Jaroslav Kysela ---- - src/conf/alsa.conf | 1 + - src/pcm/pcm.c | 8 +++++++- - src/pcm/pcm_local.h | 1 + - src/pcm/pcm_params.c | 13 ++++++++++++- - 4 files changed, 21 insertions(+), 2 deletions(-) - -diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf -index db64259..5160529 100644 ---- a/src/conf/alsa.conf -+++ b/src/conf/alsa.conf -@@ -63,6 +63,7 @@ defaults.pcm.card 0 - defaults.pcm.device 0 - defaults.pcm.subdevice -1 - defaults.pcm.nonblock 1 -+defaults.pcm.minperiodtime 5000 # in us - defaults.pcm.ipc_key 5678293 - defaults.pcm.ipc_gid audio - defaults.pcm.ipc_perm 0660 -diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c -index f910189..f3c2f74 100644 ---- a/src/pcm/pcm.c -+++ b/src/pcm/pcm.c -@@ -2058,7 +2058,7 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name, - const char *str; - char *buf = NULL, *buf1 = NULL; - int err; -- snd_config_t *conf, *type_conf = NULL; -+ snd_config_t *conf, *type_conf = NULL, *tmp; - snd_config_iterator_t i, next; - const char *id; - const char *lib = NULL, *open_name = NULL; -@@ -2191,6 +2191,12 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name, - snd_dlclose(h); - } - } -+ if (err >= 0) { -+ err = snd_config_search(pcm_root, "defaults.pcm.minperiodtime", &tmp); -+ if (err >= 0) -+ snd_config_get_integer(tmp, &(*pcmp)->minperiodtime); -+ err = 0; -+ } - if (type_conf) - snd_config_delete(type_conf); - free(buf); -diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h -index 9aa81e1..dda970c 100644 ---- a/src/pcm/pcm_local.h -+++ b/src/pcm/pcm_local.h -@@ -179,6 +179,7 @@ struct _snd_pcm { - snd_pcm_type_t type; - snd_pcm_stream_t stream; - int mode; -+ long minperiodtime; /* in us */ - int poll_fd_count; - int poll_fd; - unsigned short poll_events; -diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c -index 0e1c3fc..6120677 100644 ---- a/src/pcm/pcm_params.c -+++ b/src/pcm/pcm_params.c -@@ -1102,8 +1102,19 @@ static int snd_pcm_hw_params_choose(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) - if (err < 0) - return err; - err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_RATE, NULL, 0); -- if (err < 0) - return err; -+ if (pcm->minperiodtime > 0) { -+ unsigned int min, max; -+ int dir = 1; -+ err = snd_pcm_hw_param_get_min(params, SND_PCM_HW_PARAM_PERIOD_TIME, &min, &dir); -+ if (err >= 0) -+ err = snd_pcm_hw_param_get_max(params, SND_PCM_HW_PARAM_PERIOD_TIME, &max, &dir); -+ if (err >= 0 && (long)min < pcm->minperiodtime && -+ (long)max > pcm->minperiodtime) { -+ min = pcm->minperiodtime; dir = 1; -+ snd_pcm_hw_param_set_min(pcm, params, SND_CHANGE, SND_PCM_HW_PARAM_PERIOD_TIME, &min, &dir); -+ } -+ } - if (compat && *compat) { - /* old mode */ - err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_TIME, NULL, 0); --- -1.7.2.1 - diff --git a/0015-pcm-introduce-defaults.pcm.compat-to-change-the-para.patch b/0015-pcm-introduce-defaults.pcm.compat-to-change-the-para.patch deleted file mode 100644 index f3bb75c..0000000 --- a/0015-pcm-introduce-defaults.pcm.compat-to-change-the-para.patch +++ /dev/null @@ -1,91 +0,0 @@ -From de606e9c256f5a776c1625b174600a539007f38d Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 11 Aug 2010 20:20:40 +0200 -Subject: [PATCH 15/21] pcm: introduce defaults.pcm.compat to change the params choose behaviour - -Having getenv directly in the function is not a good idea. Allow -configuration of the behaviour change in snd_pcm_param_choose() function -using alsa.conf. Use the environment variable LIBASOUND_COMPAT only -as fallback. - -Signed-off-by: Jaroslav Kysela ---- - src/conf/alsa.conf | 1 + - src/pcm/pcm.c | 12 ++++++++++++ - src/pcm/pcm_local.h | 3 ++- - src/pcm/pcm_params.c | 3 +-- - 4 files changed, 16 insertions(+), 3 deletions(-) - -diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf -index 5160529..1889f01 100644 ---- a/src/conf/alsa.conf -+++ b/src/conf/alsa.conf -@@ -63,6 +63,7 @@ defaults.pcm.card 0 - defaults.pcm.device 0 - defaults.pcm.subdevice -1 - defaults.pcm.nonblock 1 -+defaults.pcm.compat 0 - defaults.pcm.minperiodtime 5000 # in us - defaults.pcm.ipc_key 5678293 - defaults.pcm.ipc_gid audio -diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c -index f3c2f74..8a4bc6a 100644 ---- a/src/pcm/pcm.c -+++ b/src/pcm/pcm.c -@@ -2192,6 +2192,18 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name, - } - } - if (err >= 0) { -+ err = snd_config_search(pcm_root, "defaults.pcm.compat", &tmp); -+ if (err >= 0) { -+ long i; -+ if (snd_config_get_integer(tmp, &i) >= 0) { -+ if (i > 0) -+ (*pcmp)->compat = 1; -+ } -+ } else { -+ char *str = getenv("LIBASOUND_COMPAT"); -+ if (str && *str) -+ (*pcmp)->compat = 1; -+ } - err = snd_config_search(pcm_root, "defaults.pcm.minperiodtime", &tmp); - if (err >= 0) - snd_config_get_integer(tmp, &(*pcmp)->minperiodtime); -diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h -index dda970c..16069b6 100644 ---- a/src/pcm/pcm_local.h -+++ b/src/pcm/pcm_local.h -@@ -184,7 +184,8 @@ struct _snd_pcm { - int poll_fd; - unsigned short poll_events; - int setup: 1, -- monotonic: 1; -+ monotonic: 1, -+ compat: 1; - snd_pcm_access_t access; /* access mode */ - snd_pcm_format_t format; /* SND_PCM_FORMAT_* */ - snd_pcm_subformat_t subformat; /* subformat */ -diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c -index 6120677..c7c3b97 100644 ---- a/src/pcm/pcm_params.c -+++ b/src/pcm/pcm_params.c -@@ -1081,7 +1081,6 @@ int snd_pcm_hw_param_never_eq(const snd_pcm_hw_params_t *params, - static int snd_pcm_hw_params_choose(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) - { - int err; -- const char *compat = getenv("LIBASOUND_COMPAT"); - #ifdef CHOOSE_DEBUG - snd_output_t *log; - snd_output_stdio_attach(&log, stderr, 0); -@@ -1115,7 +1114,7 @@ static int snd_pcm_hw_params_choose(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) - snd_pcm_hw_param_set_min(pcm, params, SND_CHANGE, SND_PCM_HW_PARAM_PERIOD_TIME, &min, &dir); - } - } -- if (compat && *compat) { -+ if (pcm->compat) { - /* old mode */ - err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_TIME, NULL, 0); - if (err < 0) --- -1.7.2.1 - diff --git a/0016-pcm-Fixed-typo-wrong-deleted-line-instroduced-in-the.patch b/0016-pcm-Fixed-typo-wrong-deleted-line-instroduced-in-the.patch deleted file mode 100644 index d6e8f15..0000000 --- a/0016-pcm-Fixed-typo-wrong-deleted-line-instroduced-in-the.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0633a966362ce231392ff6283c99142c5bccc1c8 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Thu, 12 Aug 2010 08:21:26 +0200 -Subject: [PATCH 16/21] pcm: Fixed typo (wrong deleted line) instroduced in the minperiodsize patch - -Signed-off-by: Jaroslav Kysela ---- - src/pcm/pcm_params.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c -index c7c3b97..3a90bcd 100644 ---- a/src/pcm/pcm_params.c -+++ b/src/pcm/pcm_params.c -@@ -1101,6 +1101,7 @@ static int snd_pcm_hw_params_choose(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) - if (err < 0) - return err; - err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_RATE, NULL, 0); -+ if (err < 0) - return err; - if (pcm->minperiodtime > 0) { - unsigned int min, max; --- -1.7.2.1 - diff --git a/0017-Add-missing-support-for-3-byte-formats-for-16bit-put.patch b/0017-Add-missing-support-for-3-byte-formats-for-16bit-put.patch deleted file mode 100644 index e281b34..0000000 --- a/0017-Add-missing-support-for-3-byte-formats-for-16bit-put.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 18b377dec2aa728d52dae55a19bbea35e231a1ef Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Fri, 13 Aug 2010 16:11:36 +0200 -Subject: [PATCH 17/21] Add missing support for 3-byte formats for 16bit put conversion - -In the put conversion, the support for 3-byte formats was missing. -This resulted in inaudible volume with rate plugin & co. - -Typos fixed by Mark Hills - -Signed-off-by: Takashi Iwai ---- - src/pcm/pcm_linear.c | 21 ++++++++++++++++++--- - src/pcm/plugin_ops.h | 27 ++++++++++++++++++++++++++- - 2 files changed, 44 insertions(+), 4 deletions(-) - -diff --git a/src/pcm/pcm_linear.c b/src/pcm/pcm_linear.c -index 12e2e7f..e85dfaa 100644 ---- a/src/pcm/pcm_linear.c -+++ b/src/pcm/pcm_linear.c -@@ -114,10 +114,9 @@ int snd_pcm_linear_get32_index(snd_pcm_format_t src_format, snd_pcm_format_t dst - - int snd_pcm_linear_put_index(snd_pcm_format_t src_format, snd_pcm_format_t dst_format) - { -- int sign, width, endian; -+ int sign, width, pwidth, endian; - sign = (snd_pcm_format_signed(src_format) != - snd_pcm_format_signed(dst_format)); -- width = snd_pcm_format_width(dst_format) / 8 - 1; - #ifdef SND_LITTLE_ENDIAN - endian = snd_pcm_format_big_endian(dst_format); - #else -@@ -125,7 +124,23 @@ int snd_pcm_linear_put_index(snd_pcm_format_t src_format, snd_pcm_format_t dst_f - #endif - if (endian < 0) - endian = 0; -- return width * 4 + endian * 2 + sign; -+ pwidth = snd_pcm_format_physical_width(dst_format); -+ width = snd_pcm_format_width(dst_format); -+ if (pwidth == 24) { -+ switch (width) { -+ case 24: -+ width = 0; break; -+ case 20: -+ width = 1; break; -+ case 18: -+ default: -+ width = 2; break; -+ } -+ return width * 4 + endian * 2 + sign + 16; -+ } else { -+ width = width / 8 - 1; -+ return width * 4 + endian * 2 + sign; -+ } - } - - int snd_pcm_linear_put32_index(snd_pcm_format_t src_format, snd_pcm_format_t dst_format) -diff --git a/src/pcm/plugin_ops.h b/src/pcm/plugin_ops.h -index 04220d6..21535c9 100644 ---- a/src/pcm/plugin_ops.h -+++ b/src/pcm/plugin_ops.h -@@ -407,7 +407,7 @@ get16_123_B2_18: sample = (_get_triple_s(src) >> 2) ^ 0x8000; goto GET16_END; - - #ifdef PUT16_LABELS - /* dst_wid dst_endswap sign_toggle */ --static void *const put16_labels[4 * 2 * 2] = { -+static void *const put16_labels[4 * 2 * 2 + 4 * 3] = { - &&put16_12_1, /* 16h -> 8h */ - &&put16_12_9, /* 16h ^> 8h */ - &&put16_12_1, /* 16h -> 8s */ -@@ -424,6 +424,19 @@ static void *const put16_labels[4 * 2 * 2] = { - &&put16_12_9200, /* 16h ^> 32h */ - &&put16_12_0021, /* 16h -> 32s */ - &&put16_12_0029, /* 16h ^> 32s */ -+ /* 3bytes format */ -+ &&put16_12_120, /* 16h -> 24h */ -+ &&put16_12_920, /* 16h ^> 24h */ -+ &&put16_12_021, /* 16h -> 24s */ -+ &&put16_12_029, /* 16h ^> 24s */ -+ &&put16_12_120_20, /* 16h -> 20h */ -+ &&put16_12_920_20, /* 16h ^> 20h */ -+ &&put16_12_021_20, /* 16h -> 20s */ -+ &&put16_12_029_20, /* 16h ^> 20s */ -+ &&put16_12_120_18, /* 16h -> 18h */ -+ &&put16_12_920_18, /* 16h ^> 18h */ -+ &&put16_12_021_18, /* 16h -> 18s */ -+ &&put16_12_029_18, /* 16h ^> 18s */ - }; - #endif - -@@ -443,6 +456,18 @@ put16_12_1200: as_u32(dst) = (u_int32_t)sample << 16; goto PUT16_END; - put16_12_9200: as_u32(dst) = (u_int32_t)(sample ^ 0x8000) << 16; goto PUT16_END; - put16_12_0021: as_u32(dst) = (u_int32_t)bswap_16(sample); goto PUT16_END; - put16_12_0029: as_u32(dst) = (u_int32_t)bswap_16(sample) ^ 0x80; goto PUT16_END; -+put16_12_120: _put_triple(dst, (u_int32_t)sample << 8); goto PUT16_END; -+put16_12_920: _put_triple(dst, (u_int32_t)(sample ^ 0x8000) << 8); goto PUT16_END; -+put16_12_021: _put_triple_s(dst, (u_int32_t)sample << 8); goto PUT16_END; -+put16_12_029: _put_triple_s(dst, (u_int32_t)(sample ^ 0x8000) << 8); goto PUT16_END; -+put16_12_120_20: _put_triple(dst, (u_int32_t)sample << 4); goto PUT16_END; -+put16_12_920_20: _put_triple(dst, (u_int32_t)(sample ^ 0x8000) << 4); goto PUT16_END; -+put16_12_021_20: _put_triple_s(dst, (u_int32_t)sample << 4); goto PUT16_END; -+put16_12_029_20: _put_triple_s(dst, (u_int32_t)(sample ^ 0x8000) << 4); goto PUT16_END; -+put16_12_120_18: _put_triple(dst, (u_int32_t)sample << 2); goto PUT16_END; -+put16_12_920_18: _put_triple(dst, (u_int32_t)(sample ^ 0x8000) << 2); goto PUT16_END; -+put16_12_021_18: _put_triple_s(dst, (u_int32_t)sample << 2); goto PUT16_END; -+put16_12_029_18: _put_triple_s(dst, (u_int32_t)(sample ^ 0x8000) << 2); goto PUT16_END; - } - #endif - --- -1.7.2.1 - diff --git a/0018-namehint-Evaluate-more-possibilities-for-hw-devices.patch b/0018-namehint-Evaluate-more-possibilities-for-hw-devices.patch deleted file mode 100644 index dc38010..0000000 --- a/0018-namehint-Evaluate-more-possibilities-for-hw-devices.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 97d25c0766405453d3c298bd51dd4916121a4f6a Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Fri, 20 Aug 2010 10:31:17 +0200 -Subject: [PATCH 18/21] namehint: Evaluate more possibilities for hw devices - -This tries to fix the issue when logical device indexes does not match the -hardware device indexes (like hdmi -> 0:3, 1:7, 2:8, 3:9). - -Signed-off-by: Jaroslav Kysela ---- - src/control/namehint.c | 18 +++++++++++++----- - 1 files changed, 13 insertions(+), 5 deletions(-) - -diff --git a/src/control/namehint.c b/src/control/namehint.c -index 1819292..e06d240 100644 ---- a/src/control/namehint.c -+++ b/src/control/namehint.c -@@ -414,6 +414,7 @@ static int add_card(struct hint_list *list, int card) - const char *str; - char ctl_name[16]; - snd_ctl_card_info_t *info; -+ int device, max_device = 0; - - snd_ctl_card_info_alloca(&info); - list->info = info; -@@ -431,18 +432,25 @@ static int add_card(struct hint_list *list, int card) - n = snd_config_iterator_entry(i); - if (snd_config_get_id(n, &str) < 0) - continue; -+ - if (next_devices[list->iface] != NULL) { - list->card = card; -- list->device = -1; -- err = next_devices[list->iface](list->ctl, &list->device); -- if (list->device < 0) -+ device = max_device = -1; -+ err = next_devices[list->iface](list->ctl, &device); -+ if (device < 0) - err = -EINVAL; -+ while (err >= 0 && device >= 0) { -+ err = next_devices[list->iface](list->ctl, &device); -+ if (device > max_device) -+ max_device = device; -+ ok++; -+ } - ok = 0; -- while (err >= 0 && list->device >= 0) { -+ for (device = 0; err >= 0 && device < max_device; device++) { -+ list->device = device; - err = try_config(list, list->siface, str); - if (err < 0) - break; -- err = next_devices[list->iface](list->ctl, &list->device); - ok++; - } - if (ok) --- -1.7.2.1 - diff --git a/0019-HDA-Intel-do-not-lock-IEC958-Playback-switch.patch b/0019-HDA-Intel-do-not-lock-IEC958-Playback-switch.patch deleted file mode 100644 index 57a68c8..0000000 --- a/0019-HDA-Intel-do-not-lock-IEC958-Playback-switch.patch +++ /dev/null @@ -1,40 +0,0 @@ -From be06ab3ee7266c6ca7d2475d45b42cc4f47a20f8 Mon Sep 17 00:00:00 2001 -From: Pierre-Louis Bossart -Date: Thu, 19 Aug 2010 20:42:30 -0500 -Subject: [PATCH 19/21] HDA-Intel: do not lock IEC958 Playback switch - -As discussed with Takashi, removing the lock allows apps to mute -the output using the mixer interface. -Other AES controls remain locked. - -Signed-off-by: Pierre-Louis Bossart -Signed-off-by: Takashi Iwai ---- - src/conf/cards/HDA-Intel.conf | 4 ---- - 1 files changed, 0 insertions(+), 4 deletions(-) - -diff --git a/src/conf/cards/HDA-Intel.conf b/src/conf/cards/HDA-Intel.conf -index 726e8c9..f7eecb4 100644 ---- a/src/conf/cards/HDA-Intel.conf -+++ b/src/conf/cards/HDA-Intel.conf -@@ -111,8 +111,6 @@ HDA-Intel.pcm.iec958.0 { - } - { - name "IEC958 Playback Switch" -- lock true -- preserve true - value true - } - ] -@@ -184,8 +182,6 @@ HDA-Intel.pcm.hdmi.common { - { - name "IEC958 Playback Switch" - index $CTLINDEX -- lock true -- preserve true - value true - } - ] --- -1.7.2.1 - diff --git a/0020-general-recoded-snd_dlobj_-functions.patch b/0020-general-recoded-snd_dlobj_-functions.patch deleted file mode 100644 index ed84baa..0000000 --- a/0020-general-recoded-snd_dlobj_-functions.patch +++ /dev/null @@ -1,516 +0,0 @@ -From 91c9c8f1b85e69b4bdc94a777d2767c4906c3f47 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Mon, 23 Aug 2010 17:05:36 +0200 -Subject: [PATCH 20/21] general: recoded snd_dlobj_ functions - -- changed logic to get/put blocks -- added mutex locking of the symbol list -- added reference counting (do not free used dl handles) - -Signed-off-by: Jaroslav Kysela ---- - include/local.h | 12 ++-- - src/control/control.c | 40 +++---------- - src/control/control_local.h | 2 +- - src/dlmisc.c | 132 +++++++++++++++++++++++++++++++++--------- - src/pcm/pcm.c | 38 +++---------- - src/pcm/pcm_local.h | 2 +- - src/pcm/pcm_rate.c | 46 +++++++-------- - 7 files changed, 151 insertions(+), 121 deletions(-) - -diff --git a/include/local.h b/include/local.h -index fa3f0b7..4dc6562 100644 ---- a/include/local.h -+++ b/include/local.h -@@ -254,10 +254,10 @@ static inline int snd_open_device(const char *filename, int fmode) - } - - /* make local functions really local */ --#define snd_dlobj_cache_lookup \ -- snd1_dlobj_cache_lookup --#define snd_dlobj_cache_add \ -- snd1_dlobj_cache_add -+#define snd_dlobj_cache_get \ -+ snd1_dlobj_cache_get -+#define snd_dlobj_cache_put \ -+ snd1_dlobj_cache_put - #define snd_dlobj_cache_cleanup \ - snd1_dlobj_cache_cleanup - #define snd_config_set_hop \ -@@ -268,8 +268,8 @@ static inline int snd_open_device(const char *filename, int fmode) - snd1_config_search_alias_hooks - - /* dlobj cache */ --void *snd_dlobj_cache_lookup(const char *name); --int snd_dlobj_cache_add(const char *name, void *dlobj, void *open_func); -+void *snd_dlobj_cache_get(const char *lib, const char *name, const char *version, int verbose); -+int snd_dlobj_cache_put(void *open_func); - void snd_dlobj_cache_cleanup(void); - - /* for recursive checks */ -diff --git a/src/control/control.c b/src/control/control.c -index b63a28c..19e9389 100644 ---- a/src/control/control.c -+++ b/src/control/control.c -@@ -94,8 +94,7 @@ int snd_ctl_close(snd_ctl_t *ctl) - } - err = ctl->ops->close(ctl); - free(ctl->name); -- if (ctl->dl_handle) -- snd_dlclose(ctl->dl_handle); -+ snd_dlobj_cache_put(ctl->open_func); - free(ctl); - return err; - } -@@ -768,7 +767,6 @@ static int snd_ctl_open_conf(snd_ctl_t **ctlp, const char *name, - #ifndef PIC - extern void *snd_control_open_symbols(void); - #endif -- void *h = NULL; - if (snd_config_get_type(ctl_conf) != SND_CONFIG_TYPE_COMPOUND) { - if (name) - SNDERR("Invalid type for CTL %s definition", name); -@@ -854,40 +852,22 @@ static int snd_ctl_open_conf(snd_ctl_t **ctlp, const char *name, - #ifndef PIC - snd_control_open_symbols(); - #endif -- open_func = snd_dlobj_cache_lookup(open_name); -+ open_func = snd_dlobj_cache_get(lib, open_name, -+ SND_DLSYM_VERSION(SND_CONTROL_DLSYM_VERSION), 1); - if (open_func) { -- err = 0; -- goto _err; -- } -- h = snd_dlopen(lib, RTLD_NOW); -- if (h) -- open_func = snd_dlsym(h, open_name, SND_DLSYM_VERSION(SND_CONTROL_DLSYM_VERSION)); -- err = 0; -- if (!h) { -- SNDERR("Cannot open shared library %s", lib); -- err = -ENOENT; -- } else if (!open_func) { -- SNDERR("symbol %s is not defined inside %s", open_name, lib); -- snd_dlclose(h); -- err = -ENXIO; -- } -- _err: -- if (type_conf) -- snd_config_delete(type_conf); -- if (err >= 0) { - err = open_func(ctlp, name, ctl_root, ctl_conf, mode); - if (err >= 0) { -- if (h /*&& (mode & SND_CTL_KEEP_ALIVE)*/) { -- snd_dlobj_cache_add(open_name, h, open_func); -- h = NULL; -- } -- (*ctlp)->dl_handle = h; -+ (*ctlp)->open_func = open_func; - err = 0; - } else { -- if (h) -- snd_dlclose(h); -+ snd_dlobj_cache_put(open_func); - } -+ } else { -+ err = -ENXIO; - } -+ _err: -+ if (type_conf) -+ snd_config_delete(type_conf); - free(buf); - free(buf1); - return err; -diff --git a/src/control/control_local.h b/src/control/control_local.h -index fd9f941..49150d8 100644 ---- a/src/control/control_local.h -+++ b/src/control/control_local.h -@@ -56,7 +56,7 @@ typedef struct _snd_ctl_ops { - - - struct _snd_ctl { -- void *dl_handle; -+ void *open_func; - char *name; - snd_ctl_type_t type; - const snd_ctl_ops_t *ops; -diff --git a/src/dlmisc.c b/src/dlmisc.c -index a0d62d3..ecbbe8d 100644 ---- a/src/dlmisc.c -+++ b/src/dlmisc.c -@@ -29,6 +29,9 @@ - - #include "list.h" - #include "local.h" -+#ifdef HAVE_LIBPTHREAD -+#include -+#endif - - #ifndef DOC_HIDDEN - #ifndef PIC -@@ -169,69 +172,140 @@ void *snd_dlsym(void *handle, const char *name, const char *version) - - /* - * dlobj cache -- * -- * FIXME: add reference counter and proper locking - */ - - #ifndef DOC_HIDDEN - struct dlobj_cache { -+ const char *lib; - const char *name; -- void *obj; -+ void *dlobj; - void *func; -+ unsigned int refcnt; - struct list_head list; - }; - --static LIST_HEAD(pcm_dlobj_list); -+#ifdef HAVE_LIBPTHREAD -+static pthread_mutex_t snd_dlobj_mutex = PTHREAD_MUTEX_INITIALIZER; - --void *snd_dlobj_cache_lookup(const char *name) -+static inline void snd_dlobj_lock(void) - { -- struct list_head *p; -- struct dlobj_cache *c; -+ pthread_mutex_lock(&snd_dlobj_mutex); -+} - -- list_for_each(p, &pcm_dlobj_list) { -- c = list_entry(p, struct dlobj_cache, list); -- if (strcmp(c->name, name) == 0) -- return c->func; -- } -- return NULL; -+static inline void snd_dlobj_unlock(void) -+{ -+ pthread_mutex_unlock(&snd_dlobj_mutex); - } -+#else -+static inline void snd_dlobj_lock(void) {} -+static inline void snd_dlobj_unlock(void) {} -+#endif -+ -+static LIST_HEAD(pcm_dlobj_list); - --int snd_dlobj_cache_add(const char *name, void *dlobj, void *open_func) -+void *snd_dlobj_cache_get(const char *lib, const char *name, -+ const char *version, int verbose) - { - struct list_head *p; - struct dlobj_cache *c; -+ void *func, *dlobj = NULL; -+ int dlobj_close = 0; - -+ snd_dlobj_lock(); - list_for_each(p, &pcm_dlobj_list) { - c = list_entry(p, struct dlobj_cache, list); -- if (strcmp(c->name, name) == 0) -- return 0; /* already exists */ -+ if (c->lib && lib && strcmp(c->lib, lib) != 0) -+ continue; -+ if (!c->lib && lib) -+ continue; -+ if (!lib && c->lib) -+ continue; -+ dlobj = c->dlobj; -+ if (strcmp(c->name, name) == 0) { -+ c->refcnt++; -+ func = c->func; -+ snd_dlobj_unlock(); -+ return func; -+ } -+ } -+ if (dlobj == NULL) { -+ dlobj = snd_dlopen(lib, RTLD_NOW); -+ if (dlobj == NULL) { -+ if (verbose) -+ SNDERR("Cannot open shared library %s", -+ lib ? lib : "[builtin]"); -+ snd_dlobj_unlock(); -+ return NULL; -+ } -+ dlobj_close = 1; -+ } -+ func = snd_dlsym(dlobj, name, version); -+ if (func == NULL) { -+ if (verbose) -+ SNDERR("symbol %s is not defined inside %s", -+ name, lib ? lib : "[builtin]"); -+ goto __err; - } - c = malloc(sizeof(*c)); - if (! c) -- return -ENOMEM; -+ goto __err; -+ c->refcnt = 1; -+ c->lib = lib ? strdup(lib) : NULL; - c->name = strdup(name); -- if (! c->name) { -+ if ((lib && ! c->lib) || ! c->name) { -+ free((void *)c->name); -+ free((void *)c->lib); - free(c); -- return -ENOMEM; -+ __err: -+ if (dlobj_close) -+ snd_dlclose(dlobj); -+ snd_dlobj_unlock(); -+ return NULL; - } -- c->obj = dlobj; -- c->func = open_func; -+ c->dlobj = dlobj; -+ c->func = func; - list_add_tail(&c->list, &pcm_dlobj_list); -- return 0; -+ snd_dlobj_unlock(); -+ return func; - } - --void snd_dlobj_cache_cleanup(void) -+int snd_dlobj_cache_put(void *func) - { - struct list_head *p; - struct dlobj_cache *c; -+ unsigned int refcnt; - -- while (! list_empty(&pcm_dlobj_list)) { -- p = pcm_dlobj_list.next; -+ snd_dlobj_lock(); -+ list_for_each(p, &pcm_dlobj_list) { - c = list_entry(p, struct dlobj_cache, list); -- list_del(p); -- snd_dlclose(c->obj); -- free((void *)c->name); /* shut up gcc warning */ -- free(c); -+ if (c->func == func) { -+ refcnt = c->refcnt; -+ if (c->refcnt > 0) -+ c->refcnt--; -+ snd_dlobj_unlock(); -+ return refcnt == 1 ? 0 : -EINVAL; -+ } -+ } -+ snd_dlobj_unlock(); -+ return -ENOENT; -+} -+ -+void snd_dlobj_cache_cleanup(void) -+{ -+ struct list_head *p, *npos; -+ struct dlobj_cache *c; -+ -+ snd_dlobj_lock(); -+ list_for_each_safe(p, npos, &pcm_dlobj_list) { -+ c = list_entry(p, struct dlobj_cache, list); -+ if (c->refcnt == 0) { -+ list_del(p); -+ snd_dlclose(c->dlobj); -+ free((void *)c->name); /* shut up gcc warning */ -+ free((void *)c->lib); /* shut up gcc warning */ -+ free(c); -+ } - } -+ snd_dlobj_unlock(); - } - #endif -diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c -index 8a4bc6a..a49b5b9 100644 ---- a/src/pcm/pcm.c -+++ b/src/pcm/pcm.c -@@ -2068,7 +2068,6 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name, - #ifndef PIC - extern void *snd_pcm_open_symbols(void); - #endif -- void *h = NULL; - if (snd_config_get_type(pcm_conf) != SND_CONFIG_TYPE_COMPOUND) { - char *val; - id = NULL; -@@ -2157,39 +2156,18 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name, - #ifndef PIC - snd_pcm_open_symbols(); /* this call is for static linking only */ - #endif -- open_func = snd_dlobj_cache_lookup(open_name); -+ open_func = snd_dlobj_cache_get(lib, open_name, -+ SND_DLSYM_VERSION(SND_PCM_DLSYM_VERSION), 1); - if (open_func) { -- err = 0; -- goto _err; -- } -- h = snd_dlopen(lib, RTLD_NOW); -- if (h) -- open_func = snd_dlsym(h, open_name, SND_DLSYM_VERSION(SND_PCM_DLSYM_VERSION)); -- err = 0; -- if (!h) { -- SNDERR("Cannot open shared library %s", -- lib ? lib : "[builtin]"); -- err = -ENOENT; -- } else if (!open_func) { -- SNDERR("symbol %s is not defined inside %s", open_name, -- lib ? lib : "[builtin]"); -- snd_dlclose(h); -- err = -ENXIO; -- } -- _err: -- if (err >= 0) { - err = open_func(pcmp, name, pcm_root, pcm_conf, stream, mode); - if (err >= 0) { -- if (h /*&& (mode & SND_PCM_KEEP_ALIVE)*/) { -- snd_dlobj_cache_add(open_name, h, open_func); -- h = NULL; -- } -- (*pcmp)->dl_handle = h; -+ (*pcmp)->open_func = open_func; - err = 0; - } else { -- if (h) -- snd_dlclose(h); -+ snd_dlobj_cache_put(open_func); - } -+ } else { -+ err = -ENXIO; - } - if (err >= 0) { - err = snd_config_search(pcm_root, "defaults.pcm.compat", &tmp); -@@ -2209,6 +2187,7 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name, - snd_config_get_integer(tmp, &(*pcmp)->minperiodtime); - err = 0; - } -+ _err: - if (type_conf) - snd_config_delete(type_conf); - free(buf); -@@ -2304,8 +2283,7 @@ int snd_pcm_free(snd_pcm_t *pcm) - free(pcm->name); - free(pcm->hw.link_dst); - free(pcm->appl.link_dst); -- if (pcm->dl_handle) -- snd_dlclose(pcm->dl_handle); -+ snd_dlobj_cache_put(pcm->open_func); - free(pcm); - return 0; - } -diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h -index 16069b6..2f6fcd2 100644 ---- a/src/pcm/pcm_local.h -+++ b/src/pcm/pcm_local.h -@@ -174,7 +174,7 @@ typedef struct { - } snd_pcm_fast_ops_t; - - struct _snd_pcm { -- void *dl_handle; -+ void *open_func; - char *name; - snd_pcm_type_t type; - snd_pcm_stream_t stream; -diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c -index ecf0022..70e30e5 100644 ---- a/src/pcm/pcm_rate.c -+++ b/src/pcm/pcm_rate.c -@@ -61,6 +61,7 @@ struct _snd_pcm_rate { - snd_pcm_channel_area_t *pareas; /* areas for splitted period (rate pcm) */ - snd_pcm_channel_area_t *sareas; /* areas for splitted period (slave pcm) */ - snd_pcm_rate_info_t info; -+ void *open_func; - void *obj; - snd_pcm_rate_ops_t ops; - unsigned int get_idx; -@@ -1204,6 +1205,8 @@ static int snd_pcm_rate_close(snd_pcm_t *pcm) - - if (rate->ops.close) - rate->ops.close(rate->obj); -+ if (rate->open_func) -+ snd_dlobj_cache_put(rate->open_func); - return snd_pcm_generic_close(pcm); - } - -@@ -1272,33 +1275,23 @@ static const char *const default_rate_plugins[] = { - "speexrate", "linear", NULL - }; - --static int rate_open_func(snd_pcm_rate_t *rate, const char *type) -+static int rate_open_func(snd_pcm_rate_t *rate, const char *type, int verbose) - { -- char open_name[64]; -+ char open_name[64], lib_name[128], *lib = NULL; - snd_pcm_rate_open_func_t open_func; - int err; - - snprintf(open_name, sizeof(open_name), "_snd_pcm_rate_%s_open", type); -- open_func = snd_dlobj_cache_lookup(open_name); -- if (!open_func) { -- void *h; -- char lib_name[128], *lib = NULL; -- if (!is_builtin_plugin(type)) { -- snprintf(lib_name, sizeof(lib_name), -+ if (!is_builtin_plugin(type)) { -+ snprintf(lib_name, sizeof(lib_name), - "%s/libasound_module_rate_%s.so", ALSA_PLUGIN_DIR, type); -- lib = lib_name; -- } -- h = snd_dlopen(lib, RTLD_NOW); -- if (!h) -- return -ENOENT; -- open_func = snd_dlsym(h, open_name, NULL); -- if (!open_func) { -- snd_dlclose(h); -- return -ENOENT; -- } -- snd_dlobj_cache_add(open_name, h, open_func); -+ lib = lib_name; - } -+ open_func = snd_dlobj_cache_get(lib, open_name, NULL, verbose); -+ if (!open_func) -+ return -ENOENT; - -+ rate->open_func = open_func; - rate->rate_min = SND_PCM_PLUGIN_RATE_MIN; - rate->rate_max = SND_PCM_PLUGIN_RATE_MAX; - rate->plugin_version = SND_PCM_RATE_PLUGIN_VERSION; -@@ -1315,8 +1308,13 @@ static int rate_open_func(snd_pcm_rate_t *rate, const char *type) - - /* try to open with the old protocol version */ - rate->plugin_version = SND_PCM_RATE_PLUGIN_VERSION_OLD; -- return open_func(SND_PCM_RATE_PLUGIN_VERSION_OLD, -- &rate->obj, &rate->ops); -+ err = open_func(SND_PCM_RATE_PLUGIN_VERSION_OLD, -+ &rate->obj, &rate->ops); -+ if (err) { -+ snd_dlobj_cache_put(open_func); -+ rate->open_func = NULL; -+ } -+ return err; - } - #endif - -@@ -1373,21 +1371,21 @@ int snd_pcm_rate_open(snd_pcm_t **pcmp, const char *name, - if (!converter) { - const char *const *types; - for (types = default_rate_plugins; *types; types++) { -- err = rate_open_func(rate, *types); -+ err = rate_open_func(rate, *types, 0); - if (!err) { - type = *types; - break; - } - } - } else if (!snd_config_get_string(converter, &type)) -- err = rate_open_func(rate, type); -+ err = rate_open_func(rate, type, 1); - else if (snd_config_get_type(converter) == SND_CONFIG_TYPE_COMPOUND) { - snd_config_iterator_t i, next; - snd_config_for_each(i, next, converter) { - snd_config_t *n = snd_config_iterator_entry(i); - if (snd_config_get_string(n, &type) < 0) - break; -- err = rate_open_func(rate, type); -+ err = rate_open_func(rate, type, 0); - if (!err) - break; - } --- -1.7.2.1 - diff --git a/0021-Add-Loopback.conf-to-define-standard-PCM-devices-for.patch b/0021-Add-Loopback.conf-to-define-standard-PCM-devices-for.patch deleted file mode 100644 index b3ac4b6..0000000 --- a/0021-Add-Loopback.conf-to-define-standard-PCM-devices-for.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 72c7260ce624adcb40377bc2093cd4d965b9b22e Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 25 Aug 2010 09:04:51 +0200 -Subject: [PATCH 21/21] Add Loopback.conf to define standard PCM devices for snd-aloop driver - -Signed-off-by: Jaroslav Kysela ---- - src/conf/cards/Loopback.conf | 74 ++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 74 insertions(+), 0 deletions(-) - create mode 100644 src/conf/cards/Loopback.conf - -diff --git a/src/conf/cards/Loopback.conf b/src/conf/cards/Loopback.conf -new file mode 100644 -index 0000000..05c48c6 ---- /dev/null -+++ b/src/conf/cards/Loopback.conf -@@ -0,0 +1,74 @@ -+# -+# Configuration for the Intel HD audio (ICH6/ICH7) -+# -+ -+ -+ -+Loopback.pcm.front.0 { -+ @args [ CARD ] -+ @args.CARD { -+ type string -+ } -+ type softvol -+ slave.pcm { -+ type hw -+ card $CARD -+ } -+ control { -+ name "PCM Playback Volume" -+ card $CARD -+ } -+} -+ -+# default with dmix+softvol & dsnoop -+Loopback.pcm.default { -+ @args [ CARD ] -+ @args.CARD { -+ type string -+ } -+ type asym -+ playback.pcm { -+ type plug -+ slave.pcm { -+ type softvol -+ slave.pcm { -+ @func concat -+ strings [ "dmix:" $CARD ] -+ } -+ control { -+ name "PCM Playback Volume" -+ card $CARD -+ } -+ } -+ } -+ capture.pcm { -+ type plug -+ slave.pcm { -+ type softvol -+ slave.pcm { -+ @func concat -+ strings [ "dsnoop:" $CARD ] -+ } -+ control { -+ name "Digital Capture Volume" -+ card $CARD -+ } -+ min_dB -30.0 -+ max_dB 30.0 -+ resolution 121 -+ } -+ # to avoid possible phase inversions with digital mics -+ route_policy copy -+ } -+ hint.device 0 -+} -+ -+ -+ -+ -+ -+ -+ -+Loopback.pcm.surround40.0 cards.HDA-Intel.pcm.front.0 -+Loopback.pcm.surround51.0 cards.HDA-Intel.pcm.front.0 -+Loopback.pcm.surround71.0 cards.HDA-Intel.pcm.front.0 --- -1.7.2.1 - diff --git a/0022-Fix-typo-for-surround-PCMs-in-src-conf-cards-Loopbac.patch b/0022-Fix-typo-for-surround-PCMs-in-src-conf-cards-Loopbac.patch deleted file mode 100644 index b3f6fcf..0000000 --- a/0022-Fix-typo-for-surround-PCMs-in-src-conf-cards-Loopbac.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 9ce25165dd14722cf9ca9e25d486bf79824ea606 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 15 Sep 2010 08:11:42 +0200 -Subject: [PATCH] Fix typo for surround PCMs in src/conf/cards/Loopback.conf - -Signed-off-by: Jaroslav Kysela ---- - src/conf/cards/Loopback.conf | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/conf/cards/Loopback.conf b/src/conf/cards/Loopback.conf -index 05c48c6..5365fa1 100644 ---- a/src/conf/cards/Loopback.conf -+++ b/src/conf/cards/Loopback.conf -@@ -69,6 +69,6 @@ Loopback.pcm.default { - - - --Loopback.pcm.surround40.0 cards.HDA-Intel.pcm.front.0 --Loopback.pcm.surround51.0 cards.HDA-Intel.pcm.front.0 --Loopback.pcm.surround71.0 cards.HDA-Intel.pcm.front.0 -+Loopback.pcm.surround40.0 cards.Loopback.pcm.front.0 -+Loopback.pcm.surround51.0 cards.Loopback.pcm.front.0 -+Loopback.pcm.surround71.0 cards.Loopback.pcm.front.0 --- -1.7.3.1 - diff --git a/0023-namehint-Fix-hw-device-evaluation-missing-last-devic.patch b/0023-namehint-Fix-hw-device-evaluation-missing-last-devic.patch deleted file mode 100644 index 7950aa1..0000000 --- a/0023-namehint-Fix-hw-device-evaluation-missing-last-devic.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0244370be695372a05344ac760d624e0b40ec9ea Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Fri, 1 Oct 2010 13:31:45 +0200 -Subject: [PATCH] namehint: Fix hw device evaluation (missing last device) - -Signed-off-by: Jaroslav Kysela ---- - src/control/namehint.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/control/namehint.c b/src/control/namehint.c -index e06d240..ab3525e 100644 ---- a/src/control/namehint.c -+++ b/src/control/namehint.c -@@ -446,7 +446,7 @@ static int add_card(struct hint_list *list, int card) - ok++; - } - ok = 0; -- for (device = 0; err >= 0 && device < max_device; device++) { -+ for (device = 0; err >= 0 && device <= max_device; device++) { - list->device = device; - err = try_config(list, list->siface, str); - if (err < 0) --- -1.7.3.1 - diff --git a/0024-namehint-Another-fix-to-properly-evaluate-hw-devices.patch b/0024-namehint-Another-fix-to-properly-evaluate-hw-devices.patch deleted file mode 100644 index ea30ea5..0000000 --- a/0024-namehint-Another-fix-to-properly-evaluate-hw-devices.patch +++ /dev/null @@ -1,32 +0,0 @@ -From c049d48407ff0459ff15e466edeeee6ecff67fcd Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Fri, 1 Oct 2010 14:08:03 +0200 -Subject: [PATCH] namehint: Another fix to properly evaluate hw devices - -Signed-off-by: Jaroslav Kysela ---- - src/control/namehint.c | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/control/namehint.c b/src/control/namehint.c -index ab3525e..faaa5d5 100644 ---- a/src/control/namehint.c -+++ b/src/control/namehint.c -@@ -439,11 +439,12 @@ static int add_card(struct hint_list *list, int card) - err = next_devices[list->iface](list->ctl, &device); - if (device < 0) - err = -EINVAL; -+ else -+ max_device = device; - while (err >= 0 && device >= 0) { - err = next_devices[list->iface](list->ctl, &device); -- if (device > max_device) -+ if (err >= 0 && device > max_device) - max_device = device; -- ok++; - } - ok = 0; - for (device = 0; err >= 0 && device <= max_device; device++) { --- -1.7.3.1 - diff --git a/0025-config-file-processing-rewrite-the-locking-use-one-r.patch b/0025-config-file-processing-rewrite-the-locking-use-one-r.patch deleted file mode 100644 index b8812e6..0000000 --- a/0025-config-file-processing-rewrite-the-locking-use-one-r.patch +++ /dev/null @@ -1,159 +0,0 @@ -From c6a81e21c0f566c2cf62ff345eefea857925afa7 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Mon, 11 Oct 2010 10:34:12 +0200 -Subject: [PATCH] config file processing: rewrite the locking - use one recursive mutex - -Avoid configuration file processing races when multiple threads call -the *open() functions together (for example using alsaloop with -multiple -T jobs can reproduce this issue). - -Signed-off-by: Jaroslav Kysela ---- - src/conf.c | 59 +++++++++++++++++++++++++++++++++++++++-------------------- - 1 files changed, 39 insertions(+), 20 deletions(-) - -diff --git a/src/conf.c b/src/conf.c -index 5d8c5c9..8939d62 100644 ---- a/src/conf.c -+++ b/src/conf.c -@@ -425,6 +425,11 @@ beginning:

- - #ifndef DOC_HIDDEN - -+#ifdef HAVE_LIBPTHREAD -+static pthread_mutex_t snd_config_update_mutex = -+ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; -+#endif -+ - struct _snd_config { - char *id; - snd_config_type_t type; -@@ -464,6 +469,25 @@ typedef struct { - int ch; - } input_t; - -+#ifdef HAVE_LIBPTHREAD -+ -+static inline void snd_config_lock(void) -+{ -+ pthread_mutex_lock(&snd_config_update_mutex); -+} -+ -+static inline void snd_config_unlock(void) -+{ -+ pthread_mutex_unlock(&snd_config_update_mutex); -+} -+ -+#else -+ -+static inline void snd_config_lock(void) { } -+static inline void snd_config_unlock(void) { } -+ -+#endif -+ - static int safe_strtoll(const char *str, long long *val) - { - long long v; -@@ -3318,6 +3342,7 @@ static int snd_config_hooks(snd_config_t *config, snd_config_t *private_data) - - if ((err = snd_config_search(config, "@hooks", &n)) < 0) - return 0; -+ snd_config_lock(); - snd_config_remove(n); - do { - hit = 0; -@@ -3334,7 +3359,7 @@ static int snd_config_hooks(snd_config_t *config, snd_config_t *private_data) - if (i == idx) { - err = snd_config_hooks_call(config, n, private_data); - if (err < 0) -- return err; -+ goto _err; - idx++; - hit = 1; - } -@@ -3343,6 +3368,7 @@ static int snd_config_hooks(snd_config_t *config, snd_config_t *private_data) - err = 0; - _err: - snd_config_delete(n); -+ snd_config_unlock(); - return err; - } - -@@ -3692,10 +3718,6 @@ int snd_config_update_r(snd_config_t **_top, snd_config_update_t **_update, cons - return 1; - } - --#ifdef HAVE_LIBPTHREAD --static pthread_mutex_t snd_config_update_mutex = PTHREAD_MUTEX_INITIALIZER; --#endif -- - /** - * \brief Updates #snd_config by rereading the global configuration files (if needed). - * \return 0 if #snd_config was up to date, 1 if #snd_config was -@@ -3716,13 +3738,9 @@ int snd_config_update(void) - { - int err; - --#ifdef HAVE_LIBPTHREAD -- pthread_mutex_lock(&snd_config_update_mutex); --#endif -+ snd_config_lock(); - err = snd_config_update_r(&snd_config, &snd_config_global_update, NULL); --#ifdef HAVE_LIBPTHREAD -- pthread_mutex_unlock(&snd_config_update_mutex); --#endif -+ snd_config_unlock(); - return err; - } - -@@ -3755,18 +3773,14 @@ int snd_config_update_free(snd_config_update_t *update) - */ - int snd_config_update_free_global(void) - { --#ifdef HAVE_LIBPTHREAD -- pthread_mutex_lock(&snd_config_update_mutex); --#endif -+ snd_config_lock(); - if (snd_config) - snd_config_delete(snd_config); - snd_config = NULL; - if (snd_config_global_update) - snd_config_update_free(snd_config_global_update); - snd_config_global_update = NULL; --#ifdef HAVE_LIBPTHREAD -- pthread_mutex_unlock(&snd_config_update_mutex); --#endif -+ snd_config_unlock(); - /* FIXME: better to place this in another place... */ - snd_dlobj_cache_cleanup(); - -@@ -4657,7 +4671,7 @@ int snd_config_expand(snd_config_t *config, snd_config_t *root, const char *args - snd_config_delete(subs); - return err; - } -- -+ - /** - * \brief Searches for a definition in a configuration tree, using - * aliases and expanding hooks and arguments. -@@ -4707,10 +4721,15 @@ int snd_config_search_definition(snd_config_t *config, - * if key contains dot (.), the implicit base is ignored - * and the key starts from root given by the 'config' parameter - */ -+ snd_config_lock(); - err = snd_config_search_alias_hooks(config, strchr(key, '.') ? NULL : base, key, &conf); -- if (err < 0) -+ if (err < 0) { -+ snd_config_unlock(); - return err; -- return snd_config_expand(conf, config, args, NULL, result); -+ } -+ err = snd_config_expand(conf, config, args, NULL, result); -+ snd_config_unlock(); -+ return err; - } - - #ifndef DOC_HIDDEN --- -1.7.3.1 - diff --git a/0026-tlv-fix-returned-dB-information-for-min-is-mute-cont.patch b/0026-tlv-fix-returned-dB-information-for-min-is-mute-cont.patch deleted file mode 100644 index fb7ba06..0000000 --- a/0026-tlv-fix-returned-dB-information-for-min-is-mute-cont.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 2f6206da0c1ff88235e6eca0077343f22a4b43ee Mon Sep 17 00:00:00 2001 -From: Clemens Ladisch -Date: Fri, 15 Oct 2010 10:33:20 +0200 -Subject: [PATCH] tlv: fix returned dB information for min-is-mute controls - -For TLV information that indicates that the minimum value is actually -muted, the returned range used the wrong minimum dB value, and -converting dB values to raw control values did not round up correctly -near the minimum. - -Signed-off-by: Clemens Ladisch -Signed-off-by: Takashi Iwai ---- - src/control/tlv.c | 26 ++++++++++++++++++++------ - 1 files changed, 20 insertions(+), 6 deletions(-) - -diff --git a/src/control/tlv.c b/src/control/tlv.c -index ba52752..f7c9976 100644 ---- a/src/control/tlv.c -+++ b/src/control/tlv.c -@@ -167,17 +167,23 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax, - } - case SND_CTL_TLVT_DB_SCALE: { - int step; -- *min = (int)tlv[2]; -+ if (tlv[3] & 0x10000) -+ *min = SND_CTL_TLV_DB_GAIN_MUTE; -+ else -+ *min = (int)tlv[2]; - step = (tlv[3] & 0xffff); -- *max = *min + (long)(step * (rangemax - rangemin)); -+ *max = (int)tlv[2] + step * (rangemax - rangemin); - return 0; - } - case SND_CTL_TLVT_DB_MINMAX: -- case SND_CTL_TLVT_DB_MINMAX_MUTE: - case SND_CTL_TLVT_DB_LINEAR: - *min = (int)tlv[2]; - *max = (int)tlv[3]; - return 0; -+ case SND_CTL_TLVT_DB_MINMAX_MUTE: -+ *min = SND_CTL_TLV_DB_GAIN_MUTE; -+ *max = (int)tlv[3]; -+ return 0; - } - return -EINVAL; - } -@@ -217,7 +223,7 @@ int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax, - min = tlv[2]; - step = (tlv[3] & 0xffff); - mute = (tlv[3] >> 16) & 1; -- if (mute && volume == rangemin) -+ if (mute && volume <= rangemin) - *db_gain = SND_CTL_TLV_DB_GAIN_MUTE; - else - *db_gain = (volume - rangemin) * step + min; -@@ -327,7 +333,11 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, - step = (tlv[3] & 0xffff); - max = min + (int)(step * (rangemax - rangemin)); - if (db_gain <= min) -- *value = rangemin; -+ if (db_gain > SND_CTL_TLV_DB_GAIN_MUTE && xdir > 0 && -+ (tlv[3] & 0x10000)) -+ *value = rangemin + 1; -+ else -+ *value = rangemin; - else if (db_gain >= max) - *value = rangemax; - else { -@@ -345,7 +355,11 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, - min = tlv[2]; - max = tlv[3]; - if (db_gain <= min) -- *value = rangemin; -+ if (db_gain > SND_CTL_TLV_DB_GAIN_MUTE && xdir > 0 && -+ tlv[0] == SND_CTL_TLVT_DB_MINMAX_MUTE) -+ *value = rangemin + 1; -+ else -+ *value = rangemin; - else if (db_gain >= max) - *value = rangemax; - else { --- -1.7.3.1 - diff --git a/0027-Version-check-libtool-correctly-when-doing-an-out-of.patch b/0027-Version-check-libtool-correctly-when-doing-an-out-of.patch deleted file mode 100644 index de19ba7..0000000 --- a/0027-Version-check-libtool-correctly-when-doing-an-out-of.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 443c1057379f167639acad5dc197bd50a915b5ab Mon Sep 17 00:00:00 2001 -From: Simon McVittie -Date: Fri, 8 Oct 2010 09:06:29 +0100 -Subject: [PATCH 01/10] Version-check libtool correctly when doing an out-of-tree build - -libtool is only created at the end of ./configure, so it doesn't make -sense to grep it in ./configure (the check would always fail the first -time). However, ltmain.sh is copied into the ${srcdir} by libtoolize and -should be safe to check at any time that configure can be run. - -Signed-off-by: Simon McVittie -Signed-off-by: Takashi Iwai ---- - configure.in | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/configure.in b/configure.in -index abc4687..e904956 100644 ---- a/configure.in -+++ b/configure.in -@@ -115,7 +115,7 @@ AC_ARG_WITH(versioned, - versioned="$withval", versioned="yes") - if test "$versioned" = "yes"; then - # it seems that GNU ld versions since 2.10 are not broken -- xres=`grep '^VERSION=' libtool | cut -d = -f 2 | cut -d \" -f 2` -+ xres=`grep '^VERSION=' ${srcdir}/ltmain.sh | cut -d = -f 2 | cut -d \" -f 2` - major=`echo $xres | cut -d . -f 1` - minor=`echo $xres | cut -d . -f 2` - pass=0 --- -1.7.3.1 - diff --git a/0028-configure.in-don-t-rely-on-test-a-not-all-shells-sup.patch b/0028-configure.in-don-t-rely-on-test-a-not-all-shells-sup.patch deleted file mode 100644 index 0cf7be9..0000000 --- a/0028-configure.in-don-t-rely-on-test-a-not-all-shells-sup.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 5cfa03d2f3a9e6bc62f740640d20bd137b4e3bb5 Mon Sep 17 00:00:00 2001 -From: Simon McVittie -Date: Fri, 8 Oct 2010 09:06:58 +0100 -Subject: [PATCH 02/10] configure.in: don't rely on test -a, not all shells support it - -Notably, /bin/sh in older Debian and Ubuntu is dash, which doesn't. - -Signed-off-by: Takashi Iwai ---- - configure.in | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/configure.in b/configure.in -index e904956..c353759 100644 ---- a/configure.in -+++ b/configure.in -@@ -119,7 +119,7 @@ if test "$versioned" = "yes"; then - major=`echo $xres | cut -d . -f 1` - minor=`echo $xres | cut -d . -f 2` - pass=0 -- if test $major -eq 1 -a $minor -gt 3; then -+ if test $major -eq 1 && test $minor -gt 3; then - pass=1 - else - if test $major -gt 1; then --- -1.7.3.1 - diff --git a/0029-pcm-direct-plugins-change-timestamping-in-dsnoop.patch b/0029-pcm-direct-plugins-change-timestamping-in-dsnoop.patch deleted file mode 100644 index 6f8a3df..0000000 --- a/0029-pcm-direct-plugins-change-timestamping-in-dsnoop.patch +++ /dev/null @@ -1,137 +0,0 @@ -From 13b5d972d2e7a5f0e6f3c066684dbb01fafd5121 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Fri, 29 Oct 2010 17:36:41 +0200 -Subject: [PATCH 03/10] pcm direct plugins: change timestamping in dsnoop - -Do not use own timestamps, try to sync hw.ptr with real timestamp. - -Signed-off-by: Jaroslav Kysela ---- - src/pcm/pcm_direct.h | 1 + - src/pcm/pcm_dmix.c | 2 +- - src/pcm/pcm_dshare.c | 2 +- - src/pcm/pcm_dsnoop.c | 31 +++++++++++++++++++++++++------ - 4 files changed, 28 insertions(+), 8 deletions(-) - -diff --git a/src/pcm/pcm_direct.h b/src/pcm/pcm_direct.h -index 132c281..7f16481 100644 ---- a/src/pcm/pcm_direct.h -+++ b/src/pcm/pcm_direct.h -@@ -137,6 +137,7 @@ struct snd_pcm_direct { - int (*sync_ptr)(snd_pcm_t *pcm); - snd_pcm_state_t state; - snd_htimestamp_t trigger_tstamp; -+ snd_htimestamp_t update_tstamp; - int server, client; - int comm_fd; /* communication file descriptor (socket) */ - int hw_fd; /* hardware file descriptor */ -diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c -index cb62de9..434fc65 100644 ---- a/src/pcm/pcm_dmix.c -+++ b/src/pcm/pcm_dmix.c -@@ -852,7 +852,7 @@ static int snd_pcm_dmix_htimestamp(snd_pcm_t *pcm, - if (ok && *avail == avail1) - break; - *avail = avail1; -- *tstamp = snd_pcm_hw_fast_tstamp(pcm); -+ *tstamp = snd_pcm_hw_fast_tstamp(dmix->spcm); - } - return 0; - } -diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c -index 02782a7..77789a5 100644 ---- a/src/pcm/pcm_dshare.c -+++ b/src/pcm/pcm_dshare.c -@@ -542,7 +542,7 @@ static int snd_pcm_dshare_htimestamp(snd_pcm_t *pcm, - if (ok && *avail == avail1) - break; - *avail = avail1; -- *tstamp = snd_pcm_hw_fast_tstamp(pcm); -+ *tstamp = snd_pcm_hw_fast_tstamp(dshare->spcm); - } - return 0; - } -diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c -index 15c727a..988f1f4 100644 ---- a/src/pcm/pcm_dsnoop.c -+++ b/src/pcm/pcm_dsnoop.c -@@ -54,6 +54,23 @@ const char *_snd_module_pcm_dsnoop = ""; - * - */ - -+static int snoop_timestamp(snd_pcm_t *pcm) -+{ -+ snd_pcm_direct_t *dsnoop = pcm->private_data; -+ snd_pcm_uframes_t ptr1 = -2LL /* invalid value */, ptr2; -+ -+ /* loop is required to sync hw.ptr with timestamp */ -+ while (1) { -+ ptr2 = *dsnoop->spcm->hw.ptr; -+ if (ptr1 == ptr2) -+ break; -+ ptr1 = ptr2; -+ dsnoop->update_tstamp = snd_pcm_hw_fast_tstamp(dsnoop->spcm); -+ } -+ dsnoop->slave_hw_ptr = ptr1; -+ return 0; -+} -+ - static void snoop_areas(snd_pcm_direct_t *dsnoop, - const snd_pcm_channel_area_t *src_areas, - const snd_pcm_channel_area_t *dst_areas, -@@ -126,7 +143,8 @@ static int snd_pcm_dsnoop_sync_ptr(snd_pcm_t *pcm) - if (dsnoop->slowptr) - snd_pcm_hwsync(dsnoop->spcm); - old_slave_hw_ptr = dsnoop->slave_hw_ptr; -- slave_hw_ptr = dsnoop->slave_hw_ptr = *dsnoop->spcm->hw.ptr; -+ snoop_timestamp(pcm); -+ slave_hw_ptr = dsnoop->slave_hw_ptr; - diff = slave_hw_ptr - old_slave_hw_ptr; - if (diff == 0) /* fast path */ - return 0; -@@ -172,7 +190,7 @@ static int snd_pcm_dsnoop_status(snd_pcm_t *pcm, snd_pcm_status_t * status) - state = snd_pcm_state(dsnoop->spcm); - status->state = state == SND_PCM_STATE_RUNNING ? dsnoop->state : state; - status->trigger_tstamp = dsnoop->trigger_tstamp; -- gettimestamp(&status->tstamp, pcm->monotonic); -+ status->tstamp = dsnoop->update_tstamp; - status->avail = snd_pcm_mmap_capture_avail(pcm); - status->avail_max = status->avail > dsnoop->avail_max ? status->avail : dsnoop->avail_max; - dsnoop->avail_max = 0; -@@ -254,7 +272,7 @@ static int snd_pcm_dsnoop_reset(snd_pcm_t *pcm) - snd_pcm_direct_t *dsnoop = pcm->private_data; - dsnoop->hw_ptr %= pcm->period_size; - dsnoop->appl_ptr = dsnoop->hw_ptr; -- dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr = *dsnoop->spcm->hw.ptr; -+ dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr; - return 0; - } - -@@ -266,12 +284,13 @@ static int snd_pcm_dsnoop_start(snd_pcm_t *pcm) - if (dsnoop->state != SND_PCM_STATE_PREPARED) - return -EBADFD; - snd_pcm_hwsync(dsnoop->spcm); -- dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr = *dsnoop->spcm->hw.ptr; -+ snoop_timestamp(pcm); -+ dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr; - err = snd_timer_start(dsnoop->timer); - if (err < 0) - return err; - dsnoop->state = SND_PCM_STATE_RUNNING; -- gettimestamp(&dsnoop->trigger_tstamp, pcm->monotonic); -+ dsnoop->trigger_tstamp = dsnoop->update_tstamp; - return 0; - } - -@@ -437,7 +456,7 @@ static int snd_pcm_dsnoop_htimestamp(snd_pcm_t *pcm, - if (ok && *avail == avail1) - break; - *avail = avail1; -- *tstamp = snd_pcm_hw_fast_tstamp(pcm); -+ *tstamp = snd_pcm_hw_fast_tstamp(dsnoop->spcm); - } - return 0; - } --- -1.7.3.1 - diff --git a/0030-USB-Audio.conf-fix-Audiophile-USB-card-name.patch b/0030-USB-Audio.conf-fix-Audiophile-USB-card-name.patch deleted file mode 100644 index 04b511c..0000000 --- a/0030-USB-Audio.conf-fix-Audiophile-USB-card-name.patch +++ /dev/null @@ -1,56 +0,0 @@ -From ab6df229015f46bc2c7b50f5278480d996b232c0 Mon Sep 17 00:00:00 2001 -From: Clemens Ladisch -Date: Wed, 10 Nov 2010 10:11:51 +0100 -Subject: [PATCH 04/10] USB-Audio.conf: fix Audiophile USB card name - -The device name of the M-Audio AudioPhile USB is actually "Audiophile USB (tm)". -Also keep the old string, just to be sure. - -Signed-off-by: Clemens Ladisch ---- - src/conf/cards/USB-Audio.conf | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf -index 5849e3f..0726c34 100644 ---- a/src/conf/cards/USB-Audio.conf -+++ b/src/conf/cards/USB-Audio.conf -@@ -16,6 +16,7 @@ - # here. - USB-Audio.pcm.use_dmix { - "AudioPhile" no # uses big-endian 24-bit samples -+ "Audiophile USB (tm)" no - } - - # If a device does not have a four-channel mode for the front/rear outputs, -@@ -25,6 +26,7 @@ USB-Audio.pcm.use_dmix { - # two_stereo_devices - for devices that have two stereo audio interfaces - USB-Audio.pcm.surround40_type { - "AudioPhile" two_stereo_devices -+ "Audiophile USB (tm)" two_stereo_devices - "OmniStudio" two_stereo_devices - "Quattro" two_stereo_devices - "SB Audigy 2 NX" six_channels -@@ -43,7 +45,8 @@ USB-Audio.pcm.iec958_device { - # M-Audio AudioPhile USB: - # device 0: analog output, digital input - # device 1: digital output, analog input --USB-Audio."AudioPhile".pcm.default { -+USB-Audio."AudioPhile".pcm.default "cards.USB-Audio.Audiophile USB (tm).pcm.default" -+USB-Audio."Audiophile USB (tm)".pcm.default { - @args [ CARD ] - @args.CARD { type string } - type asym -@@ -63,7 +66,8 @@ USB-Audio."AudioPhile".pcm.default { - } - } - } --USB-Audio."AudioPhile".pcm.iec958 { -+USB-Audio."AudioPhile".pcm.iec958 "cards.USB-Audio.Audiophile USB (tm).pcm.iec958" -+USB-Audio."Audiophile USB (tm)".pcm.iec958 { - @args [ CARD AES0 AES1 AES2 AES3 ] - @args.CARD { type string } - @args.AES0 { type integer } --- -1.7.3.1 - diff --git a/0031-pcm-pass-hw_params-flags-to-slave.patch b/0031-pcm-pass-hw_params-flags-to-slave.patch deleted file mode 100644 index 8607c82..0000000 --- a/0031-pcm-pass-hw_params-flags-to-slave.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 70dded6aba653b5f70b48fda22f9b322fd3ae2c9 Mon Sep 17 00:00:00 2001 -From: Clemens Ladisch -Date: Mon, 15 Nov 2010 10:33:35 +0100 -Subject: [PATCH 05/10] pcm: pass hw_params flags to slave - -Fix required before interrupt disabling routines patch can be applied. -Without this fix, the interrupts are only disabled when directly -accessing hw devices. - -Signed-off-by: Pierre-Louis Bossart -Signed-off-by: Clemens Ladisch ---- - src/pcm/pcm_params.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c -index 3a90bcd..b085d42 100644 ---- a/src/pcm/pcm_params.c -+++ b/src/pcm/pcm_params.c -@@ -2126,6 +2126,7 @@ int _snd_pcm_hw_params_refine(snd_pcm_hw_params_t *params, - err = changed; - } - params->info &= src->info; -+ params->flags = src->flags; /* propagate all flags to slave */ - return err; - } - --- -1.7.3.1 - diff --git a/0032-support-for-period-wakeup-disabling.patch b/0032-support-for-period-wakeup-disabling.patch deleted file mode 100644 index 84ecff1..0000000 --- a/0032-support-for-period-wakeup-disabling.patch +++ /dev/null @@ -1,175 +0,0 @@ -From 7c99bd24bcf6852d55e90e0f42f7ac5ea8f14fbb Mon Sep 17 00:00:00 2001 -From: Clemens Ladisch -Date: Mon, 15 Nov 2010 10:43:13 +0100 -Subject: [PATCH 06/10] support for period wakeup disabling - -Add API to disable period wakeups. - -Signed-off-by: Pierre-Louis Bossart -Signed-off-by: Clemens Ladisch ---- - include/pcm.h | 3 ++ - include/sound/asound.h | 2 + - src/pcm/pcm.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++- - src/pcm/pcm_local.h | 3 ++ - 4 files changed, 79 insertions(+), 1 deletions(-) - -diff --git a/include/pcm.h b/include/pcm.h -index f3618c3..7243ffb 100644 ---- a/include/pcm.h -+++ b/include/pcm.h -@@ -531,6 +531,7 @@ int snd_pcm_hw_params_can_resume(const snd_pcm_hw_params_t *params); - int snd_pcm_hw_params_is_half_duplex(const snd_pcm_hw_params_t *params); - int snd_pcm_hw_params_is_joint_duplex(const snd_pcm_hw_params_t *params); - int snd_pcm_hw_params_can_sync_start(const snd_pcm_hw_params_t *params); -+int snd_pcm_hw_params_can_disable_period_wakeup(const snd_pcm_hw_params_t *params); - int snd_pcm_hw_params_get_rate_numden(const snd_pcm_hw_params_t *params, - unsigned int *rate_num, - unsigned int *rate_den); -@@ -626,6 +627,8 @@ int snd_pcm_hw_params_set_rate_resample(snd_pcm_t *pcm, snd_pcm_hw_params_t *par - int snd_pcm_hw_params_get_rate_resample(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val); - int snd_pcm_hw_params_set_export_buffer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val); - int snd_pcm_hw_params_get_export_buffer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val); -+int snd_pcm_hw_params_set_period_wakeup(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val); -+int snd_pcm_hw_params_get_period_wakeup(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val); - - int snd_pcm_hw_params_get_period_time(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir); - int snd_pcm_hw_params_get_period_time_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir); -diff --git a/include/sound/asound.h b/include/sound/asound.h -index fa88938..17dfe8f 100644 ---- a/include/sound/asound.h -+++ b/include/sound/asound.h -@@ -278,6 +278,7 @@ enum sndrv_pcm_subformat { - #define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ - #define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ - #define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ -+#define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP 0x00800000 /* period wakeup can be disabled */ - - enum sndrv_pcm_state { - SNDRV_PCM_STATE_OPEN = 0, /* stream is open */ -@@ -346,6 +347,7 @@ enum sndrv_pcm_hw_param { - - #define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */ - #define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */ -+#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */ - - struct sndrv_interval { - unsigned int min, max; -diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c -index a49b5b9..f378779 100644 ---- a/src/pcm/pcm.c -+++ b/src/pcm/pcm.c -@@ -726,8 +726,11 @@ int snd_pcm_nonblock(snd_pcm_t *pcm, int nonblock) - return err; - if (nonblock) - pcm->mode |= SND_PCM_NONBLOCK; -- else -+ else { -+ if (pcm->hw_flags & SND_PCM_HW_PARAMS_NO_PERIOD_WAKEUP) -+ return -EINVAL; - pcm->mode &= ~SND_PCM_NONBLOCK; -+ } - return 0; - } - -@@ -3081,6 +3084,23 @@ int snd_pcm_hw_params_can_sync_start(const snd_pcm_hw_params_t *params) - } - - /** -+ * \brief Check if hardware can disable period wakeups -+ * \param params Configuration space -+ * \return Boolean value -+ * \retval 0 Hardware cannot disable period wakeups -+ * \retval 1 Hardware can disable period wakeups -+ */ -+int snd_pcm_hw_params_can_disable_period_wakeup(const snd_pcm_hw_params_t *params) -+{ -+ assert(params); -+ if (CHECK_SANITY(params->info == ~0U)) { -+ SNDMSG("invalid PCM info field"); -+ return 0; /* FIXME: should be a negative error? */ -+ } -+ return !!(params->info & SNDRV_PCM_INFO_NO_PERIOD_WAKEUP); -+} -+ -+/** - * \brief Get rate exact info from a configuration space - * \param params Configuration space - * \param rate_num Pointer to returned rate numerator -@@ -4200,6 +4220,56 @@ int snd_pcm_hw_params_get_export_buffer(snd_pcm_t *pcm, snd_pcm_hw_params_t *par - } - - /** -+ * \brief Restrict a configuration space to settings without period wakeups -+ * \param pcm PCM handle -+ * \param params Configuration space -+ * \param val 0 = disable, 1 = enable (default) period wakeup -+ * \return Zero on success, otherwise a negative error code. -+ * -+ * This function must be called only on devices where non-blocking mode is -+ * enabled. -+ * -+ * To check whether the hardware does support disabling period wakeups, call -+ * #snd_pcm_hw_params_can_disable_period_wakeup(). If the hardware does not -+ * support this mode, standard period wakeups will be generated. -+ * -+ * Even with disabled period wakeups, the period size/time/count parameters -+ * are valid; it is suggested to use #snd_pcm_hw_params_set_period_size_last(). -+ * -+ * When period wakeups are disabled, the application must not use any functions -+ * that could block on this device. The use of poll should be limited to error -+ * cases. The application needs to use an external event or a timer to -+ * check the state of the ring buffer and refill it apropriately. -+ */ -+int snd_pcm_hw_params_set_period_wakeup(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val) -+{ -+ assert(pcm && params); -+ -+ if (!val) { -+ if (!(pcm->mode & SND_PCM_NONBLOCK)) -+ return -EINVAL; -+ params->flags |= SND_PCM_HW_PARAMS_NO_PERIOD_WAKEUP; -+ } else -+ params->flags &= ~SND_PCM_HW_PARAMS_NO_PERIOD_WAKEUP; -+ -+ return snd_pcm_hw_refine(pcm, params); -+} -+ -+/** -+ * \brief Extract period wakeup flag from a configuration space -+ * \param pcm PCM handle -+ * \param params Configuration space -+ * \param val 0 = disabled, 1 = enabled period wakeups -+ * \return Zero on success, otherwise a negative error code. -+ */ -+int snd_pcm_hw_params_get_period_wakeup(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val) -+{ -+ assert(pcm && params && val); -+ *val = params->flags & SND_PCM_HW_PARAMS_NO_PERIOD_WAKEUP ? 0 : 1; -+ return 0; -+} -+ -+/** - * \brief Extract period time from a configuration space - * \param params Configuration space - * \param val Returned approximate period duration in us -diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h -index 2f6fcd2..2e901d5 100644 ---- a/src/pcm/pcm_local.h -+++ b/src/pcm/pcm_local.h -@@ -91,9 +91,12 @@ typedef enum sndrv_pcm_hw_param snd_pcm_hw_param_t; - #define SND_PCM_INFO_JOINT_DUPLEX SNDRV_PCM_INFO_JOINT_DUPLEX - /** device can do a kind of synchronized start */ - #define SND_PCM_INFO_SYNC_START SNDRV_PCM_INFO_SYNC_START -+/** device can disable period wakeups */ -+#define SND_PCM_INFO_NO_PERIOD_WAKEUP SNDRV_PCM_INFO_NO_PERIOD_WAKEUP - - #define SND_PCM_HW_PARAMS_NORESAMPLE SNDRV_PCM_HW_PARAMS_NORESAMPLE - #define SND_PCM_HW_PARAMS_EXPORT_BUFFER SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER -+#define SND_PCM_HW_PARAMS_NO_PERIOD_WAKEUP SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP - - #define SND_PCM_INFO_MONOTONIC 0x80000000 - --- -1.7.3.1 - diff --git a/0033-pcm-fix-snd_pcm_avail_delay-function.patch b/0033-pcm-fix-snd_pcm_avail_delay-function.patch deleted file mode 100644 index 54e8abf..0000000 --- a/0033-pcm-fix-snd_pcm_avail_delay-function.patch +++ /dev/null @@ -1,47 +0,0 @@ -From ba9332e9192814a5431a3a2505d25d74a9232124 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Thu, 18 Nov 2010 09:27:07 +0100 -Subject: [PATCH 07/10] pcm: fix snd_pcm_avail_delay() function - -For capture stream, the delay must be obtained as last, but we need to -update the ring buffer pointers for the avail_update call. So, rearrange -the code a bit and add hwsync call as first. - -Signed-off-by: Jaroslav Kysela ---- - src/pcm/pcm.c | 10 +++++++--- - 1 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c -index f378779..7409943 100644 ---- a/src/pcm/pcm.c -+++ b/src/pcm/pcm.c -@@ -2470,18 +2470,22 @@ int snd_pcm_avail_delay(snd_pcm_t *pcm, - snd_pcm_sframes_t *delayp) - { - snd_pcm_sframes_t sf; -+ int err; - - assert(pcm && availp && delayp); - if (CHECK_SANITY(! pcm->setup)) { - SNDMSG("PCM not set up"); - return -EIO; - } -- sf = pcm->fast_ops->delay(pcm->fast_op_arg, delayp); -- if (sf < 0) -- return (int)sf; -+ err = pcm->fast_ops->hwsync(pcm->fast_op_arg); -+ if (err < 0) -+ return err; - sf = pcm->fast_ops->avail_update(pcm->fast_op_arg); - if (sf < 0) - return (int)sf; -+ err = pcm->fast_ops->delay(pcm->fast_op_arg, delayp); -+ if (err < 0) -+ return err; - *availp = sf; - return 0; - } --- -1.7.3.1 - diff --git a/0034-pcm_plugin-remove-unused-client_frames-and-slave_fra.patch b/0034-pcm_plugin-remove-unused-client_frames-and-slave_fra.patch deleted file mode 100644 index 5f24df5..0000000 --- a/0034-pcm_plugin-remove-unused-client_frames-and-slave_fra.patch +++ /dev/null @@ -1,119 +0,0 @@ -From ade3efbd865967bf78d7f0ae6a2fe9809ea90719 Mon Sep 17 00:00:00 2001 -From: Pierre-Louis Bossart -Date: Fri, 19 Nov 2010 10:35:31 -0600 -Subject: [PATCH 08/10] pcm_plugin: remove unused client_frames and slave_frames routines - -plug->client_frames and plug->slave_frames are not used by -any plugin, remove dead code. - -Signed-off-by: Pierre-Louis Bossart -Signed-off-by: Jaroslav Kysela ---- - src/pcm/pcm_plugin.c | 33 ++++----------------------------- - src/pcm/pcm_plugin.h | 2 -- - 2 files changed, 4 insertions(+), 31 deletions(-) - -diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c -index 0ef394a..19d0dee 100644 ---- a/src/pcm/pcm_plugin.c -+++ b/src/pcm/pcm_plugin.c -@@ -144,8 +144,6 @@ static int snd_pcm_plugin_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) - int err = snd_pcm_delay(plugin->gen.slave, &sd); - if (err < 0) - return err; -- if (plugin->client_frames) -- sd = plugin->client_frames(pcm, sd); - *delayp = sd; - return 0; - } -@@ -208,18 +206,13 @@ static snd_pcm_sframes_t snd_pcm_plugin_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t - if (frames == 0) - return 0; - -- if (plugin->slave_frames) -- sframes = plugin->slave_frames(pcm, (snd_pcm_sframes_t) frames); -- else -- sframes = frames; -+ sframes = frames; - snd_atomic_write_begin(&plugin->watom); - sframes = snd_pcm_rewind(plugin->gen.slave, sframes); - if (sframes < 0) { - snd_atomic_write_end(&plugin->watom); - return sframes; - } -- if (plugin->client_frames) -- frames = plugin->client_frames(pcm, sframes); - snd_pcm_mmap_appl_backward(pcm, (snd_pcm_uframes_t) frames); - snd_atomic_write_end(&plugin->watom); - return (snd_pcm_sframes_t) frames; -@@ -241,18 +234,13 @@ static snd_pcm_sframes_t snd_pcm_plugin_forward(snd_pcm_t *pcm, snd_pcm_uframes_ - if (frames == 0) - return 0; - -- if (plugin->slave_frames) -- sframes = plugin->slave_frames(pcm, (snd_pcm_sframes_t) frames); -- else -- sframes = frames; -+ sframes = frames; - snd_atomic_write_begin(&plugin->watom); - sframes = INTERNAL(snd_pcm_forward)(plugin->gen.slave, sframes); - if (sframes < 0) { - snd_atomic_write_end(&plugin->watom); - return sframes; - } -- if (plugin->client_frames) -- frames = plugin->client_frames(pcm, sframes); - snd_pcm_mmap_appl_forward(pcm, (snd_pcm_uframes_t) frames); - snd_atomic_write_end(&plugin->watom); - return (snd_pcm_sframes_t) frames; -@@ -469,15 +457,8 @@ static snd_pcm_sframes_t snd_pcm_plugin_avail_update(snd_pcm_t *pcm) - pcm->access != SND_PCM_ACCESS_RW_INTERLEAVED && - pcm->access != SND_PCM_ACCESS_RW_NONINTERLEAVED) - goto _capture; -- if (plugin->client_frames) { -- *pcm->hw.ptr = plugin->client_frames(pcm, *slave->hw.ptr); -- if (slave_size <= 0) -- return slave_size; -- return plugin->client_frames(pcm, slave_size); -- } else { -- *pcm->hw.ptr = *slave->hw.ptr; -- return slave_size; -- } -+ *pcm->hw.ptr = *slave->hw.ptr; -+ return slave_size; - _capture: - { - const snd_pcm_channel_area_t *areas; -@@ -547,16 +528,10 @@ static int snd_pcm_plugin_status(snd_pcm_t *pcm, snd_pcm_status_t * status) - } - status->appl_ptr = *pcm->appl.ptr; - status->hw_ptr = *pcm->hw.ptr; -- if (plugin->client_frames) { -- status->delay = plugin->client_frames(pcm, status->delay); -- status->avail = plugin->client_frames(pcm, status->avail); -- } - if (!snd_atomic_read_ok(&ratom)) { - snd_atomic_read_wait(&ratom); - goto _again; - } -- if (plugin->client_frames) -- status->avail_max = plugin->client_frames(pcm, (snd_pcm_sframes_t) status->avail_max); - return 0; - } - -diff --git a/src/pcm/pcm_plugin.h b/src/pcm/pcm_plugin.h -index dfcf6de..7ee7c7f 100644 ---- a/src/pcm/pcm_plugin.h -+++ b/src/pcm/pcm_plugin.h -@@ -44,8 +44,6 @@ typedef struct { - snd_pcm_slave_xfer_areas_func_t write; - snd_pcm_slave_xfer_areas_undo_func_t undo_read; - snd_pcm_slave_xfer_areas_undo_func_t undo_write; -- snd_pcm_sframes_t (*client_frames)(snd_pcm_t *pcm, snd_pcm_sframes_t frames); -- snd_pcm_sframes_t (*slave_frames)(snd_pcm_t *pcm, snd_pcm_sframes_t frames); - int (*init)(snd_pcm_t *pcm); - snd_pcm_uframes_t appl_ptr, hw_ptr; - snd_atomic_write_t watom; --- -1.7.3.1 - diff --git a/0035-pcm-add-MMAP_EMUL-to-type-names.patch b/0035-pcm-add-MMAP_EMUL-to-type-names.patch deleted file mode 100644 index 15aca05..0000000 --- a/0035-pcm-add-MMAP_EMUL-to-type-names.patch +++ /dev/null @@ -1,29 +0,0 @@ -From a4f71b19407fde8d5fd4f35850543173636b3ee0 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Tue, 23 Nov 2010 13:40:25 +0100 -Subject: [PATCH 09/10] pcm: add MMAP_EMUL to type names - -If we try to print this then it causes a read past the end of the array -in snd_pcm_type_name(). - -From: Dan Carpenter -Signed-off-by: Jaroslav Kysela ---- - src/pcm/pcm.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c -index 7409943..906b502 100644 ---- a/src/pcm/pcm.c -+++ b/src/pcm/pcm.c -@@ -1633,6 +1633,7 @@ static const char *const snd_pcm_type_names[] = { - PCMTYPE(SOFTVOL), - PCMTYPE(IOPLUG), - PCMTYPE(EXTPLUG), -+ PCMTYPE(MMAP_EMUL), - }; - - static const char *const snd_pcm_subformat_names[] = { --- -1.7.3.1 - diff --git a/0036-pcm_plugin-fix-delay.patch b/0036-pcm_plugin-fix-delay.patch deleted file mode 100644 index 238048a..0000000 --- a/0036-pcm_plugin-fix-delay.patch +++ /dev/null @@ -1,38 +0,0 @@ -From aba87e509898ec9ddb3e319267d7c267409ff100 Mon Sep 17 00:00:00 2001 -From: Pierre-Louis Bossart -Date: Tue, 23 Nov 2010 08:47:08 -0600 -Subject: [PATCH 10/10] pcm_plugin: fix delay - -PulseAudio ALSA modules report errors after calling -snd_pcm_avail_delay(), with a delay lower than the number of samples -available. - -Correct delay using Jaroslav's recommendation: -"the result should be 'delay(slave) + mmap_capture_avail(pcm)" - -Signed-off-by: Pierre-Louis Bossart -Signed-off-by: Jaroslav Kysela ---- - src/pcm/pcm_plugin.c | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c -index 19d0dee..d88e117 100644 ---- a/src/pcm/pcm_plugin.c -+++ b/src/pcm/pcm_plugin.c -@@ -144,6 +144,12 @@ static int snd_pcm_plugin_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) - int err = snd_pcm_delay(plugin->gen.slave, &sd); - if (err < 0) - return err; -+ if (pcm->stream == SND_PCM_STREAM_CAPTURE && -+ pcm->access != SND_PCM_ACCESS_RW_INTERLEAVED && -+ pcm->access != SND_PCM_ACCESS_RW_NONINTERLEAVED) { -+ sd += snd_pcm_mmap_capture_avail(pcm); -+ } -+ - *delayp = sd; - return 0; - } --- -1.7.3.1 - diff --git a/alsa-lib-1.0.23.tar.bz2 b/alsa-lib-1.0.23.tar.bz2 deleted file mode 100644 index 0ab423e..0000000 --- a/alsa-lib-1.0.23.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b4238ecaba5e4a1383af06180611a57ef29f9bf47bc177136dba1bb5b70ff423 -size 808271 diff --git a/alsa-lib-1.0.24.1.tar.bz2 b/alsa-lib-1.0.24.1.tar.bz2 new file mode 100644 index 0000000..02a2ac3 --- /dev/null +++ b/alsa-lib-1.0.24.1.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a32f7c21015b6c71f9a80ff70a2b6a50e4ff4d5c77c744ff0793dea7ba7a2517 +size 832555 diff --git a/alsa-lib-doxygen-avoid-crash-for-11.3.diff b/alsa-lib-doxygen-avoid-crash-for-11.3.diff new file mode 100644 index 0000000..35c4ea8 --- /dev/null +++ b/alsa-lib-doxygen-avoid-crash-for-11.3.diff @@ -0,0 +1,21 @@ +diff --git a/doc/doxygen.cfg.in b/doc/doxygen.cfg.in +index f4499d6..6bd6486 100644 +--- a/doc/doxygen.cfg.in ++++ b/doc/doxygen.cfg.in +@@ -77,7 +77,6 @@ INPUT = @top_srcdir@/doc/index.doxygen \ + @top_srcdir@/src/rawmidi \ + @top_srcdir@/src/timer \ + @top_srcdir@/src/hwdep \ +- @top_srcdir@/src/seq \ + @top_srcdir@/src/ucm + EXCLUDE = @top_srcdir@/src/control/control_local.h \ + @top_srcdir@/src/pcm/atomic.h \ +@@ -94,7 +93,7 @@ EXCLUDE = @top_srcdir@/src/control/control_local.h \ + @top_srcdir@/src/mixer/mixer_local.h \ + @top_srcdir@/src/rawmidi/rawmidi_local.h \ + @top_srcdir@/src/seq/seq_local.h \ +- @top_srcdir@/src/seq/ucm_local.h ++ @top_srcdir@/src/ucm/ucm_local.h + RECURSIVE = YES + FILE_PATTERNS = *.c *.h + EXAMPLE_PATH = @top_srcdir@/test diff --git a/alsa.changes b/alsa.changes index 563d80f..3600b76 100644 --- a/alsa.changes +++ b/alsa.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Mon Jan 31 17:14:35 CET 2011 - tiwai@suse.de + +- updated to version 1.0.24.1: + * including previous fix patches + * add the UCM (Use Cas Manager) framework +- Add a hack to avoid crash of doxygen on 11.3 builds + ------------------------------------------------------------------- Fri Nov 26 09:29:58 CET 2010 - tiwai@suse.de diff --git a/alsa.spec b/alsa.spec index bd27e95..6d6f04c 100644 --- a/alsa.spec +++ b/alsa.spec @@ -1,5 +1,5 @@ # -# spec file for package alsa (Version 1.0.23) +# spec file for package alsa (Version 1.0.24.1) # # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -20,7 +20,7 @@ Name: alsa BuildRequires: doxygen pkg-config -%define package_version 1.0.23 +%define package_version 1.0.24.1 License: LGPLv2.1+ Group: System/Libraries Requires: alsa-utils @@ -33,8 +33,8 @@ Obsoletes: alsa-64bit %endif # Summary: Advanced Linux Sound Architecture -Version: 1.0.23 -Release: 8 +Version: 1.0.24.1 +Release: 1 Source: ftp://ftp.alsa-project.org/pub/lib/alsa-lib-%{package_version}.tar.bz2 Source2: baselibs.conf Source8: 40-alsa.rules @@ -52,42 +52,7 @@ Source32: all_notes_off.mid Source33: alsa-info.sh Source34: alsa-init.sh # Patch: alsa-lib-git-fixes.diff -Patch1: 0001-Check-for-thread-specific-locale-support.patch -Patch2: 0002-Use-thread-safe-locale-functions-if-available.patch -Patch3: 0003-seq-Fix-for-snd_seq_parse_address.patch -Patch4: 0004-control-tlv-Check-dB-range-only-within-the-control-s.patch -Patch5: 0005-alisp-Fix-a-string-format-ambiguity.patch -Patch6: 0006-tlv-Check-out-of-range-dB-with-SND_CTL_TLVT_DB_RANGE.patch -Patch7: 0007-tlv-Handle-holes-in-SND_CTL_TLVT_DB_RANGE-array.patch -Patch8: 0008-tlv-Remove-tailing-tab-after-snd_ctl_get_dB_range-fu.patch -Patch9: 0009-Memory-leak-in-namehint.c.patch -Patch10: 0010-pcm-ladspa-fix-small-memory-leak-in-snd_pcm_ladspa_f.patch -Patch11: 0011-pcm_plug-fix-comparison-always-true.patch -Patch12: 0012-test-latency-fix-timediff-calculation.patch -Patch13: 0013-HDA-Intel-present-all-4-HDMI-outputs-instead-of-just.patch -Patch14: 0014-pcm-add-defaults.pcm.minperiodtime-parsing.patch -Patch15: 0015-pcm-introduce-defaults.pcm.compat-to-change-the-para.patch -Patch16: 0016-pcm-Fixed-typo-wrong-deleted-line-instroduced-in-the.patch -Patch17: 0017-Add-missing-support-for-3-byte-formats-for-16bit-put.patch -Patch18: 0018-namehint-Evaluate-more-possibilities-for-hw-devices.patch -Patch19: 0019-HDA-Intel-do-not-lock-IEC958-Playback-switch.patch -Patch20: 0020-general-recoded-snd_dlobj_-functions.patch -Patch21: 0021-Add-Loopback.conf-to-define-standard-PCM-devices-for.patch -Patch22: 0022-Fix-typo-for-surround-PCMs-in-src-conf-cards-Loopbac.patch -Patch23: 0023-namehint-Fix-hw-device-evaluation-missing-last-devic.patch -Patch24: 0024-namehint-Another-fix-to-properly-evaluate-hw-devices.patch -Patch25: 0025-config-file-processing-rewrite-the-locking-use-one-r.patch -Patch26: 0026-tlv-fix-returned-dB-information-for-min-is-mute-cont.patch -Patch27: 0027-Version-check-libtool-correctly-when-doing-an-out-of.patch -Patch28: 0028-configure.in-don-t-rely-on-test-a-not-all-shells-sup.patch -Patch29: 0029-pcm-direct-plugins-change-timestamping-in-dsnoop.patch -Patch30: 0030-USB-Audio.conf-fix-Audiophile-USB-card-name.patch -Patch31: 0031-pcm-pass-hw_params-flags-to-slave.patch -Patch32: 0032-support-for-period-wakeup-disabling.patch -Patch33: 0033-pcm-fix-snd_pcm_avail_delay-function.patch -Patch34: 0034-pcm_plugin-remove-unused-client_frames-and-slave_fra.patch -Patch35: 0035-pcm-add-MMAP_EMUL-to-type-names.patch -Patch36: 0036-pcm_plugin-fix-delay.patch +Patch1: alsa-lib-doxygen-avoid-crash-for-11.3.diff Url: http://www.alsa-project.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -163,42 +128,9 @@ Authors: %prep %setup -q -n alsa-lib-%{package_version} # %patch -p1 +%if %suse_version == 1130 %patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 -%patch27 -p1 -%patch28 -p1 -%patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 -%patch33 -p1 -%patch34 -p1 -%patch35 -p1 -%patch36 -p1 +%endif # hack to fix build on older distros %if %suse_version < 1100 %ifarch %ix86