Accepting request 225572 from home:tiwai:branches:multimedia:libs

- Update alsa-info.sh to match dmesg with snd_
- Run spec-cleaner
- Add missing Loopback.conf manually
- Upstream fixes: minor clean ups, 2.1 PCM channel config support,
  portability improvements, PCM float format conversion fix,
  fix for ioplug 32bit hwptr wrap, etc.
  0020-minor-malloc-changes.patch
  0021-alsa-lib-minor-typo-in-pcm-doc.patch
  0022-control_hw-fix-potential-memory-leak.patch
  0023-pcm-initialize-pcm_dmix-monotonic-field.patch
  0024-pcm-initialize-monotonic-field-for-dshare-and-dsnoop.patch
  0025-pcm-use-CLOCK_REALTIME-for-non-monotonic-ts.patch
  0026-alsa-lib-heavy-pcm-atomics-cleanup.patch
  0027-conf-Add-basic-infrastructure-for-2.1-surround-sound.patch
  0028-conf-Add-surround-2.1-support-to-all-cards.patch
  0029-Portability-fix-look-for-sys-endian.h-as-well-as-end.patch
  0030-autotools-update-style.patch
  0031-pcm-Insert-linear-to-float-conversion-when-rate-or-c.patch
  0032-pcm-route-Allow-chmap-syntax-for-slave-channels-in-t.patch
  0033-pcm-route-Select-slave-chmap-based-on-ttable-informa.patch
  0034-conf-Allow-2.1-surround-to-use-different-number-of-c.patch
  0035-pcm-Wrap-hw_ptr-to-boundary-in-pcm_ioplug.patch
  0036-src-conf-cards-Add-missing-entry-for-Loopback.conf.patch

OBS-URL: https://build.opensuse.org/request/show/225572
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=152
This commit is contained in:
Takashi Iwai 2014-03-11 11:08:29 +00:00 committed by Git OBS Bridge
parent 6673f5fe6d
commit 62cc03c4bc
21 changed files with 4784 additions and 111 deletions

View File

@ -0,0 +1,52 @@
From 670e228c693cbff9714856e5be93a88d137c5c30 Mon Sep 17 00:00:00 2001
From: Olivier Langlois <olivier@trillion01.com>
Date: Thu, 12 Dec 2013 23:47:20 -0500
Subject: [PATCH] minor malloc changes
replace malloc + memset with calloc since calloc may skip the memset if
returned memory comes directly from sbrk()
use malloc instead of malloc if first thing done with allocated memory is
to flip all bits to 1.
Signed-off-by: Olivier Langlois <olivier@trillion01.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/alisp/alisp.c | 3 +--
src/pcm/pcm_ladspa.c | 2 +-
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/alisp/alisp.c b/src/alisp/alisp.c
index 1796c33c3faf..3c61bb1754c3 100644
--- a/src/alisp/alisp.c
+++ b/src/alisp/alisp.c
@@ -3202,12 +3202,11 @@ int alsa_lisp(struct alisp_cfg *cfg, struct alisp_instance **_instance)
struct alisp_object *p, *p1;
int i, j, retval = 0;
- instance = (struct alisp_instance *)malloc(sizeof(struct alisp_instance));
+ instance = (struct alisp_instance *)calloc(1, sizeof(struct alisp_instance));
if (instance == NULL) {
nomem();
return -ENOMEM;
}
- memset(instance, 0, sizeof(struct alisp_instance));
instance->verbose = cfg->verbose && cfg->vout;
instance->warning = cfg->warning && cfg->wout;
instance->debug = cfg->debug && cfg->dout;
diff --git a/src/pcm/pcm_ladspa.c b/src/pcm/pcm_ladspa.c
index 0a9c52e975e6..9ce5242e2359 100644
--- a/src/pcm/pcm_ladspa.c
+++ b/src/pcm/pcm_ladspa.c
@@ -1326,7 +1326,7 @@ static int snd_pcm_ladspa_parse_bindings(snd_pcm_ladspa_plugin_t *lplug,
count = (unsigned int)(channel + 1);
}
if (count > 0) {
- array = (unsigned int *)calloc(count, sizeof(unsigned int));
+ array = (unsigned int *)malloc(count * sizeof(unsigned int));
if (! array)
return -ENOMEM;
memset(array, 0xff, count * sizeof(unsigned int));
--
1.9.0

View File

@ -0,0 +1,29 @@
From 3baf1bee843d8f0559f1481f26e9b8235b5e85ee Mon Sep 17 00:00:00 2001
From: Olivier Langlois <olivier@trillion01.com>
Date: Sun, 5 Jan 2014 23:12:44 -0500
Subject: [PATCH] alsa-lib: minor typo in pcm doc
Added a missing 'f' in the word 'diferent'
Signed-off-by: Olivier Langlois <olivier@trillion01.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/pcm/pcm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
index c54fa06974fc..7e46014627c2 100644
--- a/src/pcm/pcm.c
+++ b/src/pcm/pcm.c
@@ -105,7 +105,7 @@ The poll or select functions (see 'man 2 poll' or 'man 2 select' for further
details) allows to receive requests/events from the device while
an application is waiting on events from other sources (like keyboard, screen,
network etc.), too. \ref snd_pcm_poll_descriptors can be used to get file
-descriptors to poll or select on (note that wait direction might be diferent
+descriptors to poll or select on (note that wait direction might be different
than expected - do not use only returned file descriptors, but handle
events member as well - see \ref snd_pcm_poll_descriptors function
description for more details and \ref snd_pcm_poll_descriptors_revents for
--
1.9.0

View File

@ -0,0 +1,30 @@
From 336dc58beba0ca7cf5650dc12ed3eb72d61ac6d3 Mon Sep 17 00:00:00 2001
From: Ivan Sorokin <vanyacpp@gmail.com>
Date: Wed, 22 Jan 2014 00:12:50 +0400
Subject: [PATCH] control_hw: fix potential memory leak
Signed-off-by: Ivan Sorokin <vanyacpp@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/control/control_hw.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/control/control_hw.c b/src/control/control_hw.c
index 148097facd90..dfc9dcd51e20 100644
--- a/src/control/control_hw.c
+++ b/src/control/control_hw.c
@@ -240,8 +240,10 @@ static int snd_ctl_hw_elem_tlv(snd_ctl_t *handle, int op_flag,
return -errno;
}
if (op_flag == 0) {
- if (xtlv->tlv[1] + 2 * sizeof(unsigned int) > tlv_size)
+ if (xtlv->tlv[1] + 2 * sizeof(unsigned int) > tlv_size) {
+ free(xtlv);
return -EFAULT;
+ }
memcpy(tlv, xtlv->tlv, xtlv->tlv[1] + 2 * sizeof(unsigned int));
}
free(xtlv);
--
1.9.0

View File

@ -0,0 +1,78 @@
From e51cd448971c472d75dd700b0000988f6197b4da Mon Sep 17 00:00:00 2001
From: Olivier Langlois <olivier@trillion01.com>
Date: Wed, 22 Jan 2014 19:04:45 -0500
Subject: [PATCH] pcm: initialize pcm_dmix monotonic field
not doing so, leaves the pcm object in an inconsistent state since
'info' field is copied from the slave which is then used when
snd_pcm_hw_params_is_monotonic() is called.
For instance, when using dmix with aplay and an underrun is occuring, the following
info is returned:
underrun!!! (at least 1248687948.256 ms long)
Status:
state : XRUN
trigger_time: 1390347762.628483000
tstamp : 1390347766.184350000
delay : -635
avail : 15687
avail_max : 15675
now is computed from CLOCK_MONOTONIC while pcm status tstamps are from gettimeofday().
After the fix, underruns are still occuring on my setup but at least the displayed info
is correct:
underrun!!! (at least 7630.409 ms long)
Status:
state : XRUN
trigger_time: 7652.739201431
tstamp : 7660.369600636
delay : -624
avail : 15676
avail_max : 15664
Signed-off-by: Olivier Langlois <olivier@trillion01.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/pcm/pcm_direct.c | 2 ++
src/pcm/pcm_dmix.c | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c
index 899c250401df..5416cf71674c 100644
--- a/src/pcm/pcm_direct.c
+++ b/src/pcm/pcm_direct.c
@@ -857,6 +857,7 @@ static void save_slave_setting(snd_pcm_direct_t *dmix, snd_pcm_t *spcm)
COPY_SLAVE(buffer_time);
COPY_SLAVE(sample_bits);
COPY_SLAVE(frame_bits);
+ COPY_SLAVE(monotonic);
}
#undef COPY_SLAVE
@@ -1220,6 +1221,7 @@ static void copy_slave_setting(snd_pcm_direct_t *dmix, snd_pcm_t *spcm)
COPY_SLAVE(buffer_time);
COPY_SLAVE(sample_bits);
COPY_SLAVE(frame_bits);
+ COPY_SLAVE(monotonic);
spcm->info &= ~SND_PCM_INFO_PAUSE;
spcm->boundary = recalc_boundary_size(dmix->shmptr->s.boundary, spcm->buffer_size);
diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c
index 2bd5d398d280..4aa6d4eab4a2 100644
--- a/src/pcm/pcm_dmix.c
+++ b/src/pcm/pcm_dmix.c
@@ -1104,7 +1104,7 @@ int snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name,
pcm->poll_fd = dmix->poll_fd;
pcm->poll_events = POLLIN; /* it's different than other plugins */
-
+ pcm->monotonic = spcm->monotonic;
pcm->mmap_rw = 1;
snd_pcm_set_hw_ptr(pcm, &dmix->hw_ptr, -1, 0);
snd_pcm_set_appl_ptr(pcm, &dmix->appl_ptr, -1, 0);
--
1.9.0

View File

@ -0,0 +1,43 @@
From 507cdc13187f5eeb222eeb43550cf6a67c3b29c9 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Thu, 23 Jan 2014 09:46:37 +0100
Subject: [PATCH] pcm: initialize monotonic field for dshare and dsnoop, too
Just like the previous fix for dmix, we need update for dshare and
dsnoop plugins.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/pcm/pcm_dshare.c | 2 +-
src/pcm/pcm_dsnoop.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c
index 5b329510481e..f2d1103a6bfb 100644
--- a/src/pcm/pcm_dshare.c
+++ b/src/pcm/pcm_dshare.c
@@ -792,7 +792,7 @@ int snd_pcm_dshare_open(snd_pcm_t **pcmp, const char *name,
pcm->poll_fd = dshare->poll_fd;
pcm->poll_events = POLLIN; /* it's different than other plugins */
-
+ pcm->monotonic = spcm->monotonic;
pcm->mmap_rw = 1;
snd_pcm_set_hw_ptr(pcm, &dshare->hw_ptr, -1, 0);
snd_pcm_set_appl_ptr(pcm, &dshare->appl_ptr, -1, 0);
diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c
index 055e4f498343..76379140c133 100644
--- a/src/pcm/pcm_dsnoop.c
+++ b/src/pcm/pcm_dsnoop.c
@@ -690,7 +690,7 @@ int snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name,
pcm->poll_fd = dsnoop->poll_fd;
pcm->poll_events = POLLIN; /* it's different than other plugins */
-
+ pcm->monotonic = spcm->monotonic;
pcm->mmap_rw = 1;
snd_pcm_set_hw_ptr(pcm, &dsnoop->hw_ptr, -1, 0);
snd_pcm_set_appl_ptr(pcm, &dsnoop->appl_ptr, -1, 0);
--
1.9.0

View File

@ -0,0 +1,46 @@
From 66f07aa3b77e4013110f7b12640e204d0c15ac8d Mon Sep 17 00:00:00 2001
From: Olivier Langlois <olivier@trillion01.com>
Date: Thu, 23 Jan 2014 19:03:00 -0500
Subject: [PATCH] pcm: use CLOCK_REALTIME for non-monotonic ts
gettimeofday() is the same than clock_gettime(CLOCK_REALTIME)
except for the loss of precision and the double unnecessary
conversion timespec <-> timeval.
Signed-off-by: Olivier Langlois <olivier@trillion01.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/pcm/pcm_local.h | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h
index e1c0baa871f6..8a6c7431cc40 100644
--- a/src/pcm/pcm_local.h
+++ b/src/pcm/pcm_local.h
@@ -961,17 +961,21 @@ typedef union snd_tmp_double {
/* get the current timestamp */
static inline void gettimestamp(snd_htimestamp_t *tstamp, int monotonic)
{
-#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+#if defined(HAVE_CLOCK_GETTIME)
+#if defined(CLOCK_MONOTONIC)
if (monotonic) {
clock_gettime(CLOCK_MONOTONIC, tstamp);
} else {
#endif
+ clock_gettime(CLOCK_REALTIME, tstamp);
+#else
struct timeval tv;
gettimeofday(&tv, 0);
tstamp->tv_sec = tv.tv_sec;
tstamp->tv_nsec = tv.tv_usec * 1000L;
-#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+#endif
+#if defined(HAVE_CLOCK_GETTIME)
}
#endif
}
--
1.9.0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,119 @@
From 57b5076c30b3453ee843912c0aeb3df8dbee3f68 Mon Sep 17 00:00:00 2001
From: David Henningsson <david.henningsson@canonical.com>
Date: Tue, 18 Feb 2014 16:41:48 +0100
Subject: [PATCH] conf: Add basic infrastructure for 2.1 surround sound
For now, we do 2.1 over 5.1, because that's what ALSA allows per default.
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/conf/alsa.conf | 3 +++
src/conf/pcm/Makefile.am | 2 +-
src/conf/pcm/surround21.conf | 62 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 66 insertions(+), 1 deletion(-)
create mode 100644 src/conf/pcm/surround21.conf
diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf
index bc91df3b93a5..5c928e8afbcd 100644
--- a/src/conf/alsa.conf
+++ b/src/conf/alsa.conf
@@ -90,6 +90,8 @@ defaults.pcm.center_lfe.card defaults.pcm.card
defaults.pcm.center_lfe.device defaults.pcm.device
defaults.pcm.side.card defaults.pcm.card
defaults.pcm.side.device defaults.pcm.device
+defaults.pcm.surround21.card defaults.pcm.card
+defaults.pcm.surround21.device defaults.pcm.device
defaults.pcm.surround40.card defaults.pcm.card
defaults.pcm.surround40.device defaults.pcm.device
defaults.pcm.surround41.card defaults.pcm.card
@@ -131,6 +133,7 @@ pcm.front cards.pcm.front
pcm.rear cards.pcm.rear
pcm.center_lfe cards.pcm.center_lfe
pcm.side cards.pcm.side
+pcm.surround21 cards.pcm.surround21
pcm.surround40 cards.pcm.surround40
pcm.surround41 cards.pcm.surround41
pcm.surround50 cards.pcm.surround50
diff --git a/src/conf/pcm/Makefile.am b/src/conf/pcm/Makefile.am
index cc3286e6ddf0..c548660d1696 100644
--- a/src/conf/pcm/Makefile.am
+++ b/src/conf/pcm/Makefile.am
@@ -1,5 +1,5 @@
cfg_files = default.conf front.conf rear.conf center_lfe.conf side.conf\
- surround40.conf surround41.conf \
+ surround21.conf surround40.conf surround41.conf \
surround50.conf surround51.conf \
surround71.conf iec958.conf hdmi.conf modem.conf \
dmix.conf dsnoop.conf \
diff --git a/src/conf/pcm/surround21.conf b/src/conf/pcm/surround21.conf
new file mode 100644
index 000000000000..be29020f24c7
--- /dev/null
+++ b/src/conf/pcm/surround21.conf
@@ -0,0 +1,62 @@
+#
+# Hardware output from 2.1 speakers.
+# Samples must be positioned:
+# chn0 - front left
+# chn1 - front right
+# chn2 - LFE
+#
+
+pcm.!surround21 {
+ @args [ CARD DEV ]
+ @args.CARD {
+ type string
+ default {
+ @func getenv
+ vars [
+ ALSA_SURROUND21_CARD
+ ALSA_PCM_CARD
+ ALSA_CARD
+ ]
+ default {
+ @func refer
+ name defaults.pcm.surround21.card
+ }
+ }
+ }
+ @args.DEV {
+ type integer
+ default {
+ @func igetenv
+ vars [
+ ALSA_SURROUND21_DEVICE
+ ]
+ default {
+ @func refer
+ name defaults.pcm.surround21.device
+ }
+ }
+ }
+ type route
+ slave.pcm {
+ @func refer
+ name {
+ @func concat
+ strings [
+ "cards."
+ {
+ @func card_driver
+ card $CARD
+ }
+ ".pcm.surround51." $DEV ":CARD=" $CARD
+ ]
+ }
+ }
+ slave.channels 6
+ ttable.0.0 1
+ ttable.1.1 1
+ ttable.2.5 1
+ hint {
+ description "2.1 Surround output to Front and Subwoofer speakers"
+ device $DEV
+ }
+}
--
1.9.0

View File

@ -0,0 +1,381 @@
From 1af088e39b75a0a0897c7036487b143e983cd423 Mon Sep 17 00:00:00 2001
From: David Henningsson <david.henningsson@canonical.com>
Date: Tue, 18 Feb 2014 16:41:49 +0100
Subject: [PATCH] conf: Add surround 2.1 support to all cards
All cards that support 4.1 surround now also support 2.1 surround,
because they both have surround 5.1 as slave.
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/conf/cards/ATIIXP-SPDMA.conf | 1 +
src/conf/cards/ATIIXP.conf | 1 +
src/conf/cards/Audigy.conf | 1 +
src/conf/cards/Audigy2.conf | 1 +
src/conf/cards/Aureon51.conf | 1 +
src/conf/cards/Aureon71.conf | 1 +
src/conf/cards/CA0106.conf | 1 +
src/conf/cards/CMI8738-MC6.conf | 1 +
src/conf/cards/CMI8738-MC8.conf | 1 +
src/conf/cards/CMI8788.conf | 2 +-
src/conf/cards/CS46xx.conf | 1 +
src/conf/cards/EMU10K1.conf | 1 +
src/conf/cards/EMU10K1X.conf | 1 +
src/conf/cards/FM801.conf | 1 +
src/conf/cards/FireWave.conf | 1 +
src/conf/cards/HDA-Intel.conf | 1 +
src/conf/cards/ICE1712.conf | 1 +
src/conf/cards/ICE1724.conf | 1 +
src/conf/cards/ICH.conf | 1 +
src/conf/cards/ICH4.conf | 1 +
src/conf/cards/Loopback.conf | 1 +
src/conf/cards/NFORCE.conf | 1 +
src/conf/cards/SB-XFi.conf | 1 +
src/conf/cards/SI7018.conf | 1 +
src/conf/cards/USB-Audio.conf | 1 +
src/conf/cards/VIA8233.conf | 1 +
src/conf/cards/VIA8233A.conf | 1 +
src/conf/cards/VIA8237.conf | 1 +
28 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/conf/cards/ATIIXP-SPDMA.conf b/src/conf/cards/ATIIXP-SPDMA.conf
index 5c80815ddaf6..42540d6817c0 100644
--- a/src/conf/cards/ATIIXP-SPDMA.conf
+++ b/src/conf/cards/ATIIXP-SPDMA.conf
@@ -77,6 +77,7 @@ ATIIXP-SPDMA.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/ATIIXP.conf b/src/conf/cards/ATIIXP.conf
index 38d802345bfb..c4d33ef34a68 100644
--- a/src/conf/cards/ATIIXP.conf
+++ b/src/conf/cards/ATIIXP.conf
@@ -77,6 +77,7 @@ ATIIXP.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/Audigy.conf b/src/conf/cards/Audigy.conf
index 4fe387327633..1c92496653e0 100644
--- a/src/conf/cards/Audigy.conf
+++ b/src/conf/cards/Audigy.conf
@@ -143,6 +143,7 @@ Audigy.pcm.center_lfe.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround40.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
diff --git a/src/conf/cards/Audigy2.conf b/src/conf/cards/Audigy2.conf
index db45776e54c4..cbec78358882 100644
--- a/src/conf/cards/Audigy2.conf
+++ b/src/conf/cards/Audigy2.conf
@@ -195,6 +195,7 @@ Audigy2.pcm.side.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround40.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
diff --git a/src/conf/cards/Aureon51.conf b/src/conf/cards/Aureon51.conf
index 24b4d949174b..07be4a77aa12 100644
--- a/src/conf/cards/Aureon51.conf
+++ b/src/conf/cards/Aureon51.conf
@@ -86,6 +86,7 @@ Aureon51.pcm.surround40.0 {
channels 4
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/Aureon71.conf b/src/conf/cards/Aureon71.conf
index 1479c25cce21..a43ce2cee5fa 100644
--- a/src/conf/cards/Aureon71.conf
+++ b/src/conf/cards/Aureon71.conf
@@ -86,6 +86,7 @@ Aureon71.pcm.surround40.0 {
channels 4
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/CA0106.conf b/src/conf/cards/CA0106.conf
index 9d21770f84ad..2f0eaf0afdc8 100644
--- a/src/conf/cards/CA0106.conf
+++ b/src/conf/cards/CA0106.conf
@@ -108,6 +108,7 @@ CA0106.pcm.surround40.0 {
]
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/CMI8738-MC6.conf b/src/conf/cards/CMI8738-MC6.conf
index 171c772809ab..edc67d44d96a 100644
--- a/src/conf/cards/CMI8738-MC6.conf
+++ b/src/conf/cards/CMI8738-MC6.conf
@@ -77,6 +77,7 @@ CMI8738-MC6.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/CMI8738-MC8.conf b/src/conf/cards/CMI8738-MC8.conf
index a5bf6cb4889a..ddff75304bc3 100644
--- a/src/conf/cards/CMI8738-MC8.conf
+++ b/src/conf/cards/CMI8738-MC8.conf
@@ -105,6 +105,7 @@ CMI8738-MC8.pcm.surround40.0 {
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/CMI8788.conf b/src/conf/cards/CMI8788.conf
index 0ca71e9d28de..edcb0c9ccc36 100644
--- a/src/conf/cards/CMI8788.conf
+++ b/src/conf/cards/CMI8788.conf
@@ -48,7 +48,7 @@ CMI8788.pcm.surround40.0 {
channels 4
}
-
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/CS46xx.conf b/src/conf/cards/CS46xx.conf
index 1983142548fd..b71c30aad514 100644
--- a/src/conf/cards/CS46xx.conf
+++ b/src/conf/cards/CS46xx.conf
@@ -112,6 +112,7 @@ CS46xx.pcm.surround40.0 {
]
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/EMU10K1.conf b/src/conf/cards/EMU10K1.conf
index d51f6dc02fac..ef193fe0c460 100644
--- a/src/conf/cards/EMU10K1.conf
+++ b/src/conf/cards/EMU10K1.conf
@@ -217,6 +217,7 @@ EMU10K1.pcm.surround40.0 {
]
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/EMU10K1X.conf b/src/conf/cards/EMU10K1X.conf
index b5fc708c4cb2..f742863679cb 100644
--- a/src/conf/cards/EMU10K1X.conf
+++ b/src/conf/cards/EMU10K1X.conf
@@ -96,6 +96,7 @@ EMU10K1X.pcm.surround40.0 {
]
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/FM801.conf b/src/conf/cards/FM801.conf
index 997b2184f38c..0ddf799cd029 100644
--- a/src/conf/cards/FM801.conf
+++ b/src/conf/cards/FM801.conf
@@ -40,6 +40,7 @@ FM801.pcm.default {
FM801.pcm.surround40.0 "cards.FM801.pcm.front.0"
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/FireWave.conf b/src/conf/cards/FireWave.conf
index 63fb23d96bc0..fcfc83ccfb19 100644
--- a/src/conf/cards/FireWave.conf
+++ b/src/conf/cards/FireWave.conf
@@ -25,6 +25,7 @@ FireWave.pcm.front.0 {
card $CARD
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/HDA-Intel.conf b/src/conf/cards/HDA-Intel.conf
index 7976b6c52ee9..fa9f6946376f 100644
--- a/src/conf/cards/HDA-Intel.conf
+++ b/src/conf/cards/HDA-Intel.conf
@@ -71,6 +71,7 @@ HDA-Intel.pcm.default {
hint.device 0
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround40.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
diff --git a/src/conf/cards/ICE1712.conf b/src/conf/cards/ICE1712.conf
index f5b8add6322c..398fa7ad5307 100644
--- a/src/conf/cards/ICE1712.conf
+++ b/src/conf/cards/ICE1712.conf
@@ -74,6 +74,7 @@ ICE1712.pcm.surround40.0 {
slave.channels 10
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/ICE1724.conf b/src/conf/cards/ICE1724.conf
index e806b36d92a1..61cac0132f07 100644
--- a/src/conf/cards/ICE1724.conf
+++ b/src/conf/cards/ICE1724.conf
@@ -95,6 +95,7 @@ ICE1724.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/ICH.conf b/src/conf/cards/ICH.conf
index 47ffef96531c..6fc9a5a236c1 100644
--- a/src/conf/cards/ICH.conf
+++ b/src/conf/cards/ICH.conf
@@ -98,6 +98,7 @@ ICH.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/ICH4.conf b/src/conf/cards/ICH4.conf
index 1bf5605bfd7f..64ec883d9c73 100644
--- a/src/conf/cards/ICH4.conf
+++ b/src/conf/cards/ICH4.conf
@@ -98,6 +98,7 @@ ICH4.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/Loopback.conf b/src/conf/cards/Loopback.conf
index 5365fa1bec52..974aa7535340 100644
--- a/src/conf/cards/Loopback.conf
+++ b/src/conf/cards/Loopback.conf
@@ -63,6 +63,7 @@ Loopback.pcm.default {
hint.device 0
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround40.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
diff --git a/src/conf/cards/NFORCE.conf b/src/conf/cards/NFORCE.conf
index 6ebefe3da29e..64d15479291b 100644
--- a/src/conf/cards/NFORCE.conf
+++ b/src/conf/cards/NFORCE.conf
@@ -98,6 +98,7 @@ NFORCE.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/SB-XFi.conf b/src/conf/cards/SB-XFi.conf
index 38d0027fb4f2..eb2218bfdcc7 100644
--- a/src/conf/cards/SB-XFi.conf
+++ b/src/conf/cards/SB-XFi.conf
@@ -53,6 +53,7 @@ SB-XFi.pcm.side.0 {
hint.device 3
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround40.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
diff --git a/src/conf/cards/SI7018.conf b/src/conf/cards/SI7018.conf
index 7417bd5bf2e4..02b8fc877ff3 100644
--- a/src/conf/cards/SI7018.conf
+++ b/src/conf/cards/SI7018.conf
@@ -78,6 +78,7 @@ SI7018.pcm.surround40.0 {
]
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf
index 8a6d9cac6ead..ce3ae019f7f6 100644
--- a/src/conf/cards/USB-Audio.conf
+++ b/src/conf/cards/USB-Audio.conf
@@ -314,6 +314,7 @@ USB-Audio.pcm.surround40_two_stereo_devices {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/VIA8233.conf b/src/conf/cards/VIA8233.conf
index 668bfd9e421b..9ad321f713a9 100644
--- a/src/conf/cards/VIA8233.conf
+++ b/src/conf/cards/VIA8233.conf
@@ -86,6 +86,7 @@ VIA8233.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/VIA8233A.conf b/src/conf/cards/VIA8233A.conf
index 97d2a7daf335..679fccf3d06f 100644
--- a/src/conf/cards/VIA8233A.conf
+++ b/src/conf/cards/VIA8233A.conf
@@ -84,6 +84,7 @@ VIA8233A.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
diff --git a/src/conf/cards/VIA8237.conf b/src/conf/cards/VIA8237.conf
index 404e19075cbd..29d8e00f6601 100644
--- a/src/conf/cards/VIA8237.conf
+++ b/src/conf/cards/VIA8237.conf
@@ -79,6 +79,7 @@ VIA8237.pcm.surround40.0 {
}
}
+<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
--
1.9.0

View File

@ -0,0 +1,150 @@
From 7a6e8ca348c4c2640cbc337914d1376333fdbc17 Mon Sep 17 00:00:00 2001
From: Patrick Welche <prlw1@cam.ac.uk>
Date: Sun, 23 Feb 2014 11:12:48 +0000
Subject: [PATCH] Portability fix: look for sys/endian.h as well as endian.h
- define __BYTE_ORDER and friends.
- adjust asoundlib.h accordingly.
Signed-off-by: Patrick Welche <prlw1@cam.ac.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
configure.in | 33 +++++++++++++++++++++++++++++++--
include/asoundlib-head.h | 13 -------------
include/local.h | 18 +++++++++++++++++-
src/pcm/pcm_file.c | 1 -
4 files changed, 48 insertions(+), 17 deletions(-)
diff --git a/configure.in b/configure.in
index bb56eb653ccc..9463b5ad4766 100644
--- a/configure.in
+++ b/configure.in
@@ -309,8 +309,8 @@ fi
AC_SUBST(ALSA_DEPLIBS)
-dnl Check for wordexp.h
-AC_CHECK_HEADERS([wordexp.h])
+dnl Check for headers
+AC_CHECK_HEADERS([wordexp.h endian.h sys/endian.h])
dnl Check for resmgr support...
AC_MSG_CHECKING(for resmgr support)
@@ -660,6 +660,35 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
dnl Create asoundlib.h dynamically according to configure options
echo "Creating asoundlib.h..."
cp "$srcdir"/include/asoundlib-head.h include/asoundlib.h
+test "$ac_cv_header_endian_h" = "yes" && echo "#include <endian.h>" >> include/asoundlib.h
+if test "$ac_cv_header_sys_endian_h" = "yes"; then
+cat >> include/asoundlib.h <<EOF
+#include <sys/endian.h>
+#ifndef __BYTE_ORDER
+#define __BYTE_ORDER BYTE_ORDER
+#endif
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN LITTLE_ENDIAN
+#endif
+#ifndef __BIG_ENDIAN
+#define __BIG_ENDIAN BIG_ENDIAN
+#endif
+EOF
+fi
+cat >> include/asoundlib.h <<EOF
+
+#ifndef __GNUC__
+#define __inline__ inline
+#endif
+
+#include <alsa/asoundef.h>
+#include <alsa/version.h>
+#include <alsa/global.h>
+#include <alsa/input.h>
+#include <alsa/output.h>
+#include <alsa/error.h>
+#include <alsa/conf.h>
+EOF
test "$build_pcm" = "yes" && echo "#include <alsa/pcm.h>" >> include/asoundlib.h
test "$build_rawmidi" = "yes" && echo "#include <alsa/rawmidi.h>" >> include/asoundlib.h
test "$build_pcm" = "yes" && echo "#include <alsa/timer.h>" >> include/asoundlib.h
diff --git a/include/asoundlib-head.h b/include/asoundlib-head.h
index 71b5c29f61c4..1ec611e56b8e 100644
--- a/include/asoundlib-head.h
+++ b/include/asoundlib-head.h
@@ -35,19 +35,6 @@
#include <string.h>
#include <fcntl.h>
#include <assert.h>
-#include <endian.h>
#include <sys/poll.h>
#include <errno.h>
#include <stdarg.h>
-
-#ifndef __GNUC__
-#define __inline__ inline
-#endif
-
-#include <alsa/asoundef.h>
-#include <alsa/version.h>
-#include <alsa/global.h>
-#include <alsa/input.h>
-#include <alsa/output.h>
-#include <alsa/error.h>
-#include <alsa/conf.h>
diff --git a/include/local.h b/include/local.h
index 9464efa49642..2fe9a273f0b0 100644
--- a/include/local.h
+++ b/include/local.h
@@ -22,13 +22,30 @@
#ifndef __LOCAL_H
#define __LOCAL_H
+#include "config.h"
+
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <assert.h>
+#ifdef HAVE_ENDIAN_H
#include <endian.h>
+#elif defined(HAVE_SYS_ENDIAN_H)
+#include <sys/endian.h>
+#ifndef __BYTE_ORDER
+#define __BYTE_ORDER BYTE_ORDER
+#endif
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN LITTLE_ENDIAN
+#endif
+#ifndef __BIG_ENDIAN
+#define __BIG_ENDIAN BIG_ENDIAN
+#endif
+#else
+#error Header defining endianness not defined
+#endif
#include <stdarg.h>
#include <sys/poll.h>
#include <sys/types.h>
@@ -36,7 +53,6 @@
#include <linux/types.h>
#include <linux/ioctl.h>
-#include "config.h"
#ifdef SUPPORT_RESMGR
#include <resmgr.h>
#endif
diff --git a/src/pcm/pcm_file.c b/src/pcm/pcm_file.c
index 712302598a9f..b1f23304633f 100644
--- a/src/pcm/pcm_file.c
+++ b/src/pcm/pcm_file.c
@@ -26,7 +26,6 @@
*
*/
-#include <endian.h>
#include <byteswap.h>
#include <ctype.h>
#include <string.h>
--
1.9.0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,45 @@
From 2da7b0c2c194a457de9d9a1a9b93c47e2dad1507 Mon Sep 17 00:00:00 2001
From: Maarten Baert <maarten-baert@hotmail.com>
Date: Wed, 26 Feb 2014 14:23:45 +0100
Subject: [PATCH] pcm: Insert linear-to-float conversion when rate or channel
count is incorrect
This fixes a bug where snd_pcm_plug_insert_plugins fails when both
client and slave use format float, but the rate or channel count does
not match. I also removed some redundant code.
Signed-off-by: Maarten Baert <maarten-baert@hotmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/pcm/pcm_plug.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/src/pcm/pcm_plug.c b/src/pcm/pcm_plug.c
index fa84eaacaedc..ede9c1525a74 100644
--- a/src/pcm/pcm_plug.c
+++ b/src/pcm/pcm_plug.c
@@ -522,15 +522,13 @@ static int snd_pcm_plug_change_format(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_p
}
#ifdef BUILD_PCM_PLUGIN_LFLOAT
} else if (snd_pcm_format_float(slv->format)) {
- /* Conversion is done in another plugin */
- if (clt->format == slv->format &&
- clt->rate == slv->rate &&
- clt->channels == slv->channels)
- return 0;
- cfmt = clt->format;
- if (snd_pcm_format_linear(clt->format))
+ if (snd_pcm_format_linear(clt->format)) {
+ cfmt = clt->format;
f = snd_pcm_lfloat_open;
- else
+ } else if (clt->rate != slv->rate || clt->channels != slv->channels) {
+ cfmt = SND_PCM_FORMAT_S16;
+ f = snd_pcm_lfloat_open;
+ } else
return -EINVAL;
#endif
#ifdef BUILD_PCM_NONLINEAR
--
1.9.0

View File

@ -0,0 +1,68 @@
From 8ad8d22216f818872a764ef5dafcaae1adeee211 Mon Sep 17 00:00:00 2001
From: David Henningsson <david.henningsson@canonical.com>
Date: Fri, 28 Feb 2014 08:57:05 +0100
Subject: [PATCH] pcm: route: Allow chmap syntax for slave channels in ttable
Instead of writing e g "0" and "1", one can now write "FL" and "FR" instead.
E g:
ttable.0.FL 1
ttable.1.FR 1
ttable.2.LFE 1
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/pcm/pcm_route.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/pcm/pcm_route.c b/src/pcm/pcm_route.c
index 2beedf68c3e0..56318d47bcbf 100644
--- a/src/pcm/pcm_route.c
+++ b/src/pcm/pcm_route.c
@@ -789,6 +789,24 @@ static void snd_pcm_route_dump(snd_pcm_t *pcm, snd_output_t *out)
snd_pcm_dump(route->plug.gen.slave, out);
}
+static int strtochannel(const char *id, long *channel)
+{
+ int err;
+ int ch;
+ err = safe_strtol(id, channel);
+ if (err >= 0)
+ return err;
+
+ ch = (int) snd_pcm_chmap_from_string(id);
+ if (ch == -1)
+ return -EINVAL;
+
+ /* For now, assume standard channel mapping */
+ *channel = ch - SND_CHMAP_FL;
+ return 0;
+}
+
+
static const snd_pcm_ops_t snd_pcm_route_ops = {
.close = snd_pcm_route_close,
.info = snd_pcm_generic_info,
@@ -983,7 +1001,7 @@ int snd_pcm_route_determine_ttable(snd_config_t *tt,
const char *id;
if (snd_config_get_id(jnode, &id) < 0)
continue;
- err = safe_strtol(id, &schannel);
+ err = strtochannel(id, &schannel);
if (err < 0) {
SNDERR("Invalid slave channel: %s", id);
return -EINVAL;
@@ -1046,7 +1064,7 @@ int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *tt
const char *id;
if (snd_config_get_id(jnode, &id) < 0)
continue;
- err = safe_strtol(id, &schannel);
+ err = strtochannel(id, &schannel);
if (err < 0 ||
schannel < 0 || (unsigned int) schannel > tt_ssize ||
(schannels > 0 && schannel >= schannels)) {
--
1.9.0

View File

@ -0,0 +1,475 @@
From 5c4cd46810cef8850b037fca9e38ffd43b0bff22 Mon Sep 17 00:00:00 2001
From: David Henningsson <david.henningsson@canonical.com>
Date: Fri, 28 Feb 2014 08:57:06 +0100
Subject: [PATCH] pcm: route: Select slave chmap based on ttable information
It means we need to initialize this order:
1) Read the ttable to figure out which channels are present
2) Open slave pcm and find a matching chmap
3) Determine size of ttable (this can now depend on the chmap)
4) Read ttable coefficients
5) At prepare time, select the matching chmap
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/pcm/pcm_route.c | 319 +++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 276 insertions(+), 43 deletions(-)
diff --git a/src/pcm/pcm_route.c b/src/pcm/pcm_route.c
index 56318d47bcbf..ab17fa78be2c 100644
--- a/src/pcm/pcm_route.c
+++ b/src/pcm/pcm_route.c
@@ -103,6 +103,7 @@ typedef struct {
snd_pcm_format_t sformat;
int schannels;
snd_pcm_route_params_t params;
+ snd_pcm_chmap_t *chmap;
} snd_pcm_route_t;
#endif /* DOC_HIDDEN */
@@ -518,6 +519,7 @@ static int snd_pcm_route_close(snd_pcm_t *pcm)
}
free(params->dsts);
}
+ free(route->chmap);
return snd_pcm_generic_close(pcm);
}
@@ -789,21 +791,187 @@ static void snd_pcm_route_dump(snd_pcm_t *pcm, snd_output_t *out)
snd_pcm_dump(route->plug.gen.slave, out);
}
-static int strtochannel(const char *id, long *channel)
+/*
+ * Converts a string to an array of channel indices:
+ * - Given a number, the result is an array with one element,
+ * containing that number
+ * - Given a channel name (e g "FL") and a chmap,
+ * it will look this up in the chmap and return all matches
+ * - Given a channel name and no chmap, the result is an array with one element,
+ containing alsa standard channel map. Note that this might be a negative
+ number in case of "UNKNOWN", "NA" or "MONO".
+ * Return value is number of matches written.
+ */
+static int strtochannel(const char *id, snd_pcm_chmap_t *chmap,
+ long *channel, int channel_size)
{
- int err;
int ch;
- err = safe_strtol(id, channel);
- if (err >= 0)
- return err;
+ if (safe_strtol(id, channel) >= 0)
+ return 1;
ch = (int) snd_pcm_chmap_from_string(id);
if (ch == -1)
return -EINVAL;
- /* For now, assume standard channel mapping */
- *channel = ch - SND_CHMAP_FL;
+ if (chmap) {
+ int i, r = 0;
+ /* Start with highest channel to simplify implementation of
+ determine ttable size */
+ for (i = chmap->channels - 1; i >= 0; i--) {
+ if ((int) chmap->pos[i] != ch)
+ continue;
+ if (r >= channel_size)
+ continue;
+ channel[r++] = i;
+ }
+ return r;
+ }
+ else {
+ /* Assume ALSA standard channel mapping */
+ *channel = ch - SND_CHMAP_FL;
+ return 1;
+ }
+}
+
+#define MAX_CHMAP_CHANNELS 256
+
+static int determine_chmap(snd_config_t *tt, snd_pcm_chmap_t **tt_chmap)
+{
+ snd_config_iterator_t i, inext;
+ snd_pcm_chmap_t *chmap;
+
+ assert(tt && tt_chmap);
+ chmap = malloc(sizeof(snd_pcm_chmap_t) +
+ MAX_CHMAP_CHANNELS * sizeof(unsigned int));
+
+ chmap->channels = 0;
+ snd_config_for_each(i, inext, tt) {
+ const char *id;
+ snd_config_iterator_t j, jnext;
+ snd_config_t *in = snd_config_iterator_entry(i);
+
+ if (!snd_config_get_id(in, &id) < 0)
+ continue;
+ if (snd_config_get_type(in) != SND_CONFIG_TYPE_COMPOUND)
+ goto err;
+ snd_config_for_each(j, jnext, in) {
+ int ch, k, found;
+ long schannel;
+ snd_config_t *jnode = snd_config_iterator_entry(j);
+ if (snd_config_get_id(jnode, &id) < 0)
+ continue;
+ if (safe_strtol(id, &schannel) >= 0)
+ continue;
+ ch = (int) snd_pcm_chmap_from_string(id);
+ if (ch == -1)
+ goto err;
+
+ found = 0;
+ for (k = 0; k < (int) chmap->channels; k++)
+ if (ch == (int) chmap->pos[k]) {
+ found = 1;
+ break;
+ }
+ if (found)
+ continue;
+
+ if (chmap->channels >= MAX_CHMAP_CHANNELS) {
+ SNDERR("Too many channels in ttable chmap");
+ goto err;
+ }
+ chmap->pos[chmap->channels++] = ch;
+ }
+ }
+
+
+ *tt_chmap = chmap;
return 0;
+
+err:
+ *tt_chmap = NULL;
+ free(chmap);
+ return -EINVAL;
+}
+
+static int find_matching_chmap(snd_pcm_t *spcm, snd_pcm_chmap_t *tt_chmap,
+ snd_pcm_chmap_t **found_chmap, int *schannels)
+{
+ snd_pcm_chmap_query_t** chmaps = snd_pcm_query_chmaps(spcm);
+ int i;
+
+ *found_chmap = NULL;
+
+ if (chmaps == NULL)
+ return 0; /* chmap API not supported for this slave */
+
+ for (i = 0; chmaps[i]; i++) {
+ unsigned int j, k;
+ int match = 1;
+ snd_pcm_chmap_t *c = &chmaps[i]->map;
+ if (*schannels >= 0 && (int) c->channels != *schannels)
+ continue;
+
+ for (j = 0; j < tt_chmap->channels; j++) {
+ int found = 0;
+ unsigned int ch = tt_chmap->pos[j];
+ for (k = 0; k < c->channels; k++)
+ if (c->pos[k] == ch) {
+ found = 1;
+ break;
+ }
+ if (!found) {
+ match = 0;
+ break;
+ }
+ }
+
+ if (match) {
+ int size = sizeof(snd_pcm_chmap_t) + c->channels * sizeof(unsigned int);
+ *found_chmap = malloc(size);
+ if (!*found_chmap) {
+ snd_pcm_free_chmaps(chmaps);
+ return -ENOMEM;
+ }
+ memcpy(*found_chmap, c, size);
+ *schannels = c->channels;
+ break;
+ }
+ }
+
+ snd_pcm_free_chmaps(chmaps);
+
+ if (*found_chmap == NULL) {
+ SNDERR("Found no matching channel map");
+ return -EINVAL;
+ }
+ return 0;
+}
+
+static int route_chmap_init(snd_pcm_t *pcm)
+{
+ int set_map = 0;
+ snd_pcm_chmap_t *current;
+ snd_pcm_route_t *route = pcm->private_data;
+ if (!route->chmap)
+ return 0;
+ if (snd_pcm_state(pcm) != SND_PCM_STATE_PREPARED)
+ return 0;
+
+ /* Check if we really need to set the chmap or not.
+ This is important in case set_chmap is not implemented. */
+ current = snd_pcm_get_chmap(route->plug.gen.slave);
+ if (!current)
+ return -ENOSYS;
+ if (current->channels != route->chmap->channels)
+ set_map = 1;
+ else
+ set_map = memcmp(current->pos, route->chmap->pos,
+ current->channels);
+ free(current);
+ if (!set_map)
+ return 0;
+
+ return snd_pcm_set_chmap(route->plug.gen.slave, route->chmap);
}
@@ -939,6 +1107,7 @@ int snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
route->plug.undo_write = snd_pcm_plugin_undo_write_generic;
route->plug.gen.slave = slave;
route->plug.gen.close_slave = close_slave;
+ route->plug.init = route_chmap_init;
err = snd_pcm_new(&pcm, SND_PCM_TYPE_ROUTE, name, slave->stream, slave->mode);
if (err < 0) {
@@ -963,16 +1132,10 @@ int snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
return 0;
}
-/**
- * \brief Determine route matrix sizes
- * \param tt Configuration root describing route matrix
- * \param tt_csize Returned client size in elements
- * \param tt_ssize Returned slave size in elements
- * \retval zero on success otherwise a negative error code
- */
-int snd_pcm_route_determine_ttable(snd_config_t *tt,
- unsigned int *tt_csize,
- unsigned int *tt_ssize)
+static int _snd_pcm_route_determine_ttable(snd_config_t *tt,
+ unsigned int *tt_csize,
+ unsigned int *tt_ssize,
+ snd_pcm_chmap_t *chmap)
{
snd_config_iterator_t i, inext;
long csize = 0, ssize = 0;
@@ -1001,7 +1164,7 @@ int snd_pcm_route_determine_ttable(snd_config_t *tt,
const char *id;
if (snd_config_get_id(jnode, &id) < 0)
continue;
- err = strtochannel(id, &schannel);
+ err = strtochannel(id, chmap, &schannel, 1);
if (err < 0) {
SNDERR("Invalid slave channel: %s", id);
return -EINVAL;
@@ -1020,6 +1183,20 @@ int snd_pcm_route_determine_ttable(snd_config_t *tt,
}
/**
+ * \brief Determine route matrix sizes
+ * \param tt Configuration root describing route matrix
+ * \param tt_csize Returned client size in elements
+ * \param tt_ssize Returned slave size in elements
+ * \retval zero on success otherwise a negative error code
+ */
+int snd_pcm_route_determine_ttable(snd_config_t *tt,
+ unsigned int *tt_csize,
+ unsigned int *tt_ssize)
+{
+ return _snd_pcm_route_determine_ttable(tt, tt_csize, tt_ssize, NULL);
+}
+
+/**
* \brief Load route matrix
* \param tt Configuration root describing route matrix
* \param ttable Returned route matrix
@@ -1030,10 +1207,10 @@ int snd_pcm_route_determine_ttable(snd_config_t *tt,
* \param schannels Slave channels
* \retval zero on success otherwise a negative error code
*/
-int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *ttable,
- unsigned int tt_csize, unsigned int tt_ssize,
- unsigned int *tt_cused, unsigned int *tt_sused,
- int schannels)
+static int _snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *ttable,
+ unsigned int tt_csize, unsigned int tt_ssize,
+ unsigned int *tt_cused, unsigned int *tt_sused,
+ int schannels, snd_pcm_chmap_t *chmap)
{
int cused = -1;
int sused = -1;
@@ -1060,17 +1237,18 @@ int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *tt
snd_config_for_each(j, jnext, in) {
snd_config_t *jnode = snd_config_iterator_entry(j);
double value;
- long schannel;
+ int ss;
+ long *scha = alloca(tt_ssize * sizeof(long));
const char *id;
if (snd_config_get_id(jnode, &id) < 0)
continue;
- err = strtochannel(id, &schannel);
- if (err < 0 ||
- schannel < 0 || (unsigned int) schannel > tt_ssize ||
- (schannels > 0 && schannel >= schannels)) {
+
+ ss = strtochannel(id, chmap, scha, tt_ssize);
+ if (ss < 0) {
SNDERR("Invalid slave channel: %s", id);
return -EINVAL;
}
+
err = snd_config_get_real(jnode, &value);
if (err < 0) {
long v;
@@ -1081,9 +1259,18 @@ int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *tt
}
value = v;
}
- ttable[cchannel * tt_ssize + schannel] = value;
- if (schannel > sused)
- sused = schannel;
+
+ for (k = 0; (int) k < ss; k++) {
+ long schannel = scha[k];
+ if (schannel < 0 || (unsigned int) schannel > tt_ssize ||
+ (schannels > 0 && schannel >= schannels)) {
+ SNDERR("Invalid slave channel: %s", id);
+ return -EINVAL;
+ }
+ ttable[cchannel * tt_ssize + schannel] = value;
+ if (schannel > sused)
+ sused = schannel;
+ }
}
if (cchannel > cused)
cused = cchannel;
@@ -1093,6 +1280,26 @@ int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *tt
return 0;
}
+/**
+ * \brief Load route matrix
+ * \param tt Configuration root describing route matrix
+ * \param ttable Returned route matrix
+ * \param tt_csize Client size in elements
+ * \param tt_ssize Slave size in elements
+ * \param tt_cused Used client elements
+ * \param tt_sused Used slave elements
+ * \param schannels Slave channels
+ * \retval zero on success otherwise a negative error code
+ */
+int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *ttable,
+ unsigned int tt_csize, unsigned int tt_ssize,
+ unsigned int *tt_cused, unsigned int *tt_sused,
+ int schannels)
+{
+ return _snd_pcm_route_load_ttable(tt, ttable, tt_csize, tt_ssize,
+ tt_cused, tt_sused, schannels, NULL);
+}
+
/*! \page pcm_plugins
\section pcm_plugins_route Plugin: Route & Volume
@@ -1100,6 +1307,9 @@ int snd_pcm_route_load_ttable(snd_config_t *tt, snd_pcm_route_ttable_entry_t *tt
This plugin converts channels and applies volume during the conversion.
The format and rate must match for both of them.
+SCHANNEL can be a channel name instead of a number (e g FL, LFE).
+If so, a matching channel map will be selected for the slave.
+
\code
pcm.name {
type route # Route & Volume conversion PCM
@@ -1150,6 +1360,7 @@ int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
int err;
snd_pcm_t *spcm;
snd_config_t *slave = NULL, *sconf;
+ snd_pcm_chmap_t *tt_chmap, *chmap;
snd_pcm_format_t sformat = SND_PCM_FORMAT_UNKNOWN;
int schannels = -1;
snd_config_t *tt = NULL;
@@ -1198,37 +1409,59 @@ int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
return -EINVAL;
}
- err = snd_pcm_route_determine_ttable(tt, &csize, &ssize);
+ err = determine_chmap(tt, &tt_chmap);
if (err < 0) {
- snd_config_delete(sconf);
+ free(ttable);
return err;
}
- ttable = malloc(csize * ssize * sizeof(snd_pcm_route_ttable_entry_t));
- if (ttable == NULL) {
- snd_config_delete(sconf);
- return -ENOMEM;
- }
- err = snd_pcm_route_load_ttable(tt, ttable, csize, ssize,
- &cused, &sused, schannels);
+
+ err = snd_pcm_open_slave(&spcm, root, sconf, stream, mode, conf);
+ snd_config_delete(sconf);
if (err < 0) {
+ free(tt_chmap);
free(ttable);
- snd_config_delete(sconf);
return err;
}
- err = snd_pcm_open_slave(&spcm, root, sconf, stream, mode, conf);
- snd_config_delete(sconf);
+ if (tt_chmap) {
+ err = find_matching_chmap(spcm, tt_chmap, &chmap, &schannels);
+ free(tt_chmap);
+ if (err < 0)
+ return err;
+ }
+
+ err = _snd_pcm_route_determine_ttable(tt, &csize, &ssize, chmap);
+ if (err < 0) {
+ free(chmap);
+ snd_pcm_close(spcm);
+ return err;
+ }
+ ttable = malloc(csize * ssize * sizeof(snd_pcm_route_ttable_entry_t));
+ if (ttable == NULL) {
+ free(chmap);
+ snd_pcm_close(spcm);
+ return -ENOMEM;
+ }
+ err = _snd_pcm_route_load_ttable(tt, ttable, csize, ssize,
+ &cused, &sused, schannels, chmap);
if (err < 0) {
+ free(chmap);
free(ttable);
+ snd_pcm_close(spcm);
return err;
}
+
err = snd_pcm_route_open(pcmp, name, sformat, schannels,
ttable, ssize,
cused, sused,
spcm, 1);
free(ttable);
- if (err < 0)
+ if (err < 0) {
+ free(chmap);
snd_pcm_close(spcm);
+ }
+ ((snd_pcm_route_t*) (*pcmp)->private_data)->chmap = chmap;
+
return err;
}
#ifndef DOC_HIDDEN
--
1.9.0

View File

@ -0,0 +1,42 @@
From 48f1b308cc66152eb6db66742dd0d08d888cda8d Mon Sep 17 00:00:00 2001
From: David Henningsson <david.henningsson@canonical.com>
Date: Fri, 28 Feb 2014 08:57:07 +0100
Subject: [PATCH] conf: Allow 2.1 surround to use different number of channels
This way, cards that support LFE on four channels (e g laptop with
internal subwoofer) can do that, and other cards on a six channel setup
can use that as well.
Well, note that there is still a reference to "pcm.surround51" left here.
In practice, for HDA Intel sound cards this does not matter as both
surround51 and surround40 reference the same definition.
(And that's the only card I currently know of that actually does
surround2.1 over four channels.)
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/conf/pcm/surround21.conf | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/src/conf/pcm/surround21.conf b/src/conf/pcm/surround21.conf
index be29020f24c7..7f4676b3f714 100644
--- a/src/conf/pcm/surround21.conf
+++ b/src/conf/pcm/surround21.conf
@@ -51,10 +51,9 @@ pcm.!surround21 {
]
}
}
- slave.channels 6
- ttable.0.0 1
- ttable.1.1 1
- ttable.2.5 1
+ ttable.0.FL 1
+ ttable.1.FR 1
+ ttable.2.LFE 1
hint {
description "2.1 Surround output to Front and Subwoofer speakers"
device $DEV
--
1.9.0

View File

@ -0,0 +1,31 @@
From 688004a6acf7d1d568a660546816a092b6cc32ed Mon Sep 17 00:00:00 2001
From: "MONTANARO Luciano (MM)" <luciano.montanaro@magnetimarelli.com>
Date: Tue, 4 Mar 2014 12:51:36 +0100
Subject: [PATCH] pcm: Wrap hw_ptr to boundary in pcm_ioplug
The function snd_pcm_ioplug_hw_ptr_update() always increased the hw_ptr
by delta, without wrapping it to the boundary. This would lead to
problems when after many hours, the hw_ptr would overflow.
Signed-off-by: Luciano Montanaro <luciano.montanaro@magnetimarelli.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/pcm/pcm_ioplug.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c
index a90c844598bd..c1c3a9835d47 100644
--- a/src/pcm/pcm_ioplug.c
+++ b/src/pcm/pcm_ioplug.c
@@ -60,7 +60,7 @@ static void snd_pcm_ioplug_hw_ptr_update(snd_pcm_t *pcm)
delta = hw - io->last_hw;
else
delta = pcm->buffer_size + hw - io->last_hw;
- io->data->hw_ptr += delta;
+ snd_pcm_mmap_hw_forward(io->data->pcm, delta);
io->last_hw = hw;
} else
io->data->state = SNDRV_PCM_STATE_XRUN;
--
1.9.0

View File

@ -0,0 +1,25 @@
From cbcc78031b676413265719113c7109481fa0242d Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Tue, 11 Mar 2014 10:59:21 +0100
Subject: [PATCH] src/conf/cards: Add missing entry for Loopback.conf
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/conf/cards/Makefile.am | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/conf/cards/Makefile.am b/src/conf/cards/Makefile.am
index ee7991be28e8..008d399fdc34 100644
--- a/src/conf/cards/Makefile.am
+++ b/src/conf/cards/Makefile.am
@@ -35,6 +35,7 @@ cfg_files = aliases.conf \
ICH.conf \
ICH4.conf \
ICH-MODEM.conf \
+ Loopback.conf \
Maestro3.conf \
NFORCE.conf \
PC-Speaker.conf \
--
1.9.0

74
Loopback.conf Normal file
View File

@ -0,0 +1,74 @@
#
# Configuration for the Intel HD audio (ICH6/ICH7)
#
<confdir:pcm/front.conf>
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
}
<confdir:pcm/surround40.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>
<confdir:pcm/surround71.conf>
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

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
SCRIPT_VERSION=0.4.61 SCRIPT_VERSION=0.4.63
CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog" CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog"
################################################################################# #################################################################################
@ -227,7 +227,7 @@ withsysfs() {
echo "!!-----------" >> $FILE echo "!!-----------" >> $FILE
echo "" >> $FILE echo "" >> $FILE
fi fi
for f in init_pin_configs driver_pin_configs user_pin_configs init_verbs; do for f in init_pin_configs driver_pin_configs user_pin_configs init_verbs hints; do
echo "$i/$f:" >> $FILE echo "$i/$f:" >> $FILE
cat $i/$f >> $FILE cat $i/$f >> $FILE
echo >> $FILE echo >> $FILE
@ -246,7 +246,7 @@ withdmesg() {
echo "!!ALSA/HDA dmesg" >> $FILE echo "!!ALSA/HDA dmesg" >> $FILE
echo "!!--------------" >> $FILE echo "!!--------------" >> $FILE
echo "" >> $FILE echo "" >> $FILE
dmesg | grep -C1 -E 'ALSA|HDA|HDMI|sound|hda.codec|hda.intel' >> $FILE dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel' >> $FILE
echo "" >> $FILE echo "" >> $FILE
echo "" >> $FILE echo "" >> $FILE
} }
@ -370,7 +370,7 @@ information about your ALSA installation and sound related hardware.
See '$0 --help' for command line options. See '$0 --help' for command line options.
" "
if [[ -n "$DIALOG" ]]; then if [ -n "$DIALOG" ]; then
dialog --backtitle "$BGTITLE" \ dialog --backtitle "$BGTITLE" \
--title "ALSA-Info script v $SCRIPT_VERSION" \ --title "ALSA-Info script v $SCRIPT_VERSION" \
--msgbox "$greeting_message" 20 80 --msgbox "$greeting_message" 20 80
@ -392,10 +392,11 @@ trap cleanup 0
if [ "$PROCEED" = "yes" ]; then if [ "$PROCEED" = "yes" ]; then
if [[ -z "$LSPCI" ]] if [ -z "$LSPCI" ]; then
then if [ -d /sys/bus/pci ]; then
echo "This script requires lspci. Please install it, and re-run this script." echo "This script requires lspci. Please install it, and re-run this script."
exit 0 exit 0
fi
fi fi
#Fetch the info and store in temp files/variables #Fetch the info and store in temp files/variables
@ -404,12 +405,10 @@ KERNEL_VERSION=`uname -r`
KERNEL_PROCESSOR=`uname -p` KERNEL_PROCESSOR=`uname -p`
KERNEL_MACHINE=`uname -m` KERNEL_MACHINE=`uname -m`
KERNEL_OS=`uname -o` KERNEL_OS=`uname -o`
[[ `uname -v |grep SMP` ]] && KERNEL_SMP="Yes" || KERNEL_SMP="No" [[ `uname -v | grep SMP` ]] && KERNEL_SMP="Yes" || KERNEL_SMP="No"
ALSA_DRIVER_VERSION=`cat /proc/asound/version |head -n1|awk {'print $7'} |sed 's/\.$//'` ALSA_DRIVER_VERSION=`cat /proc/asound/version |head -n1|awk {'print $7'} |sed 's/\.$//'`
get_alsa_library_version get_alsa_library_version
ALSA_UTILS_VERSION=`amixer -v |awk {'print $3'}` ALSA_UTILS_VERSION=`amixer -v |awk {'print $3'}`
VENDOR_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $3}'|awk {'print substr($0, 2);}' >$TEMPDIR/vendor_id.tmp`
DEVICE_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $4}'|awk {'print $1'} >$TEMPDIR/device_id.tmp`
LAST_CARD=$((`grep "]: " /proc/asound/cards | wc -l` - 1 )) LAST_CARD=$((`grep "]: " /proc/asound/cards | wc -l` - 1 ))
ESDINST=$(which esd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) ESDINST=$(which esd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
@ -435,7 +434,9 @@ fi
cat /proc/asound/modules 2>/dev/null|awk {'print $2'}>$TEMPDIR/alsamodules.tmp cat /proc/asound/modules 2>/dev/null|awk {'print $2'}>$TEMPDIR/alsamodules.tmp
cat /proc/asound/cards >$TEMPDIR/alsacards.tmp cat /proc/asound/cards >$TEMPDIR/alsacards.tmp
if [[ ! -z "$LSPCI" ]]; then
lspci |grep -i "multi\|audio">$TEMPDIR/lspci.tmp lspci |grep -i "multi\|audio">$TEMPDIR/lspci.tmp
fi
#Check for HDA-Intel cards codec#* #Check for HDA-Intel cards codec#*
cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null
@ -548,6 +549,8 @@ echo "" >> $FILE
cat $TEMPDIR/alsacards.tmp >> $FILE cat $TEMPDIR/alsacards.tmp >> $FILE
echo "" >> $FILE echo "" >> $FILE
echo "" >> $FILE echo "" >> $FILE
if [[ ! -z "$LSPCI" ]]; then
echo "!!PCI Soundcards installed in the system" >> $FILE echo "!!PCI Soundcards installed in the system" >> $FILE
echo "!!--------------------------------------" >> $FILE echo "!!--------------------------------------" >> $FILE
echo "" >> $FILE echo "" >> $FILE
@ -560,6 +563,7 @@ echo "" >> $FILE
lspci -vvn |grep -A1 040[1-3] >> $FILE lspci -vvn |grep -A1 040[1-3] >> $FILE
echo "" >> $FILE echo "" >> $FILE
echo "" >> $FILE echo "" >> $FILE
fi
if [ "$SNDOPTIONS" ] if [ "$SNDOPTIONS" ]
then then
@ -587,8 +591,7 @@ done
echo "" >> $FILE echo "" >> $FILE
fi fi
if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ] if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ]; then
then
echo "!!HDA-Intel Codec information" >> $FILE echo "!!HDA-Intel Codec information" >> $FILE
echo "!!---------------------------" >> $FILE echo "!!---------------------------" >> $FILE
echo "--startcollapse--" >> $FILE echo "--startcollapse--" >> $FILE
@ -599,8 +602,7 @@ then
echo "" >> $FILE echo "" >> $FILE
fi fi
if [ -s "$TEMPDIR/alsa-ac97.tmp" ] if [ -s "$TEMPDIR/alsa-ac97.tmp" ]; then
then
echo "!!AC97 Codec information" >> $FILE echo "!!AC97 Codec information" >> $FILE
echo "!!----------------------" >> $FILE echo "!!----------------------" >> $FILE
echo "--startcollapse--" >> $FILE echo "--startcollapse--" >> $FILE
@ -613,8 +615,7 @@ then
echo "" >> $FILE echo "" >> $FILE
fi fi
if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ] if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]; then
then
echo "!!USB Mixer information" >> $FILE echo "!!USB Mixer information" >> $FILE
echo "!!---------------------" >> $FILE echo "!!---------------------" >> $FILE
echo "--startcollapse--" >> $FILE echo "--startcollapse--" >> $FILE
@ -626,8 +627,7 @@ then
fi fi
#If no command line options are specified, then run as though --with-all was specified #If no command line options are specified, then run as though --with-all was specified
if [[ -z "$1" ]] if [ -z "$1" ]; then
then
update update
withall withall
pbcheck pbcheck
@ -636,8 +636,7 @@ fi
fi # proceed fi # proceed
#loop through command line arguments, until none are left. #loop through command line arguments, until none are left.
if [[ -n "$1" ]] if [ -n "$1" ]; then
then
until [ -z "$1" ] until [ -z "$1" ]
do do
case "$1" in case "$1" in
@ -767,7 +766,7 @@ if [ "$PROCEED" = "no" ]; then
fi fi
if [ "$UPLOAD" = "ask" ]; then if [ "$UPLOAD" = "ask" ]; then
if [[ -n "$DIALOG" ]]; then if [ -n "$DIALOG" ]; then
dialog --backtitle "$BGTITLE" --title "Information collected" --yes-label " UPLOAD / SHARE " --no-label " SAVE LOCALLY " --defaultno --yesno "\n\nAutomatically upload ALSA information to $WWWSERVICE?" 10 80 dialog --backtitle "$BGTITLE" --title "Information collected" --yes-label " UPLOAD / SHARE " --no-label " SAVE LOCALLY " --defaultno --yesno "\n\nAutomatically upload ALSA information to $WWWSERVICE?" 10 80
DIALOG_EXIT_CODE=$? DIALOG_EXIT_CODE=$?
if [ $DIALOG_EXIT_CODE != 0 ]; then if [ $DIALOG_EXIT_CODE != 0 ]; then
@ -882,27 +881,26 @@ echo ""
fi #dialog fi #dialog
#See if tput is available, and use it if it is. #See if tput is available, and use it if it is.
if [[ -n "$TPUT" ]] if [ -n "$TPUT" ]; then
then
if [[ -z $PASTEBIN ]]; then if [[ -z $PASTEBIN ]]; then
FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2 ; tput sgr0` FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2 ; tput sgr0`
else else
FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p';tput sgr0` FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p';tput sgr0`
fi fi
else else
if [[ -z $PASTEBIN ]]; then if [[ -z $PASTEBIN ]]; then
FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2` FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2`
else else
FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p'` FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p'`
fi fi
fi fi
#Output the URL of the uploaded file. # Output the URL of the uploaded file.
echo "Your ALSA information is located at $FINAL_URL" echo "Your ALSA information is located at $FINAL_URL"
echo "Please inform the person helping you." echo "Please inform the person helping you."
echo "" echo ""
#We couldnt find a suitable wget, so tell the user to upload manually. # We couldnt find a suitable wget, so tell the user to upload manually.
else else
mv -f $FILE $NFILE || exit 1 mv -f $FILE $NFILE || exit 1
KEEP_OUTPUT="yes" KEEP_OUTPUT="yes"
@ -935,5 +933,3 @@ else
fi fi
fi fi
fi fi

View File

@ -1,3 +1,30 @@
-------------------------------------------------------------------
Tue Mar 11 10:47:01 CET 2014 - tiwai@suse.de
- Update alsa-info.sh to match dmesg with snd_
- Run spec-cleaner
- Add missing Loopback.conf manually
- Upstream fixes: minor clean ups, 2.1 PCM channel config support,
portability improvements, PCM float format conversion fix,
fix for ioplug 32bit hwptr wrap, etc.
0020-minor-malloc-changes.patch
0021-alsa-lib-minor-typo-in-pcm-doc.patch
0022-control_hw-fix-potential-memory-leak.patch
0023-pcm-initialize-pcm_dmix-monotonic-field.patch
0024-pcm-initialize-monotonic-field-for-dshare-and-dsnoop.patch
0025-pcm-use-CLOCK_REALTIME-for-non-monotonic-ts.patch
0026-alsa-lib-heavy-pcm-atomics-cleanup.patch
0027-conf-Add-basic-infrastructure-for-2.1-surround-sound.patch
0028-conf-Add-surround-2.1-support-to-all-cards.patch
0029-Portability-fix-look-for-sys-endian.h-as-well-as-end.patch
0030-autotools-update-style.patch
0031-pcm-Insert-linear-to-float-conversion-when-rate-or-c.patch
0032-pcm-route-Allow-chmap-syntax-for-slave-channels-in-t.patch
0033-pcm-route-Select-slave-chmap-based-on-ttable-informa.patch
0034-conf-Allow-2.1-surround-to-use-different-number-of-c.patch
0035-pcm-Wrap-hw_ptr-to-boundary-in-pcm_ioplug.patch
0036-src-conf-cards-Add-missing-entry-for-Loopback.conf.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Mon Feb 24 16:37:33 CET 2014 - tiwai@suse.de Mon Feb 24 16:37:33 CET 2014 - tiwai@suse.de

202
alsa.spec
View File

@ -16,29 +16,20 @@
# #
Name: alsa
BuildRequires: doxygen
BuildRequires: libtool
%if %suse_version > 1200
BuildRequires: libudev-devel
%else
BuildRequires: udev
%endif
BuildRequires: pkg-config
%define package_version 1.0.27.2 %define package_version 1.0.27.2
Requires: alsa-utils %if 0%{?suse_version} > 1200
Recommends: alsa-plugins alsa-oss %define _udevdir %(pkg-config --variable=udevdir udev)
PreReq: %insserv_prereq %fillup_prereq %else
# bug437293 %define _udevdir /lib/udev
%ifarch ppc64
Obsoletes: alsa-64bit
%endif %endif
Name: alsa
Version: 1.0.27.2
Release: 0
# #
Summary: Advanced Linux Sound Architecture Summary: Advanced Linux Sound Architecture
License: LGPL-2.1+ License: LGPL-2.1+
Group: System/Libraries Group: System/Libraries
Version: 1.0.27.2 Url: http://www.alsa-project.org/
Release: 0
Source: ftp://ftp.alsa-project.org/pub/lib/alsa-lib-%{package_version}.tar.bz2 Source: ftp://ftp.alsa-project.org/pub/lib/alsa-lib-%{package_version}.tar.bz2
Source2: baselibs.conf Source2: baselibs.conf
Source8: 40-alsa.rules Source8: 40-alsa.rules
@ -58,6 +49,7 @@ Source33: alsa-info.sh
Source34: alsa-init.sh Source34: alsa-init.sh
Source40: 50-alsa.conf Source40: 50-alsa.conf
Source41: install-snd-module Source41: install-snd-module
Source50: Loopback.conf
# Patch: alsa-lib-git-fixes.diff # Patch: alsa-lib-git-fixes.diff
# upstream fixes # upstream fixes
Patch1: 0001-local.h-use-__kernel_off_t-from-linux-types.h.patch Patch1: 0001-local.h-use-__kernel_off_t-from-linux-types.h.patch
@ -79,14 +71,43 @@ Patch16: 0016-pcm_file-fixed-memory-leak.patch
Patch17: 0017-pcm_file-don-t-touch-infile-on-playback-and-output-f.patch Patch17: 0017-pcm_file-don-t-touch-infile-on-playback-and-output-f.patch
Patch18: 0018-pcm_file-document-new-argument-to-snd_pcm_file_open.patch Patch18: 0018-pcm_file-document-new-argument-to-snd_pcm_file_open.patch
Patch19: 0019-dmix-Don-t-use-assert-and-abort.patch Patch19: 0019-dmix-Don-t-use-assert-and-abort.patch
Patch20: 0020-minor-malloc-changes.patch
Patch21: 0021-alsa-lib-minor-typo-in-pcm-doc.patch
Patch22: 0022-control_hw-fix-potential-memory-leak.patch
Patch23: 0023-pcm-initialize-pcm_dmix-monotonic-field.patch
Patch24: 0024-pcm-initialize-monotonic-field-for-dshare-and-dsnoop.patch
Patch25: 0025-pcm-use-CLOCK_REALTIME-for-non-monotonic-ts.patch
Patch26: 0026-alsa-lib-heavy-pcm-atomics-cleanup.patch
Patch27: 0027-conf-Add-basic-infrastructure-for-2.1-surround-sound.patch
Patch28: 0028-conf-Add-surround-2.1-support-to-all-cards.patch
Patch29: 0029-Portability-fix-look-for-sys-endian.h-as-well-as-end.patch
Patch30: 0030-autotools-update-style.patch
Patch31: 0031-pcm-Insert-linear-to-float-conversion-when-rate-or-c.patch
Patch32: 0032-pcm-route-Allow-chmap-syntax-for-slave-channels-in-t.patch
Patch33: 0033-pcm-route-Select-slave-chmap-based-on-ttable-informa.patch
Patch34: 0034-conf-Allow-2.1-surround-to-use-different-number-of-c.patch
Patch35: 0035-pcm-Wrap-hw_ptr-to-boundary-in-pcm_ioplug.patch
Patch36: 0036-src-conf-cards-Add-missing-entry-for-Loopback.conf.patch
# rest suse patches # rest suse patches
Patch99: alsa-lib-doxygen-avoid-crash-for-11.3.diff Patch99: alsa-lib-doxygen-avoid-crash-for-11.3.diff
Url: http://www.alsa-project.org/ BuildRequires: doxygen
BuildRequires: libtool
BuildRequires: pkg-config
Requires: alsa-utils
# FIXME: use proper Requires(pre/post/preun/...)
PreReq: %fillup_prereq
PreReq: %insserv_prereq
Recommends: alsa-oss
Recommends: alsa-plugins
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
%if %suse_version > 1200 %if 0%{?suse_version} > 1200
%define _udevdir %(pkg-config --variable=udevdir udev) BuildRequires: libudev-devel
%else %else
%define _udevdir /lib/udev BuildRequires: udev
%endif
# bug437293
%ifarch ppc64
Obsoletes: alsa-64bit
%endif %endif
%description %description
@ -114,7 +135,7 @@ to develop applications that require these.
Summary: Additional Package Documentation Summary: Additional Package Documentation
License: GPL-2.0+ License: GPL-2.0+
Group: Documentation/Other Group: Documentation/Other
%if %suse_version > 1110 %if 0%{?suse_version} > 1110
BuildArch: noarch BuildArch: noarch
%endif %endif
@ -134,6 +155,7 @@ Architecture.
%prep %prep
%setup -q -n alsa-lib-%{package_version} %setup -q -n alsa-lib-%{package_version}
cp %{SOURCE50} src/conf/cards
# %patch -p1 # %patch -p1
%patch1 -p1 %patch1 -p1
%patch2 -p1 %patch2 -p1
@ -154,12 +176,29 @@ Architecture.
%patch17 -p1 %patch17 -p1
%patch18 -p1 %patch18 -p1
%patch19 -p1 %patch19 -p1
%if %suse_version == 1130 %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
%if 0%{?suse_version} == 1130
%patch99 -p1 %patch99 -p1
%endif %endif
# hack to fix build on older distros # hack to fix build on older distros
%if %suse_version < 1100 %if 0%{?suse_version} < 1100
%ifarch %ix86 %ifarch %{ix86}
test -f $RPM_SOURCE_DIR/baselibs.conf && \ test -f $RPM_SOURCE_DIR/baselibs.conf && \
sed -i -e'/recommends.*alsa-oss/d' $RPM_SOURCE_DIR/baselibs.conf sed -i -e'/recommends.*alsa-oss/d' $RPM_SOURCE_DIR/baselibs.conf
%endif %endif
@ -177,88 +216,88 @@ autoreconf -fi
--disable-python --disable-python
make V=1 %{?_smp_mflags} make V=1 %{?_smp_mflags}
# run doxygen # run doxygen
make -C doc doc make -C doc doc %{?_smp_mflags}
%install %install
# install shared library # install shared library
%makeinstall make DESTDIR=%{buildroot} install %{?_smp_mflags}
# clean up unneeded files # clean up unneeded files
rm -f $RPM_BUILD_ROOT%{_libdir}/*.*a rm -f %{buildroot}%{_libdir}/*.*a
rm -f $RPM_BUILD_ROOT%{_libdir}/alsa-lib/smixer/*.*a rm -f %{buildroot}%{_libdir}/alsa-lib/smixer/*.*a
rm -f $RPM_BUILD_ROOT%{_bindir}/aserver rm -f %{buildroot}%{_bindir}/aserver
# #
# install helper scripts # install helper scripts
mkdir -p $RPM_BUILD_ROOT%{_bindir} mkdir -p %{buildroot}%{_bindir}
mkdir -p $RPM_BUILD_ROOT%{_sbindir} mkdir -p %{buildroot}%{_sbindir}
install -c -m 0755 %{SOURCE16} $RPM_BUILD_ROOT%{_bindir} install -c -m 0755 %{SOURCE16} %{buildroot}%{_bindir}
install -c -m 0755 %{SOURCE34} $RPM_BUILD_ROOT%{_sbindir}/alsa-init install -c -m 0755 %{SOURCE34} %{buildroot}%{_sbindir}/alsa-init
%if %suse_version < 1140 %if 0%{?suse_version} < 1140
sed -i -e 's@/var/lib/alsa/asound.state@/etc/asound.state@g' $RPM_BUILD_ROOT%{_bindir}/set_default_volume sed -i -e 's@%{_localstatedir}/lib/alsa/asound.state@%{_sysconfdir}/asound.state@g' %{buildroot}%{_bindir}/set_default_volume
sed -i -e 's@/var/lib/alsa/asound.state@/etc/asound.state@g' $RPM_BUILD_ROOT%{_sbindir}/alsa-init sed -i -e 's@%{_localstatedir}/lib/alsa/asound.state@%{_sysconfdir}/asound.state@g' %{buildroot}%{_sbindir}/alsa-init
%endif %endif
# install test wave file # install test wave file
mkdir -p $RPM_BUILD_ROOT%{_datadir}/sounds/alsa mkdir -p %{buildroot}%{_datadir}/sounds/alsa
install -c -m 0644 %{SOURCE17} $RPM_BUILD_ROOT%{_datadir}/sounds/alsa/test.wav install -c -m 0644 %{SOURCE17} %{buildroot}%{_datadir}/sounds/alsa/test.wav
# install all_notes_off stuff # install all_notes_off stuff
install -c -m 0755 %{SOURCE30} $RPM_BUILD_ROOT%{_bindir} install -c -m 0755 %{SOURCE30} %{buildroot}%{_bindir}
mkdir -p $RPM_BUILD_ROOT/usr/lib mkdir -p %{buildroot}%{_prefix}/lib
install -c -m 0644 %{SOURCE31} $RPM_BUILD_ROOT/usr/lib install -c -m 0644 %{SOURCE31} %{buildroot}%{_prefix}/lib
install -c -m 0644 %{SOURCE32} $RPM_BUILD_ROOT/usr/lib install -c -m 0644 %{SOURCE32} %{buildroot}%{_prefix}/lib
%if %suse_version <= 1310 %if 0%{?suse_version} <= 1310
# #
# install init scripts # install init scripts
# #
mkdir -p $RPM_BUILD_ROOT/etc/init.d mkdir -p %{buildroot}%{_sysconfdir}/init.d
install -c -m 0755 %{SOURCE11} $RPM_BUILD_ROOT/etc/init.d install -c -m 0755 %{SOURCE11} %{buildroot}%{_sysconfdir}/init.d
install -c -m 0755 %{SOURCE13} $RPM_BUILD_ROOT/etc/init.d install -c -m 0755 %{SOURCE13} %{buildroot}%{_sysconfdir}/init.d
%if %suse_version < 1140 %if 0%{?suse_version} < 1140
sed -i -e 's@/var/lib/alsa/asound.state@/etc/asound.state@g' $RPM_BUILD_ROOT/etc/init.d/alsasound sed -i -e 's@%{_localstatedir}/lib/alsa/asound.state@%{_sysconfdir}/asound.state@g' %{buildroot}%{_initddir}/alsasound
%endif %endif
rm -f $RPM_BUILD_ROOT%{_sbindir}/rcalsasound rm -f %{buildroot}%{_sbindir}/rcalsasound
ln -s ../../etc/init.d/alsasound $RPM_BUILD_ROOT%{_sbindir}/rcalsasound ln -s ../..%{_initddir}/alsasound %{buildroot}%{_sbindir}/rcalsasound
rm -f $RPM_BUILD_ROOT%{_sbindir}/rcjoystick rm -f %{buildroot}%{_sbindir}/rcjoystick
ln -s ../../etc/init.d/joystick $RPM_BUILD_ROOT%{_sbindir}/rcjoystick ln -s ../..%{_initddir}/joystick %{buildroot}%{_sbindir}/rcjoystick
%endif %endif
# #
# udev rules (only for non-systemd) # udev rules (only for non-systemd)
# #
mkdir -p $RPM_BUILD_ROOT%{_udevdir}/rules.d mkdir -p %{buildroot}%{_udevdir}/rules.d
%if %suse_version < 1140 %if 0%{?suse_version} < 1140
install -c -m 0644 %{S:8} $RPM_BUILD_ROOT%{_udevdir}/rules.d install -c -m 0644 %{SOURCE8} %{buildroot}%{_udevdir}/rules.d
%endif %endif
install -c -m 0644 %{S:9} $RPM_BUILD_ROOT%{_udevdir}/rules.d install -c -m 0644 %{SOURCE9} %{buildroot}%{_udevdir}/rules.d
# #
# modprobe config and the module install script for loading OSS-emulation # modprobe config and the module install script for loading OSS-emulation
# and sequencer modules automatically # and sequencer modules automatically
%if %suse_version > 1220 %if 0%{?suse_version} > 1220
mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d mkdir -p %{buildroot}%{_sysconfdir}/modprobe.d
install -c -m 0644 %{S:40} $RPM_BUILD_ROOT/etc/modprobe.d install -c -m 0644 %{SOURCE40} %{buildroot}%{_sysconfdir}/modprobe.d
mkdir -p $RPM_BUILD_ROOT/sbin mkdir -p %{buildroot}/sbin
install -c -m 0755 %{S:41} $RPM_BUILD_ROOT/sbin install -c -m 0755 %{SOURCE41} %{buildroot}/sbin
%endif %endif
# #
# install template to update rc.config and sysconfig files: # install template to update rc.config and sysconfig files:
# (updating the actual files is done in the %post-script) # (updating the actual files is done in the %post-script)
# #
mkdir -p -m 755 $RPM_BUILD_ROOT/var/adm/fillup-templates mkdir -p -m 755 %{buildroot}%{_localstatedir}/adm/fillup-templates
mkdir -p -m 755 $RPM_BUILD_ROOT/etc/sysconfig mkdir -p -m 755 %{buildroot}%{_sysconfdir}/sysconfig
install -m 644 $RPM_SOURCE_DIR/sysconfig.sound $RPM_BUILD_ROOT/var/adm/fillup-templates install -m 644 $RPM_SOURCE_DIR/sysconfig.sound %{buildroot}%{_localstatedir}/adm/fillup-templates
%if %suse_version <= 1310 %if 0%{?suse_version} <= 1310
install -m 644 $RPM_SOURCE_DIR/sysconfig.joystick $RPM_BUILD_ROOT/var/adm/fillup-templates install -m 644 $RPM_SOURCE_DIR/sysconfig.joystick %{buildroot}%{_localstatedir}/adm/fillup-templates
%endif %endif
# #
# documents # documents
# #
mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name} mkdir -p %{buildroot}%{_docdir}/%{name}
cp $RPM_SOURCE_DIR/README* $RPM_BUILD_ROOT%{_docdir}/%{name} cp $RPM_SOURCE_DIR/README* %{buildroot}%{_docdir}/%{name}
mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}/alsa-lib mkdir -p %{buildroot}%{_docdir}/%{name}/alsa-lib
cp COPYING ChangeLog INSTALL TODO MEMORY-LEAK $RPM_BUILD_ROOT%{_docdir}/%{name}/alsa-lib cp COPYING ChangeLog INSTALL TODO MEMORY-LEAK %{buildroot}%{_docdir}/%{name}/alsa-lib
cp doc/asoundrc.txt $RPM_BUILD_ROOT%{_docdir}/%{name}/alsa-lib cp doc/asoundrc.txt %{buildroot}%{_docdir}/%{name}/alsa-lib
# install alsa-info.sh to sbindir # install alsa-info.sh to sbindir
install -c -m 0755 %{SOURCE33} $RPM_BUILD_ROOT%{_sbindir} install -c -m 0755 %{SOURCE33} %{buildroot}%{_sbindir}
%post %post
%if %suse_version > 1310 %if 0%{?suse_version} > 1310
%{fillup_only -n sound} %{fillup_only -n sound}
%else %else
%{fillup_and_insserv -ny sound alsasound} %{fillup_and_insserv -ny sound alsasound}
@ -266,7 +305,8 @@ install -c -m 0755 %{SOURCE33} $RPM_BUILD_ROOT%{_sbindir}
%endif %endif
exit 0 exit 0
%if %suse_version <= 1310 %if 0%{?suse_version} <= 1310
%preun %preun
%stop_on_removal alsasound joystick %stop_on_removal alsasound joystick
exit 0 exit 0
@ -284,18 +324,18 @@ exit 0
%files %files
%defattr(-, root, root) %defattr(-, root, root)
%doc %{_docdir}/%{name} %doc %{_docdir}/%{name}
%if %suse_version <= 1310 %if 0%{?suse_version} <= 1310
/etc/init.d/* %{_initddir}/*
%endif %endif
%if %suse_version > 1220 %if 0%{?suse_version} > 1220
/etc/modprobe.d %{_sysconfdir}/modprobe.d
/sbin/* /sbin/*
%endif %endif
%{_sbindir}/* %{_sbindir}/*
%{_bindir}/* %{_bindir}/*
/usr/lib/all_notes_off.* %{_prefix}/lib/all_notes_off.*
%{_datadir}/sounds/alsa %{_datadir}/sounds/alsa
/var/adm/fillup-templates/* %{_localstatedir}/adm/fillup-templates/*
%{_udevdir}/rules.d/* %{_udevdir}/rules.d/*
%files devel %files devel