Detailed changes v1.0.23 v1.0.24: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (1 revision(s)) |
(No difference)
|
Revision as of 12:33, 27 January 2011
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
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
HDA Intel driver
HDA generic driver
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
SoC Audio for TXx9
SoC Audio for the Atmel AT32/AT91 System-on-Chip
SoC Audio for the Samsung S3C24XX chips
SoC Audio for the Samsung chips
SoC Blackfin
SoC Codec 88PM860x
SoC Codec AC97
SoC Codec AD1836
SoC Codec AD193X
SoC Codec AD1980
SoC Codec AD73311
SoC Codec AK4104
SoC Codec AK4535
SoC Codec AK4642
SoC Codec AK4671
SoC Codec CQ0093 Voice
SoC Codec CS4270
SoC Codec CS42L51
SoC Codec CX20442
SoC Codec DA7210
SoC Codec DIT SPDI/F
SoC Codec General Digital MICs
SoC Codec MAX98088
SoC Codec Philips UDA134x
SoC Codec Philips UDA1380
SoC Codec SSM2602
SoC Codec STAC9766
SoC Codec TI sn95031
SoC Codec TLV320AIC23
SoC Codec TLV320AIC26
SoC Codec TLV320AIC3X
SoC Codec TLV320DAC33
SoC Codec TPA6130A2
SoC Codec TWL4030
SoC Codec TWL6040
SoC Codec WL1273
SoC Codec WM2000
SoC Codec WM8350
SoC Codec WM8400
SoC Codec WM8510
SoC Codec WM8523
SoC Codec WM8580
SoC Codec WM8711
SoC Codec WM8727
SoC Codec WM8728
SoC Codec WM8731
SoC Codec WM8737
SoC Codec WM8741
SoC Codec WM8750
SoC Codec WM8753
SoC Codec WM8770
SoC Codec WM8776
SoC Codec WM8804
SoC Codec WM8900
SoC Codec WM8903
SoC Codec WM8904
SoC Codec WM8940
SoC Codec WM8955
SoC Codec WM8960
SoC Codec WM8961
SoC Codec WM8962
SoC Codec WM8971
SoC Codec WM8974
SoC Codec WM8978
SoC Codec WM8985
SoC Codec WM8988
SoC Codec WM8990
SoC Codec WM8991
SoC Codec WM8993/4
SoC Codec WM8994
SoC Codec WM8995
SoC Codec WM9081
SoC Codec WM9090
SoC Codec WM9712
SoC Codec alc5621/2/3
SoC DaVinci
SoC Dynamic Audio Power Management
SoC EP93XX
SoC FSI SH7724
SoC Freescale
SoC Ingenic JZ4740
SoC Intel Medfield MID platform
SoC Layer
SoC Marvell Kirkwood
SoC NVIDIA Tegra
SoC Nuvoton NUC900
SoC PXA2xx 88PM860x Tavor EVB3
SoC PXA2xx Aeronix Zipit Z2
SoC PXA2xx Corgi
SoC PXA2xx E740
SoC PXA2xx EM-X270
SoC PXA2xx Poodle
SoC PXA2xx Spitz
SoC PXA2xx Tosa
SoC PXA2xx saarb
SoC S6000
SoC SH7760 AC97
SoC Texas Instruments OMAP
Soc PXA2xx Imote 2
Soc PXA2xx Magician
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.