Detailed changes v1.0.23 v1.0.24

From AlsaProject
Revision as of 14:33, 27 January 2011 by Perex (Talk | contribs)

Jump to: navigation, search

Contents

Detailed changelog between 1.0.22 and 1.0.24 releases

Changelog between 1.0.23 and 1.0.24 releases

alsa-python

Core

- Release v1.0.24

Python utilities

- alsa-python mixer: add poll_fds property
This patch adds poll_fds property to pyalsa alsamixer. register_poll works
with Python's select.poll but not with main loop of GUI toolkits. This is
already done for hcontrol by Clemens Ladisch, patch is based on his patch.
Other patch fixes memory leak as reported by him.

pyalsa.alsamixer module

- alsa-python mixer: add poll_fds property
This patch adds poll_fds property to pyalsa alsamixer. register_poll works
with Python's select.poll but not with main loop of GUI toolkits. This is
already done for hcontrol by Clemens Ladisch, patch is based on his patch.
Other patch fixes memory leak as reported by him.

pyalsa.alsaseq module

- Add register_poll for alsaseq

Detailed changelog between 1.0.23 and 1.0.24 releases

Changelog between 1.0.23 and 1.0.24 releases

alsa-driver

Sound Core

- Release v1.0.24
- Build snd-usb-6fire only with 2.6.28 or later kernels
for usb_poison_urb()
- linux 2.4 compilation fixes
- Add the check of linux/lzo.h
- Add missing creation of include/trace/events directory
- Add a creation of dummy trace/events/asoc.h
- Create a dummy pcmcia/cs.h
- configure.in: Create missing include/pcmcia
With kernels >= 2.6.36, the include/pcmcia/cs_types.h file can not
be created because of the missing parent directory.
- autoconf.in: CHECK_REQUIRED_KERNEL_HEADER v2
- configure.in: change CHECK_REQUIRED_KERNEL_HEADER
In some distros, the include/linux/autoconf.h is empty and
the contentens is in include/generated/autoconf.h .
- configure.in: Fix and improve logic for detection of kernel directory
- INSTALL: More explanations to compilation Linux kernel tree
- INSTALL: Building from kernel tree doc fixes
Does the following patch seem reasonable? It certainly describes the
Requirements in a way I personally understand better? Hopefully, it's
Accurate in any other scenarios that I'm not familiar with:-)
Be more explicit about which versions of which components need to match when
building the ALSA modules from a complete Linux kernel tree.
- configure.in: CONFIG_SND_KERNELBUILD shoud not be empty
- Fix wrong check of pm_qos_add_request() in configure script
- More fixes for new PCMCIA stuff
- Fixed typos in previous pm_qos_req build fixes
- an attempt to fix compilations for new static pm_qos_request
- Fix build with the updated usb-audio stack
- Fix build with openSUSE Factory kernels
A few fixes for building alsa-driver modules properly with openSUSE
Factory kernels.
- Use the kernel-build directory for 2.6 kernel base directory
instead of source directory
- Undefine ALSA-related definitions before including the new config.h
and config1.h; a hack by including *.in file for that
- Properly check config.h and generated/autoconf.h in configure script
- Fix builds with the new USB stack
- Build with the updated usb-audio driver
A new v2 struct was introduced.
- Add check of new usb_alloc_coherent() and pm_qos_request()
- Limit es1968/maestro3 input support for older kernels
The proper struct device is added input_dev since 2.6.23 kernel.
- Add check of valid linux/usb/audio-v2.h to configure script
- Fix regression for class1 usbaudio device support
Backport fix from sound tree.
- Fix build failures with older input layer
Allow the new input stuff for es1968 and maestro3 only for newer kernels
- Move asihpi driver to linux kernel tree
Fix the rest build stubs.

ALSA Core

- Fix MODULE_ALIAS_CHARDEV warnings
- linux 2.4 compilation fixes
- Add pm_wakeup_event() and request_any_context_irq() wrappers
- Add cancel_delayed_work_sync() wrapper
Just to make it working somehow...
- Fix build error due to flush_work_sync() wrapper
- Fix build with much older versions for flush_work_sync() wrapper
- Add flush_work_sync() and flush_delayed_work_sync() wrappers
... somehow equivalent ones.
- Add dummy wrapper for ASoC jack detection trace events
- Regenerate ascore/sound.patch
- Add a creation of dummy trace/events/asoc.h
- Add vzalloc() wrapper
- Add CONFIG_SYSFS_DEPRECATED hack for older kernels
- Fix build errors with 2.6.37-rc1 update
Refreshed patch, added noop_llseek compat definition for older kernels.
- include/adriver.h: Define pr_warn to allow compilation against older kernels
In my testing of the daily tarball, I am unable to build against 2.6.32. I
assume that older kernels would be affected in a similar way.
- Compilation fix for RHEL 5.6 (INIT_DELAYED_WORK)
- Move USB wrapper to individual header
Also add a dummy definition of missing USB_SPEED_SUPER for older kernels.
- an attempt to fix compilations for new static pm_qos_request
- Fix build with the updated usb-audio stack
- Add hex_to_bin() wrapper
- Fix build with openSUSE Factory kernels
A few fixes for building alsa-driver modules properly with openSUSE
Factory kernels.
- Use the kernel-build directory for 2.6 kernel base directory
instead of source directory
- Undefine ALSA-related definitions before including the new config.h
and config1.h; a hack by including *.in file for that
- Properly check config.h and generated/autoconf.h in configure script
- Fix builds with the new USB stack
- Build with the updated usb-audio driver
A new v2 struct was introduced.
- Add check of new usb_alloc_coherent() and pm_qos_request()
- Update usb/audio*.h compat files, too
Copied from sound git tree for the commit
e213e9cf707c51808e372dabd1070a61af17e77b
- Add missing packed attribute to usb_audio_compat.h
- Make sure to undefine CONFIG_SND_HDA_INPUT_JACK in adriver.h
With the older kernel, autoconf.h may still keep CONFIG_SND_HDA_INPUT_JACK=y
while the configure sets CONFIG_SND_JACK=n. We had a hack to undefine
it forcibly, but this should have been done after the inclusion of
autoconf.h. Otherwise it gives Oops in patch_sigmatel.c.
Reported-and-tested-by: Robert Krakora <rob.krakora@messagenetsystems.com>
- Fix regression for class1 usbaudio device support
Backport fix from sound tree.
- tree-wide: fix comment/printk typos
"gadget", "through", "command", "maintain", "maintain", "controller", "address",
"between", "initiali[zs]e", "instead", "function", "select", "already",
"equal", "access", "management", "hierarchy", "registration", "interest",
"relative", "memory", "offset", "already",
- ALSA: support module on-demand loading for seq and timer
If CONFIG_SND_DYNAMIC_MINORS is used, assign /dev/snd/seq and
/dev/snd/timer the usual static minors, and export specific
module aliases to generate udev module on-demand loading
instructions:
$ cat /lib/modules/2.6.33.4-smp/modules.devname
# Device nodes to trigger on-demand module loading.
microcode cpu/microcode c10:184
fuse fuse c10:229
ppp_generic ppp c108:0
tun net/tun c10:200
uinput uinput c10:223
dm_mod mapper/control c10:236
snd_timer snd/timer c116:33
snd_seq snd/seq c116:1
The last two lines instruct udev to create device nodes, even
when the modules are not loaded at that time.
As soon as userspace accesses any of these nodes, the in-kernel
module-loader will load the module, and the device can be used.
The header file minor calculation needed to be simplified to
make __stringify() (supports only two indirections) in
the MODULE_ALIAS macro work.
This is part of systemd's effort to get rid of unconditional
module load instructions and needless init scripts.
- ALSA: pcm: support for period wakeup disabling
This patch allows to disable period interrupts which are
not needed when the application relies on a system timer
to wake-up and refill the ring buffer. The behavior of
the driver is left unchanged, and interrupts are only
disabled if the application requests this configuration.
The behavior in case of underruns is slightly different,
instead of being detected during the period interrupts the
underruns are detected when the application calls
snd_pcm_update_avail, which in turns forces a refresh of the
hw pointer and shows the buffer is empty.
More specifically this patch makes a lot of sense when
PulseAudio relies on timer-based scheduling to access audio
devices such as HDAudio or Intel SST. Disabling interrupts
removes two unwanted wake-ups due to period elapsed events
in low-power playback modes. It also simplifies PulseAudio
voice modules used for speech calls.
To quote Lennart "This patch looks very interesting and
desirable. This is something have long been waiting for."
Support for this in hardware drivers is optional.
- BKL: remove extraneous #include <smp_lock.h>
The big kernel lock has been removed from all these files at some point,
leaving only the #include.
Remove this too as a cleanup.
- driver core: remove CONFIG_SYSFS_DEPRECATED_V2 but keep it for block devices
This patch removes the old CONFIG_SYSFS_DEPRECATED_V2 config option,
but it keeps the logic around to handle block devices in the old manner
as some people like to run new kernel versions on old (pre 2007/2008)
distros.
- ALSA: fix unused warnings with snd_power_get_state
If we compile the ASoC code with PM disabled, we hit stuff like:
sound/soc/soc-dapm.c: In function 'snd_soc_dapm_suspend_check':
sound/soc/soc-dapm.c:440: warning: unused variable 'codec'
So tweak the stub macro to avoid these issues.
- llseek: automatically add .llseek fop
All file_operations should get a .llseek operation so we can make
nonseekable_open the default for future file operations without a
.llseek pointer.
The three cases that we can automatically detect are no_llseek, seq_lseek
and default_llseek. For cases where we can we can automatically prove that
the file offset is always ignored, we use noop_llseek, which maintains
the current behavior of not returning an error from a seek.
New drivers should normally not use noop_llseek but instead use no_llseek
and call nonseekable_open at open time. Existing drivers can be converted
to do the same when the maintainer knows for certain that no user code
relies on calling seek on the device file.
The generated code is often incorrectly indented and right now contains
comments that clarify for each added line why a specific variant was
chosen. In the version that gets submitted upstream, the comments will
be gone and I will manually fix the indentation, because there does not
seem to be a way to do that using coccinelle.
Some amount of new code is currently sitting in linux-next that should get
the same modifications, which I will do at the end of the merge window.
Many thanks to Julia Lawall for helping me learn to write a semantic
patch that does all this.
===== begin semantic patch =====
// This adds an llseek= method to all file operations,
// as a preparation for making no_llseek the default.
//
// The rules are
// - use no_llseek explicitly if we do nonseekable_open
// - use seq_lseek for sequential files
// - use default_llseek if we know we access f_pos
// - use noop_llseek if we know we don't access f_pos,
// but we still want to allow users to call lseek
//
@ open1 exists @
identifier nested_open;
@@
nested_open(...)
{
<+...
nonseekable_open(...)
...+>
}
@ open exists@
identifier open_f;
identifier i, f;
identifier open1.nested_open;
@@
int open_f(struct inode *i, struct file *f)
{
<+...
(
nonseekable_open(...)
|
nested_open(...)
)
...+>
}
@ read disable optional_qualifier exists @
identifier read_f;
identifier f, p, s, off;
type ssize_t, size_t, loff_t;
expression E;
identifier func;
@@
ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
{
<+...
(
*off = E
|
*off += E
|
func(..., off, ...)
|
E = *off
)
...+>
}
@ read_no_fpos disable optional_qualifier exists @
identifier read_f;
identifier f, p, s, off;
type ssize_t, size_t, loff_t;
@@
ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
{
... when != off
}
@ write @
identifier write_f;
identifier f, p, s, off;
type ssize_t, size_t, loff_t;
expression E;
identifier func;
@@
ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
{
<+...
(
*off = E
|
*off += E
|
func(..., off, ...)
|
E = *off
)
...+>
}
@ write_no_fpos @
identifier write_f;
identifier f, p, s, off;
type ssize_t, size_t, loff_t;
@@
ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
{
... when != off
}
@ fops0 @
identifier fops;
@@
struct file_operations fops = {
...
};
@ has_llseek depends on fops0 @
identifier fops0.fops;
identifier llseek_f;
@@
struct file_operations fops = {
...
.llseek = llseek_f,
...
};
@ has_read depends on fops0 @
identifier fops0.fops;
identifier read_f;
@@
struct file_operations fops = {
...
.read = read_f,
...
};
@ has_write depends on fops0 @
identifier fops0.fops;
identifier write_f;
@@
struct file_operations fops = {
...
.write = write_f,
...
};
@ has_open depends on fops0 @
identifier fops0.fops;
identifier open_f;
@@
struct file_operations fops = {
...
.open = open_f,
...
};
// use no_llseek if we call nonseekable_open
////////////////////////////////////////////
@ nonseekable1 depends on !has_llseek && has_open @
identifier fops0.fops;
identifier nso ~= "nonseekable_open";
@@
struct file_operations fops = {
... .open = nso, ...
+.llseek = no_llseek, /* nonseekable */
};
@ nonseekable2 depends on !has_llseek @
identifier fops0.fops;
identifier open.open_f;
@@
struct file_operations fops = {
... .open = open_f, ...
+.llseek = no_llseek, /* open uses nonseekable */
};
// use seq_lseek for sequential files
/////////////////////////////////////
@ seq depends on !has_llseek @
identifier fops0.fops;
identifier sr ~= "seq_read";
@@
struct file_operations fops = {
... .read = sr, ...
+.llseek = seq_lseek, /* we have seq_read */
};
// use default_llseek if there is a readdir
///////////////////////////////////////////
@ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier readdir_e;
@@
// any other fop is used that changes pos
struct file_operations fops = {
... .readdir = readdir_e, ...
+.llseek = default_llseek, /* readdir is present */
};
// use default_llseek if at least one of read/write touches f_pos
/////////////////////////////////////////////////////////////////
@ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier read.read_f;
@@
// read fops use offset
struct file_operations fops = {
... .read = read_f, ...
+.llseek = default_llseek, /* read accesses f_pos */
};
@ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier write.write_f;
@@
// write fops use offset
struct file_operations fops = {
... .write = write_f, ...
+ .llseek = default_llseek, /* write accesses f_pos */
};
// Use noop_llseek if neither read nor write accesses f_pos
///////////////////////////////////////////////////////////
@ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier read_no_fpos.read_f;
identifier write_no_fpos.write_f;
@@
// write fops use offset
struct file_operations fops = {
...
.write = write_f,
.read = read_f,
...
+.llseek = noop_llseek, /* read and write both use no f_pos */
};
@ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier write_no_fpos.write_f;
@@
struct file_operations fops = {
... .write = write_f, ...
+.llseek = noop_llseek, /* write uses no f_pos */
};
@ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier read_no_fpos.read_f;
@@
struct file_operations fops = {
... .read = read_f, ...
+.llseek = noop_llseek, /* read uses no f_pos */
};
@ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
@@
struct file_operations fops = {
...
+.llseek = noop_llseek, /* no read or write fn */
};
===== End semantic patch =====
- ALSA: core: Allow card id change to the same string
When user want to change the card id to the same string
on the card via /sys/class/sound/cardX/id, do not
report error. Instead return with success without
doing anything.
- include: replace unifdef-y with header-y
unifdef-y and header-y has same semantic.
So there is no need to have both.
Drop the unifdef-y variant and sort all lines again
- ALSA: pcm: Define G723 3-bit and 5-bit formats
This defines the 24bps and 40bps (8khz sample rate) G.723 codec
formats. They are going to be used once I submit the driver for
an mpeg4/g723 compression card.
I've updated the signed value to -1 as per Takashi's comments
since these are non-linear formats.
- ALSA: include/sound/asound.h whitespace fixups
This fixes some whitespace/indentation flaws I stumbled over.

SoC PXA2xx Core

see Detailed SoC changes v1.0.23 v1.0.24

Control Midlevel

- ALSA: core, oxygen, virtuoso: add an enum control info helper
Introduce the helper function snd_ctl_enum_info() to fill out the
elem_info fields for an enumerated control.
- ALSA: tlv - Define numbers in sound/tlv.h
- ALSA: prevent heap corruption in snd_ctl_new()
The snd_ctl_new() function in sound/core/control.c allocates space for a
snd_kcontrol struct by performing arithmetic operations on a
user-provided size without checking for integer overflow. If a user
provides a large enough size, an overflow will occur, the allocated
chunk will be too small, and a second user-influenced value will be
written repeatedly past the bounds of this chunk. This code is
reachable by unprivileged users who have permission to open
a /dev/snd/controlC* device (on many distros, this is group "audio") via
the SNDRV_CTL_IOCTL_ELEM_ADD and SNDRV_CTL_IOCTL_ELEM_REPLACE ioctls.

Jack Input Event Midlevel

- ALSA: Add more jack button slots
Some devices have more flexible microphone detection and can detect
a wider range of buttons.

PCM Midlevel

- Regenerate core/pcm_native.patch
- Add pm_qos_remove() hack for older kernels in snd_pcm_release_substream()
- Fixed typos in previous pm_qos_req build fixes
- an attempt to fix compilations for new static pm_qos_request
- core: compilation fix for new QoS API, move snd-aloop code to alsa-kernel tree
- Add check of new usb_alloc_coherent() and pm_qos_request()
- tree-wide: fix comment/printk typos
"gadget", "through", "command", "maintain", "maintain", "controller", "address",
"between", "initiali[zs]e", "instead", "function", "select", "already",
"equal", "access", "management", "hierarchy", "registration", "interest",
"relative", "memory", "offset", "already",
- ALSA: pcm: remember to always call va_end() on stuff that we va_start()
The Coverity checker spotted that we do not always remember to call
va_end() on 'args' in failure paths in snd_pcm_hw_rule_add().
Here's a patch to fix that up (compile tested only) - it also removes
some annoying trailing whitespace that caught my eye while I was in the
area..
- ALSA: sound/core/pcm_lib.c: Remove unnecessary semicolons
- ALSA: pcm: optimize xrun detection in no-period-wakeup mode
Add a lightweight condition on top of the xrun checking so that we can
avoid the division when the application is calling the update function
often enough.
Suggested-by: Jaroslav Kysela <perex@perex.cz>
- ALSA: pcm: detect xruns in no-period-wakeup mode
When period wakeups are disabled, successive calls to the pointer update
function do not have a maximum allowed distance, so xruns cannot be
detected with the pointer value only.
To detect xruns, compare the actually elapsed time with the time that
should have theoretically elapsed since the last update. When the
hardware pointer has wrapped around due to an xrun, the actually elapsed
time will be too big by about hw_ptr_buffer_jiffies.
- ALSA: pcm: support for period wakeup disabling
This patch allows to disable period interrupts which are
not needed when the application relies on a system timer
to wake-up and refill the ring buffer. The behavior of
the driver is left unchanged, and interrupts are only
disabled if the application requests this configuration.
The behavior in case of underruns is slightly different,
instead of being detected during the period interrupts the
underruns are detected when the application calls
snd_pcm_update_avail, which in turns forces a refresh of the
hw pointer and shows the buffer is empty.
More specifically this patch makes a lot of sense when
PulseAudio relies on timer-based scheduling to access audio
devices such as HDAudio or Intel SST. Disabling interrupts
removes two unwanted wake-ups due to period elapsed events
in low-power playback modes. It also simplifies PulseAudio
voice modules used for speech calls.
To quote Lennart "This patch looks very interesting and
desirable. This is something have long been waiting for."
Support for this in hardware drivers is optional.
- BKL: remove extraneous #include <smp_lock.h>
The big kernel lock has been removed from all these files at some point,
leaving only the #include.
Remove this too as a cleanup.
- ALSA: pcm - Fix race with proc files
The PCM proc files may open a race against substream close, which can
end up with an Oops. Use the open_mutex to protect for it.
- ALSA: pcm - Fix unbalanced pm_qos_request
The pm_qos_request isn't freed properly when OSS PCM emulation is used
because it skips snd_pcm_hw_free() call but directly releases the
stream. This resulted in Oops later.
Tested-by: Simon Kirby <sim@hostway.ca>
- sound: Remove unnecessary casts of private_data
- sound: Use static const char * const where possible
- ALSA: pcm: add more format names
There were some new formats added in commit 15c0cee6c809 "ALSA: pcm:
Define G723 3-bit and 5-bit formats". That commit increased
SNDRV_PCM_FORMAT_LAST as well. My concern is that there are a couple
places which do:
for (i = 0; i < SNDRV_PCM_FORMAT_LAST; i++) {
if (dummy->pcm_hw.formats & (1ULL << i))
snd_iprintf(buffer, " %s", snd_pcm_format_name(i));
}
I haven't tested these but it looks like if "i" were equal to
SNDRV_PCM_FORMAT_G723_24 or higher then we might read past the end of
the array.
- ALSA: pcm midlevel code - add time check for double interrupt acknowledge
The current code in pcm_lib.c do all checks using only the position
in the ring buffer. Unfortunately, where the interrupts gets delayed or
merged into one, we need another timing source to check when the
buffer size boundary overlaps to avoid the wrong updating of the
ring buffer pointers.
This code uses jiffies to check the right time window without any
performance impact.
- ALSA: emu10k1 - delay the PCM interrupts (add pcm_irq_delay parameter)
With some hardware combinations, the PCM interrupts are acknowledged
before the period boundary from the emu10k1 chip. The midlevel PCM code
gets confused and the playback stream is interrupted.
It seems that the interrupt processing shift by 2 samples is enough
to fix this issue. This default value does not harm other,
non-affected hardware.
More information: Kernel bugzilla bug#16300
- pm_qos: Get rid of the allocation in pm_qos_add_request()
All current users of pm_qos_add_request() have the ability to supply
the memory required by the pm_qos routines, so make them do this and
eliminate the kmalloc() with pm_qos_add_request(). This has the
double benefit of making the call never fail and allowing it to be
called from atomic context.
- ALSA: pcm core - add a safe check to the silence filling function
In situation when appl_ptr is far greater then hw_ptr, the hw_avail value
can be greater than buffer_size. Check for this.
- ALSA: pcm_lib: avoid timing jitter in snd_pcm_read/write()
When using poll() to wait for the next period -- or avail_min samples --
one gets a consistent delay for each system call that is usually just a
little short of the selected period time. However, When using
snd_pcm_read/write(), one gets a jittery delay that alternates between
less than a millisecond and approximately two period times. This is
caused by snd_pcm_lib_{read,write}1() transferring any available samples
to the user's buffer and adjusting the application pointer prior to
sleeping to the end of the current period. When the next period
interrupt occurs, there is then less than avail_min samples remaining to
be transferred in the period, so we end up sleeping until a second
period occurs.
This is solved by using runtime->twake as the number of samples needed
for a wakeup in addition to selecting the proper wait queue to wake in
snd_pcm_update_state(). This requires twake to be non-zero when used
by snd_pcm_lib_{read,write}1() even if avail_min is zero.
- ALSA: pcm: Define G723 3-bit and 5-bit formats
This defines the 24bps and 40bps (8khz sample rate) G.723 codec
formats. They are going to be used once I submit the driver for
an mpeg4/g723 compression card.
I've updated the signed value to -1 as per Takashi's comments
since these are non-linear formats.
- ALSA: pcm: fix delta calculation at boundary wraparound
In the cleanup of the hw_ptr update functions in 2.6.33, the calculation
of the delta value was changed to use the modulo operator to protect
against a negative difference due to the pointer wrapping around at the
boundary.
However, the ptr variables are unsigned, so a negative difference would
result in the two complement's value which has no relation to the actual
difference relative to the boundary; the result is typically some value
near LONG_MAX-boundary. Furthermore, even if the modulo operation would
be done with signed types, the result of a negative dividend could be
negative.
The invalid delta value is then caught by the following checks, but this
means that the pointer update is ignored.
To fix this, use a range check as in the other pointer calculations.
- ALSA: pcm: fix the fix of the runtime->boundary calculation
Commit 7910b4a1db63fefc3d291853d33c34c5b6352e8e in 2.6.34 changed the
runtime->boundary calculation to make this value a multiple of both the
buffer_size and the period_size, because the latter is assumed by the
runtime->hw_ptr_interrupt calculation.
However, due to the lack of a ioctl that could read the software
parameters before they are set, the kernel requires that alsa-lib
calculates the boundary value, too. The changed algorithm leads to
a different boundary value used by alsa-lib, which makes, e.g., mplayer
fail to play a 44.1 kHz file because the silence_size parameter is now
invalid; bug report:
<https://bugtrack.alsa-project.org/alsa-bug/view.php?id=5015>.
This patch reverts the change to the boundary calculation, and instead
fixes the hw_ptr_interrupt calculation to be period-aligned regardless
of the boundary value.
- ALSA: pcm - Use pgprot_noncached() for MIPS non-coherent archs
MIPS non-coherent archs need the noncached pgprot in mmap of PCM buffers.
But, since the coherency needs to be checked dynamically via
plat_device_is_coherent(), we need an ugly check dependent on MIPS
in ALSA core code.
This should be cleaned up in MIPS arch side (e.g. creating
dma_mmap_coherent()) in near future.
Tested-by: Wu Zhangjin <wuzhangjin@gmail.com>
- PM QOS update
This patch changes the string based list management to a handle base
implementation to help with the hot path use of pm-qos, it also renames
much of the API to use "request" as opposed to "requirement" that was
used in the initial implementation. I did this because request more
accurately represents what it actually does.
Also, I added a string based ABI for users wanting to use a string
interface. So if the user writes 0xDDDDDDDD formatted hex it will be
accepted by the interface. (someone asked me for it and I don't think
it hurts anything.)
This patch updates some documentation input I got from Randy.

RawMidi Midlevel

- ALSA: rawmidi: fix oops (use after free) when unloading a driver module
When a driver module is unloaded and the last still open file is a raw
MIDI device, the card and its devices will be actually freed in the
snd_card_file_remove() call when that file is closed. Afterwards, rmidi
and rmidi->card point into freed memory, so the module pointer is likely
to be garbage.
(This was introduced by commit 9a1b64caac82aa02cb74587ffc798e6f42c6170a.)
Reported-by: Krzysztof Foltman <wdev@foltman.com>
- ALSA: rawmidi: fix the get next midi device ioctl
If we pass in a device which is higher than SNDRV_RAWMIDI_DEVICES then
the "next device" should be -1. This function just returns device + 1.
But the main thing is that "device + 1" can lead to a (harmless) integer
overflow and that annoys static analysis tools.
[fix the case for device == SNDRV_RAWMIDI_DEVICE by tiwai]

Timer Midlevel

- ALSA: support module on-demand loading for seq and timer
If CONFIG_SND_DYNAMIC_MINORS is used, assign /dev/snd/seq and
/dev/snd/timer the usual static minors, and export specific
module aliases to generate udev module on-demand loading
instructions:
$ cat /lib/modules/2.6.33.4-smp/modules.devname
# Device nodes to trigger on-demand module loading.
microcode cpu/microcode c10:184
fuse fuse c10:229
ppp_generic ppp c108:0
tun net/tun c10:200
uinput uinput c10:223
dm_mod mapper/control c10:236
snd_timer snd/timer c116:33
snd_seq snd/seq c116:1
The last two lines instruct udev to create device nodes, even
when the modules are not loaded at that time.
As soon as userspace accesses any of these nodes, the in-kernel
module-loader will load the module, and the device can be used.
The header file minor calculation needed to be simplified to
make __stringify() (supports only two indirections) in
the MODULE_ALIAS macro work.
This is part of systemd's effort to get rid of unconditional
module load instructions and needless init scripts.
- ALSA: timer: automatically load the high-resolution timer
Increase the default timer limit so that snd-hrtimer.ko can be
automatically loaded when needed, e.g., when used as the default
sequencer timer. This replaces the check for the obsolete
CONFIG_SND_HPET.
- ALSA: take tu->qlock with irqs disabled
We should disable irqs when we take the tu->qlock because it is used in
the irq handler. The only place that doesn't is
snd_timer_user_ccallback(). Most of the time snd_timer_user_ccallback()
is called with interrupts disabled but the the first ti->ccallback()
call in snd_timer_notify1() has interrupts enabled.
This was caught by lockdep which generates the following message:
> =================================
> [ INFO: inconsistent lock state ]
> 2.6.34-rc5 #5
> ---------------------------------
> inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
> dolphin/4003 [HC1[1]:SC0[0]:HE0:SE1] takes:
> (&(&tu->qlock)->rlock){?.+...}, at: [<f84ec472>] snd_timer_user_tinterrupt+0x28/0x132 [snd_timer]
> {HARDIRQ-ON-W} state was registered at:
> [<c1048de9>] __lock_acquire+0x654/0x1482
> [<c1049c73>] lock_acquire+0x5c/0x73
> [<c125ac3e>] _raw_spin_lock+0x25/0x34
> [<f84ec370>] snd_timer_user_ccallback+0x55/0x95 [snd_timer]
> [<f84ecc4b>] snd_timer_notify1+0x53/0xca [snd_timer]
Reported-by: Stefan Richter <stefanr@s5r6.in-berlin.de>

/isa/Makefile

- ALSA: ISA: Remove snd-sgalaxy
Its hardware is handled more fully by the new azt1605/azt2316 drivers.
- ALSA: ISA: New Aztech Sound Galaxy driver
This is a new driver for Aztech Sound Galaxy ISA soundcards based on the
AZT1605 and AZT2316 chipsets. It's constructed as two seperate drivers
for either chipset generated from the same source file, with (very)
minimal ifdeffery.
The drivers check the SB DSP version to decide if they are being loaded
for the right chip. AZT1605 returns 2.1 by default and AZT2316 3.1.
This isn't full-proof as the DSP version can actually be set through
software but it's close enough -- as far as I've been able to see, the
DSP version can not be stored in the EEPROM and the cards will therefore
startup with the defaults.
This distinction could (with the same success rate) also be used to
decide which chip we're looking at at runtime meaning a single, merged
driver is also an option but I feel it's actually nicer this way. A
merged driver would have to postpone translating the passed in resource
values to the card configuration until it knew which one it was looking
at and would need to postpone erring out on mpu_irq=10 for azt1605 and
mpu_irq=3 for azt2316.
The drivers have been tested on various cards. For snd-azt1605:
FCC-ID I38-MMSN811: Aztech Sound Galaxy Nova 16 Extra
FCC-ID I38-MMSN822: Aztech Sound Galaxy Pro 16 II
and for snd-azt2316:
FCC-ID I38-MMSN824: Aztech Sound Galaxy Pro 16 AB
FCC-ID I38-MMSN826: Trust Sound Expert DeLuxe Wave 32 (05201)
FCC-ID I38-MMSN830: Trust Sound Expert DeLuxe 16+ (05202)
FCC-ID I38-MMSN837: Packard Bell ISA Soundcard 030069
FCC-ID I38-MMSN846: Trust Sound Expert DeLuxe 16-3D (06300)
FCC-ID I38-MMSN847: Trust Sound Expert DeLuxe Wave 32-3D (06301)
FCC-ID I38-MMSN852: Aztech Sound Galaxy Waverider Pro 32-3D
826 and 846 were also marketed directly by Aztech and then known as:
FCC-ID I38-MMSN826: Aztech Sound Galaxy Waverider 32+
FCC-ID I38-MMSN846: Aztech Sound Galaxy Nova 16 Extra II-3D
Together, these cover the AZT1605 and AT2316A, AZT2316R and AZT2316-S
chipsets. All cards work fully -- full-duplex PCM, MIDI and FM. Full
duplex is a little flaky on some.
I38-MSN811 tends to not work in full-duplex but sometimes does with the
highest success rate being achieved when you first start the capture and
then a playback instead of the other way around (it's a CS4231-KL
codec).
The cards with an AD1845XP codec (my I38-MMSN826 and one of my
I38-MMSN830s) are also somewhat duplex-challenged. Sometimes full-duplex
works, sometimes not and this varies from try to try. This seems likely
to be a timing problem somewhere inside wss-lib.
I38-MMSN826 has an additional "ICS2115 WaveFront" wavetable synth
onboard that isn't supported yet. The wavetable synths on I38-MMSN847
and I38-MMSN852 are wired directly to the standard MPU-401 UART and the
AUX1 input on the codec and work without problem.
CD-ROM audio on the cards is routed to the codec "Line" input, Line-In
to its Aux input, and FM/Wavetable to its AUX1 input. I did not rename
the controls due to the capture source enumeration: I see that
capture-source overrides are hardcoded in wss-lib and this is just too
ugly to live.
Versus the old snd-sgalaxy driver these drivers add support for the
models without a configuration EEPROM (which are common), full-duplex,
MPU-401 UART and OPL3. In the future they might grow support for that
ICS2115 WaveFront synth on 826 and an hwdep interface to write to the
EEPROM on the models that have one.

/soc/Makefile

- ASoC: tegra: Kconfig and Makefile
- ASoC: sst v2: Add makefiles and kconfigs changes
This patch adds the makefile and kconfig changes for mid asoc drivers:
platform and machine driver which are introduced in 2 preceeding patches
- ASoC: Samsung: Rename from s3c24xx to samsung
Finally, move the 's3c24xx' directory to 'samsung'
- ASoC: Fix sorting of Makefile and Kconfig
- ASoC: Add JZ4740 ASoC support
This patch adds ASoC support for JZ4740 SoCs I2S module.
- ASoC: ep93xx i2s audio driver
Add ep93xx i2s audio driver
- ASoC: kirkwood: Add i2s support
This patch enables support for the i2s controller available on kirkwood
platforms
- ASoC: NUC900/audio: add nuc900 audio driver support
Add support for NUC900 AC97

/soc/codecs/Makefile

- ASoC: WM8991: Add initial WM8991 driver
The WM8991 is a highly integrated ultra-low power hi-fi CODEC designed for
handsets rich in multimedia features such as GPS, mobile TV, digital audio
playback and gaming.
This driver was originally written by Graeme Gregory and has been maintained
out of tree by Mark Brown and Dimitris Papastamos.
- ASoC: sst v2: Add sn95031 codec driver
This patch adds the sn95031 asoc codec driver. This driver currently
supports only playback. Capture and jack detection to be added later
- ASoC: DMIC codec: Adding a generic DMIC codec
This codec is to be used by the DMIC driver to
control the DMIC codec. This driver will be used on future
implementations of the DMIC driver to support codec specific
features.
At this time, the codec driver just registers the codec DAI.
- ASoC: Add initial WM8995 driver
The WM8995 is a digital audio hub CODEC designed for smartphones.
The current driver supports most of the basic functionality of the
WM8995.
- ASoC: Add initial WM8737 driver
The WM8737 is a low power, flexible stereo ADC designed for portable
applications. This driver supports most of the functionality of the
WM8737, though some features such as the ALC are not yet implemented.
- ASoC: Move WM8994 read/write access data into separate file
Makes the WM8994 driver file itself substantially smaller.
- ASoC: WM8770: Initial driver
The WM8770 is a high performance, multi-channel audio
codec. The WM8770 is ideal for surround sound processing
applications for home hi-fi, automotive and other audio
visual equipment.
- ASoC: add support for alc562[123] codecs
This patch is adding support for alc562[123] codecs. It's based
on the source code available in HP source code and other places.
- ASoC: Restore MAX98088 CODEC driver
This reverts commit f6765502f8daae3d237a394889276c8987f3e299 and adds
the missing include file.
- Revert "ASoC: Add max98088 CODEC driver"
This reverts commit e65d255a5a610ce9e185e0df855250706aca7c21 since it
does not build.
- ASoC: Add max98088 CODEC driver
This patch adds the MAX98088 CODEC driver.
- ASoC: Compress WM8962 register access map
Reduce the source code size still futher by only specifying non-zero
rows in the WM8962 access map.
- ASoC: WM8804: Initial driver
The WM8804 is a high performance consumer mode S/PDIF transceiver with
support for 1 received channel and 1 transmitted channel.
- ASoC: WM8985: Initial driver
The WM8985 is a low power, high quality, feature-rich stereo
CODEC designed for portable multimedia applications that
require low power consumption and high quality audio.
- ASoC: Add build infrastructure for WL1273
The Makefile and Kconfig updates for WL1273 appear to have been mising
from the patch posted, add them.
- ASoC: add 88pm860x codec driver
Add 88PM860x codec driver. 88PM860x codec supports two interfaces. And it
also supports headset/mic/hook/short detection.
- ASoC: Add initial WM8962 CODEC driver
The WM8962 is a low power, high performance stereo CODEC designed for
portable digital audio applications.
This initial driver release supports the key audio paths of the WM8962.
Extended functionality, such as microphone detection, digital microphones
and the advanced DSP signal enhancements provided by the device are not
yet supported.
- ASoC: Initial WM8741 CODEC driver
The WM8741 is a very high performance stereo DAC designed for audio
applications such as professional recording systems, A/V receivers and
high specification CD, DVD and home theatre systems. The device supports
PCM data input word lengths from 16 to 32-bits and sampling rates up to
192kHz. The WM8741 also supports DSD bit-stream data format, in both
direct DSD and PCM-converted DSD modes.
TODO: Expand wm8741_set_dai_sysclk and rate_constraint members to
allow for all supported sample rate / Master Clock frequency combinations.
Fully enable control of supplies.
- ASoC: Add JZ4740 codec driver
This patch adds support for the JZ4740 internal codec.
- ASoC: Add driver for cs42l51
This patch is adding a ASoC driver for the cs42l51 from Cirrus Logic.
Master mode and spi mode are not supported.
- ASoC: Add WM9090 amplifier driver
The WM9090 is a high performance low power audio subsystem, including
headphone and class D speaker drivers.
Note that this driver is a standalone CODEC driver and so is only
immediately suitable for use with the WM9090 as a standalone sound card
taking line inputs, or with a DAC with no software control. The pending
ASoC multi-CODEC support will expand the range of systems that can use
the driver, or system-specific adaptations can be made.

/soc/pxa/Makefile

- ASoC: add saarb machine driver for 88pm860x
88PM860x codec is used in Marvell saarb development board. 88PM860x codec
is used as master mode for SSP communication. Only I2S format is supported.
- ASoC: add tavorevb3 machine driver for 88pm860x

AC97 Codec

- ALSA: constify functions in ac97
- sound: don't use flush_scheduled_work()
flush_scheduled_work() is deprecated and scheduled to be removed.
* cancel[_delayed]_work() + flush_scheduled_work() ->
cancel[_delayed]_work_sync().
* wm8350, wm8753 and soc-core use custom code to cancel a delayed
work, execute it immediately if it was pending and wait for its
completion. This is equivalent to flush_delayed_work_sync(). Use
it instead.

AC97 bus driver

- sound: Fixed line limit issue in sound/ac97_bus.c
This is a patch to the sound/ac97_bus.c file that fixes up a 80 character
line limit issue found by the checkpatch.pl tool.

AK4113 receiver

- sound: don't use flush_scheduled_work()
flush_scheduled_work() is deprecated and scheduled to be removed.
* cancel[_delayed]_work() + flush_scheduled_work() ->
cancel[_delayed]_work_sync().
* wm8350, wm8753 and soc-core use custom code to cancel a delayed
work, execute it immediately if it was pending and wait for its
completion. This is equivalent to flush_delayed_work_sync(). Use
it instead.

AK4114 receiver

- sound: don't use flush_scheduled_work()
flush_scheduled_work() is deprecated and scheduled to be removed.
* cancel[_delayed]_work() + flush_scheduled_work() ->
cancel[_delayed]_work_sync().
* wm8350, wm8753 and soc-core use custom code to cancel a delayed
work, execute it immediately if it was pending and wait for its
completion. This is equivalent to flush_delayed_work_sync(). Use
it instead.

AK4XXX AD/DA converters

- ALSA: i2c/other/ak4xx-adda: Fix a compile warning with CONFIG_PROCFS=n

ALS4000 driver

- ALSA: als4000: Fix potentially invalid DMA mode setup
My previous patch assumed that the DMA mode (represented by 3 lowest bits of
ALS4K_GCR99_DMA_EMULATION_CTRL register) is set to the default value 0. If
that's not the case, it might result in invalid mode to be set.
This patch fixes this potential problem.
- ALSA: als4000: enable burst mode
Enable burst mode to prevent dropouts during high PCI bus usage.
The card is useless in X without this because of dropouts when anything moves
on the screen (at least with PCI VGA card). Enabling this is also recommended
by the datasheet (page 48).

ALSA Minor Numbers

- ALSA: support module on-demand loading for seq and timer
If CONFIG_SND_DYNAMIC_MINORS is used, assign /dev/snd/seq and
/dev/snd/timer the usual static minors, and export specific
module aliases to generate udev module on-demand loading
instructions:
$ cat /lib/modules/2.6.33.4-smp/modules.devname
# Device nodes to trigger on-demand module loading.
microcode cpu/microcode c10:184
fuse fuse c10:229
ppp_generic ppp c108:0
tun net/tun c10:200
uinput uinput c10:223
dm_mod mapper/control c10:236
snd_timer snd/timer c116:33
snd_seq snd/seq c116:1
The last two lines instruct udev to create device nodes, even
when the modules are not loaded at that time.
As soon as userspace accesses any of these nodes, the in-kernel
module-loader will load the module, and the device can be used.
The header file minor calculation needed to be simplified to
make __stringify() (supports only two indirections) in
the MODULE_ALIAS macro work.
This is part of systemd's effort to get rid of unconditional
module load instructions and needless init scripts.

ALSA Version

- Release v1.0.24

ALSA sequencer

- ALSA: support module on-demand loading for seq and timer
If CONFIG_SND_DYNAMIC_MINORS is used, assign /dev/snd/seq and
/dev/snd/timer the usual static minors, and export specific
module aliases to generate udev module on-demand loading
instructions:
$ cat /lib/modules/2.6.33.4-smp/modules.devname
# Device nodes to trigger on-demand module loading.
microcode cpu/microcode c10:184
fuse fuse c10:229
ppp_generic ppp c108:0
tun net/tun c10:200
uinput uinput c10:223
dm_mod mapper/control c10:236
snd_timer snd/timer c116:33
snd_seq snd/seq c116:1
The last two lines instruct udev to create device nodes, even
when the modules are not loaded at that time.
As soon as userspace accesses any of these nodes, the in-kernel
module-loader will load the module, and the device can be used.
The header file minor calculation needed to be simplified to
make __stringify() (supports only two indirections) in
the MODULE_ALIAS macro work.
This is part of systemd's effort to get rid of unconditional
module load instructions and needless init scripts.

ALSA<-OSS emulation

- ALSA: Don't leak in sound/core/oss/pcm_oss.c::snd_pcm_hw_param_near()
snd_pcm_hw_param_near() will leak the memory allocated to 'save' if the
call to snd_pcm_hw_param_max() returns less than zero.
This patch makes sure we never leak.
- ALSA: Fix SNDCTL_DSP_RESET ioctl for OSS emulation
In OSS emulation, SNDCTL_DSP_RESET ioctl needs the reset of the internal
buffer state in addition to drop of the running streams. Otherwise the
succeeding access becomes inconsistent.
Tested-by: Amit Nagal <helloin.amit@gmail.com>
- ALSA: OSS mixer emulation - fix locking
Fix mutex release and cleanup some locking code.
- sound: Remove unnecessary casts of private_data

ALSA<-OSS sequencer

- Fix build errors with 2.6.37-rc1 update
Refreshed patch, added noop_llseek compat definition for older kernels.
- llseek: automatically add .llseek fop
All file_operations should get a .llseek operation so we can make
nonseekable_open the default for future file operations without a
.llseek pointer.
The three cases that we can automatically detect are no_llseek, seq_lseek
and default_llseek. For cases where we can we can automatically prove that
the file offset is always ignored, we use noop_llseek, which maintains
the current behavior of not returning an error from a seek.
New drivers should normally not use noop_llseek but instead use no_llseek
and call nonseekable_open at open time. Existing drivers can be converted
to do the same when the maintainer knows for certain that no user code
relies on calling seek on the device file.
The generated code is often incorrectly indented and right now contains
comments that clarify for each added line why a specific variant was
chosen. In the version that gets submitted upstream, the comments will
be gone and I will manually fix the indentation, because there does not
seem to be a way to do that using coccinelle.
Some amount of new code is currently sitting in linux-next that should get
the same modifications, which I will do at the end of the merge window.
Many thanks to Julia Lawall for helping me learn to write a semantic
patch that does all this.
===== begin semantic patch =====
// This adds an llseek= method to all file operations,
// as a preparation for making no_llseek the default.
//
// The rules are
// - use no_llseek explicitly if we do nonseekable_open
// - use seq_lseek for sequential files
// - use default_llseek if we know we access f_pos
// - use noop_llseek if we know we don't access f_pos,
// but we still want to allow users to call lseek
//
@ open1 exists @
identifier nested_open;
@@
nested_open(...)
{
<+...
nonseekable_open(...)
...+>
}
@ open exists@
identifier open_f;
identifier i, f;
identifier open1.nested_open;
@@
int open_f(struct inode *i, struct file *f)
{
<+...
(
nonseekable_open(...)
|
nested_open(...)
)
...+>
}
@ read disable optional_qualifier exists @
identifier read_f;
identifier f, p, s, off;
type ssize_t, size_t, loff_t;
expression E;
identifier func;
@@
ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
{
<+...
(
*off = E
|
*off += E
|
func(..., off, ...)
|
E = *off
)
...+>
}
@ read_no_fpos disable optional_qualifier exists @
identifier read_f;
identifier f, p, s, off;
type ssize_t, size_t, loff_t;
@@
ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
{
... when != off
}
@ write @
identifier write_f;
identifier f, p, s, off;
type ssize_t, size_t, loff_t;
expression E;
identifier func;
@@
ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
{
<+...
(
*off = E
|
*off += E
|
func(..., off, ...)
|
E = *off
)
...+>
}
@ write_no_fpos @
identifier write_f;
identifier f, p, s, off;
type ssize_t, size_t, loff_t;
@@
ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
{
... when != off
}
@ fops0 @
identifier fops;
@@
struct file_operations fops = {
...
};
@ has_llseek depends on fops0 @
identifier fops0.fops;
identifier llseek_f;
@@
struct file_operations fops = {
...
.llseek = llseek_f,
...
};
@ has_read depends on fops0 @
identifier fops0.fops;
identifier read_f;
@@
struct file_operations fops = {
...
.read = read_f,
...
};
@ has_write depends on fops0 @
identifier fops0.fops;
identifier write_f;
@@
struct file_operations fops = {
...
.write = write_f,
...
};
@ has_open depends on fops0 @
identifier fops0.fops;
identifier open_f;
@@
struct file_operations fops = {
...
.open = open_f,
...
};
// use no_llseek if we call nonseekable_open
////////////////////////////////////////////
@ nonseekable1 depends on !has_llseek && has_open @
identifier fops0.fops;
identifier nso ~= "nonseekable_open";
@@
struct file_operations fops = {
... .open = nso, ...
+.llseek = no_llseek, /* nonseekable */
};
@ nonseekable2 depends on !has_llseek @
identifier fops0.fops;
identifier open.open_f;
@@
struct file_operations fops = {
... .open = open_f, ...
+.llseek = no_llseek, /* open uses nonseekable */
};
// use seq_lseek for sequential files
/////////////////////////////////////
@ seq depends on !has_llseek @
identifier fops0.fops;
identifier sr ~= "seq_read";
@@
struct file_operations fops = {
... .read = sr, ...
+.llseek = seq_lseek, /* we have seq_read */
};
// use default_llseek if there is a readdir
///////////////////////////////////////////
@ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier readdir_e;
@@
// any other fop is used that changes pos
struct file_operations fops = {
... .readdir = readdir_e, ...
+.llseek = default_llseek, /* readdir is present */
};
// use default_llseek if at least one of read/write touches f_pos
/////////////////////////////////////////////////////////////////
@ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier read.read_f;
@@
// read fops use offset
struct file_operations fops = {
... .read = read_f, ...
+.llseek = default_llseek, /* read accesses f_pos */
};
@ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier write.write_f;
@@
// write fops use offset
struct file_operations fops = {
... .write = write_f, ...
+ .llseek = default_llseek, /* write accesses f_pos */
};
// Use noop_llseek if neither read nor write accesses f_pos
///////////////////////////////////////////////////////////
@ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier read_no_fpos.read_f;
identifier write_no_fpos.write_f;
@@
// write fops use offset
struct file_operations fops = {
...
.write = write_f,
.read = read_f,
...
+.llseek = noop_llseek, /* read and write both use no f_pos */
};
@ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier write_no_fpos.write_f;
@@
struct file_operations fops = {
... .write = write_f, ...
+.llseek = noop_llseek, /* write uses no f_pos */
};
@ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
identifier read_no_fpos.read_f;
@@
struct file_operations fops = {
... .read = read_f, ...
+.llseek = noop_llseek, /* read uses no f_pos */
};
@ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
identifier fops0.fops;
@@
struct file_operations fops = {
...
+.llseek = noop_llseek, /* no read or write fn */
};
===== End semantic patch =====
- ALSA: seq/oss - Fix double-free at error path of snd_seq_oss_open()
The error handling in snd_seq_oss_open() has several bad codes that
do dereferecing released pointers and double-free of kmalloc'ed data.
The object dp is release in free_devinfo() that is called via
private_free callback. The rest shouldn't touch this object any more.
The patch changes delete_port() to call kfree() in any case, and gets
rid of unnecessary calls of destructors in snd_seq_oss_open().
Fixes CVE-2010-3080.
Reported-and-tested-by: Tavis Ormandy <taviso@cmpxchg8b.com>

ARM AACI PL041 driver

- ALSA: AACI: fix timeout duration
Relying on the access time of peripherals is unreliable - it depends
on the speed of the CPU and the bus. On Versatile Express, these
timeouts were expiring, causing the driver to fail.
Add udelay(1) to ensure that they don't expire early, and adjust
timeouts to give a reasonable margin over the response times.
- ALSA: AACI: fix timeout condition checking
Ensure that a timeout coincident with the condition being waited for
results in success rather than failure. This helps avoid timeout
conditions being inappropriately flagged.

AZT3328 driver

- ALSA: azt3328 - fix broken AZF_FMT_XLATE macro
Cleanly revert to non-macro implementation of
snd_azf3328_codec_setfmt(), to fix last-minute functionality breakage
induced by following checkpatch.pl recommendations without giving them
their due full share of thought ("revolting computer, ensuing PEBKAC").
I would like to thank Jiri Slaby for his very timely (in -rc1 even)
and unexpected (uncommon hardware) "recognition of the dangerous situation"
due to his very commendable static parser use. :)
Reported-by: Jiri Slaby <jslaby@suse.cz>
- ALSA: azt3328: improve snd_azf3328_codec_setdmaa()
- add some WARN_ONCE
- add multi-I/O helper (and use helper struct)
- fix off-by-1 DMA length bug
- better variable naming
- ALSA: azt3328: use proper private_data hookup for codec identification
- much improved implementation due to clean codec hierarchy
- preparation for potential per-codec spinlock change
NOTE: additionally removes a chip->pcm[codec_type] NULL ptr check
(due to it requiring access to external chip struct),
however I believe this to be ok since this condition should not occur
and most drivers don't check against that either.
- ALSA: azt3328: use a helper variable to remove one indirection in hotpath
- ALSA: azt3328: cosmetics: use a helper variable for codec setup
- ALSA: azt3328: _setfmt() update
- use a separate variable for the frequency part, don't always "or" it
- use a "clever"(?) macro to shorten the code
- ALSA: azt3328: cosmetics, minor updates
- correct samples to be POSIX shell compatible
- add logging of jiffies value in _pointer()
- several comments
- cleanup
- ALSA: azt3328: period bug fix (for PA), add missing ACK on stop timer
. Fix PulseAudio "ALSA driver bug" issue
(if we have two alternated areas within a 64k DMA buffer, then max
period size should obviously be 32k only).
Back references:
http://pulseaudio.org/wiki/AlsaIssues
http://fedoraproject.org/wiki/Features/GlitchFreeAudio
. In stop timer function, need to supply ACK in the timer control byte.
. Minor log output correction
When I did my first PA testing recently, the period size bug resulted
in quite precisely observeable half-period-based playback distortion.
PA-based operation is quite a bit more underrun-prone (despite its
zero-copy optimizations etc.) than raw ALSA with this rather spartan
sound hardware implementation on my puny Athlon.
Note that even with this patch, azt3328 still doesn't work for both
cases yet, PA tsched=0 and tsched
(on tsched=0 it will playback tiny fragments of periods, leading to tiny
stuttering sounds with some pauses in between, whereas with
timer-scheduled operation playback works fine - minus some quite increased
underrun trouble on PA vs. ALSA, that is).

Apple Onboard Audio driver

- sound: don't use flush_scheduled_work()
flush_scheduled_work() is deprecated and scheduled to be removed.
* cancel[_delayed]_work() + flush_scheduled_work() ->
cancel[_delayed]_work_sync().
* wm8350, wm8753 and soc-core use custom code to cancel a delayed
work, execute it immediately if it was pending and wait for its
completion. This is equivalent to flush_delayed_work_sync(). Use
it instead.
- ALSA: aoa: Remove wrong i2c_set_clientdata in onyx_i2c_remove()
It does not make sense to set clientdata to onyx in onyx_i2c_remove()
as we are going to kfree onyx.
What we really want here is i2c_set_clientdata(client, NULL);
Since the i2c core will take care of it now, so this patch just removes it.
- of/device: Replace struct of_device with struct platform_device
of_device is just an alias for platform_device, so remove it entirely. Also
replace to_of_device() with to_platform_device() and update comment blocks.
This patch was initially generated from the following semantic patch, and then
edited by hand to pick up the bits that coccinelle didn't catch.
@@
@@
-struct of_device
+struct platform_device
Reviewed-by: David S. Miller <davem@davemloft.net>
- powerpc/macio: Fix probing of macio devices by using the right of match table
Grant patches added an of mach table to struct device_driver. However,
while he changed the macio device code to use that, he left the match
table pointer in struct macio_driver and didn't update drivers to use
the "new" one, thus breaking the probing.
This completes the change by moving all drivers to setup the "new"
one, removing all traces of the old one, and while at it (since it
changes the exact same locations), I also remove two other duplicates
from struct driver which are the name and owner fields.
- arch/powerpc: Move dma_mask from of_device into pdev_archdata
By moving dma_mask into pdev_archdata, and adding archdata to
struct of_device, it makes it possible to substitute of_device
with struct platform_device, which is a stepping stone to
removing the of_platform bus entirely.
- of: Always use 'struct device.of_node' to get device node pointer.
The following structure elements duplicate the information in
'struct device.of_node' and so are being eliminated. This patch
makes all readers of these elements use device.of_node instead.
(struct of_device *)->node
(struct dev_archdata *)->prom_node (sparc)
(struct dev_archdata *)->of_node (powerpc & microblaze)
- powerpc/aoa: gpio-pmf.c: 3 * redundant code

Asihpi driver

- Updated alsa-kernel asihpi sources so patches are no longer required
- Move asihpi driver to linux kernel tree
Fix the rest build stubs.
- asihpi - Correctly use *hm for sizeof. Fix bad case in function name.
- asihpi - Remove superfluous c++ only extern "C", and some unused macros.
- asihpi - Use kmalloced buffers in asihpi_hpi_ioctl()
hpi_{message,response}_buffer_v1 are too big to be temporary variables
on stack. Kmalloc them to avoid stack overflow.
- ALSA: asihpi - Fix sParse warnings.
- ALSA: asihpi - Update copyright years.
- ALSA: asihpi - Checkpatch fixes.
- ALSA: asihpi - checkpatch, no parens on return value
- ALSA: sound/pci/asihpi/hpioctl.c: Remove unnecessary casts of pci_get_drvdata
- ALSA: asihpi - Unsafe memory management when allocating control cache
I noticed that sound/pci/asihpi/hpicmn.c::hpi_alloc_control_cache() does
not check the return value from kmalloc(), which may fail.
If kmalloc() fails we'll dereference a null pointer and things will go bad
fast.
There are two memory allocations in that function and there's also the
problem that the first may succeed and the second may fail and nothing is
done about that either which will also go wrong down the line.
- ALSA: asihpi - Return hw error directly from oustream_write.
If hw error is ignored, status is updated with invalid info.
- ALSA: asihpi: check return value of get_user()
get_user() may fail, if so return -EFAULT.
- ALSA: hpimsgx: fix wrong sizeof
The correct size should be sizeof(gRESP_HPI_SUBSYS_FIND_ADAPTERS),
sizeof(&gRESP_HPI_SUBSYS_FIND_ADAPTERS) is incorrect.
- ALSA: asihpi - Avoid useless assignment of returned index values.
- ALSA: asihpi - Avoid using c99 uintX types.
- ALSA: asihpi - HPI version 4.04.01
- ALSA: asihpi: fix sign bug
bytes_per_sec is unsigned, so if snd_pcm_format_width() return error we
would not see it.
- ALSA: asihpi - Remove unneeded ;
- ALSA: asihpi - Minor HPI error handling fixes
Handle errors in tuner level caching,
Ccorrect error code for aesebu rx status.
- ALSA: asihpi - Change compander API and tidy
Compander API changed to one function per parameter.
Factor out some common code for stereo log value reading.
Make some more entity functions static.
- ALSA: asihpi - Add ASI5200 family
- ALSA: asihpi - Use version string instead of printf formatting
- ALSA: asihpi - HPI API updates
Remove some deprecated items.
Change compander api to one function per parameter.
Add a version string define.
- ALSA: asihpi - Get rid of incorrect "long" types and casts.
These give incorrect results for index wrap on 64 bit.
- ALSA: asihpi - Fix uninitialized variable
Initialize prev_ctl properly before reference:
sound/pci/asihpi/asihpi.c: In function ‘snd_card_asihpi_mixer_new’:
sound/pci/asihpi/asihpi.c:2568:30: warning: ‘prev_ctl.dst_node_index’ may be used uninitialized in this function
- ALSA: asihpi - Minor code cleanup
- ALSA: asihpi - Add support for new ASI8800 family
- ALSA: asihpi - Fix bug preventing outstream_write preload from happening
- ALSA: asihpi - Fix imbalanced lock path in hw_message
- ALSA: asihpi - Remove support for old ASI8800 family
- ALSA: asihpi - Add hd radio blend functions
Add hd radio blend functions. HPI version inc to 4.03.25.
- ALSA: asihpi - Remove unused io map functions
- ALSA: sound/pci/asihpi: Use kzalloc
Use kzalloc rather than the combination of kmalloc and memset.
The semantic patch that makes this change is as follows:
(http://coccinelle.lip6.fr/)
// <smpl>
@@
expression x,size,flags;
statement S;
@@
-x = kmalloc(size,flags);
+x = kzalloc(size,flags);
if (x == NULL) S
-memset(x, 0, size);
// </smpl>
- ALSA: asihpi: incorrect range check
The entity_type_to_size[] array has LAST_ENTITY_TYPE (11) number of elements,
not LAST_ENTITY_ROLE (17). This only affects the debug output.
- ALSA: asihpi: testing the wrong variable
There is a typo here. We want to test "*dst" not "dst".
- ALSA: Add support of AudioScience ASI boards
Added the support of AudioScience ASI boards.
The driver has been tested for years on alsa-driver external tree,
now finally got merged to the kernel.

Atmel AT73C213 DAC driver

- ALSA: AT73C213: Rectify misleading comment.
The Atmel SSC can divide by even numbers, not only powers of two.
- ALSA: sound/spi: patch for the unuseful variable removal
The '*bitclk' of structure 'snd_at73c213' seems no use,
so I make a patch to remove the unnecessary variable.

Atmel on-chip Audio Bitstream DAC (ABDAC)

- ALSA: fix invalid hardware.h include in ac97c for AVR32 architecture
This patch fixes the non-compiling AC97C driver for AVR32 architecture by
include mach/hardware.h only for AT91 architecture. The AVR32 architecture does
not supply the hardware.h include file.
- ALSA: atmel - Fix the return value in error path
In the commit c0763e687d0283d0db507813ca4462aa4073c5b5
ALSA: snd-atmel-abdac: test wrong variable
the return value via PTR_ERR() had to be fixed as well.
- ALSA: snd-atmel-abdac: test wrong variable
After clk_get() pclk is checked second time instead of sample_clk check.
- ALSA: atmel: set "channel A event" output to debug

Au12x0/Au1550 PSC ASoC

- ASoC: Do not include soc-dapm.h
There is no need to include soc-dapm.h since soc.h includes it.
- ASoC: fix au1x platform
This patch fixes up the au1x audio platform after the multi-component
merge:
- compile fixes and updates to get DB1200 platform audio working again,
- removal of global variables in AC97/I2S/DMA(PCM) modules.
The AC97 part is limited to one instance only for now due to issues
with getting at driver data in the soc_ac97_ops.
- ASoC: Support non-crystal master clocks for WM8731
Instead of unconditionally enabling the crystal oscillator on the WM8731
only enable it when explicitly selected via set_sysclk(), allowing machine
drivers to specify that they drive a clock into MCLK alone. This avoids
any conflicts between the oscillator and the external MCLK source and saves
power for systems which do not need the oscillator.
This should also deliver a small power saving on systems using the crystal
since the oscillator will only be enabled when the ADC or DAC is active.
- ASoC: au1x: fix section mismatch in psc-i2s.c
Annotate platform probe callback with __devinit instead of plain __init.
- ASoC: use resource_size for au1x
Use the resource_size function instead of manually calculating the
resource size.This patch can reduce the chance of introducing off-by-one
errors.

Aztech AZT1605 (galaxy) driver

- Add missing *.c for isa/galaxy build stub
- Add build stub for new galaxy driver
- ALSA: ISA: New Aztech Sound Galaxy driver
This is a new driver for Aztech Sound Galaxy ISA soundcards based on the
AZT1605 and AZT2316 chipsets. It's constructed as two seperate drivers
for either chipset generated from the same source file, with (very)
minimal ifdeffery.
The drivers check the SB DSP version to decide if they are being loaded
for the right chip. AZT1605 returns 2.1 by default and AZT2316 3.1.
This isn't full-proof as the DSP version can actually be set through
software but it's close enough -- as far as I've been able to see, the
DSP version can not be stored in the EEPROM and the cards will therefore
startup with the defaults.
This distinction could (with the same success rate) also be used to
decide which chip we're looking at at runtime meaning a single, merged
driver is also an option but I feel it's actually nicer this way. A
merged driver would have to postpone translating the passed in resource
values to the card configuration until it knew which one it was looking
at and would need to postpone erring out on mpu_irq=10 for azt1605 and
mpu_irq=3 for azt2316.
The drivers have been tested on various cards. For snd-azt1605:
FCC-ID I38-MMSN811: Aztech Sound Galaxy Nova 16 Extra
FCC-ID I38-MMSN822: Aztech Sound Galaxy Pro 16 II
and for snd-azt2316:
FCC-ID I38-MMSN824: Aztech Sound Galaxy Pro 16 AB
FCC-ID I38-MMSN826: Trust Sound Expert DeLuxe Wave 32 (05201)
FCC-ID I38-MMSN830: Trust Sound Expert DeLuxe 16+ (05202)
FCC-ID I38-MMSN837: Packard Bell ISA Soundcard 030069
FCC-ID I38-MMSN846: Trust Sound Expert DeLuxe 16-3D (06300)
FCC-ID I38-MMSN847: Trust Sound Expert DeLuxe Wave 32-3D (06301)
FCC-ID I38-MMSN852: Aztech Sound Galaxy Waverider Pro 32-3D
826 and 846 were also marketed directly by Aztech and then known as:
FCC-ID I38-MMSN826: Aztech Sound Galaxy Waverider 32+
FCC-ID I38-MMSN846: Aztech Sound Galaxy Nova 16 Extra II-3D
Together, these cover the AZT1605 and AT2316A, AZT2316R and AZT2316-S
chipsets. All cards work fully -- full-duplex PCM, MIDI and FM. Full
duplex is a little flaky on some.
I38-MSN811 tends to not work in full-duplex but sometimes does with the
highest success rate being achieved when you first start the capture and
then a playback instead of the other way around (it's a CS4231-KL
codec).
The cards with an AD1845XP codec (my I38-MMSN826 and one of my
I38-MMSN830s) are also somewhat duplex-challenged. Sometimes full-duplex
works, sometimes not and this varies from try to try. This seems likely
to be a timing problem somewhere inside wss-lib.
I38-MMSN826 has an additional "ICS2115 WaveFront" wavetable synth
onboard that isn't supported yet. The wavetable synths on I38-MMSN847
and I38-MMSN852 are wired directly to the standard MPU-401 UART and the
AUX1 input on the codec and work without problem.
CD-ROM audio on the cards is routed to the codec "Line" input, Line-In
to its Aux input, and FM/Wavetable to its AUX1 input. I did not rename
the controls due to the capture source enumeration: I see that
capture-source overrides are hardcoded in wss-lib and this is just too
ugly to live.
Versus the old snd-sgalaxy driver these drivers add support for the
models without a configuration EEPROM (which are common), full-duplex,
MPU-401 UART and OPL3. In the future they might grow support for that
ICS2115 WaveFront synth on 826 and an hwdep interface to write to the
EEPROM on the models that have one.

BT87x driver

- ALSA: bt87x: use enum control info helper
Simplify the info callback by using the snd_ctl_enum_info() helper function.

CA0106 driver

- tree-wide: fix comment/printk typos
"gadget", "through", "command", "maintain", "maintain", "controller", "address",
"between", "initiali[zs]e", "instead", "function", "select", "already",
"equal", "access", "management", "hierarchy", "registration", "interest",
"relative", "memory", "offset", "already",
- sound, ca0106: Fix assignment to 'channel'.
The assignment to the local variable 'channel' in
snd_ca0106_pcm_pointer_capture() is a little crazy. Order of assignment is
undefined. This fixes it.
- ALSA: ca0106: Use card specific dac id for mute controls.
- ALSA: ca0106: Allow different sound cards to use different SPI channel mappings.
- ALSA: ca0106: Create a nice spot for mapping channels to dacs.
This is to allow a future patch to have card specific mappings between
dacs, which is required since the Sound Blaster 5.1vx seems to have a
different mapping to what was previously used.
- ALSA: ca0106: Move enabling of front dac out of hardcoded setup sequence.
- ALSA: ca0106: Pull out dac powering routine into separate function.
This is ground work for a future commit where cards (such as the Sound
Blaster 5.1vx) have different mappings between dacs and channels.
- ALSA: ca0106 - add Sound Blaster 5.1vx info.
- ALSA: ca0106 - clean up playback pointer callback
Clean up the playback pointer callback function a bit, and make the
pointer check more strictly to avoid bogus pointers.

CMI8788 (Oxygen) driver

- Adjust build stubs for oxygen driver changes
- ALSA: Xonar, CS43xx: Don't overrun static array
'cs4398_regs' in 'struct xonar_cs43xx' is an array of 'u8' with a size of
8. So, this code in sound/pci/oxygen/xonar_cs43xx.c::dump_d1_registers()
for (i = 2; i <= 8; ++i)
snd_iprintf(buffer, " %02x", data->cs4398_regs[i]);
will overrun the array when 'i == 8'.
I guess that what's needed to fix it is the trivial patch below, but I
must admit that I have no idea about this code, so I may very well be
wrong. Additionally, I have no way to actually test this, so all I know is
that the below compiles. Someone who actually knows this code should take
a look before anything is comitted - consider the below (not much more
than) a bug report.
- ALSA: oxygen: Xonar DG: fix CS4245 register writes
Accidentally exchanging register addresses and register values leads to
many strange errors ...
- ALSA: oxygen: fix Xonar DG input
Apparently, this card uses the other I2S input.
- ALSA: include delay.h for msleep in Xonar DG support
- ALSA: oxygen: add S/PDIF source selection for Claro cards
Add a mixer control to switch between the optical and coaxial S/PDIF
inputs on the HT-Omega Claro and Claro halo cards.
- ALSA: oxygen: fix CD/MIDI for X-Meridian (2G)
Enable the X-Meridian's CD input and the X-Meridian 2G's potential
MIDI ports.
- ALSA: oxygen: add some card names
Instead of the generic Oxygen, use the actual card name, if known.
- ALSA: oxygen: do not show chip revision in card longname
Apparently, the revision is 2 on all sold sound cards, so this
information is not actually useful.
- ALSA: oxygen: X-Meridian: add S/PDIF source selection
Add a mixer control to select between the on-board and extension board
S/PDIF inputs for the X-Meridian (2G).
- ALSA: oxygen: add digital input validity check switch
Add a mixer control to prevent capturing S/PDIF samples that are not
marked as valid (non-audio or corrupted samples).
- ALSA: core, oxygen, virtuoso: add an enum control info helper
Introduce the helper function snd_ctl_enum_info() to fill out the
elem_info fields for an enumerated control.
- ALSA: virtuoso: add Xonar HDAV1.3 Slim support
Add experimental support for the Asus Xonar HDAV1.3 Slim sound card.
- ALSA: oxygen: add Xonar DG support
Add experimental support for the Asus Xonar DG sound card.
- ALSA: oxygen: add X-Meridian 2G support
Add support for the AuzenTech X-Meridian 7.1 2G sound card.
- ALSA: oxygen: add more PCI IDs
Add PCI IDs for some unknown models.
- ALSA: virtuoso: reduce MCLK in double rate modes
For the CSxxxx and AKxxxx DAC/ADC chips, the MCLK factor in double rate
modes (64-96 kHz) can be reduced to 128x without reducing sound quality.
- ALSA: oxygen: simplify model-specific MCLK handling
Replace the get_i2s_mclk callback with tables of MCLK values. This
simplifies the MCLK-handling code in both the framework and the model-
specific drivers.
- ALSA: virtuoso: use headphone gain setting only on front DAC
Do not apply the headphone gain offset to any but the front DAC. These
DACs would not be used in headphone mode, so this saves a few register
writes.
- ALSA: virtuoso: handle DAC oversampling automatically
Remove the DAC Oversampling mixer control because this setting does not
make much sense.
For cards with the H6 daughterboard, 128x oversampling was disabled
anyway because these high MCLK frequency would not be compatible with
the connector cable.
For cards without the H6 daughterboard, 128x gives a slightly higher
output quality; there is no reason to reduce it to 64x except for saving
power, but then these cards have not been designed to be power efficient
anyway (the D2's blinkenlights cannot be disabled).
- ALSA: virtuoso: use lower master clock with H6 daughterboard
Because of the unshielded connector cable, it is important to use as low
a master clock frequency as possible with the H6.
For double rate modes (64-96 kHz), the MCLK rate is unconditionally
lowered from 512x to 256x because the higher rate would not improve
anything.
- ALSA: virtuoso: configure correct master clock frequency on the CS2000
The clock output of the CS2000, which is used as master clock for the
DACs, was using half the actual master clock frequency for some reason.
Using the theoretically correct frequency seems also to work in practice.
- ALSA: virtuoso: remove non-working controls on Essence ST Deluxe
On the Xonar Essence ST Deluxe, remove all mixer controls that would
require I2C communication with the third DAC, which does not work
because of an addressing conflict with the CS2000 chip.
- ALSA: virtuoso: change PCM1796 format to I2S
Change the PCM format used for the PCM1796 from left-justified to I2S to
ensure that the correct format is used even for the Essence ST Deluxe's
center/LFE DAC, where I2C does not work because of an address conflict
with the CS2000 chip.
- ALSA: virtuoso: wait for PCM1796 clock to become stable
The PCM1796 needs the master clock for I2C communication to work, so
add delays after clock changes to ensure that the clock is stable when
we try to write the DACs' registers.
- ALSA: virtuoso: do not use fast I2C speed
To make the I2C communication reliable when using the H6 daughterboard,
reduce the I2C clock frequency.
- ALSA: oxygen: fix SPI clocks slower than 6.25 MHz
Fix wrong register bits for SPI clock cycle times longer than 160 ns,
and adjust the polling loop timeout for these speeds.
- ALSA: oxygen: remove oxygen_model::private_data field
The number of DACs can now be deduced from the dac_channels_mixer field,
so the private_data field is no longer needed.
- ALSA: oxygen: allow different number of PCM and mixer channels
For cards like the Xonar HDAV1.3, differentiate between the number of
PCM channels that can be played and the number of channels whose volume
can be adjusted.
- ALSA: oxygen: update hardware comments
Reformat and update the comments that describe the hardware connections
on the various models.
- ALSA: oxygen: show correct package ID
Instead of the hardcoded "CMI8788", show the actual chip name.
Note: This is neither what the chip is (it's always the same),
nor what the chip is actually called.
- ALSA: oxygen: allow to dump codec registers
To help with debugging, add the registers of the model-specific
codecs to the controller and AC97 register dump in the proc file.
- ALSA: virtuoso: fix front panel routing for D1/DX/ST(X)
The "Front Panel" switch on the Xonar D1/DX actually switches only the
output direction, so mark it appropriately.
The front panel microphone is controlled by the FMIC2MIC bit of the
CM9780. It was unconditionally enabled on the D1/DX and never set on
the ST(X); add a control for it. Selecting the front panel microphone
as source does not actually disable the microphone jack, but this is
bug-compatible with the Windows driver, and users rely on it.
- ALSA: virtuoso: add HDMI enable switch for HDAV1.3
The GPIO bit that enables analog output on the Xonar HDAV1.3 also
disables the HDMI audio output, so we better add a switch for it.
Hopefully, this is sufficient to make the HDMI output work.
- ALSA: virtuoso: initialize unknown GPIO bits
Initialize the configuration of some unknown GPIO output bits (that
might not be used at all) to be the same as in the Windows driver, just
to be sure.
- ALSA: oxygen: add HiFier Serenade support
Add support for the TempoTec/MediaTek HiFier Serenade sound card.
The PCI ID was already there, but the driver handled it like the
Fantasia model, which resulted in a dummy recording device. As
a stereo output-only card, this model is to be handled exactly
like the HG2PCI.
- ALSA: oxygen: reorganize PCI IDs
Sort the PCI IDs so that they make logical sense. Also move the card
name comments into this list because the model symbols should be (more)
self-explanationary.
- ALSA: oxygen: add Kuroutoshikou CMI8787-HG2PCI support
Add support for the Kuroutoshikou CMI8787-HG2PCI sound card.
[replaced non-latin letters in the patch by tiwai]
- ALSA: oxygen: support for period wakeup disabling
Allow disabling period wakeup interrupts for all PCM streams.
- ALSA: oxygen: merge HiFier driver into snd-oxygen
The snd-hifier driver contains more duplicated code than model-specific
code, so it does not make sense for it to be a separate driver.
Handling the two-channel output restriction can be easily done in the
generic driver.
- ALSA: oxygen - Add a SSID for CMI8787-HG2PCI
This board has a strange PCI SSID 13f6:ffff. Works as compabile as
MODEL_CMEDIA_REF.
Reported-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
- ALSA: oxygen: add PEX8111 initialization
Configure the PEX8111 bridge on the PCI Express cards so that the audio
DMA controller can do proper burst reads and is less likely to lose
data. This is usually done automatically, but is required on older
cards where the user has not applied the PLX firmware update.
- ALSA: oxygen: rewrite PCIe bridge initialization
Change the PCIe/PCI bridge initialization code to configure only the
bridge that is actually connected to the sound chip, instead of any
bridge found in the system. The new code also makes it easier to add
other bridges.
- ALSA: oxygen: reduce minimum period count
The interrupt counter is independent of the buffer counter, so there are
no restrictions on the period size. Having fewer periods also makes
PulseAudio happy.
- ALSA: oxygen: fix input monitor dB scale
The input monitor half volume bit results in a factor of 0.5, so the
minimum scale value should be -6 dB.
- ALSA: oxygen: fix chip ID register symbols
Rename the symbol for the XCID pins, fix up a decimal/hex confusion for
the CMI8787 package ID, and add the other known package IDs.
- ALSA: virtuoso: fix Xonar STX anti-pop delay
The anti-pop delay for the STX should be 800 ms, not 100 ms like the ST.
- ALSA: virtuoso: add HDAV1.3 Slim PCI ID
Add a PCI ID for the Xonar HDAV1.3 Slim. There is no actual support,
but the presence of the ID allows the EEPROM repair code to work for
this card.
- ALSA: oxygen: handle CD input configuration with a flag
There are more models without a CD input than with one, so handle this
explicitly with a device_config flag to avoid having to define a control
filter callback to filter it out.
- ALSA: virtuoso: fix Xonar DS chip name
The controller on the Xonar DS is labeled "AV66", not "AV200".
- ALSA: oxygen: fix analog capture on Claro halo cards
On the HT-Omega Claro halo card, the ADC data must be captured from the
second I2S input. Using the default first input, which isn't connected
to anything, would result in silence.
- ALSA: virtuoso: Xonar DS: add stereo upmixing to center/LFE channels
Add the possibility to route a mix of the two channels of stereo data to
the center and LFE outputs. Due to a WM8766 restriction, all surround
and back channels also get the mixed L/R signal in this case.
- ALSA: virtuoso: automatically handle Xonar DS headphone routing
Automatically mute the speaker outputs as long as a headphone is plugged.
- ALSA: virtuoso: add Xonar DS headphone jack detection
Now that the polarity of the headphone detection pin is known, replace
the debugging message with a proper jack plug input device.
- ALSA: virtuoso: fix Xonar DS input switches
Use the correct number, register bits, and names for the input switches.
- ALSA: virtuoso: fix WM8766 register writes with MSB
The check for the volume update latch bit was accidentally in the wrong
function, where it would prevent the MSB from being written, instead of
correctly ignoring it for cached values.
- ALSA: virtuoso: fix setting of Xonar DS line-in/mic-in controls
The Line and Mic inputs cannot be used at the same time, so the driver
has to automatically disable one of them if both are set. However, it
forgot to notify userspace about this change, so the mixer state would
be inconsistent. To fix this, check if the other control gets muted,
and send a notification event in this case.
Reported-and-tested-by: Nathan Schagen
- ALSA: virtuoso: work around missing reset in the Xonar DS Windows driver
For the WM8776 chip, this driver uses a different sample format and
more features than the Windows driver. When rebooting from Linux into
Windows, the latter driver does not reset the chip but assumes all its
registers have their default settings, so we get garbled sound or, if
the output happened to be muted before rebooting, no sound.
To make that driver happy, hook our driver's cleanup function into the
shutdown notifier and ensure that the chip gets reset.
Reported-and-tested-by: Nathan Schagen
- ALSA: virtuoso: fix Xonar D1/DX front panel microphone
Commit 65c3ac885ce9852852b895a4a62212f62cb5f2e9 in 2.6.33 accidentally
left out the initialization of the AC97 codec FMIC2MIC bit, which broke
recording from the front panel microphone.

CMIPCI driver

- ALSA: cmipci: use enum control info helper
Simplify info callbacks by using the snd_ctl_enum_info() helper function.

CS46xx driver

- ALSA: cs46xx memory management fixes for cs46xx_dsp_spos_create()
When reading through sound/pci/cs46xx/dsp_spos.c I noticed a couple of
things in cs46xx_dsp_spos_create().
It seems to me that we don't always free the various memory buffers we
allocate and we also do some work (structure member assignment) early,
that is completely pointless if some of the memory allocations fail and
we end up just aborting the whole thing.
I don't have hardware to test, so the patch below is compile tested only,
but it makes the following changes:
- Make sure we always free all allocated memory on failures.
- Don't do pointless work assigning to structure members before we know
all memory allocations, that may abort progress, have completed
successfully.
- Remove some trailing whitespace.
Tested-by: Ondrej Zary <linux@rainbow-software.org>

CS5535 driver

- PCI: make pci_restore_state return void
pci_restore_state only ever returns 0, thus there is no benefit in
having it return any value. Also, a large majority of the callers do
not check the return code of pci_restore_state. Make the
pci_restore_state a void return and avoid the overhead.

Common EMU synth

- ALSA: emux: Add trivial compat ioctl handler
Reported-by: Carmen Cru <carmen.cru@belgacom.net>

Compatibility header files

- Add CONFIG_SYSFS_DEPRECATED hack for older kernels
- PCM core - fix pcm.patch (added hw_ptr_buffer_jiffies variable)
Sync with latest alsa-kernel tree
- an attempt to fix compilations for new static pm_qos_request
- core: compilation fix for new QoS API, move snd-aloop code to alsa-kernel tree
- Fix pcm.patch - change type for snd_pcm->twake variable
- Add check of new usb_alloc_coherent() and pm_qos_request()

Conexant Riptide driver

- ALSA: riptide - Fix detection / load of firmware files
The detection and loading of firmeware on riptide driver has been broken
due to rewrite of some codes, checking the presense wrongly.
This patch fixes the logic again.
Reference: kernel bug 16596
https://bugzilla.kernel.org/show_bug.cgi?id=16596
- ALSA: riptide: check kzalloc() result
If kzalloc() fails exit with -ENOMEM.
- ALSA: alsa: riptide: don't use own hex_to_bin() method

Creative Sound Blaster X-Fi (20K1/20K2)

- ALSA: sound/pci/ctxfi/ctpcm.c: Remove potential for use after free
In each function, the value apcm is stored in the private_data field of
runtime. At the same time the function ct_atc_pcm_free_substream is stored
in the private_free field of the same structure. ct_atc_pcm_free_substream
dereferences and ultimately frees the value in the private_data field. But
each function can exit in an error case with apcm having been freed, in
which case a subsequent call to the private_free function would perform a
dereference after free. On the other hand, if the private_free field is
not initialized, it is NULL, and not invoked (see snd_pcm_detach_substream
in sound/core/pcm.c). To avoid the introduction of a dangling pointer, the
initializations of the private_data and private_free fields are moved to
the end of the function, past any possible free of apcm. This is safe
because the previous calls to snd_pcm_hw_constraint_integer and
snd_pcm_hw_constraint_minmax, which take runtime as an argument, do not
refer to either of these fields.
In each function, there is one error case where apcm needs to be freed, and
a call to kfree is added.
The sematic match that finds this problem is as follows:
(http://coccinelle.lip6.fr/)
// <smpl>
@@
expression e,e1,e2,e3;
identifier f,free1,free2;
expression a;
@@
*e->f = a
... when != e->f = e1
when any
if (...) {
... when != free1(...,e,...)
when != e->f = e2
* kfree(a)
... when != free2(...,e,...)
when != e->f = e3
}
// </smpl>

Digigram VX Pocket driver

- Corrected pcmcia build fixes
Fixed the wrong copies from 2.6.36.
Add inclusion of pcmcia/cs.h in several places.
- Create a dummy pcmcia/cs.h
- Fix build of pcmcia drivers after 2.6.37-rc1 merge
- Fix typos in the previous patch
- More fixes for new PCMCIA stuff
- Add build-fixes for 2.6.36 PCMCIA stuff
- Fix build with 2.6.35-rc1
- pcmcia: move driver name to struct pcmcia_driver
Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- pcmcia: convert pcmcia_request_configuration to pcmcia_enable_device
pcmcia_enable_device() now replaces pcmcia_request_configuration().
Instead of config_req_t, all necessary flags are either passed as
a parameter to pcmcia_enable_device(), or (in rare circumstances)
set in struct pcmcia_device -> flags.
With the last remaining user of include/pcmcia/cs.h gone, remove
all references.
Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- pcmcia: move config_{base,index,regs} to struct pcmcia_device
Several drivers prefer to explicitly set config_{base,index,regs},
formerly known as ConfigBase, ConfigIndex and Present. Instead of
passing these values inside config_req_t, store it in struct
pcmcia_device.
Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- pcmcia: simplify IntType
IntType was only set to INT_MEMORY (driver pcmciamtd) or INT_MEMORY_AND_IO
(all other drivers). As this flags seems to relate to ioport access, make
it conditional to the driver having requested IO port access. There are two
drivers which do not request IO ports, but did set INT_MEMORY_AND_IO:
ray_cs and b43. For those, we consistently only set INT_MEMORY in future.
Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- pcmcia: do not use io_req_t when calling pcmcia_request_io()
Instead of io_req_t, drivers are now requested to fill out
struct pcmcia_device *p_dev->resource[0,1] for up to two ioport
ranges. After a call to pcmcia_request_io(), the ports found there
are reserved, after calling pcmcia_request_configuration(), they may
be used.
- pcmcia: do not use io_req_t after call to pcmcia_request_io()
After pcmcia_request_io(), do not make use of the values stored in
io_req_t, but instead use those found in struct pcmcia_device->resource[].
- pcmcia: remove cs_types.h
Remove cs_types.h which is no longer needed: Most definitions aren't
used at all, a few can be made away with, and two remaining definitions
(typedefs, unfortunatley) may be moved to more specific places.
- pcmcia: dev_node removal (write-only drivers)
dev_node_t was only used to transport some minor/major numbers
from the PCMCIA device drivers to deprecated userspace helpers.
However, only a few drivers made use of it, and the userspace
helpers are deprecated anyways. Therefore, get rid of dev_node_t .
As a first step, remove any usage of dev_node_t from drivers which
only wrote to this typedef/struct, but did not make use of it.
- pcmcia: re-work pcmcia_request_irq()
Instead of the old pcmcia_request_irq() interface, drivers may now
choose between:
- calling request_irq/free_irq directly. Use the IRQ from *p_dev->irq.
- use pcmcia_request_irq(p_dev, handler_t); the PCMCIA core will
clean up automatically on calls to pcmcia_disable_device() or
device ejection.
- drivers still not capable of IRQF_SHARED (or not telling us so) may
use the deprecated pcmcia_request_exclusive_irq() for the time
being; they might receive a shared IRQ nonetheless.

Digigram VX core

- Clean up build of driver/vx/*
Removed conflicting inclusion of alsa-autoconf.h

Documentation

- ALSA: HDA: Add a new model "asus" for Conexant 5066/205xx
BugLink: http://bugs.launchpad.net/bugs/701271
This new model, named "asus", is identical to the "hp_laptop" model,
except for the location of the internal mic, which is at pin 0x1a.
It is used for Asus K52JU and Lenovo G560.
- ASoC: documentation updates
This patch is only for RFC purpose of ASoC documentation updates which
match with current ASoC codes with documents. Mostly modify features
are modified to be sync with changes after multi-component patches.
- ALSA: virtuoso: add Xonar HDAV1.3 Slim support
Add experimental support for the Asus Xonar HDAV1.3 Slim sound card.
- ALSA: oxygen: add Xonar DG support
Add experimental support for the Asus Xonar DG sound card.
- ALSA: oxygen: add X-Meridian 2G support
Add support for the AuzenTech X-Meridian 7.1 2G sound card.
- ALSA: hda - Remove dead md2 quirk code
- ALSA: oxygen: add HiFier Serenade support
Add support for the TempoTec/MediaTek HiFier Serenade sound card.
The PCI ID was already there, but the driver handled it like the
Fantasia model, which resulted in a dummy recording device. As
a stereo output-only card, this model is to be handled exactly
like the HG2PCI.
- ALSA: oxygen: add Kuroutoshikou CMI8787-HG2PCI support
Add support for the Kuroutoshikou CMI8787-HG2PCI sound card.
[replaced non-latin letters in the patch by tiwai]
- ALSA: oxygen: merge HiFier driver into snd-oxygen
The snd-hifier driver contains more duplicated code than model-specific
code, so it does not make sense for it to be a separate driver.
Handling the two-channel output restriction can be easily done in the
generic driver.
- ALSA: HDA: Add position_fix=3 module option, and refactor related code
What was previously known as via_dmapos_patch, and hard-coded to be
used for VIA and ATI controllers, is now configurable through a module
option. The background is that some VIA controllers seem to prefer
via_dmapos_patch to be turned off.
- ALSA: hda - Add a new hp-laptop model for Conexant 5066, tested on HP G60
This new model adds the following functionality to HP G60:
- Automute of internal speakers
- Autoswitch of internal/external mics
- Remove SPDIF not physically present
BugLink: http://launchpad.net/bugs/587388
- ALSA: ISA: Remove snd-sgalaxy
Its hardware is handled more fully by the new azt1605/azt2316 drivers.
- ALSA: ISA: New Aztech Sound Galaxy driver
This is a new driver for Aztech Sound Galaxy ISA soundcards based on the
AZT1605 and AZT2316 chipsets. It's constructed as two seperate drivers
for either chipset generated from the same source file, with (very)
minimal ifdeffery.
The drivers check the SB DSP version to decide if they are being loaded
for the right chip. AZT1605 returns 2.1 by default and AZT2316 3.1.
This isn't full-proof as the DSP version can actually be set through
software but it's close enough -- as far as I've been able to see, the
DSP version can not be stored in the EEPROM and the cards will therefore
startup with the defaults.
This distinction could (with the same success rate) also be used to
decide which chip we're looking at at runtime meaning a single, merged
driver is also an option but I feel it's actually nicer this way. A
merged driver would have to postpone translating the passed in resource
values to the card configuration until it knew which one it was looking
at and would need to postpone erring out on mpu_irq=10 for azt1605 and
mpu_irq=3 for azt2316.
The drivers have been tested on various cards. For snd-azt1605:
FCC-ID I38-MMSN811: Aztech Sound Galaxy Nova 16 Extra
FCC-ID I38-MMSN822: Aztech Sound Galaxy Pro 16 II
and for snd-azt2316:
FCC-ID I38-MMSN824: Aztech Sound Galaxy Pro 16 AB
FCC-ID I38-MMSN826: Trust Sound Expert DeLuxe Wave 32 (05201)
FCC-ID I38-MMSN830: Trust Sound Expert DeLuxe 16+ (05202)
FCC-ID I38-MMSN837: Packard Bell ISA Soundcard 030069
FCC-ID I38-MMSN846: Trust Sound Expert DeLuxe 16-3D (06300)
FCC-ID I38-MMSN847: Trust Sound Expert DeLuxe Wave 32-3D (06301)
FCC-ID I38-MMSN852: Aztech Sound Galaxy Waverider Pro 32-3D
826 and 846 were also marketed directly by Aztech and then known as:
FCC-ID I38-MMSN826: Aztech Sound Galaxy Waverider 32+
FCC-ID I38-MMSN846: Aztech Sound Galaxy Nova 16 Extra II-3D
Together, these cover the AZT1605 and AT2316A, AZT2316R and AZT2316-S
chipsets. All cards work fully -- full-duplex PCM, MIDI and FM. Full
duplex is a little flaky on some.
I38-MSN811 tends to not work in full-duplex but sometimes does with the
highest success rate being achieved when you first start the capture and
then a playback instead of the other way around (it's a CS4231-KL
codec).
The cards with an AD1845XP codec (my I38-MMSN826 and one of my
I38-MMSN830s) are also somewhat duplex-challenged. Sometimes full-duplex
works, sometimes not and this varies from try to try. This seems likely
to be a timing problem somewhere inside wss-lib.
I38-MMSN826 has an additional "ICS2115 WaveFront" wavetable synth
onboard that isn't supported yet. The wavetable synths on I38-MMSN847
and I38-MMSN852 are wired directly to the standard MPU-401 UART and the
AUX1 input on the codec and work without problem.
CD-ROM audio on the cards is routed to the codec "Line" input, Line-In
to its Aux input, and FM/Wavetable to its AUX1 input. I did not rename
the controls due to the capture source enumeration: I see that
capture-source overrides are hardcoded in wss-lib and this is just too
ugly to live.
Versus the old snd-sgalaxy driver these drivers add support for the
models without a configuration EEPROM (which are common), full-duplex,
MPU-401 UART and OPL3. In the future they might grow support for that
ICS2115 WaveFront synth on 826 and an hwdep interface to write to the
EEPROM on the models that have one.
- ALSA: hda - Update model entries in HD-Audio-Models.txt
- ALSA: hda: document VIA models
Add documentation about the autodetection of the VIA codec models to
avoid the false impression that they are not supported.
- Documentation: update broken web addresses.
Below you will find an updated version from the original series bunching all patches into one big patch
updating broken web addresses that are located in Documentation/*
Some of the addresses date as far far back as 1995 etc... so searching became a bit difficult,
the best way to deal with these is to use web.archive.org to locate these addresses that are outdated.
Now there are also some addresses pointing to .spec files some are located, but some(after searching
on the companies site)where still no where to be found. In this case I just changed the address
to the company site this way the users can contact the company and they can locate them for the users.
- ALSA: Update documents about new bits of xrun_debug proc file
- ALSA: hda - Add missing ALC680_* definitions
Also update the documentation.
- sound: move driver parameters to their own files
Move sound (OSS & ALSA) kernel parameters to their own files.
- ALSA: hda - add ideapad model for Conexant 5051 codec
Lenovo IdeaPad Y430 has an additional subwoofer connected at pin 0x1b,
which isn't muted when headphone is plugged in. This adds additional
support to the extra subwoofer via new ideapad model.
- Documentation/: it's -> its where appropriate
Fix obvious cases of "it's" being used when "its" was meant.
- ALSA: Merge es1688 and es968 drivers
The ESS ES968 chip is nothing more then a PnP companion
for a non-PnP audio chip. It was paired with non-PnP ESS' chips:
ES688 and ES1688. The ESS' audio chips are handled by the es1688
driver in native mode. The PnP cards are handled by the ES968
driver in SB compatible mode.
Move the ES968 chip handling to the es1688 driver so the driver
can handle both PnP and non-PnP cards. The es968 is removed.
Also, a new PnP id is added for the card I acquired (the change
was tested on this card).
- ALSA: Add support of AudioScience ASI boards
Added the support of AudioScience ASI boards.
The driver has been tested for years on alsa-driver external tree,
now finally got merged to the kernel.

Dreamcast AICA sound (pcm) driver

- sound: sh: ctrl_in/outX to __raw_read/writeX conversion.
The ctrl_xxx routines are deprecated, switch over to the __raw_xxx
versions.

EMU10K1/EMU10K2 driver

- ALSA: emu10k1: Fix warning: "CCR" redefined
CCR is defined in emu10k1, but SuperH is defined too.
If user use this driver with SuperH, it becomes a double definition.
- emu10k1: sync with 2.6 kernel tree
- ALSA: emu10k1 - delay the PCM interrupts (add pcm_irq_delay parameter)
With some hardware combinations, the PCM interrupts are acknowledged
before the period boundary from the emu10k1 chip. The midlevel PCM code
gets confused and the playback stream is interrupted.
It seems that the interrupt processing shift by 2 samples is enough
to fix this issue. This default value does not harm other,
non-affected hardware.
More information: Kernel bugzilla bug#16300
- ALSA: emu10k1: allow high-resolution mixer controls
Add a module option to allow the GPR mixer controls to have the full
resolution of the hardware, i.e., 0...2^31-1 instead of 0...100.
Because of bugs in userspace tools like alsactl and alsamixer, this is
not yet enabled by default.
- Fix typos in comments
[Ss]ytem => [Ss]ystem
udpate => update
paramters => parameters
orginal => original

EMU8000 driver

- ALSA: sb: check get_user() return value
get_user() may fail, if so return -EFAULT.
[Fixed one missing place by tiwai]

ENS1370/1+ driver

- Update broken web addresses in the kernel.
The patch below updates broken web addresses in the kernel
Reviewed-by: Finn Thain <fthain@telegraphics.com.au>

ES1688 driver

- ALSA: Merge es968 into es1688 driver
- ALSA: es1688: add pedantic range checks
Smatch complains that if (dev == SNDRV_CARDS) we're one past the end of
the array. That's unlikely to happen in real life, I suppose.
Also smatch complains about "strcpy(card->shortname, pcm->name);"
The "pcm->name" buffer is 80 characters and "card->shortname" is 32
characters. If you follow the call paths it turns out we never actually
use more than 16 characters so it's not a problem. But anyway, let's
make it easy for people auditing this in the future.
- ALSA: Merge es1688 and es968 drivers
The ESS ES968 chip is nothing more then a PnP companion
for a non-PnP audio chip. It was paired with non-PnP ESS' chips:
ES688 and ES1688. The ESS' audio chips are handled by the es1688
driver in native mode. The PnP cards are handled by the ES968
driver in SB compatible mode.
Move the ES968 chip handling to the es1688 driver so the driver
can handle both PnP and non-PnP cards. The es968 is removed.
Also, a new PnP id is added for the card I acquired (the change
was tested on this card).
- ALSA: es1688: allocate snd_es1688 structure as a part of snd_card structure
Allocate the snd_es1688 during the snd_card allocation.
This allows to remove the card pointer from the snd_es1688 structure.

ES1968 driver

- ALSA: es1968: Clear interrupts before enabling them
Avoid spurious interrupts when initializing the device.
- ALSA: snd-es1968: Make hardware volume buttons an input device (rev2)
The hardware volume handling code in essence just detects key presses, and
then does some hardcoded modification of the master volume based on which key
is pressed.
Clearly the right thing to do here is just report these keypresses to
userspace and let userspace decide what to with them.
This patch adds a Kconfig option which when enabled reports the volume
buttons as keypresses using an input device. When enabled this option
also gets rid of the ugly direct ac97 writes from the tasklet, the ac97lock
and the need for using a tasklet in general.

ES968 driver

- ALSA: Merge es968 into es1688 driver
- ALSA: Merge es1688 and es968 drivers
The ESS ES968 chip is nothing more then a PnP companion
for a non-PnP audio chip. It was paired with non-PnP ESS' chips:
ES688 and ES1688. The ESS' audio chips are handled by the es1688
driver in native mode. The PnP cards are handled by the ES968
driver in SB compatible mode.
Move the ES968 chip handling to the es1688 driver so the driver
can handle both PnP and non-PnP cards. The es968 is removed.
Also, a new PnP id is added for the card I acquired (the change
was tested on this card).
- ALSA: es968: fix wrong PnP dma index
There is only one dma for the ESS ES968 based board.
Its index is 0 and not 1.
This make the es968 card working.

Echoaudio driver

- ALSA: echoaudio: check kmalloc() result
If kmalloc() fails exit with -ENOMEM.
Ack-by: Giuliano Pochini <pochini@shiny.it>

Emagic Audiowerk 2

- ALSA: aw2-alsa.c: use pci_ids.h defines and fix checkpatch.pl noise
Use the VENDOR/DEVICE ids provided in pci_ids.h instead of creating
local ids of the same values.
Also, fix the following checkpatch.pl warnings:
WARNING: Use #include <linux/io.h> instead of <asm/io.h>
WARNING: unnecessary whitespace before a quoted newline

GUS Extreme driver

- ALSA: es1688: allocate snd_es1688 structure as a part of snd_card structure
Allocate the snd_es1688 during the snd_card allocation.
This allows to remove the card pointer from the snd_es1688 structure.

Generic drivers

- Fix build of aloop with older kernels
Added missing inclusion of <linux/math.h>
- core: compilation fix for new QoS API, move snd-aloop code to alsa-kernel tree
- snd-aloop: add controls for the playback stream parameters
In some use cases, it is necessary to know the playback parameters before
the capture stream is opened. Also, allow change the notify functionality
for the stream parameters change using the universal control API.
- snd-aloop: introduce "PCM Rate Shift 100000" control
To keep synchronization with other clock sources, allow driver to shift
the timing for +-20% using "PCM Rate Shift 100000" control. The value
100000 means no shift, 80000 means speed up for 20% and 120000 means
slow down for 20%.
- snd-aloop: Fix the garbage copy at the end of playback (draining)
- aloop: add pcm_notify module parameter
In some use cases, it is not good to restrict to one sample format/
channel count/rate the both playback and capture. For grabbers or any
other applications, it would be necessary to stop the capture stream
when playback parameters change to allow restart capturing with
the proper setup.
- aloop module: separate playback and capture timers
- the timing of playback and capture streams must be separate to ensure
proper function
- use snd_pcm_format_set_silence() rather than memset(0)
- align copy transfers to frame size
- Fix build with 2.6.35-rc1
- ALSA: ml403-ac97cr: Use vsprintf extension %pR for struct resource
- ALSA: snd-aloop - add pause support
- ALSA: snd-aloop - fix locking issues (running flag updates)
On SMP machines, the cable->running update must be atomic, otherwise
stream is not started correctly sometimes.
- ALSA: snd-aloop: add cable#0 and cable#1 files to proc card tree
Show some useful runtime information using procfs.
- ALSA: snd-aloop - fix issue in the timer start function
In some circumstances (the rate shift value was changed), the irq_pos
value may be higher than the fraction value in the timer start function.
Check for it.
Also, to avoid value overflow, decrease maximum period size.
- ALSA: snd-aloop: Fix hw_params restrictions and checking
This patch fixes the hw_params restrictions when first (or playback) stream
sets the final hardware parameters. Also, fix the hw_params checking
in the trigger callback.
- ALSA: snd-aloop - fix "PCM Slave Active" element read value
Simple coding fix.
- ALSA: snd-aloop - fix capture buffer silence
In a special case, some old samples are left in the capture ring buffer.
Fix it.
- ALSA: snd-aloop - fix the "PCM Playback Channels" kcontrol
Obvious copy-and-paste error.
- sound: Remove unnecessary casts of private_data
- ALSA: introduce the snd-aloop module for the PCM loopback
The snd-aloop module allows redirecting of the PCM playback in the
kernel back to the user space using the standard ALSA PCM capture API.
The module also allows time synchronization with another timing source
and notifications of playback stream parameter changes.
- Kconfig: fixo typo in "Xilinx'"
- ALSA: Kconfig: SND_AC97_POWER_SAVE description improvement
The description has been expanded to explain the time-out
value provided by the power_save module parameter.
- i8253: Convert i8253_lock to raw_spinlock
i8253_lock needs to be a real spinlock in preempt-rt, i.e. it can
not be converted to a sleeping lock.
Convert it to raw_spinlock and fix up all users.
LKML-Reference: <20100217163751.030764372@linutronix.de>

HDA Codec driver

see Detailed HDA changes v1.0.23 v1.0.24

HDA Intel driver

see Detailed HDA changes v1.0.23 v1.0.24

HDA generic driver

see Detailed HDA changes v1.0.23 v1.0.24

HDSPM driver

- ALSA: [hdspm] Move static mapping arrays to .c
As requested by Takashi and Jaroslav, these arrays should not be in the
header file.
- ALSA: hdspm - Add support for RME RayDAT and AIO
Incorporate changes by Florian Faber into hdspm.c. Code taken from
http://wiki.linuxproaudio.org/index.php/Driver:hdspe
Heavily reworked to mostly comply with the coding standard (whitespace
fixes, line width, C++ style comments)
The code was tested and confirmed to be working on RME RayDAT.

ICE1712 driver

- ALSA: ice1712 delta - initialize SPI clock
The driver was using an initial value for the clock on the SPI bus
which was read from ICE1712 EEPROM,
ice->eeprom.data[ICE_EEP1_GPIO_STATE] & ICE1712_DELTA_AP_CCLK (0x02)
It appears some cards have it default high, some cards
have it default low. On my Delta 66 rev. E:
$ cat /proc/asound/M66/ice1712 | grep 'GPIO state'
GPIO state  : 0x70 /* ICE1712_DELTA_AP_CCLK bit is zero */
On my Audiophile 2496:
$ cat /proc/asound/M2496/ice1712 | grep 'GPIO state'
GPIO state  : 0xfe /* ICE1712_DELTA_AP_CCLK bit is one */
It must be raised before the first SPI write happens, or the write will
fail, leading to:
[ 23.248721] invalid CS8427 signature 0x0: let me try again...
I theorize that 4eb4550ab37d351ab0973ccec921a5a2d8560ec7
is no longer needed, it was a different way to workaround
the problem.
[fixed variable decleration by tiwai]
- ALSA: ice1712 - working M-Audio Delta 66E support
Rev. E of the M-Audio Delta 66 is partially supported (commit
ef2cd2ccad66b4aba518eca7514eface267ee0f3), but the layout of the GPIO
pins was still unclear. This patch adds the GPIO definitions so that
communication to the CS8247 & 2x AK4524 works correctly.
ALSA bug#3327 has more details; users cap & jhunt report there that the
GPIO wiring is similar to the Digigram VX442 (chip select: pin 4 =
CS8427, pin 5 = AK4524 #0, pin 6 = AK4524 #1). There has been a lot of
conflicting information in the bug, but given these definitions, my
Delta 66E works; I tested analog in&out at 44.1kHz & 96kHz, analog gain
settings, S/PDIF clock sync, and S/PDIF in&out at 44.1kHz.
- ALSA: ice1712: Add support for Edirol DA-2496
This device is similar to the M-Audio Delta 1010LT in that it uses the
AK4524VF ADC/DAC, but it does not use the CS8427 for SPDIF.
The SPDIF appears to be set up correctly, but I am not able to test it
as I do not have any devices that use it.
This patch makes the ADC/DAC's and the hardware mixer visible to apps
such as alsamixer and envy24control.
- ALSA: ice1724 - Fix ESI Maya44 capture source control
The capture source control of maya44 was wrongly coded with the bit
shift instead of the bit mask. Also, the slot for line-in was
wrongly assigned (slot 5 instead of 4).
Reported-by: Alex Chernyshoff <alexdsp@gmail.com>

ISA

- ALSA: ISA: Remove snd-sgalaxy
Its hardware is handled more fully by the new azt1605/azt2316 drivers.
- ALSA: ISA: New Aztech Sound Galaxy driver
This is a new driver for Aztech Sound Galaxy ISA soundcards based on the
AZT1605 and AZT2316 chipsets. It's constructed as two seperate drivers
for either chipset generated from the same source file, with (very)
minimal ifdeffery.
The drivers check the SB DSP version to decide if they are being loaded
for the right chip. AZT1605 returns 2.1 by default and AZT2316 3.1.
This isn't full-proof as the DSP version can actually be set through
software but it's close enough -- as far as I've been able to see, the
DSP version can not be stored in the EEPROM and the cards will therefore
startup with the defaults.
This distinction could (with the same success rate) also be used to
decide which chip we're looking at at runtime meaning a single, merged
driver is also an option but I feel it's actually nicer this way. A
merged driver would have to postpone translating the passed in resource
values to the card configuration until it knew which one it was looking
at and would need to postpone erring out on mpu_irq=10 for azt1605 and
mpu_irq=3 for azt2316.
The drivers have been tested on various cards. For snd-azt1605:
FCC-ID I38-MMSN811: Aztech Sound Galaxy Nova 16 Extra
FCC-ID I38-MMSN822: Aztech Sound Galaxy Pro 16 II
and for snd-azt2316:
FCC-ID I38-MMSN824: Aztech Sound Galaxy Pro 16 AB
FCC-ID I38-MMSN826: Trust Sound Expert DeLuxe Wave 32 (05201)
FCC-ID I38-MMSN830: Trust Sound Expert DeLuxe 16+ (05202)
FCC-ID I38-MMSN837: Packard Bell ISA Soundcard 030069
FCC-ID I38-MMSN846: Trust Sound Expert DeLuxe 16-3D (06300)
FCC-ID I38-MMSN847: Trust Sound Expert DeLuxe Wave 32-3D (06301)
FCC-ID I38-MMSN852: Aztech Sound Galaxy Waverider Pro 32-3D
826 and 846 were also marketed directly by Aztech and then known as:
FCC-ID I38-MMSN826: Aztech Sound Galaxy Waverider 32+
FCC-ID I38-MMSN846: Aztech Sound Galaxy Nova 16 Extra II-3D
Together, these cover the AZT1605 and AT2316A, AZT2316R and AZT2316-S
chipsets. All cards work fully -- full-duplex PCM, MIDI and FM. Full
duplex is a little flaky on some.
I38-MSN811 tends to not work in full-duplex but sometimes does with the
highest success rate being achieved when you first start the capture and
then a playback instead of the other way around (it's a CS4231-KL
codec).
The cards with an AD1845XP codec (my I38-MMSN826 and one of my
I38-MMSN830s) are also somewhat duplex-challenged. Sometimes full-duplex
works, sometimes not and this varies from try to try. This seems likely
to be a timing problem somewhere inside wss-lib.
I38-MMSN826 has an additional "ICS2115 WaveFront" wavetable synth
onboard that isn't supported yet. The wavetable synths on I38-MMSN847
and I38-MMSN852 are wired directly to the standard MPU-401 UART and the
AUX1 input on the codec and work without problem.
CD-ROM audio on the cards is routed to the codec "Line" input, Line-In
to its Aux input, and FM/Wavetable to its AUX1 input. I did not rename
the controls due to the capture source enumeration: I see that
capture-source overrides are hardcoded in wss-lib and this is just too
ugly to live.
Versus the old snd-sgalaxy driver these drivers add support for the
models without a configuration EEPROM (which are common), full-duplex,
MPU-401 UART and OPL3. In the future they might grow support for that
ICS2115 WaveFront synth on 826 and an hwdep interface to write to the
EEPROM on the models that have one.
- ALSA: Merge es1688 and es968 drivers
The ESS ES968 chip is nothing more then a PnP companion
for a non-PnP audio chip. It was paired with non-PnP ESS' chips:
ES688 and ES1688. The ESS' audio chips are handled by the es1688
driver in native mode. The PnP cards are handled by the ES968
driver in SB compatible mode.
Move the ES968 chip handling to the es1688 driver so the driver
can handle both PnP and non-PnP cards. The es968 is removed.
Also, a new PnP id is added for the card I acquired (the change
was tested on this card).

Intel8x0 driver

- ALSA: ac97: Apply quirk for Dell Latitude D610 binding Master and Headphone controls
BugLink: https://launchpad.net/bugs/669279
The original reporter states: "The Master mixer does not change the
volume from the headphone output (which is affected by the headphone
mixer). Instead it only seems to control the on-board speaker volume.
This confuses PulseAudio greatly as the Master channel is merged into
the volume mix."
Fix this symptom by applying the hp_only quirk for the reporter's SSID.
The fix is applicable to all stable kernels.
Reported-and-tested-by: Ben Gamari <bgamari@gmail.com>
- Update broken web addresses in the kernel.
The patch below updates broken web addresses in the kernel
Reviewed-by: Finn Thain <fthain@telegraphics.com.au>
- ALSA: intel8x0: Mute External Amplifier by default for ThinkPad X31
BugLink: https://bugs.launchpad.net/bugs/619439
This ThinkPad model needs External Amplifier muted for audible playback,
so set the inv_eapd quirk for it.
Reported-and-tested-by: Dennis Bell <dennis.bell@parkerg.co.uk>

LX6464ES

- ALSA: lx6464es - make 1 bit signed bitfield unsigned
converts a 1 bit signed bitfield to an unsigned.
Reported-by: Dr. David Alan Gilbert <linux@treblig.org>

MIPS AU1x00 driver

- sound: Add missing spin_unlock
Add a spin_unlock missing on the error path.
The semantic match that finds this problem is as follows:
(http://coccinelle.lip6.fr/)
// <smpl>
@@
expression E1;
@@
* spin_lock(E1,...);
<+... when != E1
if (...) {
... when != E1
* return ...;
}
...+>
* spin_unlock(E1,...);
// </smpl>

MIXART driver

- ALSA: sound/mixart: avoid redefining {readl,write}_{le,be} accessors
If the platform already provides a definition for these accessors
do not redefine them. The warning was caught on MIPS.

MSND driver

- ALSA: msnd-classic: Fix invalid cfg parameter
The driver doesn't probe the device properly because of left-over cfg[]
that isn't used at all for msnd-classic device. This is only for msnd-
pinnacle.
- ALSA: msnd: check request_region() return value
request_region() may fail, if so return -EBUSY.

Maestro3 driver

- ALSA: maestro3: Clear interrupts before enabling them
Avoid spurious interrupts when initializing the device.
- ALSA: snd-maestro3: Make hardware volume buttons an input device (rev2)
While working on the sound suspend / resume problems with my laptop
I noticed that the hardware volume handling code in essence just detects
key presses, and then does some hardcoded modification of the master volume
based on which key is pressed.
This made me think that clearly the right thing to do here is just report
these keypresses to userspace and let userspace decide what to with them.
This patch adds a Kconfig option which when enabled reports the volume
buttons as keypresses using an input device. When enabled this option
also gets rid of the ugly direct ac97 writes from the tasklet, the ac97lock
and the need for using a tasklet in general.
As an added bonus the keys now work identical to volume keys on a (usb)
keyboard with multimedia keys, providing visual feedback of the volume
level change, and a better range of the volume control (with a properly
configured desktop environment).
- ALSA: snd-meastro3: Document hardware volume control a bit
While working on a fix for the volume being muted on the allegro in my
Compaq EVO N600C after suspend, I've learned a few things about the hardware
volume control worth documenting. The actual fix for the suspend / resume
issue is in the next patch in this set.
- ALSA: snd-meastro3: Ignore spurious HV interrupts during suspend / resume
Ignore spurious HV interrupts during suspend / resume, this avoids
mistaking them for a mute button press. This is not very pretty but
it seems the only way to fix the master volume control gets muted
after suspend issue I'm seeing. Note that the es1968 driver is doing
exactly the same.
- ALSA: snd-meastro3: Add amp_gpio quirk for Compaq EVO N600C
Without this quirk sound stops working after suspend resume. With this quirk,
one still needs to manually unmute the master volume control after a suspend /
/ resume cycle. That is fixed in another patch in this set.
Note that this patch was submitted to the alsa bug tracker a long time ago:
https://bugtrack.alsa-project.org/alsa-bug/view.php?id=4319

OPL3SA2 driver

- tree-wide: fix comment/printk typos
"gadget", "through", "command", "maintain", "maintain", "controller", "address",
"between", "initiali[zs]e", "instead", "function", "select", "already",
"equal", "access", "management", "hierarchy", "registration", "interest",
"relative", "memory", "offset", "already",

OPL4

- ALSA: opl4 - Fix a wrong argument in proc write callback
The commit 24e4a1211f691fc671de44685430dbad757d8487
ALSA: info - Use standard types for info callbacks
introduced a wrong type to snd_opl4_mem_proc_write() for pos argument.
Fixed now.

OSS device core

- BKL: remove extraneous #include <smp_lock.h>
The big kernel lock has been removed from all these files at some point,
leaving only the #include.
Remove this too as a cleanup.
- sound: push BKL into open functions
This moves the lock_kernel() call from soundcore_open
to the individual OSS device drivers, where we can deal
with it one driver at a time if needed, or just kill
off the drivers.
All core components in ALSA already provide
adequate locking in their open()-functions
and do not require the big kernel lock, so
there is no need to add the BKL there.
- sound: soundcore_open: Reduce the area BKL coverage
Most of this function is protected by the sound_loader_lock.
We can push down the BKL to this call out err = file->f_op->open(inode,file);
In order to build the sound core without the BKL, we
will need to push the lock_kernel() call into the ~20
device drivers that register their file operations.

PCI drivers

- Move asihpi driver to linux kernel tree
Fix the rest build stubs.
- ALSA: hdspm - Add RayDAT and AIO strings to Kconfig
Inform users about the newly added support for RayDAT and AIO.
- ALSA: virtuoso: add Xonar HDAV1.3 Slim support
Add experimental support for the Asus Xonar HDAV1.3 Slim sound card.
- ALSA: oxygen: add Xonar DG support
Add experimental support for the Asus Xonar DG sound card.
- ALSA: oxygen: add X-Meridian 2G support
Add support for the AuzenTech X-Meridian 7.1 2G sound card.
- ALSA: virtuoso: add HDMI enable switch for HDAV1.3
The GPIO bit that enables analog output on the Xonar HDAV1.3 also
disables the HDMI audio output, so we better add a switch for it.
Hopefully, this is sufficient to make the HDMI output work.
- ALSA: oxygen: add HiFier Serenade support
Add support for the TempoTec/MediaTek HiFier Serenade sound card.
The PCI ID was already there, but the driver handled it like the
Fantasia model, which resulted in a dummy recording device. As
a stereo output-only card, this model is to be handled exactly
like the HG2PCI.
- ALSA: oxygen: add Kuroutoshikou CMI8787-HG2PCI support
Add support for the Kuroutoshikou CMI8787-HG2PCI sound card.
[replaced non-latin letters in the patch by tiwai]
- ALSA: oxygen: merge HiFier driver into snd-oxygen
The snd-hifier driver contains more duplicated code than model-specific
code, so it does not make sense for it to be a separate driver.
Handling the two-channel output restriction can be easily done in the
generic driver.
- ALSA: virtuoso: update Kconfig text
Update the Xonar config texts with the latest information about the
Xonar DS, HDAV1.3 Slim, and Xense.
- ALSA: oxygen: fix CONFIG_SND_OXYGEN_LIB dependency selection
As the select directive does not handle indirect dependencies, select
those explicitly in the driver sections.
- ALSA: virtuoso: add Xonar DS headphone jack detection
Now that the polarity of the headphone detection pin is known, replace
the debugging message with a proper jack plug input device.
- ALSA: snd-es1968: Make hardware volume buttons an input device (rev2)
The hardware volume handling code in essence just detects key presses, and
then does some hardcoded modification of the master volume based on which key
is pressed.
Clearly the right thing to do here is just report these keypresses to
userspace and let userspace decide what to with them.
This patch adds a Kconfig option which when enabled reports the volume
buttons as keypresses using an input device. When enabled this option
also gets rid of the ugly direct ac97 writes from the tasklet, the ac97lock
and the need for using a tasklet in general.
- ALSA: snd-maestro3: Make hardware volume buttons an input device (rev2)
While working on the sound suspend / resume problems with my laptop
I noticed that the hardware volume handling code in essence just detects
key presses, and then does some hardcoded modification of the master volume
based on which key is pressed.
This made me think that clearly the right thing to do here is just report
these keypresses to userspace and let userspace decide what to with them.
This patch adds a Kconfig option which when enabled reports the volume
buttons as keypresses using an input device. When enabled this option
also gets rid of the ugly direct ac97 writes from the tasklet, the ac97lock
and the need for using a tasklet in general.
As an added bonus the keys now work identical to volume keys on a (usb)
keyboard with multimedia keys, providing visual feedback of the volume
level change, and a better range of the volume control (with a properly
configured desktop environment).
- ALSA: Add support of AudioScience ASI boards
Added the support of AudioScience ASI boards.
The driver has been tested for years on alsa-driver external tree,
now finally got merged to the kernel.

PDAudioCF driver

- Corrected pcmcia build fixes
Fixed the wrong copies from 2.6.36.
Add inclusion of pcmcia/cs.h in several places.
- Create a dummy pcmcia/cs.h
- Fix build of pcmcia drivers after 2.6.37-rc1 merge
- Fix forgotten pdaudio_pcm.c for the new PCMCIA stuff
- Fix typos in the previous patch
- More fixes for new PCMCIA stuff
- Add build-fixes for 2.6.36 PCMCIA stuff
- Fix a copy&paste error in the previous commit
- Fix build with 2.6.35-rc1
- pcmcia: move driver name to struct pcmcia_driver
Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- pcmcia: convert pcmcia_request_configuration to pcmcia_enable_device
pcmcia_enable_device() now replaces pcmcia_request_configuration().
Instead of config_req_t, all necessary flags are either passed as
a parameter to pcmcia_enable_device(), or (in rare circumstances)
set in struct pcmcia_device -> flags.
With the last remaining user of include/pcmcia/cs.h gone, remove
all references.
Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- pcmcia: move config_{base,index,regs} to struct pcmcia_device
Several drivers prefer to explicitly set config_{base,index,regs},
formerly known as ConfigBase, ConfigIndex and Present. Instead of
passing these values inside config_req_t, store it in struct
pcmcia_device.
Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- pcmcia: simplify IntType
IntType was only set to INT_MEMORY (driver pcmciamtd) or INT_MEMORY_AND_IO
(all other drivers). As this flags seems to relate to ioport access, make
it conditional to the driver having requested IO port access. There are two
drivers which do not request IO ports, but did set INT_MEMORY_AND_IO:
ray_cs and b43. For those, we consistently only set INT_MEMORY in future.
Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- pcmcia: do not use io_req_t when calling pcmcia_request_io()
Instead of io_req_t, drivers are now requested to fill out
struct pcmcia_device *p_dev->resource[0,1] for up to two ioport
ranges. After a call to pcmcia_request_io(), the ports found there
are reserved, after calling pcmcia_request_configuration(), they may
be used.
- pcmcia: do not use io_req_t after call to pcmcia_request_io()
After pcmcia_request_io(), do not make use of the values stored in
io_req_t, but instead use those found in struct pcmcia_device->resource[].
- pcmcia: remove cs_types.h
Remove cs_types.h which is no longer needed: Most definitions aren't
used at all, a few can be made away with, and two remaining definitions
(typedefs, unfortunatley) may be moved to more specific places.
- pcmcia: dev_node removal (write-only drivers)
dev_node_t was only used to transport some minor/major numbers
from the PCMCIA device drivers to deprecated userspace helpers.
However, only a few drivers made use of it, and the userspace
helpers are deprecated anyways. Therefore, get rid of dev_node_t .
As a first step, remove any usage of dev_node_t from drivers which
only wrote to this typedef/struct, but did not make use of it.
- pcmcia: re-work pcmcia_request_irq()
Instead of the old pcmcia_request_irq() interface, drivers may now
choose between:
- calling request_irq/free_irq directly. Use the IRQ from *p_dev->irq.
- use pcmcia_request_irq(p_dev, handler_t); the PCMCIA core will
clean up automatically on calls to pcmcia_disable_device() or
device ejection.
- drivers still not capable of IRQF_SHARED (or not telling us so) may
use the deprecated pcmcia_request_exclusive_irq() for the time
being; they might receive a shared IRQ nonetheless.
- pcmcia: pass FORCED_PULSE parameter in pcmcia_request_configuration()
As it's only used there it makes no sense relying on pcmcia_request_irq().

PPC PMAC driver

- ALSA: sound/ppc: Use printf extension %pR for struct resource
Using %pR standardizes the struct resource output.

PPC PS3 driver

- Fix spelling milisec -> ms in snd_ps3 module parameter description
Instead of replacing 'milisec' by 'millisec', I decided to use
the more common SI unit. Other drivers use 'milliseconds'
or 'ms', too ('millisec' is never used).
- sound: Remove pr_<level> uses of KERN_<level>

PPC Tumbler driver

- ALSA: sound/ppc/powermac: remove undefined operations
Modifying an object twice without an intervening sequence point is
undefined.

RME HDSP driver

- ALSA: hdsp - Add support for RPM io box
Add support for the RME HDSP RPM IO box. Changes have been made in the identification of the IO box and the neccessary controls have been added.
- ALSA: sound/pci/rme9652: prevent reading uninitialized stack memory
The SNDRV_HDSP_IOCTL_GET_CONFIG_INFO and
SNDRV_HDSP_IOCTL_GET_CONFIG_INFO ioctls in hdspm.c and hdsp.c allow
unprivileged users to read uninitialized kernel stack memory, because
several fields of the hdsp{m}_config_info structs declared on the stack
are not altered or zeroed before being copied back to the user. This
patch takes care of it.

RME9652 driver

- ALSA: hdspm - remove unused arrays, reduce stack usage in hwdep_ioctl
- ALSA: [hdspm] Move static mapping arrays to .c
As requested by Takashi and Jaroslav, these arrays should not be in the
header file.
- ALSA: hdspm - Add support for RME RayDAT and AIO
Incorporate changes by Florian Faber into hdspm.c. Code taken from
http://wiki.linuxproaudio.org/index.php/Driver:hdspe
Heavily reworked to mostly comply with the coding standard (whitespace
fixes, line width, C++ style comments)
The code was tested and confirmed to be working on RME RayDAT.
- ALSA: sound/pci/rme9652: prevent reading uninitialized stack memory
The SNDRV_HDSP_IOCTL_GET_CONFIG_INFO and
SNDRV_HDSP_IOCTL_GET_CONFIG_INFO ioctls in hdspm.c and hdsp.c allow
unprivileged users to read uninitialized kernel stack memory, because
several fields of the hdsp{m}_config_info structs declared on the stack
are not altered or zeroed before being copied back to the user. This
patch takes care of it.

SB drivers

- ALSA: Merge es968 into es1688 driver
- ALSA: Merge es1688 and es968 drivers
The ESS ES968 chip is nothing more then a PnP companion
for a non-PnP audio chip. It was paired with non-PnP ESS' chips:
ES688 and ES1688. The ESS' audio chips are handled by the es1688
driver in native mode. The PnP cards are handled by the ES968
driver in SB compatible mode.
Move the ES968 chip handling to the es1688 driver so the driver
can handle both PnP and non-PnP cards. The es968 is removed.
Also, a new PnP id is added for the card I acquired (the change
was tested on this card).

SIS7019 driver

- sis7019: increase reset delays
A few boards using this controller are reported to need a little extra
time during their reset cycle.
Reported-by: Michael Goeke <michael.goeke@icachip.de>
- sis7019: fix capture issues with multiple periods per buffer
When using a timing voice to clock out periods during capture, the
driver would slowly loose synchronization and never catch up, eventually
reaching a point where it no longer generated interrupts. To avoid
this situation, the virtual period clocking was changed to shorten the
next timing period when our timing voice falls too far behind the
capture voice. In addition, the first virtual period for the timing
voice was slightly too short, causing the timing voice to initially be
ahead of the capture voice.
While tracking down this problem, I noticed that the expected sample
offset was being incorrectly initialized, causing an overrun to be
incorrectly reported when the timing voice happened to be perfectly
synchronized.
Reported-by: Hans Schou <linux@schou.dk>

SPARC AMD7930 driver

- of/device: Replace struct of_device with struct platform_device
of_device is just an alias for platform_device, so remove it entirely. Also
replace to_of_device() with to_platform_device() and update comment blocks.
This patch was initially generated from the following semantic patch, and then
edited by hand to pick up the bits that coccinelle didn't catch.
@@
@@
-struct of_device
+struct platform_device
Reviewed-by: David S. Miller <davem@davemloft.net>
- of/platform: remove all of_bus_type and of_platform_bus_type references
Both of_bus_type and of_platform_bus_type are just #define aliases
for the platform bus. This patch removes all references to them and
switches to the of_register_platform_driver()/of_unregister_platform_driver()
API for registering.
Subsequent patches will convert each user of of_register_platform_driver()
into plain platform_drivers without the of_platform_driver shim. At which
point the of_register_platform_driver()/of_unregister_platform_driver()
functions can be removed.
- sparc/of: Move of_device fields into struct pdev_archdata
This patch moves SPARC architecture specific data members out of
struct of_device and into the pdev_archdata structure. The reason
for this change is to unify the struct of_device definition amongst
all the architectures. It also remvoes the .sysdata, .slot, .portid
and .clock_freq properties because they aren't actually used by
anything.
A subsequent patch will replace struct of_device entirely with struct
platform_device and the of_platform support code will share common
routines with the platform bus (but the bus instances themselves can
remain separate).
This patch also adds 'struct resources *resource' and num_resources
to match the fields defined in struct platform_device. After this
change, 'struct platform_device' can be used as a drop-in replacement
for 'struct of_platform'.
This change is in preparation for merging the of_platform_bus_type
with the platform_bus_type.
- of: Remove duplicate fields from of_platform_driver
.name, .match_table and .owner are duplicated in both of_platform_driver
and device_driver. This patch is a removes the extra copies from struct
of_platform_driver and converts all users to the device_driver members.
This patch is a pretty mechanical change. The usage model doesn't change
and if any drivers have been missed, or if anything has been fixed up
incorrectly, then it will fail with a compile time error, and the fixup
will be trivial. This patch looks big and scary because it touches so
many files, but it should be pretty safe.

SPARC DBRI driver

- of/platform: remove all of_bus_type and of_platform_bus_type references
Both of_bus_type and of_platform_bus_type are just #define aliases
for the platform bus. This patch removes all references to them and
switches to the of_register_platform_driver()/of_unregister_platform_driver()
API for registering.
Subsequent patches will convert each user of of_register_platform_driver()
into plain platform_drivers without the of_platform_driver shim. At which
point the of_register_platform_driver()/of_unregister_platform_driver()
functions can be removed.
- sparc/of: Move of_device fields into struct pdev_archdata
This patch moves SPARC architecture specific data members out of
struct of_device and into the pdev_archdata structure. The reason
for this change is to unify the struct of_device definition amongst
all the architectures. It also remvoes the .sysdata, .slot, .portid
and .clock_freq properties because they aren't actually used by
anything.
A subsequent patch will replace struct of_device entirely with struct
platform_device and the of_platform support code will share common
routines with the platform bus (but the bus instances themselves can
remain separate).
This patch also adds 'struct resources *resource' and num_resources
to match the fields defined in struct platform_device. After this
change, 'struct platform_device' can be used as a drop-in replacement
for 'struct of_platform'.
This change is in preparation for merging the of_platform_bus_type
with the platform_bus_type.

SPARC cs4231 driver

- of/platform: remove all of_bus_type and of_platform_bus_type references
Both of_bus_type and of_platform_bus_type are just #define aliases
for the platform bus. This patch removes all references to them and
switches to the of_register_platform_driver()/of_unregister_platform_driver()
API for registering.
Subsequent patches will convert each user of of_register_platform_driver()
into plain platform_drivers without the of_platform_driver shim. At which
point the of_register_platform_driver()/of_unregister_platform_driver()
functions can be removed.
- sparc/of: Move of_device fields into struct pdev_archdata
This patch moves SPARC architecture specific data members out of
struct of_device and into the pdev_archdata structure. The reason
for this change is to unify the struct of_device definition amongst
all the architectures. It also remvoes the .sysdata, .slot, .portid
and .clock_freq properties because they aren't actually used by
anything.
A subsequent patch will replace struct of_device entirely with struct
platform_device and the of_platform support code will share common
routines with the platform bus (but the bus instances themselves can
remain separate).
This patch also adds 'struct resources *resource' and num_resources
to match the fields defined in struct platform_device. After this
change, 'struct platform_device' can be used as a drop-in replacement
for 'struct of_platform'.
This change is in preparation for merging the of_platform_bus_type
with the platform_bus_type.
- of: Remove duplicate fields from of_platform_driver
.name, .match_table and .owner are duplicated in both of_platform_driver
and device_driver. This patch is a removes the extra copies from struct
of_platform_driver and converts all users to the device_driver members.
This patch is a pretty mechanical change. The usage model doesn't change
and if any drivers have been missed, or if anything has been fixed up
incorrectly, then it will fail with a compile time error, and the fixup
will be trivial. This patch looks big and scary because it touches so
many files, but it should be pretty safe.
- of: Always use 'struct device.of_node' to get device node pointer.
The following structure elements duplicate the information in
'struct device.of_node' and so are being eliminated. This patch
makes all readers of these elements use device.of_node instead.
(struct of_device *)->node
(struct dev_archdata *)->prom_node (sparc)
(struct dev_archdata *)->of_node (powerpc & microblaze)

SoC Audio for Freecale i.MX1x i.MX2x CPUs

see Detailed SoC changes v1.0.23 v1.0.24

SoC Audio for TXx9

see Detailed SoC changes v1.0.23 v1.0.24

SoC Audio for the Atmel AT32/AT91 System-on-Chip

see Detailed SoC changes v1.0.23 v1.0.24

SoC Audio for the Samsung S3C24XX chips

see Detailed SoC changes v1.0.23 v1.0.24

SoC Audio for the Samsung chips

see Detailed SoC changes v1.0.23 v1.0.24

SoC Blackfin

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec 88PM860x

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AC97

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AD1836

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AD193X

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AD1980

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AD73311

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AK4104

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AK4535

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AK4642

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec AK4671

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec CQ0093 Voice

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec CS4270

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec CS42L51

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec CX20442

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec DA7210

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec DIT SPDI/F

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec General Digital MICs

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec MAX98088

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec Philips UDA134x

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec Philips UDA1380

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec SSM2602

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec STAC9766

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec TI sn95031

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec TLV320AIC23

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec TLV320AIC26

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec TLV320AIC3X

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec TLV320DAC33

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec TPA6130A2

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec TWL4030

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec TWL6040

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WL1273

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM2000

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8350

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8400

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8510

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8523

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8580

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8711

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8727

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8728

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8731

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8737

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8741

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8750

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8753

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8770

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8776

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8804

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8900

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8903

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8904

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8940

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8955

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8960

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8961

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8962

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8971

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8974

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8978

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8985

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8988

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8990

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8991

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8993/4

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8994

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM8995

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM9081

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM9090

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec WM9712

see Detailed SoC changes v1.0.23 v1.0.24

SoC Codec alc5621/2/3

see Detailed SoC changes v1.0.23 v1.0.24

SoC DaVinci

see Detailed SoC changes v1.0.23 v1.0.24

SoC Dynamic Audio Power Management

see Detailed SoC changes v1.0.23 v1.0.24

SoC EP93XX

see Detailed SoC changes v1.0.23 v1.0.24

SoC FSI SH7724

see Detailed SoC changes v1.0.23 v1.0.24

SoC Freescale

see Detailed SoC changes v1.0.23 v1.0.24

SoC Ingenic JZ4740

see Detailed SoC changes v1.0.23 v1.0.24

SoC Intel Medfield MID platform

see Detailed SoC changes v1.0.23 v1.0.24

SoC Layer

see Detailed SoC changes v1.0.23 v1.0.24

SoC Marvell Kirkwood

see Detailed SoC changes v1.0.23 v1.0.24

SoC NVIDIA Tegra

see Detailed SoC changes v1.0.23 v1.0.24

SoC Nuvoton NUC900

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx 88PM860x Tavor EVB3

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx Aeronix Zipit Z2

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx Corgi

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx E740

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx EM-X270

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx Poodle

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx Spitz

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx Tosa

see Detailed SoC changes v1.0.23 v1.0.24

SoC PXA2xx saarb

see Detailed SoC changes v1.0.23 v1.0.24

SoC S6000

see Detailed SoC changes v1.0.23 v1.0.24

SoC SH7760 AC97

see Detailed SoC changes v1.0.23 v1.0.24

SoC Texas Instruments OMAP

see Detailed SoC changes v1.0.23 v1.0.24

Soc PXA2xx Imote 2

see Detailed SoC changes v1.0.23 v1.0.24

Soc PXA2xx Magician

see Detailed SoC changes v1.0.23 v1.0.24

Sound Galaxy driver

- Add build stub for new galaxy driver
- ALSA: ISA: Remove snd-sgalaxy
Its hardware is handled more fully by the new azt1605/azt2316 drivers.

Trident driver

- fix typos concerning "initiali[zs]e"

USB

- Move USB wrapper to individual header
Also add a dummy definition of missing USB_SPEED_SUPER for older kernels.
- ALSA: usb/6fire - Driver for TerraTec DMX 6Fire USB
What is working: Everything except SPDIF
- Hardware Master volume
- PCM 44-192kHz@24 bits, 6 channels out, 4 channels in (analog)
- MIDI in/out
- firmware loading after cold start
- phono/line switching
- ALSA: snd-usb-caiaq: Add support for Traktor Kontrol S4
This patch adds support for the new Traktor Kontrol S4 by Native
Instruments. It features a new audio data streaming model, MIDI
in and out ports, a huge number of 174 dimmable LEDs, 96 buttons
and 46 absolute encoder axis, including some rotary encoders.
All features are supported by the driver now.
Did some code refactoring along the way.
- ALSA: usb-audio: parse clock topology of UAC2 devices
Audio devices which comply to the UAC2 standard can export complex clock
topologies in its descriptors and set up links between them.
The entities that are defined are
- clock sources, which define the end-leafs.
- clock selectors, which act as switch to select one out of many
possible clocks sources.
- clock multipliers, which have an input clock source, and act as clock
source again. They can be used to derive one clock from another.
All sample rate changes, clock validity queries and the like must go to
clock source elements, while clock selectors and multipliers can be used
as terminal clock source.
The following patch adds a parser for these elements and functions to
iterate over the tree and find the leaf nodes (clock sources).
The samplerate set functions were moved to the new clock.c file.

USB Edirol UA101 driver

- Fix build of usb-ua101 with old kernels
- USB: rename usb_buffer_alloc() and usb_buffer_free() users
For more clearance what the functions actually do,
usb_buffer_alloc() is renamed to usb_alloc_coherent()
usb_buffer_free() is renamed to usb_free_coherent()
They should only be used in code which really needs DMA coherency.
All call sites have been changed accordingly, except for staging
drivers.

USB TerraTec DMX 6Fire

- Add build-stub for 6fire
- ALSA: usb/6fire - Driver for TerraTec DMX 6Fire USB
What is working: Everything except SPDIF
- Hardware Master volume
- PCM 44-192kHz@24 bits, 6 channels out, 4 channels in (analog)
- MIDI in/out
- firmware loading after cold start
- phono/line switching

USB USX2Y

- ALSA: snd-usb-us122l: Fix missing NULL checks
Fix missing NULL checks in usb_stream_hwdep_poll() and usb_stream_hwdep_ioctl().
Wake up poll waiters before returning from usb_stream_hwdep_ioctl().
- sound: fixed typos
- ALSA: sound/usb/usx2y: simplify conditional
Simplify conditional: (a || (!a && b)) => (a || b)

USB caiaq

- Fix build errors with 2.6.37-rc1 update
Refreshed patch, added noop_llseek compat definition for older kernels.
- ALSA: snd-usb-caiaq: Add support for Traktor Kontrol S4
This patch adds support for the new Traktor Kontrol S4 by Native
Instruments. It features a new audio data streaming model, MIDI
in and out ports, a huge number of 174 dimmable LEDs, 96 buttons
and 46 absolute encoder axis, including some rotary encoders.
All features are supported by the driver now.
Did some code refactoring along the way.
- ALSA: snd-usb-caiaq: drop version number
Let git do the job.
- ALSA: snd-usb-caiaq: Bump version number to 1.3.21
- ALSA: Revert "ALSA: snd-usb-caiaq: Set default input mode of A4DJ"
Do not explicity set the default input mode. Use the hardware default
of mode 0 ('Control vinyl'), which is now available.
This reverts commit e3ca4c9.
- ALSA: snd-usb-caiaq: Simplify single case to an 'if'
After removing code, only one case remains. So use an 'if' instead.
- ALSA: snd-usb-caiaq: Restore 'Control vinyl' input mode on A4DJ
This feature was undocumented on early A4DJ units. It is indicated
by lighting both the 'line' and 'phono' lamps at the same time.
Newer units document this and the newer Windows drivers enable this
for all units, so restore the functionality.
This patch simplifies the code and changes the mode mapping to match
the A8DJ, favouring simpler code and consistency over keeping the
existing mapping.
Both 'Control vinyl' and 'Phono' input modes enable the hardware
preamp. The difference is the input impedance.
This reverts commit 9a9527e.
- ALSA: usb/caiaq: fix Traktor Kontrol X1 ABS_HAT2X axis

USB generic driver

- linux 2.4 compilation fixes
- Fix build errors with 2.6.37-rc1 update
Refreshed patch, added noop_llseek compat definition for older kernels.
- Fix builds with the new USB stack
- Build with the updated usb-audio driver
A new v2 struct was introduced.
- Refresh usb/mixer.patch
- ALSA: snd-usb-us122l: Fix MIDI output
The US-122L always reads 9 bytes per urb unless they are set to 0xFD.
- ALSA: usb-audio: add Edirol SD-90 PCM support
Add support for the 24-bit audio I/Os of the Edirol SD-90 interface.
Reported-any-tested-by: Jim Grusendorf <alsa-user@grusendorf.ca>
- ALSA: usb-audio: use enum control info helper
Simplify info callbacks by using the snd_ctl_enum_info() helper function.
- ALSA: usb-audio - Support for Power/Status LED on Creative USB X-Fi S51
This patch adds support for Power/Status LED on Creative USB X-Fi S51.
There is just one LED on the device. The LED can either be On or it
can be set to Blink. There doesn't seem to be a way to switch it off.
The control message to change LED status is similar to that of
audigy2nx except that the index is to be set to 0 and value is 1 for
Blink and 0 for On.
The 'Power LED' control in alsamixer when muted will cause the LED to
Blink continuously. When unmuted the LED will stay On. The Creative
driver under Windows sets the LED to blink whenever audio is muted.
This LED can be treated as the CMSS LED but I figured since there is
just one LED, it should be treated as the Power LED. Is that alright?
I've also changed the comment "Usb X-Fi" to "Usb X-Fi S51" as there
are other external X-Fi devices from Creative like Usb X-Fi Go and
Xmod. The volume knob and LED support patch doesn't apply to them.
- ALSA: usb - driver neglects kmalloc return value check and may deref NULL
sound/usb/pcm.c::snd_usb_pcm_check_knot() fails to check the return value
from kmalloc() and may end up dereferencing a null pointer.
The patch below (compile tested only) should take care of that little
problem.
- ALSA: usb-audio: automatically detect feedback format
There are two USB Audio Class specifications (v1 and v2), but neither of
them clearly defines the feedback format for high-speed UAC v1 devices.
Add to this whatever the Creative and M-Audio firmware writers have been
smoking, and it becomes impossible to predict the exact feedback format
used by a particular device.
Therefore, automatically detect the feedback format by looking at the
magnitude of the first received feedback value.
Also, this allows us to get rid of some special cases for E-Mu devices.
- ALSA: usb - Creative USB X-Fi volume knob support
Adds an entry for Creative USB X-Fi to the rc_config array in
mixer_quirks.c to allow use of volume knob on the device.
The action of the volume knob is received by lirc when its using the
alsa_usb driver.
- ALSA: usb-audio: add Novation Launchpad support
Add a quirk entry for the Novation Launchpad USB MIDI controller.
QUIRK_MIDI_FASTLANE gets renamed to *_RAW_BYTES because this quirk type
is now shared by different devices.
Tested-by: Jakob Flierl <jakob.flierl@gmail.com>
- ALSA: usb/mixer: remove bogus cast
"uinfo->value.enumerated.item" is an unsigned int. If it's negative
when we do the comparison:
if ((int)uinfo->value.enumerated.item >= cval->max)
then we would read past the end of the array on the next line.
I also changed the strcpy() to strlcpy() out of paranoia.
- ALSA: usb-audio - Fix an unused-variable compile warning
Used only when CONFIG_SND_DEBUG=y
sound/usb/mixer.c: In function 'get_min_max':
sound/usb/mixer.c:762: warning: unused variable 'chip'
Reported-by: Andrew Morton <akpm@linux-foundation.org>
- ALSA: usb-audio: add more Yamaha USB MIDI devices
Add quirks for more devices (according to driver V.3.0.4-2).
- ALSA: usb-audio: fix Fast Track Ultra (8R) 44.1 sample rates
The M-Audio Fast Track Ultra series devices did not play sound correctly
at 44.1/88.2 kHz. Changing the output endpoint attribute to adaptive
fixes this.
- ALSA: usb-audio: add BOSS ME-25 support
Add a quirk to make the BOSS ME-25 work.
Many thanks to Kees van Veen.
- ALSA: usb-audio: add Roland A-PRO support
Add a quirk for the Roland/Cakewalk A-300PRO/A-500PRO/A-800PRO keyboards.
- ALSA: usb-audio: add Edirol PCR-1 PCM support
Add a quirk for the other logical device of the PCR-1 so that not only
the MIDI interface but also the audio interface works.
- ALSA: usb - Release capture substream URBs properly
Due to the wrong "return" in the loop, a capture substream won't be
released at disconnection properly if the device is capture only and has
no playback substream. This caused Oops occasionally at the device
reconnection.
Reported-by: Kim Minhyoung <minhyoung.kim@lge.com>
- ALSA: usb-audio: fix detection of vendor-specific device protocol settings
The Audio Class v2 support code in 2.6.35 added checks for the
bInterfaceProtocol field. However, there are devices (usually those
detected by vendor-specific quirks) that do not have one of the
predefined values in this field, which made the driver reject them.
To fix this regression, restore the old behaviour, i.e., assume that
a device with an unknown bInterfaceProtocol field (other than
UAC_VERSION_2) has more or less UAC-v1-compatible descriptors.
[compile warning fixes by tiwai]
- ALSA: usb-audio: Assume first control interface is for audio
For devices with more than one control interface, let's assume the first
one contains the audio controls. Unfortunately, there is no field in any
of the descriptors to tell us whether a control interface is for audio
or MIDI controls, so a better check is not easy to implement.
On a composite device with audio and MIDI functions, for example, the
code currently overwrites chip->ctrl_intf, causing operations on the
control interface to fail if they are issued after the device probe.
- ALSA: usb: USB3 SuperSpeed sound support
This is V2 of the patch, after feedback from Clemens and Daniel.
This patch adds SuperSpeed support to the USB drivers under sound/. It adds
tests for USB_SPEED_SUPER to the appropriate places that check for the USB
speed.
This patch has been tested with our SS USB3 device emulating a set of Yamaha
speakers and a Logitech microphone, but with the descriptors modified to add
USB3 support. It has also been tested with the real speakers and microphone,
to make sure that USB2 devices still work.
- ALSA: sound/usb/format: silence uninitialized variable warnings
Gcc complains that ret might be used uninitialized:
sound/usb/format.c: In function ‘snd_usb_parse_audio_format’:
sound/usb/format.c:354: warning: ‘ret’ may be used uninitialized in this function
sound/usb/format.c:354: note: ‘ret’ was declared here
sound/usb/format.c:414: warning: ‘ret’ may be used uninitialized in this function
sound/usb/format.c:414: note: ‘ret’ was declared here
I suppose it could be uninitialized if there is ever a UAC_VERSION_3
released. Anyway this patch is worthwhile if only to silence the gcc
warning.
- ALSA: usb - Correct audio problem for Hauppage HVR-850 and others rel. to urb data align
Match usb ids in usb/quirks-table.h for some Hauppage HVR-950Q models
and for the HVR850 model to those ids at the end of au0828-cards.c
Thanks to nhJm449 for pointing out the problem.
- fix comnment/printk typos concerning "empty"
- ALSA: usb-audio: silence a superfluous warning
It is not advisable to print a warning when a device does not support
setting the sample rate because this is perfectly valid for devices with
a single rate or where rates are implicitly changed by selecting another
alternate setting.
- ALSA: usb - Fix compile error with CONFIG_SND_DEBUG_VERBOSE=y
Replaced the forgotten cval->mixer->ctrlif.
- ALSA: usb-audio: simplify control interface access
As the control interface is now carried in struct snd_usb_audio, we can
simplify the API a little and also drop the private ctrlif field from
struct usb_mixer_interface.
Also remove a left-over function prototype in pcm.h.
- ALSA: usb-audio: move and add some comments
Also add a list of open topics.
- ALSA: usb-midi: whitespace fixes
- ALSA: usb-audio: unify UAC macros and struct names
Get rid of the last occurances of _v1 suffixes, and move the version
number right after the "uac" string. Now things are consitent again.
Sorry for the forth and back, but it just looks much nicer this way.
- ALSA: usb-audio: clean up includes in clock.c
- ALSA: usb-audio - Add volume resolution quirk for some Logitech webcams
Some programs like Skype trying to set capture volume automatically.
Normally it will tray, carefully step by step lover or higher, set the volume.
In real word it work not really well, because devises and vendors lie about
real audio settings.
For example most Logitech webcams have 6400 or 3500 steps for capture volume.
They do not tell that actual resolution is 384. So we have only 7 or 18 real
steps. In this patch I set real resolution only for tested devices.
- ALSA: usb/endpoint, fix dangling pointer use
Stanse found that in snd_usb_parse_audio_endpoints, there is a
dangling pointer dereference. When snd_usb_parse_audio_format fails,
fp is freed, and continue invoked. On the next loop, there is
"fp && fp->altsetting == 1 && fp->channels == 1" test, but fp is set
from the last iteration (but is bogus) and thus ilegally dereferenced.
Set fp to NULL before "continue".
- ALSA: usb-audio: fix UAC2 control value queries
For RANGE requests, we should only query as much bytes as we're in fact
interested in.
For CUR requests, we shouldn't confuse the firmware with an overlong
request but just ask for 2 bytes.
This might need fixing in the future as it's not entirely clear when to
dispatch 1-byte, 2-byte and 4-byte request blocks. For now, we assume
everything is coded in 16bit - this works for all firmware
implementations I've seen.
Reported-by: Alex Lee <alexlee188@gmail.com>
- ALSA: usb-audio: parse UAC2 sample rate ranges correctly
A device may report its supported sample rates in ranges rather than in
discrete triplets. The code used to only parse the MIN field instead of
properly paying attention to the MAX and RES values.
Also, handle RES values of 1 correctly and announce a continous sample
rate range in this case.
Reported-by: Alex Lee <alexlee188@gmail.com>
- ALSA: usb-audio: fix control messages for USB_RECIP_INTERFACE
Control messages directed to an interface must have the interface number
set in the lower 8 bits of wIndex. This wasn't done correctly for some
clock and mixer messages.
Reported-by: Alex Lee <alexlee188@gmail.com>
- ALSA: usb-audio: add check for faulty clock in parse_audio_format_rates_v2()
- ALSA: usb-audio: export UAC2 clock selectors as mixer controls
The UAC2 clock selectors are fortunately compatible with UAC1 audio
selector units, so we can simply reuse the same approach to get all the
linked units.
Requests to this control need a different CS value though.
- ALSA: usb-audio: clean up find_audio_control_unit()
Use a struct to parse the audio units, and return usable descriptors
for all types. There's no need to limit the result set, except for some
kind of sanity check.
- ALSA: usb-audio: add UAC2 sepecific Feature Unit controls
The bits to enable them are always 0 for UAC1 devices, so no additional
checks are required.
- ALSA: usb-audio: unify constants from specification
Move more definitions from private enums to appropriate header files.
- ALSA: usb-audio: parse clock topology of UAC2 devices
Audio devices which comply to the UAC2 standard can export complex clock
topologies in its descriptors and set up links between them.
The entities that are defined are
- clock sources, which define the end-leafs.
- clock selectors, which act as switch to select one out of many
possible clocks sources.
- clock multipliers, which have an input clock source, and act as clock
source again. They can be used to derive one clock from another.
All sample rate changes, clock validity queries and the like must go to
clock source elements, while clock selectors and multipliers can be used
as terminal clock source.
The following patch adds a parser for these elements and functions to
iterate over the tree and find the leaf nodes (clock sources).
The samplerate set functions were moved to the new clock.c file.
- ALSA: usb-audio: support partially write-protected UAC2 controls
So far, UAC2 controls are marked read-only if any of the channels are
marked read-only in the descriptors. Change this behaviour and
- mark them writeable unless all channels are read-only
- store the read-only mask in usb_mixer_elem_info and
- check the mask again in set_cur_mix_value(), and bail out for
write-protected channels.
- ALSA: usb-audio: UAC2: clean up parsing of bmaControls
Introduce two new static inline functions for a more readable parsing
of UAC2 bmaControls.
- USB: rename usb_buffer_alloc() and usb_buffer_free() users
For more clearance what the functions actually do,
usb_buffer_alloc() is renamed to usb_alloc_coherent()
usb_buffer_free() is renamed to usb_free_coherent()
They should only be used in code which really needs DMA coherency.
All call sites have been changed accordingly, except for staging
drivers.
- ALSA: usb-audio: fix feature unit parser for UAC2
Fix a small off-by-one bug which causes the feature unit to announce a
wrong number of channels. This leads to illegal requests sent to the
firmware eventually.
- ALSA: usb-audio: add support for UAC2 pitch control
This request is again handled differently in comparison to UAC1.
- ALSA: usb-audio: parse UAC2 endpoint descriptors correctly
UAC2 devices have their information about pitch control stored in a
different field. Parse it, and emulate the bits for a v1 device.
A new struct uac2_iso_endpoint_descriptor is added.
- ALSA: usb-audio: fix return values
-1 is not a good return value as it means -EPERM, "not permitted".
Choose -ENOTSUPP instead, which is what the code really wants to tell
its callers.
- ALSA: usb-audio: parse more format descriptors with structs
- ALSA: usb-audio: add support for Akai MPD16
The decoding/encoding is based on own reverse-engineering. Both control and
data ports are handled. Writing to control port supports SysEx events only,
as this is the only type of messages that MPD16 recognizes.
- sound: fixup for usb_buffer_alloc/free rename
This is needed before the USB merge.
- ALSA: sound/usb: add preliminary support for UAC2 interrupts
For both UAC1 and UAC2, interrupt endpoint messages are now parsed with
structs rather that with anonymous buffer array accesses.
For UAC2, only CUR interrupt notifications are supported for now.
snd_usb_mixer_status_complete() was renamed to
snd_usb_mixer_interrupt().
Fixed one indentation flaw on the way.
- ALSA: sound/usb: fix UAC1 regression
Commit 23caaf19b ("ALSA: usb-mixer: Add support for Audio Class v2.0")
broke support for Class1 devices due to two faulty changes. This patch
fixes it.
Reported-and-Tested-by: The Source <thesourcehim@gmail.com>

Utils

- alsa-info.sh: DMI - show also system version string
- Alsa-info: Fix typo
This simple typo has annoyed me for a while. Please fix it, so
I can focus on more important issues :-)
- Add CONFIG_LZO_COMPRESS and CONFIG_LZO_DECOMPRESS checks
- alsa-compile.sh: added support for Debian and Ubuntu
- alsa-compile.sh: Fix --patch option, fix gettext-devel installation for RHEL5
- alsa-compile.sh: improved distribution name check and added RHEL support
- alsa-compile.sh: Check if lsb package is installed for Fedora distro
- alsa-compile.sh: Fix typo and add directory check for --url
- alsa-compile.sh: add checks for more packages for alsa-utils and other fixes
- alsa-compile.sh: fix make package checks
- alsa-compile.sh: add check for make package
- alsa-compile.sh: zypper does not return proper exitcode, too
- mod-deps - Don't put unrelated kconfigs in config1.h.in
- alsa-compile.sh: fix distribution name detection

VIA82xx driver

- ALSA: via82xx: allow changing the initial DXS volume
As per-stream volume controls, the DXS controls are not intended to
adjust the overall sound level and so are initialized every time
a stream is opened. However, there are special situations where one
wants to reduce the overall volume in the digital domain, i.e., before
the AC'97 codec's PCM volume control. To allow this, add a module
parameter that sets the initial DXS volume.
Tested-by: Soeren D. Schulze <soeren.d.schulze@gmx.de>

YMFPCI driver

- ALSA: ymfpci: use enum control info helper
Simplify the info callback by using the snd_ctl_enum_info() helper function.

au88x0 driver

- ALSA : au88x0 - Limit number of channels to fix Oops via OSS emu
Fix playback/capture channels patch to change supported playback
channels of au8830 to 1,2,4 and capture channels to 1,2.
This prevent oops when oss emulation use SNDCTL_DSP_CHANNELS to
set 3 Channels
- sound: fixed typos

gitcompile script

- gitcompile: fixed typo
- gitcompile: check for more and correct alsa-kmirror/kernel directories
- gitcompile: Fix issue with relative ALSAKERNELDIR
Reported-by: Stephen Warren <swarren@nvidia.com>
- gitcompile: Add right check for whole linux 2.6 trees (ALSAKERNELDIR)

alsa-lib

Core

- Release v1.0.24
- configure.in: don't rely on test -a, not all shells support it
Notably, /bin/sh in older Debian and Ubuntu is dash, which doesn't.
- Version-check libtool correctly when doing an out-of-tree build
libtool is only created at the end of ./configure, so it doesn't make
sense to grep it in ./configure (the check would always fail the first
time). However, ltmain.sh is copied into the ${srcdir} by libtoolize and
should be safe to check at any time that configure can be run.
- ucm: Moved ucm to src/ucm subdirectory
- separate code to more files
- use standard lists to represent structures
- use alsa-lib configuration parser
- general: recoded snd_dlobj_ functions
- changed logic to get/put blocks
- added mutex locking of the symbol list
- added reference counting (do not free used dl handles)
- Check for thread-specific locale support

Control API

- ucm: ctlparse - always terminate cset buffer
- control: add ASCII parsers from amixer
- tlv: fix returned dB information for min-is-mute controls
For TLV information that indicates that the minimum value is actually
muted, the returned range used the wrong minimum dB value, and
converting dB values to raw control values did not round up correctly
near the minimum.
- namehint: Another fix to properly evaluate hw devices
- namehint: Fix hw device evaluation (missing last device)
- general: recoded snd_dlobj_ functions
- changed logic to get/put blocks
- added mutex locking of the symbol list
- added reference counting (do not free used dl handles)
- namehint: Evaluate more possibilities for hw devices
This tries to fix the issue when logical device indexes does not match the
hardware device indexes (like hdmi -> 0:3, 1:7, 2:8, 3:9).
- Memory leak in namehint.c
Get_card_name() can be called more than once on the same list, so it
must free the previous list->cardname before replacing it.
- tlv: Remove tailing tab after snd_ctl_get_dB_range function
Cosmetic fix.
There was a tab instead of new line after snd_ctl_get_dB_range
function.
- tlv: Handle 'holes' in SND_CTL_TLVT_DB_RANGE array
When converting from dB to raw value, and DB_RANGE is
used with non overlapping map, dB value in between the
sub ranges will be not found.
For example, if the control has the following:
0: -10dB
1: -5dB
2: 0dB
3: 2dB
4: 4dB
static const unsigned int nonoverlapping_tlv[] = {
TLV_DB_RANGE_HEAD(2),
0, 2, TLV_DB_SCALE_ITEM(-1000, 500, 0),
3, 4, TLV_DB_SCALE_ITEM(200, 200, 0),
};
Range 1: -10 .. 0dB
Range 2: 2 .. 4dB
If user asks for 1dB the snd_tlv_convert_from_dB will not find
the raw value, since the 1dB is not part of either range.
To fix this, we will store the previous non maching range's
maximum raw value. If the dB value is not found in the next range,
we will check, if the requested dB value is in between the current
and the previous range, and if it is than pick the apropriate raw
value based on the xdir (up or down rounding).
- tlv: Check out of range dB with SND_CTL_TLVT_DB_RANGE
When converting from dB value to raw value, the control's
full range was not checked in case of SND_CTL_TLVT_DB_RANGE.
Check out of range dB values, and return apropriate raw
value for the caller.
- control: tlv: Check dB range only within the control's volume range
The DB_RANGE need to be used on some HW, since the gain on
volume control is not continuous, and has to be divided into
several sub DB_SCALE ranges.
ASoC has a feature to override the HW default volume range,
and in this case when the volume range is less than the
HW maximum we do not need to go through the whole DB_RANGE,
but we need to stop where the kcontrol's maximum tell us.

PCM API

- pcm: fix typo in snd_pcm_recover() error message
- pcm_plugin: fix delay
PulseAudio ALSA modules report errors after calling
snd_pcm_avail_delay(), with a delay lower than the number of samples
available.
Correct delay using Jaroslav's recommendation:
"the result should be 'delay(slave) + mmap_capture_avail(pcm)"
- pcm: add MMAP_EMUL to type names
If we try to print this then it causes a read past the end of the array
in snd_pcm_type_name().
- pcm_plugin: remove unused client_frames and slave_frames routines
plug->client_frames and plug->slave_frames are not used by
any plugin, remove dead code.
- pcm: fix snd_pcm_avail_delay() function
For capture stream, the delay must be obtained as last, but we need to
update the ring buffer pointers for the avail_update call. So, rearrange
the code a bit and add hwsync call as first.
- support for period wakeup disabling
Add API to disable period wakeups.
- pcm: pass hw_params flags to slave
Fix required before interrupt disabling routines patch can be applied.
Without this fix, the interrupts are only disabled when directly
accessing hw devices.
- pcm direct plugins: change timestamping in dsnoop
Do not use own timestamps, try to sync hw.ptr with real timestamp.
- general: recoded snd_dlobj_ functions
- changed logic to get/put blocks
- added mutex locking of the symbol list
- added reference counting (do not free used dl handles)
- Add missing support for 3-byte formats for 16bit put conversion
In the put conversion, the support for 3-byte formats was missing.
This resulted in inaudible volume with rate plugin & co.
Typos fixed by Mark Hills <mark@pogo.org.uk>
- pcm: Fixed typo (wrong deleted line) instroduced in the minperiodsize patch
- pcm: introduce defaults.pcm.compat to change the params choose behaviour
Having getenv directly in the function is not a good idea. Allow
configuration of the behaviour change in snd_pcm_param_choose() function
using alsa.conf. Use the environment variable LIBASOUND_COMPAT only
as fallback.
- pcm: add defaults.pcm.minperiodtime parsing
Some broken applications like Audacious don't set any timing parameters.
While the alsa-lib behaviour is to select the smallest period size and
biggest buffer size, the result is the generation of thousands
interrupts per second.
The default value in alsa.conf is 5000usec.
- pcm_plug: fix comparison always true
- pcm - ladspa: fix small memory leak in snd_pcm_ladspa_free_instances()

Sequencer API

- seq: Fix for snd_seq_parse_address()
snd_seq_parse_address() uses strncmp() to compare the client name
in the string argument with the existing clients, until it finds one
name matching the same leading characters. This may produce wrong
results when there are two sequencer clients with similar names.
Example: "KMidimon" : "Kmid"

Use Case Manager API

- ucm: fix switch device & modifier when no transition is found
Fix some logic bugs in switch device and switch modifier when
transition sequences are not found. Also fix check for new device.
Reported-by: w0806.kim@samsung.com
- ucm: add snd_use_case_verb_list() inline function
- ucm: fix handling of cset with spaces in the control name
Always terminate the cset command based on the last space found within the
cset command since the control name may contain spaces.
- ucm: only select modifier when supported device is enabled
Make sure the supported device of a modifier is enabled before
we enable the modifier.
- ucm: implement basic script exec functionality
- ucm: check the correct return value for modifier
- ucm: check for valid value list before dereference.
- ucm: remove unused code.
- ucm: make sure active modifier and device lists are initialised
- ucm: remove parse_device() and call parse_compound() directly
- ucm: modifiers names must be compound parse
Modifier names must end in a .index to ensure we can support
same named modifiers. However the modifier index will be for internal
use only and the client will not use the index when setting modifier.
The modifier selection for same name modifiers will be based upon supported
device.
- ucm: removed unused 'active' member in struct use_case_device
- ucm: initial implementation for cdev/cset
- ucm: CTL devices are only one per card (remove DEV from comments)
- ucm: add ValueDefaults section to the master file
- the get_value() function is recoded (tries to find the value in
parent's list)
- ucm: add cdev
- ucm: fix parser for sequences and fix wrong strcmp
The sequences are not parsed correctly. First cfg value is the command
and second value is the command argument.
Also, fix strcmp calls in ucm/main.c (reported by
abraham duenas <aduejazz@gmail.com>).
- ucm: debug parser
- ucm: implemented card list feature
- also added some test files to test/ucm tree
- ucm: unify snd_use_case_geti(), add snd_use_case_card_list() template
- ucm: cosmetic fix
- ucm: added implementation for other ucm parts, only card name list is missing
- ucm: Introduce "Value {}" section, more implementation work
- new "Value {}" section is introduced for read-only values
describing the PCM and control/mixer IDs (or any other
things)
- more complete implementation for API functions
- ucm: Moved ucm to src/ucm subdirectory
- separate code to more files
- use standard lists to represent structures
- use alsa-lib configuration parser
- ucm: Recode header to be more universal
- merge all similar functions to one - make everything
string based
- add possibility to create virtual cards
- add comment pairs for the end user interface
- ucm: core - Add initial Use Case Manager support.
This patch adds audio Use Case management support to alsa-lib.
UCM is designed to abstract the audio device hardware mixer controls into
high level abstract use cases.
The use case manager works by configuring the sound card ALSA kcontrols to
change the hardware digital and analog audio routing to match the requested
device use case. The use case manager kcontrol configurations are stored in
easy to modify text files.
UCM development has been kindly sponsored by Texas Instruments Inc,
Wolfson Microelectronics PLC and Slimlogic Ltd.
- ucm: header - ALSA Use Case Manager
This patch adds the API header for alsa-lib Use Case Management support.
This file defines the public interface exported by UCM to client
applications.
UCM development has been kindly sponsored by Texas Instruments Inc,
Wolfson Microelectronics PLC and Slimlogic Ltd.

/include/Makefile.am

- ucm: build - add build support for Use Case Manager
Add doxygen and make support for UCM.

/src/Makefile.am

- ucm: Moved ucm to src/ucm subdirectory
- separate code to more files
- use standard lists to represent structures
- use alsa-lib configuration parser
- ucm: build - add build support for Use Case Manager
Add doxygen and make support for UCM.

ALSA Lisp

- alisp - Fix a string format ambiguity

Configuration

- aliases.conf: add aliases for CMI8788-based cards
Add entries for all the aliases of the CMI8788 chip.
(Not all of them are currently used by the driver.)
- USB-Audio.conf: fix Audiophile USB card name
The device name of the M-Audio AudioPhile USB is actually "Audiophile USB (tm)".
Also keep the old string, just to be sure.
- config file processing: rewrite the locking - use one recursive mutex
Avoid configuration file processing races when multiple threads call
the *open() functions together (for example using alsaloop with
multiple -T jobs can reproduce this issue).
- Fix typo for surround PCMs in src/conf/cards/Loopback.conf
- Add Loopback.conf to define standard PCM devices for snd-aloop driver
- HDA-Intel: do not lock IEC958 Playback switch
As discussed with Takashi, removing the lock allows apps to mute
the output using the mixer interface.
Other AES controls remain locked.
- pcm: introduce defaults.pcm.compat to change the params choose behaviour
Having getenv directly in the function is not a good idea. Allow
configuration of the behaviour change in snd_pcm_param_choose() function
using alsa.conf. Use the environment variable LIBASOUND_COMPAT only
as fallback.
- pcm: add defaults.pcm.minperiodtime parsing
Some broken applications like Audacious don't set any timing parameters.
While the alsa-lib behaviour is to select the smallest period size and
biggest buffer size, the result is the generation of thousands
interrupts per second.
The default value in alsa.conf is 5000usec.
- HDA-Intel: present all 4 HDMI outputs instead of just the first one
Commit 92608badc519a8c1f65d93743396517aaa582b53 in linux kernel added
the possibility of 3 additional HDMI devices on indexes 7-9.
Present all those additional devices using the "hdmi" alias as well.
- Use thread-safe locale functions if available
setlocale() is not thread-safe. It can actually trigger a crash if
another thread uses locale informations at the same time in the process.
Library code should use POSIX newlocale/duplocale/uselocale/freelocale
instead. Those functions only change the locale data for the calling
thread.

Documentation

- ucm: Moved ucm to src/ucm subdirectory
- separate code to more files
- use standard lists to represent structures
- use alsa-lib configuration parser
- ucm: build - add build support for Use Case Manager
Add doxygen and make support for UCM.

Dynamic Loader helpers

- general: recoded snd_dlobj_ functions
- changed logic to get/put blocks
- added mutex locking of the symbol list
- added reference counting (do not free used dl handles)

Kernel Headers

- Update hdspm.h file from Adrian Knoth - final version
This one matches the settled driver version.
- Update hdspm.h file from Adrian Knoth
To satisfy new hdspmixer requirements, update hdspm.h file.
- Add hdspm.h kernel header to include/alsa/sound tree for the hdspmixer app
- support for period wakeup disabling
Add API to disable period wakeups.

Test/Example code

- ucm: fix parser for sequences and fix wrong strcmp
The sequences are not parsed correctly. First cfg value is the command
and second value is the command argument.
Also, fix strcmp calls in ucm/main.c (reported by
abraham duenas <aduejazz@gmail.com>).
- ucm: debug parser
- ucm: implemented card list feature
- also added some test files to test/ucm tree
- test/latency: fix timediff calculation

alsa-utils

Core

- Release v1.0.24
- configure.in: Fix xmlto detection
xmlto was never detected when alsaconf is disabled leading to a missing
alsactl_init man page.
- alsactl: Add a --with-udev-rules-dir configure option.
After the previous patch to install udev rules it is impossible to do a
non-root, custom-prefix make install. This is generally not a problem
when building official packages but it can be a pain for developers
and debuggers etc.
This is essentially the same patch as was already made in PulseAudio
in commit e8a5746f2fcae59bfd18d39b621509b3ef130453.
- configure.in: Fix variable name
Fix variable name for --with-asound-state-dir as currently we have
to pass --with-ASOUND_STATE_DIR= which is wrong and inconsistent with
the other switches.
- alsactl: Move asound.state location to /var/lib/alsa
.... and add configure switch for it.
/etc might be on a read-only partition which is not suitable for dynamic
data such as the mixer settings. Hence move the location of asound.state
to /var/lib.
This is based on a patch from Ubuntu/Debian which hardcoded the pah in
/var/lib.
- alsactl: systemd and udev hookup
Add minimal systemd and udev support to alsactl so that mixer settings
are restored at boot, when sound cards are plugged in and saved on
shutdown.
This is similar to existing udev/init script solutions in various
distributions.
Note that alsactl is called both synchronously from the udev rules as
well as asynchronously at boot. This is intended, and to ensure two
things:
- At boot the asound.state file might not be readable, since it resides
on a different file system. That means exclusively restoring sound card
settings from udev rules will no suffice, since if the rule is
executed at early boot (for example within udev settle) then the file
will no be readable and cannot be restored.
- We need to ensure that applications monitoring sound cards coming and
going (such as PA) must not get these events before the mixer settings
have been restored. That means the mixer settings must be restored
synchronously withing the udev rules, before the events are passed on
to the apps.
That basically means we need to restore the settings once in udev, to
deal with sound cards becoming available during runtime. And once in
early boot to deal with coldplugged soundcards whose data files might
not have been available at time of plugging. Hence we call alsactl
twice: one from the udev rule, and once from he systemd unit file.
- Introduce alsaloop utility
alsaloop allows create a PCM loopback between a PCM capture device
and a PCM playback device.
alsaloop supports multiple soundcards, adaptive clock synchronization,
adaptive rate resampling using the samplerate library (if available in
the system). Also, mixer controls can be redirected from one card to
another (for example Master and PCM).
- alsaucm: Add Use Case Manager utility
alsaucm is a command line tool that can be used to generate and debug UCM
configuration files. The alsaucm utility can fully use the UCM functionality
to query and configure all the UCM functionality in alsa-lib.
This work was sponsored by Slimlogic Ltd, Texas Instruments Inc and Wolfson
Microelectronics PLC.
- Revert wrong parts of "alsactl: use snd_config_imake* functions"
This reverts the parts of commit e509df69a5100df28921980362488f6947df0aae
that accidentally reverted a bunch of earlier commits.
- alsactl: use snd_config_imake* functions
To save a call to snd_config_set_xxx, replace the calls to
snd_config_make_xxx with snd_config_imake_xxx.

ALSA Control (alsactl)

- alsactl: Add a --with-udev-rules-dir configure option.
After the previous patch to install udev rules it is impossible to do a
non-root, custom-prefix make install. This is generally not a problem
when building official packages but it can be a pain for developers
and debuggers etc.
This is essentially the same patch as was already made in PulseAudio
in commit e8a5746f2fcae59bfd18d39b621509b3ef130453.
- alsactl: Move asound.state location to /var/lib/alsa
.... and add configure switch for it.
/etc might be on a read-only partition which is not suitable for dynamic
data such as the mixer settings. Hence move the location of asound.state
to /var/lib.
This is based on a patch from Ubuntu/Debian which hardcoded the pah in
/var/lib.
- alsactl: systemd and udev hookup
Add minimal systemd and udev support to alsactl so that mixer settings
are restored at boot, when sound cards are plugged in and saved on
shutdown.
This is similar to existing udev/init script solutions in various
distributions.
Note that alsactl is called both synchronously from the udev rules as
well as asynchronously at boot. This is intended, and to ensure two
things:
- At boot the asound.state file might not be readable, since it resides
on a different file system. That means exclusively restoring sound card
settings from udev rules will no suffice, since if the rule is
executed at early boot (for example within udev settle) then the file
will no be readable and cannot be restored.
- We need to ensure that applications monitoring sound cards coming and
going (such as PA) must not get these events before the mixer settings
have been restored. That means the mixer settings must be restored
synchronously withing the udev rules, before the events are passed on
to the apps.
That basically means we need to restore the settings once in udev, to
deal with sound cards becoming available during runtime. And once in
early boot to deal with coldplugged soundcards whose data files might
not have been available at time of plugging. Hence we call alsactl
twice: one from the udev rule, and once from he systemd unit file.
- alsactl init: Initialize also "Master Front Playback Volume" & "Switch"
- alsactl init: Handle "Capture Source" and "Mic Boost" in the default script
- alsactl: Change handling of inactive controls
The inactive controls are stored, but they are not restored
when they are marked inactive in the state file or in the
driver.
- alsactl init: use "generic method" instead "guess method"
- alsactl init: Use "Found hardware:" instead "Unknown hardware:"
It seems that "Unknown hardware:" confuses users. Use "Found hardware:"
instead.
- Revert wrong parts of "alsactl: use snd_config_imake* functions"
This reverts the parts of commit e509df69a5100df28921980362488f6947df0aae
that accidentally reverted a bunch of earlier commits.
- alsactl: change format of comment node in state file
Make the comment node a separate node in the state file (join=0), and
move it after the other fields of the respective control.
- alsactl: correctly restore dB values of controls with changed range
When the range of a control has changed between driver versions, it is a
good idea to restore the same dB value of the control. However,
computing the dB value by interpolating betweem the min/max dB values
duplicates alsa-lib's TLV functions and does not even work for controls
with a linear dB range.
A simple conversion to dB and back can be done if we add the dB value(s)
to the saved state.
- alsactl: remove open-coded search
Remove search_comment_item since it does the same as snd_config_search.
- alsactl: move alloca out of loop
Reserving new space from the stack in every loop iteration is not
necessary, so move the call to snd_ctl_elem_id_alloca outside where it
is executed only once.
- alsactl: use snd_config_imake* functions
To save a call to snd_config_set_xxx, replace the calls to
snd_config_make_xxx with snd_config_imake_xxx.

Speaker Test

- speaker-test: Don't retry after fatal errors
Fixup commit 9b1a2566: Remove error loop
- speaker-test: add test pattern for PCM layer debugging purposes

aconnect

- Revert wrong parts of "alsactl: use snd_config_imake* functions"
This reverts the parts of commit e509df69a5100df28921980362488f6947df0aae
that accidentally reverted a bunch of earlier commits.
- alsactl: use snd_config_imake* functions
To save a call to snd_config_set_xxx, replace the calls to
snd_config_make_xxx with snd_config_imake_xxx.

alsaconf

- alsactl: Move asound.state location to /var/lib/alsa
.... and add configure switch for it.
/etc might be on a read-only partition which is not suitable for dynamic
data such as the mixer settings. Hence move the location of asound.state
to /var/lib.
This is based on a patch from Ubuntu/Debian which hardcoded the pah in
/var/lib.

alsaloop

- alsaloop: rework the ctl event handling routine
- alsaloop: Delay the restart a bit (to handle snd-aloop playback xruns better)
- alsaloop: Fix latency print
- alsaloop: fixes, added -W/--wake option
- added -W/--wake option to reduce poll time
- another try to fix the avail_min parameter for playback
- fixed initial silence fill
- alsaloop: add -U/--xrun to alsaloop.1 man page
- alsaloop: added xrun profiling support (-U,--xrun), added SIGUSR1 state dump
- alsaloop: add --pctl and --cctl options to man page
- alsaloop: add --pctl and --cctl options
In some cases it might be usefull to specify another CTL device names.
Add -X/--pctl and -Y/--cctl options.
- alsaloop: Fixes and added --workaround option
- added workaround for alsa-lib (pthread configuration parsing issue) -
the workaround must be activated manually using ('--workaround serialopen')
- fixed avail_min initialization (caused high CPU usage or xruns)
- fixed shared buffer initialization (both capture and playback buffers
must have equal number of samples in this config)
- alsaloop: Fix command-line parsing and pollfd initialization
- alsaloop: Add OSS mixer redirection support
- alsaloop: added resampling for unsupported soundcard rates
- improve also xrun synchronization
- alsaloop: fix resample argument parsing
- alsaloop: fix -a option and slave mode processing
- alsaloop: Fix thread handling
- alsaloop: Fix loopbacks pointer initialization and allocation, fix -T option
- Introduce alsaloop utility
alsaloop allows create a PCM loopback between a PCM capture device
and a PCM playback device.
alsaloop supports multiple soundcards, adaptive clock synchronization,
adaptive rate resampling using the samplerate library (if available in
the system). Also, mixer controls can be redirected from one card to
another (for example Master and PCM).

alsamixer

- alsamixer: use cubic scale for volume bars
Instead of mapping the raw volume values linearly to the screen, use
a mapping where the bar height is proportional to the audible volume,
i.e., where the amplitude is the cube of the bar height.
- alsamixer: increase step size for big control value ranges
For controls with a big range, stepping through all values can become
tedious and make it impossible to adjust the volume easily. Therefore,
ensure that all steps are big enough so that the full range has at most
one hundred steps.
- alsamixer: remove obsolete e-mail
Remove the no-longer-valid e-mail address also from the man page.
- alsamixer: remove obsolete e-mail
Tim Janik's e-mail address is no longer valid.

alsaucm

- alsaucm: fix command line arguments parsing
- ucm: added listcards command
- alsaucm: initial rewrite to use update API
- alsaucm: Report failure to set a device due to missing verb setup
- alsaucm: Add Use Case Manager utility
alsaucm is a command line tool that can be used to generate and debug UCM
configuration files. The alsaucm utility can fully use the UCM functionality
to query and configure all the UCM functionality in alsa-lib.
This work was sponsored by Slimlogic Ltd, Texas Instruments Inc and Wolfson
Microelectronics PLC.

amixer

- amixer: fix parsing of control ID name

aplay/arecord

- aplay/arecord: term_c_lflag variable might be unitialized in some cases
The term_c_lflag variable might be unitialized in some cases. Add extra
check to avoid setting of wrong value.
- aplay: fix termio settings - return back old c_flag value on exit
- symptom - ssh client password authentication does not work with
the modified terminal settings
- aplay/arecord: Added hardware pause support (press SPACE or Enter)

alsa-tools

Core

- Release v1.0.24

hdspmixer

- hdspmixer: Don't use channelmap from hdspm.h
The channel mapping has been moved to hdspm.c, so it's no longer
available to userspace tools. For now, let's simply copy (duplicate) the
data and wait for a way to query this information from the driver.
- Add support for RME MADI, RayDAT and AIO
Merged the work by Florian Faber that's distributed separately as
hdspmixer64.
Code taken from http://wiki.linuxproaudio.org/index.php/App:hdspmixer_64
- hdspmixer: Fix buffer overflow
A one off string buffer overflow fixed by handling it properly with
string stream.

alsa-firmware

Core

- Release v1.0.24

AudioScience ASIHPI Firmware

- Updated asihpi firmware to version 4.04.01

RME HDSP Firmware

- hdsp - Add firmware for HDSP RPM

alsa-plugins

Core

- Release v1.0.24

Documentation

- Fix README-jack (second channel)
Reported-by: Raymond Yau <superquad.vortex2@gmail.com>

PulseAudio -> ALSA plugin

- pulse: Add handle_underrun option
Added a config option "handle_underrun" to specify whether pulse plugin
handles the underrun reported from PA. The default value is now set to
false, i.e. it will ignore underruns in PA (for good reasons below).
You can take back to the old behavior by setting handle_underrun true.
The original idea was brought by David Henningsson <diwic@ubuntu.com>,
while this patch is simplified and makes the behavior configurable.
The reasons for avoiding underruns (cited from David's original patch):
Reporting underruns to ALSA seems to do more bad than good, for these reasons:
* If pulseaudio gets an underrun, the normal way to end that underrun is to
feed it with more buffers. This is different from the ALSA way of dealing
with underruns, which requires hardware buffer pointers to be reset.
* In addition, underrun signals are delivered asynchronously from pulseaudio.
This means that there might be more buffers on the way to pulseaudio when
the underrun is reported, making the underrun obsolete. Unfortunately,
there is currently no known way to determine whether this is the case or
not.
- pulse: Fix invalid buffer pointer return value
This patch improves recovering from underruns, and prevents hangs inside
snd_pcm_write* and snd_pcm_read* due to snd_pcm_avail* returning too
low values. It especially helps low latency situations.
Custom Search
Personal tools
Namespaces

Variants
Actions
Navigation
wiki
Toolbox