Hello community,

here is the log from the commit of package alsa for openSUSE:Factory checked in 
at 2015-07-05 18:00:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/alsa (Old)
 and      /work/SRC/openSUSE:Factory/.alsa.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "alsa"

Changes:
--------
--- /work/SRC/openSUSE:Factory/alsa/alsa.changes        2015-05-23 
12:53:16.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.alsa.new/alsa.changes   2015-07-05 
18:00:30.000000000 +0200
@@ -1,0 +2,12 @@
+Thu Jun 18 09:32:07 CEST 2015 - [email protected]
+
+- Backport upstream fixes: fix bogus assert() in hw_params, a few
+  PCM dmix/dshare/dsnoop fixes, enhacement of amixer, etc:
+  0017-test-pcm-Fix-generated-values-with-float-PCM-format.patch
+  0018-test-pcm_min-Fix-error-messages.patch
+  0019-pcm-Don-t-assert-in-_snd_pcm_hw_params_internal.patch
+  0020-pcm-Fix-snd_pcm_status-for-dmix-co.patch
+  0021-control-Allow-cset-ing-specific-values-in-the-multi-.patch
+  0022-PCM-snd_pcm_xxxx_drain-maybe-blocked-after-suspend-a.patch
+
+-------------------------------------------------------------------

New:
----
  0017-test-pcm-Fix-generated-values-with-float-PCM-format.patch
  0018-test-pcm_min-Fix-error-messages.patch
  0019-pcm-Don-t-assert-in-_snd_pcm_hw_params_internal.patch
  0020-pcm-Fix-snd_pcm_status-for-dmix-co.patch
  0021-control-Allow-cset-ing-specific-values-in-the-multi-.patch
  0022-PCM-snd_pcm_xxxx_drain-maybe-blocked-after-suspend-a.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ alsa.spec ++++++
--- /var/tmp/diff_new_pack.1yN1RW/_old  2015-07-05 18:00:32.000000000 +0200
+++ /var/tmp/diff_new_pack.1yN1RW/_new  2015-07-05 18:00:32.000000000 +0200
@@ -65,6 +65,12 @@
 Patch14:        0014-conf-ucm-broadwell-rt286-change-to-set-capture-volum.patch
 Patch15:        0015-ucm-allow-multiple-devices-in-JackHWMute.patch
 Patch16:        0016-pcm-Remove-assert-from-snd_pcm_hw_params_slave.patch
+Patch17:        0017-test-pcm-Fix-generated-values-with-float-PCM-format.patch
+Patch18:        0018-test-pcm_min-Fix-error-messages.patch
+Patch19:        0019-pcm-Don-t-assert-in-_snd_pcm_hw_params_internal.patch
+Patch20:        0020-pcm-Fix-snd_pcm_status-for-dmix-co.patch
+Patch21:        0021-control-Allow-cset-ing-specific-values-in-the-multi-.patch
+Patch22:        0022-PCM-snd_pcm_xxxx_drain-maybe-blocked-after-suspend-a.patch
 # rest suse patches
 Patch99:        alsa-lib-doxygen-avoid-crash-for-11.3.diff
 # suppress timestamp in documents
@@ -151,6 +157,12 @@
 %patch14 -p1
 %patch15 -p1
 %patch16 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
+%patch22 -p1
 %if 0%{?suse_version} == 1130
 %patch99 -p1
 %endif

++++++ 0017-test-pcm-Fix-generated-values-with-float-PCM-format.patch ++++++
>From 9120f2de8608f49ee1cd4501b9eee39a1c71778f Mon Sep 17 00:00:00 2001
From: Christophe Lohr <[email protected]>
Date: Mon, 1 Jun 2015 13:41:49 +0200
Subject: [PATCH] test/pcm: Fix generated values with float PCM format

The float format should be generated [-1.0..1.0].

Signed-off-by: Takashi Iwai <[email protected]>
---
 test/pcm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/pcm.c b/test/pcm.c
index abb83e4c3014..18b61762b236 100644
--- a/test/pcm.c
+++ b/test/pcm.c
@@ -68,7 +68,7 @@ static void generate_sine(const snd_pcm_channel_area_t *areas,
                } fval;
                int res, i;
                if (is_float) {
-                       fval.f = sin(phase) * maxval;
+                       fval.f = sin(phase);
                        res = fval.i;
                } else
                        res = sin(phase) * maxval;
-- 
2.4.3

++++++ 0018-test-pcm_min-Fix-error-messages.patch ++++++
>From 8551fe258791c165892583006b0aa5142f41b621 Mon Sep 17 00:00:00 2001
From: Christophe Lohr <[email protected]>
Date: Mon, 1 Jun 2015 13:43:36 +0200
Subject: [PATCH] test/pcm_min: Fix error messages

Fix the wrongly referred error code for error messages from
snd_pcm_writei() and other calls.

Signed-off-by: Takashi Iwai <[email protected]>
---
 test/pcm_min.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/pcm_min.c b/test/pcm_min.c
index e971405ee64f..7462a45fef33 100644
--- a/test/pcm_min.c
+++ b/test/pcm_min.c
@@ -39,7 +39,7 @@ int main(void)
                 if (frames < 0)
                         frames = snd_pcm_recover(handle, frames, 0);
                 if (frames < 0) {
-                        printf("snd_pcm_writei failed: %s\n", 
snd_strerror(err));
+                        printf("snd_pcm_writei failed: %s\n", 
snd_strerror(frames));
                         break;
                 }
                 if (frames > 0 && frames < (long)sizeof(buffer))
-- 
2.4.3

++++++ 0019-pcm-Don-t-assert-in-_snd_pcm_hw_params_internal.patch ++++++
>From a5e5e3cd3c85eafcced7a93b1cf37201560f2a28 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <[email protected]>
Date: Mon, 1 Jun 2015 13:45:01 +0200
Subject: [PATCH] pcm: Don't assert in _snd_pcm_hw_params_internal()

It's no fatal error from sw params, and it's really bad habit to use
assert() and abort the operation as a system library.

Signed-off-by: Takashi Iwai <[email protected]>
---
 src/pcm/pcm_params.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c
index 1d667a583151..60d99ad96167 100644
--- a/src/pcm/pcm_params.c
+++ b/src/pcm/pcm_params.c
@@ -2361,7 +2361,8 @@ int _snd_pcm_hw_params_internal(snd_pcm_t *pcm, 
snd_pcm_hw_params_t *params)
        memset(&sw, 0, sizeof(sw));
        snd_pcm_sw_params_default(pcm, &sw);
        err = snd_pcm_sw_params(pcm, &sw);
-       assert(err >= 0);
+       if (err < 0)
+               return err;
 
        if (pcm->mmap_rw || 
            pcm->access == SND_PCM_ACCESS_MMAP_INTERLEAVED ||
-- 
2.4.3

++++++ 0020-pcm-Fix-snd_pcm_status-for-dmix-co.patch ++++++
>From 18ce3ec9caa266086c5f364a2bdbab27a8db9d77 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <[email protected]>
Date: Tue, 2 Jun 2015 16:47:50 +0200
Subject: [PATCH] pcm: Fix snd_pcm_status() for dmix & co

Fetch the timestamp and other status fields by issuing
snd_pcm_status() for the slave PCM.  Also, fill the delay field
properly.  This should fix longstanding PA's complaints.

Reported-by: Dan Hordern <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
---
 src/pcm/pcm_dmix.c   | 3 ++-
 src/pcm/pcm_dshare.c | 3 ++-
 src/pcm/pcm_dsnoop.c | 3 ++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c
index babde6a15efe..4acbaf0e0265 100644
--- a/src/pcm/pcm_dmix.c
+++ b/src/pcm/pcm_dmix.c
@@ -475,12 +475,13 @@ static int snd_pcm_dmix_status(snd_pcm_t *pcm, 
snd_pcm_status_t * status)
                break;
        }
        memset(status, 0, sizeof(*status));
+       snd_pcm_status(dmix->spcm, status);
        status->state = snd_pcm_dmix_state(pcm);
        status->trigger_tstamp = dmix->trigger_tstamp;
-       gettimestamp(&status->tstamp, pcm->tstamp_type);
        status->avail = snd_pcm_mmap_playback_avail(pcm);
        status->avail_max = status->avail > dmix->avail_max ? status->avail : 
dmix->avail_max;
        dmix->avail_max = 0;
+       status->delay = snd_pcm_mmap_playback_delay(pcm);
        return 0;
 }
 
diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c
index 020e6f7d9307..b51758fb22a2 100644
--- a/src/pcm/pcm_dshare.c
+++ b/src/pcm/pcm_dshare.c
@@ -224,12 +224,13 @@ static int snd_pcm_dshare_status(snd_pcm_t *pcm, 
snd_pcm_status_t * status)
                break;
        }
        memset(status, 0, sizeof(*status));
+       snd_pcm_status(dshare->spcm, status);
        status->state = snd_pcm_state(dshare->spcm);
        status->trigger_tstamp = dshare->trigger_tstamp;
-       gettimestamp(&status->tstamp, pcm->tstamp_type);
        status->avail = snd_pcm_mmap_playback_avail(pcm);
        status->avail_max = status->avail > dshare->avail_max ? status->avail : 
dshare->avail_max;
        dshare->avail_max = 0;
+       status->delay = snd_pcm_mmap_playback_delay(pcm);
        return 0;
 }
 
diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c
index 8333eefdaf4c..8a2e87ad0ae1 100644
--- a/src/pcm/pcm_dsnoop.c
+++ b/src/pcm/pcm_dsnoop.c
@@ -187,13 +187,14 @@ static int snd_pcm_dsnoop_status(snd_pcm_t *pcm, 
snd_pcm_status_t * status)
                break;
        }
        memset(status, 0, sizeof(*status));
+       snd_pcm_status(dsnoop->spcm, status);
        state = snd_pcm_state(dsnoop->spcm);
        status->state = state == SND_PCM_STATE_RUNNING ? dsnoop->state : state;
        status->trigger_tstamp = dsnoop->trigger_tstamp;
-       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;
+       status->delay = snd_pcm_mmap_capture_delay(pcm);
        return 0;
 }
 
-- 
2.4.3

++++++ 0021-control-Allow-cset-ing-specific-values-in-the-multi-.patch ++++++
>From 2fd098b587e8e5137c05ea6248c2aa87294e13c2 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <[email protected]>
Date: Wed, 10 Jun 2015 11:56:23 +0200
Subject: [PATCH] control: Allow cset'ing specific values in the multi-value
 case

Improve the parser to allow empty elements followed by a comma.
Now amixer works like below for setting only the third element.
  % amixer cset 'IIR1 Band1' ,,200

Reported-and-tested-by: Arun Raghavan <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
---
 src/control/ctlparse.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/control/ctlparse.c b/src/control/ctlparse.c
index 8d6c3859bec4..877a05e3a1f1 100644
--- a/src/control/ctlparse.c
+++ b/src/control/ctlparse.c
@@ -325,6 +325,8 @@ int snd_ctl_ascii_value_parse(snd_ctl_t *handle,
        snd_ctl_elem_value_set_id(dst, myid);
        
        for (idx = 0; idx < count && idx < 128 && ptr && *ptr; idx++) {
+               if (*ptr == ',')
+                       goto skip;
                switch (type) {
                case SND_CTL_ELEM_TYPE_BOOLEAN:
                        tmp = 0;
@@ -375,6 +377,7 @@ int snd_ctl_ascii_value_parse(snd_ctl_t *handle,
                default:
                        break;
                }
+       skip:
                if (!strchr(value, ','))
                        ptr = value;
                else if (*ptr == ',')
-- 
2.4.3

++++++ 0022-PCM-snd_pcm_xxxx_drain-maybe-blocked-after-suspend-a.patch ++++++
>From 9ee6ec80b80268932a372522ca192168e7812ccf Mon Sep 17 00:00:00 2001
From: Shengjiu Wang <[email protected]>
Date: Fri, 12 Jun 2015 16:15:08 +0800
Subject: [PATCH] PCM: snd_pcm_xxxx_drain() maybe blocked after suspend and
 resume

After suspend and resume, the alsa driver is stopped. But if alsa-lib run
into snd_pcm_xxxx_drain(), it need to wait avail >= pcm->stop_threshold,
otherwise, it will not exit the loop, so finally it is blocked at poll() of
snd_pcm_wait_nocheck(pcm, -1).
This patch is to add state check after snd_pcm_wait_nocheck(pcm, -1), if
the state is SND_PCM_STATE_SUSPENDED, then return error.

Signed-off-by: Shengjiu Wang <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
---
 src/pcm/pcm_dmix.c   | 14 ++++++++++++++
 src/pcm/pcm_dshare.c | 14 ++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c
index 4acbaf0e0265..58e4975d5225 100644
--- a/src/pcm/pcm_dmix.c
+++ b/src/pcm/pcm_dmix.c
@@ -617,6 +617,13 @@ static int snd_pcm_dmix_drain(snd_pcm_t *pcm)
        snd_pcm_uframes_t stop_threshold;
        int err;
 
+       switch (snd_pcm_state(dmix->spcm)) {
+       case SND_PCM_STATE_SUSPENDED:
+               return -ESTRPIPE;
+       default:
+               break;
+       }
+
        if (dmix->state == SND_PCM_STATE_OPEN)
                return -EBADFD;
        if (pcm->mode & SND_PCM_NONBLOCK)
@@ -649,6 +656,13 @@ static int snd_pcm_dmix_drain(snd_pcm_t *pcm)
                        snd_pcm_dmix_sync_area(pcm);
                        snd_pcm_wait_nocheck(pcm, -1);
                        snd_pcm_direct_clear_timer_queue(dmix); /* force poll 
to wait */
+
+                       switch (snd_pcm_state(dmix->spcm)) {
+                       case SND_PCM_STATE_SUSPENDED:
+                               return -ESTRPIPE;
+                       default:
+                               break;
+                       }
                }
        } while (dmix->state == SND_PCM_STATE_DRAINING);
        pcm->stop_threshold = stop_threshold;
diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c
index b51758fb22a2..02370dc7082d 100644
--- a/src/pcm/pcm_dshare.c
+++ b/src/pcm/pcm_dshare.c
@@ -368,6 +368,13 @@ static int snd_pcm_dshare_drain(snd_pcm_t *pcm)
        snd_pcm_uframes_t stop_threshold;
        int err;
 
+       switch (snd_pcm_state(dshare->spcm)) {
+       case SND_PCM_STATE_SUSPENDED:
+               return -ESTRPIPE;
+       default:
+               break;
+       }
+
        if (dshare->state == SND_PCM_STATE_OPEN)
                return -EBADFD;
        if (pcm->mode & SND_PCM_NONBLOCK)
@@ -400,6 +407,13 @@ static int snd_pcm_dshare_drain(snd_pcm_t *pcm)
                        snd_pcm_dshare_sync_area(pcm);
                        snd_pcm_wait_nocheck(pcm, -1);
                        snd_pcm_direct_clear_timer_queue(dshare); /* force poll 
to wait */
+
+                       switch (snd_pcm_state(dshare->spcm)) {
+                       case SND_PCM_STATE_SUSPENDED:
+                               return -ESTRPIPE;
+                       default:
+                               break;
+                       }
                }
        } while (dshare->state == SND_PCM_STATE_DRAINING);
        pcm->stop_threshold = stop_threshold;
-- 
2.4.3





Reply via email to