From 84789a8f60df69a74dc28ab621f2c91cb0613ae3ed61406b69766088a83241ce Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Tue, 21 Oct 2014 07:48:48 +0000 Subject: [PATCH] Accepting request 257835 from home:tiwai:branches:multimedia:libs - Backport upstream fixes / enhancements: mostly small fixes spotted by coccinelle and oethers, the fixes for proper rewind support, a new DSD format support, hwdep definitions sync, and addition of PAZ00 UCM configs. 0022-pcm-fix-snd_pcm_mmap_hw_avail-near-the-boundary.patch 0023-pcm-fix-return-value-of-snd_pcm_share_slave_avail.patch 0024-pcm-add-new-32-bit-DSD-sample-format.patch 0025-dmix-actually-rewind-when-running-or-being-drained.patch 0026-pcm-express-the-rewind-size-limitation-logic-better.patch 0027-pcm-handle-negative-values-from-snd_pcm_mmap_hw_avai.patch 0028-pcm-rate-use-the-snd_pcm_mmap_hw_avail-function.patch 0029-pcm-null-use-the-snd_pcm_mmap_avail-function.patch 0030-rate-handle-negative-values-from-snd_pcm_mmap_playba.patch 0031-dsnoop-rewindable-and-forwardable-logic-was-swapped.patch 0033-pcm-file-don-t-recurse-in-the-rewindable-and-forward.patch 0034-pcm-route-Fix-the-bad-condition-always-false.patch 0035-pcm-rate-hw_avail-must-not-be-negative-before-starti.patch 0036-hwdep-add-missing-declaration-for-snd_hwdep_poll_des.patch 0037-mixer-fixed-double-free.patch 0038-pcm_file-fixed-missing-free.patch 0039-sbase-fixed-missing-free.patch 0040-rawmidi-close-handle-h.patch 0041-pcm_share-fixing-missing-mutex-unlock.patch 0042-simple_abst-null-check-for-lib.patch 0043-socket-missing-socket-close.patch 0044-pcm_hooks-null-check-for-h.patch 0045-conf-return-negative-value-in-case-of-error.patch 0046-control-return-negative-value-in-case-of-error.patch 0047-pcm-return-negative-value-in-case-of-error.patch 0048-mixer-Fix-missing-hctl-handle-free-in-snd_mixer_atta.patch OBS-URL: https://build.opensuse.org/request/show/257835 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=170 --- ..._pcm_mmap_hw_avail-near-the-boundary.patch | 40 ++++ ...n-value-of-snd_pcm_share_slave_avail.patch | 31 +++ ...pcm-add-new-32-bit-DSD-sample-format.patch | 123 ++++++++++ ...rewind-when-running-or-being-drained.patch | 36 +++ ...-rewind-size-limitation-logic-better.patch | 112 +++++++++ ...ive-values-from-snd_pcm_mmap_hw_avai.patch | 131 ++++++++++ ...e-the-snd_pcm_mmap_hw_avail-function.patch | 32 +++ ...-use-the-snd_pcm_mmap_avail-function.patch | 32 +++ ...tive-values-from-snd_pcm_mmap_playba.patch | 43 ++++ ...le-and-forwardable-logic-was-swapped.patch | 45 ++++ ...ecurse-in-the-rewindable-and-forward.patch | 37 +++ ...e-Fix-the-bad-condition-always-false.patch | 25 ++ ...l-must-not-be-negative-before-starti.patch | 34 +++ ...g-declaration-for-snd_hwdep_poll_des.patch | 33 +++ 0037-mixer-fixed-double-free.patch | 30 +++ 0038-pcm_file-fixed-missing-free.patch | 34 +++ 0039-sbase-fixed-missing-free.patch | 26 ++ 0040-rawmidi-close-handle-h.patch | 31 +++ ...cm_share-fixing-missing-mutex-unlock.patch | 34 +++ 0042-simple_abst-null-check-for-lib.patch | 27 +++ 0043-socket-missing-socket-close.patch | 47 ++++ 0044-pcm_hooks-null-check-for-h.patch | 28 +++ ...turn-negative-value-in-case-of-error.patch | 26 ++ ...turn-negative-value-in-case-of-error.patch | 26 ++ ...turn-negative-value-in-case-of-error.patch | 26 ++ ...g-hctl-handle-free-in-snd_mixer_atta.patch | 44 ++++ ...dd-Toshiba-AC100-Dynabook-AZ-new-con.patch | 225 ++++++++++++++++++ alsa.changes | 35 +++ alsa.spec | 54 +++++ 29 files changed, 1447 insertions(+) create mode 100644 0022-pcm-fix-snd_pcm_mmap_hw_avail-near-the-boundary.patch create mode 100644 0023-pcm-fix-return-value-of-snd_pcm_share_slave_avail.patch create mode 100644 0024-pcm-add-new-32-bit-DSD-sample-format.patch create mode 100644 0025-dmix-actually-rewind-when-running-or-being-drained.patch create mode 100644 0026-pcm-express-the-rewind-size-limitation-logic-better.patch create mode 100644 0027-pcm-handle-negative-values-from-snd_pcm_mmap_hw_avai.patch create mode 100644 0028-pcm-rate-use-the-snd_pcm_mmap_hw_avail-function.patch create mode 100644 0029-pcm-null-use-the-snd_pcm_mmap_avail-function.patch create mode 100644 0030-rate-handle-negative-values-from-snd_pcm_mmap_playba.patch create mode 100644 0031-dsnoop-rewindable-and-forwardable-logic-was-swapped.patch create mode 100644 0033-pcm-file-don-t-recurse-in-the-rewindable-and-forward.patch create mode 100644 0034-pcm-route-Fix-the-bad-condition-always-false.patch create mode 100644 0035-pcm-rate-hw_avail-must-not-be-negative-before-starti.patch create mode 100644 0036-hwdep-add-missing-declaration-for-snd_hwdep_poll_des.patch create mode 100644 0037-mixer-fixed-double-free.patch create mode 100644 0038-pcm_file-fixed-missing-free.patch create mode 100644 0039-sbase-fixed-missing-free.patch create mode 100644 0040-rawmidi-close-handle-h.patch create mode 100644 0041-pcm_share-fixing-missing-mutex-unlock.patch create mode 100644 0042-simple_abst-null-check-for-lib.patch create mode 100644 0043-socket-missing-socket-close.patch create mode 100644 0044-pcm_hooks-null-check-for-h.patch create mode 100644 0045-conf-return-negative-value-in-case-of-error.patch create mode 100644 0046-control-return-negative-value-in-case-of-error.patch create mode 100644 0047-pcm-return-negative-value-in-case-of-error.patch create mode 100644 0048-mixer-Fix-missing-hctl-handle-free-in-snd_mixer_atta.patch create mode 100644 0049-conf-ucm-PAZ00-add-Toshiba-AC100-Dynabook-AZ-new-con.patch diff --git a/0022-pcm-fix-snd_pcm_mmap_hw_avail-near-the-boundary.patch b/0022-pcm-fix-snd_pcm_mmap_hw_avail-near-the-boundary.patch new file mode 100644 index 0000000..e8b29f8 --- /dev/null +++ b/0022-pcm-fix-snd_pcm_mmap_hw_avail-near-the-boundary.patch @@ -0,0 +1,40 @@ +From 99a2254f5f2a085b81efcc80950033a2b6110ecd Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 31 Aug 2014 22:23:47 +0600 +Subject: [PATCH] pcm: fix snd_pcm_mmap_hw_avail() near the boundary + +This function returned incorrect results when hw.ptr was near the +boundary and hw.appl_ptr was near zero. Here "incorrect" means "greater +than the boundary". + +The result was incorrect, because it was used as a return value of +various *_rewindable() functions and also as the delay for ioplug. + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Takashi Iwai +--- + src/pcm/pcm_local.h | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h +index 80bbe5973bdb..74ebd609334a 100644 +--- a/src/pcm/pcm_local.h ++++ b/src/pcm/pcm_local.h +@@ -461,13 +461,7 @@ static inline snd_pcm_sframes_t snd_pcm_mmap_capture_hw_avail(snd_pcm_t *pcm) + + static inline snd_pcm_sframes_t snd_pcm_mmap_hw_avail(snd_pcm_t *pcm) + { +- snd_pcm_sframes_t avail; +- avail = *pcm->hw.ptr - *pcm->appl.ptr; +- if (pcm->stream == SND_PCM_STREAM_PLAYBACK) +- avail += pcm->buffer_size; +- if (avail < 0) +- avail += pcm->boundary; +- return pcm->buffer_size - avail; ++ return pcm->buffer_size - snd_pcm_mmap_avail(pcm); + } + + static inline const snd_pcm_channel_area_t *snd_pcm_mmap_areas(snd_pcm_t *pcm) +-- +2.1.2 + diff --git a/0023-pcm-fix-return-value-of-snd_pcm_share_slave_avail.patch b/0023-pcm-fix-return-value-of-snd_pcm_share_slave_avail.patch new file mode 100644 index 0000000..a55823e --- /dev/null +++ b/0023-pcm-fix-return-value-of-snd_pcm_share_slave_avail.patch @@ -0,0 +1,31 @@ +From 622b1b6bdbb34baca885b65643d4796057574eb7 Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Tue, 2 Sep 2014 01:29:36 +0600 +Subject: [PATCH] pcm: fix return value of snd_pcm_share_slave_avail + +The return value was wrong for playback if slave->hw_ptr was near the +boundary and *pcm->appl.ptr was near zero. The wrong result was greater +than the boundary. + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Takashi Iwai +--- + src/pcm/pcm_share.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/pcm/pcm_share.c b/src/pcm/pcm_share.c +index 97705447dd6d..c301c7af799a 100644 +--- a/src/pcm/pcm_share.c ++++ b/src/pcm/pcm_share.c +@@ -128,6 +128,8 @@ static snd_pcm_uframes_t snd_pcm_share_slave_avail(snd_pcm_share_slave_t *slave) + avail += pcm->buffer_size; + if (avail < 0) + avail += pcm->boundary; ++ else if ((snd_pcm_uframes_t) avail >= pcm->boundary) ++ avail -= pcm->boundary; + return avail; + } + +-- +2.1.2 + diff --git a/0024-pcm-add-new-32-bit-DSD-sample-format.patch b/0024-pcm-add-new-32-bit-DSD-sample-format.patch new file mode 100644 index 0000000..b104d7d --- /dev/null +++ b/0024-pcm-add-new-32-bit-DSD-sample-format.patch @@ -0,0 +1,123 @@ +From e59ffbf30ec13f7f1615ba266ec2f3e770801d6f Mon Sep 17 00:00:00 2001 +From: Jurgen Kramer +Date: Wed, 10 Sep 2014 09:00:28 +0200 +Subject: [PATCH] pcm: add new 32-bit DSD sample format + +Add the new DSD_U32_LE sample format to alsa-lib. + +NB include/pcm.h and include/sound/asound.h are updated so a new sync with the +kernel headers is not needed + +Signed-off-by: Jurgen Kramer +Signed-off-by: Takashi Iwai +--- + include/pcm.h | 4 +++- + include/sound/asound.h | 3 ++- + src/pcm/pcm.c | 2 ++ + src/pcm/pcm_misc.c | 6 ++++++ + 4 files changed, 13 insertions(+), 2 deletions(-) + +diff --git a/include/pcm.h b/include/pcm.h +index 11e9f0dfba13..db88ad5ee41a 100644 +--- a/include/pcm.h ++++ b/include/pcm.h +@@ -211,7 +211,9 @@ typedef enum _snd_pcm_format { + SND_PCM_FORMAT_DSD_U8, + /* Direct Stream Digital (DSD) in 2-byte samples (x16) */ + SND_PCM_FORMAT_DSD_U16_LE, +- SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U16_LE, ++ /* Direct Stream Digital (DSD) in 4-byte samples (x32) */ ++ SND_PCM_FORMAT_DSD_U32_LE, ++ SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U32_LE, + + #if __BYTE_ORDER == __LITTLE_ENDIAN + /** Signed 16 bit CPU endian */ +diff --git a/include/sound/asound.h b/include/sound/asound.h +index 32168f7ffce3..6ee586728df9 100644 +--- a/include/sound/asound.h ++++ b/include/sound/asound.h +@@ -219,7 +219,8 @@ typedef int __bitwise snd_pcm_format_t; + #define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */ + #define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */ + #define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */ +-#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U16_LE ++#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */ ++#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_LE + + #ifdef SNDRV_LITTLE_ENDIAN + #define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE +diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c +index 1399a5b2e671..2e2433829016 100644 +--- a/src/pcm/pcm.c ++++ b/src/pcm/pcm.c +@@ -1565,6 +1565,7 @@ static const char *const snd_pcm_format_names[] = { + FORMAT(G723_40_1B), + FORMAT(DSD_U8), + FORMAT(DSD_U16_LE), ++ FORMAT(DSD_U32_LE), + }; + + static const char *const snd_pcm_format_aliases[SND_PCM_FORMAT_LAST+1] = { +@@ -1624,6 +1625,7 @@ static const char *const snd_pcm_format_descriptions[] = { + FORMATD(G723_40_1B, "G.723 (ADPCM) 40 kbit/s, 1 sample in 1 byte"), + FORMATD(DSD_U8, "Direct Stream Digital, 1-byte (x8), oldest bit in MSB"), + FORMATD(DSD_U16_LE, "Direct Stream Digital, 2-byte (x16), little endian, oldest bits in MSB"), ++ FORMATD(DSD_U32_LE, "Direct Stream Digital, 4-byte (x32), little endian, oldest bits in MSB"), + }; + + static const char *const snd_pcm_type_names[] = { +diff --git a/src/pcm/pcm_misc.c b/src/pcm/pcm_misc.c +index 46fc7719978e..92721796aa1f 100644 +--- a/src/pcm/pcm_misc.c ++++ b/src/pcm/pcm_misc.c +@@ -64,6 +64,7 @@ int snd_pcm_format_signed(snd_pcm_format_t format) + case SNDRV_PCM_FORMAT_U18_3BE: + case SNDRV_PCM_FORMAT_DSD_U8: + case SNDRV_PCM_FORMAT_DSD_U16_LE: ++ case SNDRV_PCM_FORMAT_DSD_U32_LE: + return 0; + default: + return -EINVAL; +@@ -154,6 +155,7 @@ int snd_pcm_format_little_endian(snd_pcm_format_t format) + case SNDRV_PCM_FORMAT_U18_3BE: + case SNDRV_PCM_FORMAT_DSD_U8: + case SNDRV_PCM_FORMAT_DSD_U16_LE: ++ case SNDRV_PCM_FORMAT_DSD_U32_LE: + return 0; + default: + return -EINVAL; +@@ -232,6 +234,7 @@ int snd_pcm_format_width(snd_pcm_format_t format) + case SNDRV_PCM_FORMAT_U32_BE: + case SNDRV_PCM_FORMAT_FLOAT_LE: + case SNDRV_PCM_FORMAT_FLOAT_BE: ++ case SNDRV_PCM_FORMAT_DSD_U32_LE: + return 32; + case SNDRV_PCM_FORMAT_FLOAT64_LE: + case SNDRV_PCM_FORMAT_FLOAT64_BE: +@@ -292,6 +295,7 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format) + case SNDRV_PCM_FORMAT_FLOAT_BE: + case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE: + case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE: ++ case SNDRV_PCM_FORMAT_DSD_U32_LE: + return 32; + case SNDRV_PCM_FORMAT_FLOAT64_LE: + case SNDRV_PCM_FORMAT_FLOAT64_BE: +@@ -348,6 +352,7 @@ ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples) + case SNDRV_PCM_FORMAT_U32_BE: + case SNDRV_PCM_FORMAT_FLOAT_LE: + case SNDRV_PCM_FORMAT_FLOAT_BE: ++ case SNDRV_PCM_FORMAT_DSD_U32_LE: + return samples * 4; + case SNDRV_PCM_FORMAT_FLOAT64_LE: + case SNDRV_PCM_FORMAT_FLOAT64_BE: +@@ -394,6 +399,7 @@ u_int64_t snd_pcm_format_silence_64(snd_pcm_format_t format) + return 0x8080808080808080ULL; + case SNDRV_PCM_FORMAT_DSD_U8: + case SNDRV_PCM_FORMAT_DSD_U16_LE: ++ case SNDRV_PCM_FORMAT_DSD_U32_LE: + return 0x6969696969696969ULL; + #ifdef SNDRV_LITTLE_ENDIAN + case SNDRV_PCM_FORMAT_U16_LE: +-- +2.1.2 + diff --git a/0025-dmix-actually-rewind-when-running-or-being-drained.patch b/0025-dmix-actually-rewind-when-running-or-being-drained.patch new file mode 100644 index 0000000..bea0d18 --- /dev/null +++ b/0025-dmix-actually-rewind-when-running-or-being-drained.patch @@ -0,0 +1,36 @@ +From 9a56a673a6cd7343a9345921e2b1cbbb43fb725f Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 14 Sep 2014 00:30:13 +0600 +Subject: [PATCH] dmix: actually rewind when running or being drained + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_dmix.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c +index 7c535093ea0f..73cbe3f8d0b2 100644 +--- a/src/pcm/pcm_dmix.c ++++ b/src/pcm/pcm_dmix.c +@@ -669,11 +669,15 @@ static snd_pcm_sframes_t snd_pcm_dmix_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t f + snd_pcm_direct_t *dmix = pcm->private_data; + snd_pcm_uframes_t slave_appl_ptr, slave_size; + snd_pcm_uframes_t appl_ptr, size, transfer, result; ++ int err; + const snd_pcm_channel_area_t *src_areas, *dst_areas; + + if (dmix->state == SND_PCM_STATE_RUNNING || +- dmix->state == SND_PCM_STATE_DRAINING) +- return snd_pcm_dmix_hwsync(pcm); ++ dmix->state == SND_PCM_STATE_DRAINING) { ++ err = snd_pcm_dmix_hwsync(pcm); ++ if (err < 0) ++ return err; ++ } + + if (dmix->last_appl_ptr < dmix->appl_ptr) + size = dmix->appl_ptr - dmix->last_appl_ptr; +-- +2.1.2 + diff --git a/0026-pcm-express-the-rewind-size-limitation-logic-better.patch b/0026-pcm-express-the-rewind-size-limitation-logic-better.patch new file mode 100644 index 0000000..1383bde --- /dev/null +++ b/0026-pcm-express-the-rewind-size-limitation-logic-better.patch @@ -0,0 +1,112 @@ +From 9a43dc15b2979ed6d8850b033b594fbef829c991 Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 14 Sep 2014 00:30:14 +0600 +Subject: [PATCH] pcm: express the rewind size limitation logic better + +There are a few places where the argument of the .rewind or .forward +callback is checked against the same value as returned by .rewindable or +.forwardable. Express this "don't rewind more than rewindable" logic +explicitly, so that the future fixes to the rewindable size can go to +one function instead of two. + +While at it, take advantage of the fact that snd_pcm_mmap_avail() cannot +return negative values (except due to integer overflow, which is AFAICS +impossible given the current boundary choice). + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_dmix.c | 4 +--- + src/pcm/pcm_dshare.c | 6 ++---- + src/pcm/pcm_dsnoop.c | 6 ++---- + src/pcm/pcm_plugin.c | 4 ++-- + 4 files changed, 7 insertions(+), 13 deletions(-) + +diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c +index 73cbe3f8d0b2..ffde12a1a46c 100644 +--- a/src/pcm/pcm_dmix.c ++++ b/src/pcm/pcm_dmix.c +@@ -751,9 +751,7 @@ static snd_pcm_sframes_t snd_pcm_dmix_forward(snd_pcm_t *pcm, snd_pcm_uframes_t + { + snd_pcm_sframes_t avail; + +- avail = snd_pcm_mmap_playback_avail(pcm); +- if (avail < 0) +- return 0; ++ avail = snd_pcm_dmix_forwardable(pcm); + if (frames > (snd_pcm_uframes_t)avail) + frames = avail; + snd_pcm_mmap_appl_forward(pcm, frames); +diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c +index b985172825e7..f1a1a1d75229 100644 +--- a/src/pcm/pcm_dshare.c ++++ b/src/pcm/pcm_dshare.c +@@ -419,7 +419,7 @@ static snd_pcm_sframes_t snd_pcm_dshare_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t + { + snd_pcm_sframes_t avail; + +- avail = snd_pcm_mmap_playback_hw_avail(pcm); ++ avail = snd_pcm_dshare_rewindable(pcm); + if (avail < 0) + return 0; + if (frames > (snd_pcm_uframes_t)avail) +@@ -437,9 +437,7 @@ static snd_pcm_sframes_t snd_pcm_dshare_forward(snd_pcm_t *pcm, snd_pcm_uframes_ + { + snd_pcm_sframes_t avail; + +- avail = snd_pcm_mmap_playback_avail(pcm); +- if (avail < 0) +- return 0; ++ avail = snd_pcm_dshare_forwardable(pcm); + if (frames > (snd_pcm_uframes_t)avail) + frames = avail; + snd_pcm_mmap_appl_forward(pcm, frames); +diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c +index 0f9c9df481bc..e56e4022becf 100644 +--- a/src/pcm/pcm_dsnoop.c ++++ b/src/pcm/pcm_dsnoop.c +@@ -342,9 +342,7 @@ static snd_pcm_sframes_t snd_pcm_dsnoop_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t + { + snd_pcm_sframes_t avail; + +- avail = snd_pcm_mmap_capture_avail(pcm); +- if (avail < 0) +- return 0; ++ avail = snd_pcm_dsnoop_rewindable(pcm); + if (frames > (snd_pcm_uframes_t)avail) + frames = avail; + snd_pcm_mmap_appl_backward(pcm, frames); +@@ -360,7 +358,7 @@ static snd_pcm_sframes_t snd_pcm_dsnoop_forward(snd_pcm_t *pcm, snd_pcm_uframes_ + { + snd_pcm_sframes_t avail; + +- avail = snd_pcm_mmap_capture_hw_avail(pcm); ++ avail = snd_pcm_dsnoop_forwardable(pcm); + if (avail < 0) + return 0; + if (frames > (snd_pcm_uframes_t)avail) +diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c +index 4ddf10c1989e..a607ccfe27de 100644 +--- a/src/pcm/pcm_plugin.c ++++ b/src/pcm/pcm_plugin.c +@@ -204,7 +204,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_rewindable(snd_pcm_t *pcm) + snd_pcm_sframes_t snd_pcm_plugin_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) + { + snd_pcm_plugin_t *plugin = pcm->private_data; +- snd_pcm_sframes_t n = snd_pcm_mmap_hw_avail(pcm); ++ snd_pcm_sframes_t n = snd_pcm_plugin_rewindable(pcm); + snd_pcm_sframes_t sframes; + + if ((snd_pcm_uframes_t)n < frames) +@@ -232,7 +232,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_forwardable(snd_pcm_t *pcm) + snd_pcm_sframes_t snd_pcm_plugin_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames) + { + snd_pcm_plugin_t *plugin = pcm->private_data; +- snd_pcm_sframes_t n = snd_pcm_mmap_avail(pcm); ++ snd_pcm_sframes_t n = snd_pcm_plugin_forwardable(pcm); + snd_pcm_sframes_t sframes; + + if ((snd_pcm_uframes_t)n < frames) +-- +2.1.2 + diff --git a/0027-pcm-handle-negative-values-from-snd_pcm_mmap_hw_avai.patch b/0027-pcm-handle-negative-values-from-snd_pcm_mmap_hw_avai.patch new file mode 100644 index 0000000..24838cf --- /dev/null +++ b/0027-pcm-handle-negative-values-from-snd_pcm_mmap_hw_avai.patch @@ -0,0 +1,131 @@ +From 78c804fc9348e4c29f1c77dd4b6ad586393aa628 Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 14 Sep 2014 00:30:15 +0600 +Subject: [PATCH] pcm: handle negative values from snd_pcm_mmap_hw_avail + +Such negative values can happen when an underrun happens and xrun +detection is disabled. Another situation is if the device updated the +pointer before alsa-lib has a chance to detect the xrun. + +The problem is that these negative values could propagate to the +snd_pcm_rewindable return value, where it is specified that negative +returns must be interpreted as error codes and not as negative amount of +samples. + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_dmix.c | 2 +- + src/pcm/pcm_dshare.c | 4 +--- + src/pcm/pcm_hw.c | 2 +- + src/pcm/pcm_ioplug.c | 2 +- + src/pcm/pcm_local.h | 18 ++++++++++++++++++ + src/pcm/pcm_plugin.c | 2 +- + 6 files changed, 23 insertions(+), 7 deletions(-) + +diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c +index ffde12a1a46c..babde6a15efe 100644 +--- a/src/pcm/pcm_dmix.c ++++ b/src/pcm/pcm_dmix.c +@@ -661,7 +661,7 @@ static int snd_pcm_dmix_pause(snd_pcm_t *pcm ATTRIBUTE_UNUSED, int enable ATTRIB + + static snd_pcm_sframes_t snd_pcm_dmix_rewindable(snd_pcm_t *pcm) + { +- return snd_pcm_mmap_hw_avail(pcm); ++ return snd_pcm_mmap_playback_hw_rewindable(pcm); + } + + static snd_pcm_sframes_t snd_pcm_dmix_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) +diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c +index f1a1a1d75229..020e6f7d9307 100644 +--- a/src/pcm/pcm_dshare.c ++++ b/src/pcm/pcm_dshare.c +@@ -412,7 +412,7 @@ static int snd_pcm_dshare_pause(snd_pcm_t *pcm ATTRIBUTE_UNUSED, int enable ATTR + + static snd_pcm_sframes_t snd_pcm_dshare_rewindable(snd_pcm_t *pcm) + { +- return snd_pcm_mmap_playback_hw_avail(pcm); ++ return snd_pcm_mmap_playback_hw_rewindable(pcm); + } + + static snd_pcm_sframes_t snd_pcm_dshare_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) +@@ -420,8 +420,6 @@ static snd_pcm_sframes_t snd_pcm_dshare_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t + snd_pcm_sframes_t avail; + + avail = snd_pcm_dshare_rewindable(pcm); +- if (avail < 0) +- return 0; + if (frames > (snd_pcm_uframes_t)avail) + frames = avail; + snd_pcm_mmap_appl_backward(pcm, frames); +diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c +index 74cff672a0c1..c34b766ee035 100644 +--- a/src/pcm/pcm_hw.c ++++ b/src/pcm/pcm_hw.c +@@ -659,7 +659,7 @@ static int snd_pcm_hw_pause(snd_pcm_t *pcm, int enable) + + static snd_pcm_sframes_t snd_pcm_hw_rewindable(snd_pcm_t *pcm) + { +- return snd_pcm_mmap_hw_avail(pcm); ++ return snd_pcm_mmap_hw_rewindable(pcm); + } + + static snd_pcm_sframes_t snd_pcm_hw_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) +diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c +index 85a88911eafc..fe9347c835d5 100644 +--- a/src/pcm/pcm_ioplug.c ++++ b/src/pcm/pcm_ioplug.c +@@ -503,7 +503,7 @@ static int snd_pcm_ioplug_pause(snd_pcm_t *pcm, int enable) + + static snd_pcm_sframes_t snd_pcm_ioplug_rewindable(snd_pcm_t *pcm) + { +- return snd_pcm_mmap_hw_avail(pcm); ++ return snd_pcm_mmap_hw_rewindable(pcm); + } + + static snd_pcm_sframes_t snd_pcm_ioplug_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) +diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h +index 74ebd609334a..394505f978ac 100644 +--- a/src/pcm/pcm_local.h ++++ b/src/pcm/pcm_local.h +@@ -464,6 +464,24 @@ static inline snd_pcm_sframes_t snd_pcm_mmap_hw_avail(snd_pcm_t *pcm) + return pcm->buffer_size - snd_pcm_mmap_avail(pcm); + } + ++static inline snd_pcm_sframes_t snd_pcm_mmap_playback_hw_rewindable(snd_pcm_t *pcm) ++{ ++ snd_pcm_sframes_t ret = snd_pcm_mmap_playback_hw_avail(pcm); ++ return (ret >= 0) ? ret : 0; ++} ++ ++static inline snd_pcm_sframes_t snd_pcm_mmap_capture_hw_rewindable(snd_pcm_t *pcm) ++{ ++ snd_pcm_sframes_t ret = snd_pcm_mmap_capture_hw_avail(pcm); ++ return (ret >= 0) ? ret : 0; ++} ++ ++static inline snd_pcm_uframes_t snd_pcm_mmap_hw_rewindable(snd_pcm_t *pcm) ++{ ++ snd_pcm_sframes_t ret = snd_pcm_mmap_hw_avail(pcm); ++ return (ret >= 0) ? ret : 0; ++} ++ + static inline const snd_pcm_channel_area_t *snd_pcm_mmap_areas(snd_pcm_t *pcm) + { + if (pcm->stopped_areas && +diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c +index a607ccfe27de..c19e2f17a730 100644 +--- a/src/pcm/pcm_plugin.c ++++ b/src/pcm/pcm_plugin.c +@@ -198,7 +198,7 @@ static int snd_pcm_plugin_reset(snd_pcm_t *pcm) + + static snd_pcm_sframes_t snd_pcm_plugin_rewindable(snd_pcm_t *pcm) + { +- return snd_pcm_mmap_hw_avail(pcm); ++ return snd_pcm_mmap_hw_rewindable(pcm); + } + + snd_pcm_sframes_t snd_pcm_plugin_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) +-- +2.1.2 + diff --git a/0028-pcm-rate-use-the-snd_pcm_mmap_hw_avail-function.patch b/0028-pcm-rate-use-the-snd_pcm_mmap_hw_avail-function.patch new file mode 100644 index 0000000..113b05c --- /dev/null +++ b/0028-pcm-rate-use-the-snd_pcm_mmap_hw_avail-function.patch @@ -0,0 +1,32 @@ +From 0889e9470667dd68d5a0ce47a10a8c6d61b7bc79 Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 14 Sep 2014 00:30:16 +0600 +Subject: [PATCH] pcm, rate: use the snd_pcm_mmap_hw_avail function + +instead of the open-coded equivalent + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_rate.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c +index 5e811bb7192a..b436a8ea65ba 100644 +--- a/src/pcm/pcm_rate.c ++++ b/src/pcm/pcm_rate.c +@@ -593,10 +593,7 @@ static int snd_pcm_rate_hwsync(snd_pcm_t *pcm) + static int snd_pcm_rate_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) + { + snd_pcm_rate_hwsync(pcm); +- if (pcm->stream == SND_PCM_STREAM_PLAYBACK) +- *delayp = snd_pcm_mmap_playback_hw_avail(pcm); +- else +- *delayp = snd_pcm_mmap_capture_hw_avail(pcm); ++ *delayp = snd_pcm_mmap_hw_avail(pcm); + return 0; + } + +-- +2.1.2 + diff --git a/0029-pcm-null-use-the-snd_pcm_mmap_avail-function.patch b/0029-pcm-null-use-the-snd_pcm_mmap_avail-function.patch new file mode 100644 index 0000000..a3db441 --- /dev/null +++ b/0029-pcm-null-use-the-snd_pcm_mmap_avail-function.patch @@ -0,0 +1,32 @@ +From 4fafa468d4bb4618cfde7183f820d8fdd373dcb1 Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 14 Sep 2014 00:30:17 +0600 +Subject: [PATCH] pcm, null: use the snd_pcm_mmap_avail function + +instead of the open-coded equivalent + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_null.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/pcm/pcm_null.c b/src/pcm/pcm_null.c +index f11a1020f7e3..05298200ac0a 100644 +--- a/src/pcm/pcm_null.c ++++ b/src/pcm/pcm_null.c +@@ -86,10 +86,7 @@ static snd_pcm_sframes_t snd_pcm_null_avail_update(snd_pcm_t *pcm) + if (null->state == SND_PCM_STATE_PREPARED) { + /* it is required to return the correct avail count for */ + /* the prepared stream, otherwise the start is not called */ +- if (pcm->stream == SND_PCM_STREAM_PLAYBACK) +- return snd_pcm_mmap_playback_avail(pcm); +- else +- return snd_pcm_mmap_capture_avail(pcm); ++ return snd_pcm_mmap_avail(pcm); + } + return pcm->buffer_size; + } +-- +2.1.2 + diff --git a/0030-rate-handle-negative-values-from-snd_pcm_mmap_playba.patch b/0030-rate-handle-negative-values-from-snd_pcm_mmap_playba.patch new file mode 100644 index 0000000..4b30444 --- /dev/null +++ b/0030-rate-handle-negative-values-from-snd_pcm_mmap_playba.patch @@ -0,0 +1,43 @@ +From ff9d213ff80f6fe0456565d4f524366443217174 Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 14 Sep 2014 00:30:18 +0600 +Subject: [PATCH] rate: handle negative values from + snd_pcm_mmap_playback_hw_avail + +Such negative returns are possible during an underrun if xrun detection +is disabled. + +So, don't store the result in an unsigned variable (where it will +overflow), and postpone the trigger in such case, too. + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_rate.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c +index b436a8ea65ba..736d5583cd4c 100644 +--- a/src/pcm/pcm_rate.c ++++ b/src/pcm/pcm_rate.c +@@ -1058,7 +1058,7 @@ static snd_pcm_state_t snd_pcm_rate_state(snd_pcm_t *pcm) + static int snd_pcm_rate_start(snd_pcm_t *pcm) + { + snd_pcm_rate_t *rate = pcm->private_data; +- snd_pcm_uframes_t avail; ++ snd_pcm_sframes_t avail; + + if (pcm->stream == SND_PCM_STREAM_CAPTURE) + return snd_pcm_start(rate->gen.slave); +@@ -1069,7 +1069,7 @@ static int snd_pcm_rate_start(snd_pcm_t *pcm) + gettimestamp(&rate->trigger_tstamp, pcm->tstamp_type); + + avail = snd_pcm_mmap_playback_hw_avail(rate->gen.slave); +- if (avail == 0) { ++ if (avail <= 0) { + /* postpone the trigger since we have no data committed yet */ + rate->start_pending = 1; + return 0; +-- +2.1.2 + diff --git a/0031-dsnoop-rewindable-and-forwardable-logic-was-swapped.patch b/0031-dsnoop-rewindable-and-forwardable-logic-was-swapped.patch new file mode 100644 index 0000000..7c5a118 --- /dev/null +++ b/0031-dsnoop-rewindable-and-forwardable-logic-was-swapped.patch @@ -0,0 +1,45 @@ +From e5e1af83881e4dbe20749a314703db7d0fd091c7 Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 14 Sep 2014 00:30:19 +0600 +Subject: [PATCH] dsnoop: rewindable and forwardable logic was swapped + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_dsnoop.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c +index e56e4022becf..8333eefdaf4c 100644 +--- a/src/pcm/pcm_dsnoop.c ++++ b/src/pcm/pcm_dsnoop.c +@@ -335,7 +335,7 @@ static int snd_pcm_dsnoop_pause(snd_pcm_t *pcm ATTRIBUTE_UNUSED, int enable ATTR + + static snd_pcm_sframes_t snd_pcm_dsnoop_rewindable(snd_pcm_t *pcm) + { +- return snd_pcm_mmap_capture_avail(pcm); ++ return snd_pcm_mmap_capture_hw_avail(pcm); + } + + static snd_pcm_sframes_t snd_pcm_dsnoop_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) +@@ -351,7 +351,7 @@ static snd_pcm_sframes_t snd_pcm_dsnoop_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t + + static snd_pcm_sframes_t snd_pcm_dsnoop_forwardable(snd_pcm_t *pcm) + { +- return snd_pcm_mmap_capture_hw_avail(pcm); ++ return snd_pcm_mmap_capture_avail(pcm); + } + + static snd_pcm_sframes_t snd_pcm_dsnoop_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames) +@@ -359,8 +359,6 @@ static snd_pcm_sframes_t snd_pcm_dsnoop_forward(snd_pcm_t *pcm, snd_pcm_uframes_ + snd_pcm_sframes_t avail; + + avail = snd_pcm_dsnoop_forwardable(pcm); +- if (avail < 0) +- return 0; + if (frames > (snd_pcm_uframes_t)avail) + frames = avail; + snd_pcm_mmap_appl_forward(pcm, frames); +-- +2.1.2 + diff --git a/0033-pcm-file-don-t-recurse-in-the-rewindable-and-forward.patch b/0033-pcm-file-don-t-recurse-in-the-rewindable-and-forward.patch new file mode 100644 index 0000000..85a86be --- /dev/null +++ b/0033-pcm-file-don-t-recurse-in-the-rewindable-and-forward.patch @@ -0,0 +1,37 @@ +From f803a3394a7b7390087be3cc192b2895f9e960ea Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Sun, 14 Sep 2014 00:30:21 +0600 +Subject: [PATCH] pcm, file: don't recurse in the rewindable and forwardable + callbacks + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_file.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/pcm/pcm_file.c b/src/pcm/pcm_file.c +index a0b8bf41bf5b..5541a9395027 100644 +--- a/src/pcm/pcm_file.c ++++ b/src/pcm/pcm_file.c +@@ -454,7 +454,7 @@ static int snd_pcm_file_drain(snd_pcm_t *pcm) + static snd_pcm_sframes_t snd_pcm_file_rewindable(snd_pcm_t *pcm) + { + snd_pcm_file_t *file = pcm->private_data; +- snd_pcm_sframes_t res = snd_pcm_rewindable(pcm); ++ snd_pcm_sframes_t res = snd_pcm_rewindable(file->gen.slave); + snd_pcm_sframes_t n = snd_pcm_bytes_to_frames(pcm, file->wbuf_used_bytes); + if (res > n) + res = n; +@@ -482,7 +482,7 @@ static snd_pcm_sframes_t snd_pcm_file_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t f + static snd_pcm_sframes_t snd_pcm_file_forwardable(snd_pcm_t *pcm) + { + snd_pcm_file_t *file = pcm->private_data; +- snd_pcm_sframes_t res = snd_pcm_forwardable(pcm); ++ snd_pcm_sframes_t res = snd_pcm_forwardable(file->gen.slave); + snd_pcm_sframes_t n = snd_pcm_bytes_to_frames(pcm, file->wbuf_size_bytes - file->wbuf_used_bytes); + if (res > n) + res = n; +-- +2.1.2 + diff --git a/0034-pcm-route-Fix-the-bad-condition-always-false.patch b/0034-pcm-route-Fix-the-bad-condition-always-false.patch new file mode 100644 index 0000000..b5edef9 --- /dev/null +++ b/0034-pcm-route-Fix-the-bad-condition-always-false.patch @@ -0,0 +1,25 @@ +From 650b8c975cd5c3f7dca6e78e74db587b57bcdfd8 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Tue, 16 Sep 2014 09:00:39 +0200 +Subject: [PATCH] pcm route: Fix the bad condition (always false) + +--- + src/pcm/pcm_route.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/pcm/pcm_route.c b/src/pcm/pcm_route.c +index e7de9b51f1fc..2a437e88b93c 100644 +--- a/src/pcm/pcm_route.c ++++ b/src/pcm/pcm_route.c +@@ -1147,7 +1147,7 @@ static int _snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_ent + snd_config_iterator_t j, jnext; + long cchannel; + const char *id; +- if (!snd_config_get_id(in, &id) < 0) ++ if (snd_config_get_id(in, &id) < 0) + continue; + err = safe_strtol(id, &cchannel); + if (err < 0 || +-- +2.1.2 + diff --git a/0035-pcm-rate-hw_avail-must-not-be-negative-before-starti.patch b/0035-pcm-rate-hw_avail-must-not-be-negative-before-starti.patch new file mode 100644 index 0000000..9ffd439 --- /dev/null +++ b/0035-pcm-rate-hw_avail-must-not-be-negative-before-starti.patch @@ -0,0 +1,34 @@ +From 048568bbea700dfd9921b40321f8d5aa7e5ef417 Mon Sep 17 00:00:00 2001 +From: "Alexander E. Patrakov" +Date: Mon, 15 Sep 2014 20:17:47 +0600 +Subject: [PATCH] pcm, rate: hw_avail must not be negative before starting the + stream + +If it is, then it means most likely the driver problem, so we should +return error immediately instead. + +Signed-off-by: Alexander E. Patrakov +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_rate.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c +index 736d5583cd4c..c76db25b1183 100644 +--- a/src/pcm/pcm_rate.c ++++ b/src/pcm/pcm_rate.c +@@ -1069,7 +1069,10 @@ static int snd_pcm_rate_start(snd_pcm_t *pcm) + gettimestamp(&rate->trigger_tstamp, pcm->tstamp_type); + + avail = snd_pcm_mmap_playback_hw_avail(rate->gen.slave); +- if (avail <= 0) { ++ if (avail < 0) /* can't happen on healthy drivers */ ++ return -EBADFD; ++ ++ if (avail == 0) { + /* postpone the trigger since we have no data committed yet */ + rate->start_pending = 1; + return 0; +-- +2.1.2 + diff --git a/0036-hwdep-add-missing-declaration-for-snd_hwdep_poll_des.patch b/0036-hwdep-add-missing-declaration-for-snd_hwdep_poll_des.patch new file mode 100644 index 0000000..98a911c --- /dev/null +++ b/0036-hwdep-add-missing-declaration-for-snd_hwdep_poll_des.patch @@ -0,0 +1,33 @@ +From 9ab3c4a66952c3ae4277624152da675050c7d2ad Mon Sep 17 00:00:00 2001 +From: Takashi Sakamoto +Date: Wed, 17 Sep 2014 07:07:03 +0900 +Subject: [PATCH] hwdep: add missing declaration for + snd_hwdep_poll_descriptors_count() + +The alsa-lib has 'snd_hwdep_poll_descriptors_count()' but hwdep.h has no +declaration for the function. No applications can call the function just +by including the header. + +This commit adds a line to the file for this function. + +Signed-off-by: Takashi Sakamoto +Signed-off-by: Takashi Iwai +--- + include/hwdep.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/hwdep.h b/include/hwdep.h +index 6496fa2d7d87..ad8bb4972818 100644 +--- a/include/hwdep.h ++++ b/include/hwdep.h +@@ -102,6 +102,7 @@ typedef struct _snd_hwdep snd_hwdep_t; + int snd_hwdep_open(snd_hwdep_t **hwdep, const char *name, int mode); + int snd_hwdep_close(snd_hwdep_t *hwdep); + int snd_hwdep_poll_descriptors(snd_hwdep_t *hwdep, struct pollfd *pfds, unsigned int space); ++int snd_hwdep_poll_descriptors_count(snd_hwdep_t *hwdep); + int snd_hwdep_poll_descriptors_revents(snd_hwdep_t *hwdep, struct pollfd *pfds, unsigned int nfds, unsigned short *revents); + int snd_hwdep_nonblock(snd_hwdep_t *hwdep, int nonblock); + int snd_hwdep_info(snd_hwdep_t *hwdep, snd_hwdep_info_t * info); +-- +2.1.2 + diff --git a/0037-mixer-fixed-double-free.patch b/0037-mixer-fixed-double-free.patch new file mode 100644 index 0000000..5c3d9a5 --- /dev/null +++ b/0037-mixer-fixed-double-free.patch @@ -0,0 +1,30 @@ +From 020bb3018ad6febbb0ae9650c4a4ca2b016f7d52 Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:01:36 +0200 +Subject: [PATCH] mixer: fixed double free + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/mixer/mixer.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c +index 56e023dbe7a9..eee9875b44fb 100644 +--- a/src/mixer/mixer.c ++++ b/src/mixer/mixer.c +@@ -204,10 +204,8 @@ int snd_mixer_attach(snd_mixer_t *mixer, const char *name) + if (err < 0) + return err; + err = snd_mixer_attach_hctl(mixer, hctl); +- if (err < 0) { +- snd_hctl_close(hctl); ++ if (err < 0) + return err; +- } + return 0; + } + +-- +2.1.2 + diff --git a/0038-pcm_file-fixed-missing-free.patch b/0038-pcm_file-fixed-missing-free.patch new file mode 100644 index 0000000..2292f64 --- /dev/null +++ b/0038-pcm_file-fixed-missing-free.patch @@ -0,0 +1,34 @@ +From d37f9187956cc0a58bdd129a807e3fdd1f5286b8 Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:04:19 +0200 +Subject: [PATCH] pcm_file: fixed missing free + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/pcm/pcm_file.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/pcm/pcm_file.c b/src/pcm/pcm_file.c +index 5541a9395027..9ab6964d3520 100644 +--- a/src/pcm/pcm_file.c ++++ b/src/pcm/pcm_file.c +@@ -758,6 +758,7 @@ int snd_pcm_file_open(snd_pcm_t **pcmp, const char *name, + ifd = open(ifname, O_RDONLY); /* TODO: mind blocking mode */ + if (ifd < 0) { + SYSERR("open %s for reading failed", ifname); ++ free(file->fname); + free(file); + return -errno; + } +@@ -772,6 +773,7 @@ int snd_pcm_file_open(snd_pcm_t **pcmp, const char *name, + err = snd_pcm_new(&pcm, SND_PCM_TYPE_FILE, name, slave->stream, slave->mode); + if (err < 0) { + free(file->fname); ++ free(file->ifname); + free(file); + return err; + } +-- +2.1.2 + diff --git a/0039-sbase-fixed-missing-free.patch b/0039-sbase-fixed-missing-free.patch new file mode 100644 index 0000000..cebe219 --- /dev/null +++ b/0039-sbase-fixed-missing-free.patch @@ -0,0 +1,26 @@ +From 0ee46280f3e3e52ed2c0af45c9a446a5a9dc5f83 Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:04:26 +0200 +Subject: [PATCH] sbase: fixed missing free + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + modules/mixer/simple/sbase.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/modules/mixer/simple/sbase.c b/modules/mixer/simple/sbase.c +index 97feee8905a6..bb2f59d8a18a 100644 +--- a/modules/mixer/simple/sbase.c ++++ b/modules/mixer/simple/sbase.c +@@ -377,6 +377,7 @@ static int simple_event_add1(snd_mixer_class_t *class, + if (ctype != SND_CTL_ELEM_TYPE_BOOLEAN) { + __invalid_type: + snd_mixer_selem_id_free(id); ++ free(hsimple); + return -EINVAL; + } + break; +-- +2.1.2 + diff --git a/0040-rawmidi-close-handle-h.patch b/0040-rawmidi-close-handle-h.patch new file mode 100644 index 0000000..cc09dbf --- /dev/null +++ b/0040-rawmidi-close-handle-h.patch @@ -0,0 +1,31 @@ +From 09f5c75e9cd7869353a4f6c8da72df43dc2c8e22 Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:05:27 +0200 +Subject: [PATCH] rawmidi: close handle h + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/rawmidi/rawmidi.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/rawmidi/rawmidi.c b/src/rawmidi/rawmidi.c +index b835b472b361..ac699b439b11 100644 +--- a/src/rawmidi/rawmidi.c ++++ b/src/rawmidi/rawmidi.c +@@ -256,8 +256,11 @@ static int snd_rawmidi_open_conf(snd_rawmidi_t **inputp, snd_rawmidi_t **outputp + snd_config_delete(type_conf); + if (err >= 0) + err = open_func(inputp, outputp, name, rawmidi_root, rawmidi_conf, mode); +- if (err < 0) ++ if (err < 0) { ++ if (h) ++ snd_dlclose(h); + return err; ++ } + if (inputp) { + (*inputp)->dl_handle = h; h = NULL; + snd_rawmidi_params_default(*inputp, ¶ms); +-- +2.1.2 + diff --git a/0041-pcm_share-fixing-missing-mutex-unlock.patch b/0041-pcm_share-fixing-missing-mutex-unlock.patch new file mode 100644 index 0000000..678a6f6 --- /dev/null +++ b/0041-pcm_share-fixing-missing-mutex-unlock.patch @@ -0,0 +1,34 @@ +From 30f289a8a38006a937ca9189bc666b0bd90cab3c Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:05:39 +0200 +Subject: [PATCH] pcm_share: fixing missing mutex unlock + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/pcm/pcm_share.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/pcm/pcm_share.c b/src/pcm/pcm_share.c +index c301c7af799a..4b68f1f00fe3 100644 +--- a/src/pcm/pcm_share.c ++++ b/src/pcm/pcm_share.c +@@ -369,6 +369,7 @@ static void *snd_pcm_share_thread(void *data) + err = pipe(slave->poll); + if (err < 0) { + SYSERR("can't create a pipe"); ++ Pthread_mutex_unlock(&slave->mutex); + return NULL; + } + while (slave->open_count > 0) { +@@ -395,6 +396,7 @@ static void *snd_pcm_share_thread(void *data) + err = snd_pcm_sw_params(spcm, &slave->sw_params); + if (err < 0) { + SYSERR("snd_pcm_sw_params error"); ++ Pthread_mutex_unlock(&slave->mutex); + return NULL; + } + } +-- +2.1.2 + diff --git a/0042-simple_abst-null-check-for-lib.patch b/0042-simple_abst-null-check-for-lib.patch new file mode 100644 index 0000000..cc7dafd --- /dev/null +++ b/0042-simple_abst-null-check-for-lib.patch @@ -0,0 +1,27 @@ +From f3f568e3db5fccdf5cfb7053c04fde6272974faa Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:06:28 +0200 +Subject: [PATCH] simple_abst: null check for lib + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/mixer/simple_abst.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/mixer/simple_abst.c b/src/mixer/simple_abst.c +index 9e9aaf55c535..5297472a6d26 100644 +--- a/src/mixer/simple_abst.c ++++ b/src/mixer/simple_abst.c +@@ -70,6 +70,8 @@ static int try_open(snd_mixer_class_t *class, const char *lib) + void *h; + int err = 0; + ++ if (!lib) ++ return -ENXIO; + path = getenv("ALSA_MIXER_SIMPLE_MODULES"); + if (!path) + path = SO_PATH; +-- +2.1.2 + diff --git a/0043-socket-missing-socket-close.patch b/0043-socket-missing-socket-close.patch new file mode 100644 index 0000000..187c32d --- /dev/null +++ b/0043-socket-missing-socket-close.patch @@ -0,0 +1,47 @@ +From bd0b008c0d8ff08cd541dc608ce78478de7c9d12 Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:06:36 +0200 +Subject: [PATCH] socket: missing socket close + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/socket.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/socket.c b/src/socket.c +index 97c919f74876..16979b520ae6 100644 +--- a/src/socket.c ++++ b/src/socket.c +@@ -124,12 +124,15 @@ int snd_is_local(struct hostent *hent) + + conf.ifc_len = numreqs * sizeof(struct ifreq); + conf.ifc_buf = malloc((unsigned int) conf.ifc_len); +- if (! conf.ifc_buf) ++ if (! conf.ifc_buf) { ++ close(s); + return -ENOMEM; ++ } + while (1) { + err = ioctl(s, SIOCGIFCONF, &conf); + if (err < 0) { + SYSERR("SIOCGIFCONF failed"); ++ close(s); + return -errno; + } + if ((size_t)conf.ifc_len < numreqs * sizeof(struct ifreq)) +@@ -137,8 +140,10 @@ int snd_is_local(struct hostent *hent) + numreqs *= 2; + conf.ifc_len = numreqs * sizeof(struct ifreq); + conf.ifc_buf = realloc(conf.ifc_buf, (unsigned int) conf.ifc_len); +- if (! conf.ifc_buf) ++ if (! conf.ifc_buf) { ++ close(s); + return -ENOMEM; ++ } + } + numreqs = conf.ifc_len / sizeof(struct ifreq); + for (i = 0; i < numreqs; ++i) { +-- +2.1.2 + diff --git a/0044-pcm_hooks-null-check-for-h.patch b/0044-pcm_hooks-null-check-for-h.patch new file mode 100644 index 0000000..1631435 --- /dev/null +++ b/0044-pcm_hooks-null-check-for-h.patch @@ -0,0 +1,28 @@ +From 69e0aaa569912c2162908f168291490301b72322 Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:07:13 +0200 +Subject: [PATCH] pcm_hooks: null check for h + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/pcm/pcm_hooks.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/pcm/pcm_hooks.c b/src/pcm/pcm_hooks.c +index 0b93c641daaa..ce1cf361e74b 100644 +--- a/src/pcm/pcm_hooks.c ++++ b/src/pcm/pcm_hooks.c +@@ -457,7 +457,8 @@ static int snd_pcm_hook_add_conf(snd_pcm_t *pcm, snd_config_t *root, snd_config_ + err = hook_add_dlobj(pcm, h); + + if (err < 0) { +- snd_dlclose(h); ++ if(h) ++ snd_dlclose(h); + return err; + } + return 0; +-- +2.1.2 + diff --git a/0045-conf-return-negative-value-in-case-of-error.patch b/0045-conf-return-negative-value-in-case-of-error.patch new file mode 100644 index 0000000..f7be7dd --- /dev/null +++ b/0045-conf-return-negative-value-in-case-of-error.patch @@ -0,0 +1,26 @@ +From b356cd29f975e53ae050a672aff81a71535c412b Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:07:20 +0200 +Subject: [PATCH] conf: return negative value in case of error + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/conf.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/conf.c b/src/conf.c +index 5ccc8e1a53e5..bb256e7ae443 100644 +--- a/src/conf.c ++++ b/src/conf.c +@@ -4198,6 +4198,7 @@ static int _snd_config_evaluate(snd_config_t *src, + snd_config_iterator_t i, next; + if (snd_config_get_type(func_conf) != SND_CONFIG_TYPE_COMPOUND) { + SNDERR("Invalid type for func %s definition", str); ++ err = -EINVAL; + goto _err; + } + snd_config_for_each(i, next, func_conf) { +-- +2.1.2 + diff --git a/0046-control-return-negative-value-in-case-of-error.patch b/0046-control-return-negative-value-in-case-of-error.patch new file mode 100644 index 0000000..db64c30 --- /dev/null +++ b/0046-control-return-negative-value-in-case-of-error.patch @@ -0,0 +1,26 @@ +From 5a0b992548778e063dbafb6737658be9b5e1e2a9 Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:08:09 +0200 +Subject: [PATCH] control: return negative value in case of error + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/control/control.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/control/control.c b/src/control/control.c +index d66ed755356f..dd428a1501b4 100644 +--- a/src/control/control.c ++++ b/src/control/control.c +@@ -864,6 +864,7 @@ static int snd_ctl_open_conf(snd_ctl_t **ctlp, const char *name, + if (err >= 0) { + if (snd_config_get_type(type_conf) != SND_CONFIG_TYPE_COMPOUND) { + SNDERR("Invalid type for CTL type %s definition", str); ++ err = -EINVAL; + goto _err; + } + snd_config_for_each(i, next, type_conf) { +-- +2.1.2 + diff --git a/0047-pcm-return-negative-value-in-case-of-error.patch b/0047-pcm-return-negative-value-in-case-of-error.patch new file mode 100644 index 0000000..271af12 --- /dev/null +++ b/0047-pcm-return-negative-value-in-case-of-error.patch @@ -0,0 +1,26 @@ +From f78ba070b38c0711308d14ce642e78bc2a1a8fc6 Mon Sep 17 00:00:00 2001 +From: Renu Tyagi +Date: Tue, 23 Sep 2014 09:08:23 +0200 +Subject: [PATCH] pcm: return negative value in case of error + +Signed-off-by: renu tyagi +Signed-off-by: Takashi Iwai +--- + src/pcm/pcm.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c +index 2e2433829016..4a7be6c1a55f 100644 +--- a/src/pcm/pcm.c ++++ b/src/pcm/pcm.c +@@ -2145,6 +2145,7 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name, + if (err >= 0) { + if (snd_config_get_type(type_conf) != SND_CONFIG_TYPE_COMPOUND) { + SNDERR("Invalid type for PCM type %s definition", str); ++ err = -EINVAL; + goto _err; + } + snd_config_for_each(i, next, type_conf) { +-- +2.1.2 + diff --git a/0048-mixer-Fix-missing-hctl-handle-free-in-snd_mixer_atta.patch b/0048-mixer-Fix-missing-hctl-handle-free-in-snd_mixer_atta.patch new file mode 100644 index 0000000..3507a02 --- /dev/null +++ b/0048-mixer-Fix-missing-hctl-handle-free-in-snd_mixer_atta.patch @@ -0,0 +1,44 @@ +From 7c1f36dbcbe8d60c6f90cbcf7e2e801cacbcd535 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 23 Sep 2014 09:11:27 +0200 +Subject: [PATCH] mixer: Fix missing hctl handle free in + snd_mixer_attach_hctl() + +Yet another missing piece. + +Also, update the function document to warn about the behavior at +error. + +Signed-off-by: Takashi Iwai +--- + src/mixer/mixer.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c +index eee9875b44fb..3a79c8e91efb 100644 +--- a/src/mixer/mixer.c ++++ b/src/mixer/mixer.c +@@ -214,6 +214,8 @@ int snd_mixer_attach(snd_mixer_t *mixer, const char *name) + * \param mixer Mixer handle + * \param hctl the HCTL to be attached + * \return 0 on success otherwise a negative error code ++ * ++ * Upon error, this function closes the given hctl handle automatically. + */ + int snd_mixer_attach_hctl(snd_mixer_t *mixer, snd_hctl_t *hctl) + { +@@ -222,8 +224,10 @@ int snd_mixer_attach_hctl(snd_mixer_t *mixer, snd_hctl_t *hctl) + + assert(hctl); + slave = calloc(1, sizeof(*slave)); +- if (slave == NULL) ++ if (slave == NULL) { ++ snd_hctl_close(hctl); + return -ENOMEM; ++ } + err = snd_hctl_nonblock(hctl, 1); + if (err < 0) { + snd_hctl_close(hctl); +-- +2.1.2 + diff --git a/0049-conf-ucm-PAZ00-add-Toshiba-AC100-Dynabook-AZ-new-con.patch b/0049-conf-ucm-PAZ00-add-Toshiba-AC100-Dynabook-AZ-new-con.patch new file mode 100644 index 0000000..e780e00 --- /dev/null +++ b/0049-conf-ucm-PAZ00-add-Toshiba-AC100-Dynabook-AZ-new-con.patch @@ -0,0 +1,225 @@ +From 24b4e86ddc512acb6b26f97cb958d59586482fb7 Mon Sep 17 00:00:00 2001 +From: zombah +Date: Tue, 23 Sep 2014 19:53:43 +0400 +Subject: [PATCH] conf/ucm: PAZ00: add Toshiba AC100/Dynabook AZ new config + +Recent mainline kernels threat Toshiba AC100 audio hardware as hw:PAZ00 +vs old hw:tegraalc5632. + +This patch adds config files for new hw name and include them to +makefiles. + +Signed-off-by: zombah +Signed-off-by: Takashi Iwai +--- + configure.ac | 1 + + src/conf/ucm/Makefile.am | 2 +- + src/conf/ucm/PAZ00/HiFi.conf | 45 +++++++++++++++++++++++++++++ + src/conf/ucm/PAZ00/Makefile.am | 4 +++ + src/conf/ucm/PAZ00/PAZ00.conf | 39 +++++++++++++++++++++++++ + src/conf/ucm/PAZ00/Record.conf | 65 ++++++++++++++++++++++++++++++++++++++++++ + 6 files changed, 155 insertions(+), 1 deletion(-) + create mode 100644 src/conf/ucm/PAZ00/HiFi.conf + create mode 100644 src/conf/ucm/PAZ00/Makefile.am + create mode 100644 src/conf/ucm/PAZ00/PAZ00.conf + create mode 100644 src/conf/ucm/PAZ00/Record.conf + +diff --git a/configure.ac b/configure.ac +index b8353a09f0d9..734163c8c321 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -653,6 +653,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \ + src/conf/ucm/PandaBoardES/Makefile \ + src/conf/ucm/SDP4430/Makefile \ + src/conf/ucm/tegraalc5632/Makefile \ ++ src/conf/ucm/PAZ00/Makefile \ + modules/Makefile modules/mixer/Makefile modules/mixer/simple/Makefile \ + alsalisp/Makefile aserver/Makefile \ + test/Makefile test/lsb/Makefile \ +diff --git a/src/conf/ucm/Makefile.am b/src/conf/ucm/Makefile.am +index e089dde73b32..bde89dfea440 100644 +--- a/src/conf/ucm/Makefile.am ++++ b/src/conf/ucm/Makefile.am +@@ -1 +1 @@ +-SUBDIRS=DAISY-I2S PandaBoard PandaBoardES SDP4430 tegraalc5632 ++SUBDIRS=DAISY-I2S PandaBoard PandaBoardES SDP4430 tegraalc5632 PAZ00 +diff --git a/src/conf/ucm/PAZ00/HiFi.conf b/src/conf/ucm/PAZ00/HiFi.conf +new file mode 100644 +index 000000000000..275516d6eb70 +--- /dev/null ++++ b/src/conf/ucm/PAZ00/HiFi.conf +@@ -0,0 +1,45 @@ ++SectionVerb { ++ EnableSequence [ ++ cdev "hw:PAZ00" ++ ++ cset "name='Speaker Playback Switch' on" ++ cset "name='Int Spk Switch' on" ++ cset "name='Speaker Mix DAC2SPK Playback Switch' on" ++ ] ++ DisableSequence [ ++ cset "name='Speaker Playback Switch' off" ++ cset "name='Int Spk Switch' off" ++ cset "name='Speaker Mix DAC2SPK Playback Switch' off" ++ ] ++} ++ ++SectionDevice."Headset".0 { ++ Comment "3.5mm Headset" ++ ++ Value { ++ JackName "Paz00 Headset Jack" ++ } ++ ++ EnableSequence [ ++ cdev "hw:PAZ00" ++ ++ # Internal speaker ++ cset "name='Int Spk Switch' off" ++ ++ # Headphones ++ cset "name='Headphone Playback Switch' on" ++ cset "name='HPL Mix DACL2HP Playback Switch' on" ++ cset "name='HPR Mix DACR2HP Playback Switch' on" ++ ] ++ DisableSequence [ ++ cdev "hw:PAZ00" ++ ++ # Headphones ++ cset "name='Headphone Playback Switch' off" ++ cset "name='HPL Mix DACL2HP Playback Switch' off" ++ cset "name='HPR Mix DACR2HP Playback Switch' off" ++ ++ # Internal speaker ++ cset "name='Int Spk Switch' on" ++ ] ++} +diff --git a/src/conf/ucm/PAZ00/Makefile.am b/src/conf/ucm/PAZ00/Makefile.am +new file mode 100644 +index 000000000000..1bf98a67515f +--- /dev/null ++++ b/src/conf/ucm/PAZ00/Makefile.am +@@ -0,0 +1,4 @@ ++alsaconfigdir = @ALSA_CONFIG_DIR@ ++ucmdir = $(alsaconfigdir)/ucm/PAZ00 ++ucm_DATA = PAZ00.conf HiFi.conf Record.conf ++EXTRA_DIST = $(ucm_DATA) +diff --git a/src/conf/ucm/PAZ00/PAZ00.conf b/src/conf/ucm/PAZ00/PAZ00.conf +new file mode 100644 +index 000000000000..8b9d90435ba1 +--- /dev/null ++++ b/src/conf/ucm/PAZ00/PAZ00.conf +@@ -0,0 +1,39 @@ ++Comment "PAZ00 alc5632" ++ ++ValueDefaults { ++ PlaybackCTL "hw:0" ++ CaptureCTL "hw:0" ++} ++ ++SectionDefaults [ ++ cdev "hw:PAZ00" ++ ++ cset "name='Master Playback Switch' on" ++ cset "name='Master Playback Volume' 44,44" ++ cset "name='Headphone Playback Volume' 21,21" ++ cset "name='Speaker Playback Volume' 21,21" ++ cset "name='SpeakerOut Mux' 2" ++ cset "name='SpeakerOut N Mux' LN/-R" ++ cset "name='AB-D Amp Mux' 0" ++ cset "name='Left Headphone Mux' 1" ++ cset "name='Right Headphone Mux' 1" ++ cset "name='DMIC Boost Capture Volume' 4" ++ cset "name='Rec Capture Volume' 24" ++ ++ # Fix external mic record volumes ++ cset "name='Mic 1 Boost Volume' 0" ++ cset "name='Mic 2 Boost Volume' 0" ++ cset "name='Mic1 Playback Volume' 0" ++ cset "name='Mic2 Playback Volume' 0" ++ cset "name='Rec Capture Volume' 0" ++] ++ ++SectionUseCase."HiFi" { ++ File "HiFi.conf" ++ Comment "Music playback" ++} ++ ++SectionUseCase."Record" { ++ File "Record.conf" ++ Comment "Playback and capture" ++} +diff --git a/src/conf/ucm/PAZ00/Record.conf b/src/conf/ucm/PAZ00/Record.conf +new file mode 100644 +index 000000000000..568e2fbdf051 +--- /dev/null ++++ b/src/conf/ucm/PAZ00/Record.conf +@@ -0,0 +1,65 @@ ++SectionVerb { ++ EnableSequence [ ++ cdev "hw:PAZ00" ++ ++ cset "name='Speaker Playback Switch' on" ++ cset "name='Int Spk Switch' on" ++ cset "name='Speaker Mix DAC2SPK Playback Switch' on" ++ ++ cset "name='DMICL Mix DMICL2ADC Capture Switch' on" ++ cset "name='DMIC En Capture Switch' on" ++ cset "name='DMIC PreFilter Capture Switch' on" ++ ] ++ DisableSequence [ ++ cset "name='Speaker Playback Switch' off" ++ cset "name='Int Spk Switch' off" ++ cset "name='Speaker Mix DAC2SPK Playback Switch' off" ++ ++ cset "name='DMICL Mix DMICL2ADC Capture Switch' off" ++ cset "name='DMIC En Capture Switch' off" ++ cset "name='DMIC PreFilter Capture Switch' off" ++ ] ++} ++ ++SectionDevice."Headset".0 { ++ Comment "3.5mm Headset" ++ ++ Value { ++ JackName "Paz00 Headset Jack" ++ } ++ ++ EnableSequence [ ++ cdev "hw:PAZ00" ++ ++ # Internal speaker ++ cset "name='Int Spk Switch' off" ++ ++ # Internal mic ++ cset "name='DMIC En Capture Switch' off" ++ ++ # Headphones ++ cset "name='Headphone Playback Switch' on" ++ cset "name='HPL Mix DACL2HP Playback Switch' on" ++ cset "name='HPR Mix DACR2HP Playback Switch' on" ++ ++ # External min ++ cset "name='Left Capture Mix MIC12REC_L Capture Switch' on" ++ ] ++ DisableSequence [ ++ cdev "hw:PAZ00" ++ ++ # Headphones ++ cset "name='Headphone Playback Switch' off" ++ cset "name='HPL Mix DACL2HP Playback Switch' off" ++ cset "name='HPR Mix DACR2HP Playback Switch' off" ++ ++ # External mic ++ cset "name='Left Capture Mix MIC12REC_L Capture Switch' on" ++ ++ # Internal speaker ++ cset "name='Int Spk Switch' on" ++ ++ # Internal mic ++ cset "name='DMIC En Capture Switch' on" ++ ] ++} +-- +2.1.2 + diff --git a/alsa.changes b/alsa.changes index 23593f6..cdab268 100644 --- a/alsa.changes +++ b/alsa.changes @@ -1,3 +1,38 @@ +------------------------------------------------------------------- +Fri Oct 17 11:48:23 CEST 2014 - tiwai@suse.de + +- Backport upstream fixes / enhancements: mostly small fixes + spotted by coccinelle and oethers, the fixes for proper rewind + support, a new DSD format support, hwdep definitions sync, and + addition of PAZ00 UCM configs. + 0022-pcm-fix-snd_pcm_mmap_hw_avail-near-the-boundary.patch + 0023-pcm-fix-return-value-of-snd_pcm_share_slave_avail.patch + 0024-pcm-add-new-32-bit-DSD-sample-format.patch + 0025-dmix-actually-rewind-when-running-or-being-drained.patch + 0026-pcm-express-the-rewind-size-limitation-logic-better.patch + 0027-pcm-handle-negative-values-from-snd_pcm_mmap_hw_avai.patch + 0028-pcm-rate-use-the-snd_pcm_mmap_hw_avail-function.patch + 0029-pcm-null-use-the-snd_pcm_mmap_avail-function.patch + 0030-rate-handle-negative-values-from-snd_pcm_mmap_playba.patch + 0031-dsnoop-rewindable-and-forwardable-logic-was-swapped.patch + 0033-pcm-file-don-t-recurse-in-the-rewindable-and-forward.patch + 0034-pcm-route-Fix-the-bad-condition-always-false.patch + 0035-pcm-rate-hw_avail-must-not-be-negative-before-starti.patch + 0036-hwdep-add-missing-declaration-for-snd_hwdep_poll_des.patch + 0037-mixer-fixed-double-free.patch + 0038-pcm_file-fixed-missing-free.patch + 0039-sbase-fixed-missing-free.patch + 0040-rawmidi-close-handle-h.patch + 0041-pcm_share-fixing-missing-mutex-unlock.patch + 0042-simple_abst-null-check-for-lib.patch + 0043-socket-missing-socket-close.patch + 0044-pcm_hooks-null-check-for-h.patch + 0045-conf-return-negative-value-in-case-of-error.patch + 0046-control-return-negative-value-in-case-of-error.patch + 0047-pcm-return-negative-value-in-case-of-error.patch + 0048-mixer-Fix-missing-hctl-handle-free-in-snd_mixer_atta.patch + 0049-conf-ucm-PAZ00-add-Toshiba-AC100-Dynabook-AZ-new-con.patch + ------------------------------------------------------------------- Tue Aug 26 12:44:29 CEST 2014 - tiwai@suse.de diff --git a/alsa.spec b/alsa.spec index fd7156f..5ec98ef 100644 --- a/alsa.spec +++ b/alsa.spec @@ -70,6 +70,33 @@ Patch18: 0018-pcm-Add-missing-signed-and-endianess-definitions-for.patch Patch19: 0019-Sync-enum-snd_hwdep_iface_t-with-include-asound-asou.patch Patch20: 0020-pcm-2nd-round-of-pcm_misc-DSD-fixes.patch Patch21: 0021-doc-fix-cross-compiling-example.patch +Patch22: 0022-pcm-fix-snd_pcm_mmap_hw_avail-near-the-boundary.patch +Patch23: 0023-pcm-fix-return-value-of-snd_pcm_share_slave_avail.patch +Patch24: 0024-pcm-add-new-32-bit-DSD-sample-format.patch +Patch25: 0025-dmix-actually-rewind-when-running-or-being-drained.patch +Patch26: 0026-pcm-express-the-rewind-size-limitation-logic-better.patch +Patch27: 0027-pcm-handle-negative-values-from-snd_pcm_mmap_hw_avai.patch +Patch28: 0028-pcm-rate-use-the-snd_pcm_mmap_hw_avail-function.patch +Patch29: 0029-pcm-null-use-the-snd_pcm_mmap_avail-function.patch +Patch30: 0030-rate-handle-negative-values-from-snd_pcm_mmap_playba.patch +Patch31: 0031-dsnoop-rewindable-and-forwardable-logic-was-swapped.patch +Patch33: 0033-pcm-file-don-t-recurse-in-the-rewindable-and-forward.patch +Patch34: 0034-pcm-route-Fix-the-bad-condition-always-false.patch +Patch35: 0035-pcm-rate-hw_avail-must-not-be-negative-before-starti.patch +Patch36: 0036-hwdep-add-missing-declaration-for-snd_hwdep_poll_des.patch +Patch37: 0037-mixer-fixed-double-free.patch +Patch38: 0038-pcm_file-fixed-missing-free.patch +Patch39: 0039-sbase-fixed-missing-free.patch +Patch40: 0040-rawmidi-close-handle-h.patch +Patch41: 0041-pcm_share-fixing-missing-mutex-unlock.patch +Patch42: 0042-simple_abst-null-check-for-lib.patch +Patch43: 0043-socket-missing-socket-close.patch +Patch44: 0044-pcm_hooks-null-check-for-h.patch +Patch45: 0045-conf-return-negative-value-in-case-of-error.patch +Patch46: 0046-control-return-negative-value-in-case-of-error.patch +Patch47: 0047-pcm-return-negative-value-in-case-of-error.patch +Patch48: 0048-mixer-Fix-missing-hctl-handle-free-in-snd_mixer_atta.patch +Patch49: 0049-conf-ucm-PAZ00-add-Toshiba-AC100-Dynabook-AZ-new-con.patch # rest suse patches Patch99: alsa-lib-doxygen-avoid-crash-for-11.3.diff BuildRequires: doxygen @@ -159,6 +186,33 @@ Architecture. %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 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 %if 0%{?suse_version} == 1130 %patch99 -p1 %endif