mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
sound updates for 4.2-rc1
It was a busy development cycle at this time, as you can see a wide
range of changes in diffstat. There are no big changes but many
refactoring and improvements. Here we go some highlights:
* ALSA core:
- Procfs codes were cleaned up to use seq_file
- Procfs can be opt out via Kconfig (only for EXPERT)
- Two types of jack API were unified finally; now both kctl and input
jack devs are handled via a single function call.
* HD-audio
- Continued code restructuring for the future ASoC driver; now HDA
controller driver is split to a core helper module.
- Preliminary codes for Skylake audio support in HDA core.
- Proper i915 gfx power well management for SKL & co
- Enabled runtime PM as default for Intel HDMI/DP codecs
- Newer Tegra chip supports
- More quirks for Dell headsets, Alienware (with CA0132), etc.
- A couple of DRM ELD helper API functions
* ASoC
- Support for loading ASoC topology maps from firmware, intended to be
used to allow self-describing DSP firmware images to be built which
can map controls added by the DSP to userspace without the kernel
needing to know about individual DSP firmwares
- Lots of refactoring to avoid direct access to snd_soc_codec where
it's not needed supporting future refactoring
- Big refactoring, cleanup and enhancement for the Wolfson ADSP driver
- Cleanup series for TI TAS2552 and R-CAR drivers
- Fixes and improvements on RT56xx codecs
- Support for TI TAS571x power amplifiers
- Support for Qualcomm APQ8016 and ZTE ZX296702 SoCs
- Support for x86 systems with RT5650 and Qualcomm Storm
- Support for Mediatek AFE (Audio Front End) unit
- Other various small fixes to ASoC codec drivers
* Firewire
- Enhanced to allow non-blocking streams to use timestamp
synchronization
- Improve support for DM1500 and BeBoBv3
* Misc
- Cleanup of old pci API functions over all PCI sound drivers
- Fix long-standing regression of the old powermac i2c setup
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJVitjmAAoJEGwxgFQ9KSmksW8P/2ngNzNpo/bmmGh6xjB7GWU9
RDAkqhKd6yvcClQojGS9n4a9CJ8nk5tdqTr9rMp58N7DRv6GYCPdq0A+lLOih+yC
UPcTkTMBKm6UtvJjEcaasMxhvs5xno345oo5KrBdvlfv1rXe83dTtzEsybWYkaVD
dJbbr5QFaiyj5cTp9nanK5kyTyDDXCdP+vjBGv5u9+GbVxQ6Eenyts89uSqEZs1F
ltoBrl4VotXyqHKneJ0ttUKEimcVIgu8rCXH0sTtCg0SZVJFi+UXzI/VkkS+expL
x9bNN6bw5UT9LA8+qybFRETx+8qchFsffzeUEle4wkIpVKXt/VqjP3GIvp6umlF5
RhU5Wumf2KuIVjgVsYxd7bUkmHr4ywpqS3vSWMWU90FApJay7exatzLPyUVN0AxH
pdAizc8NWFk1kVtWq8jr9agEdxDt2l+E9UXij+ViGyouMZL1oSvOo9NgovfwvfC6
qKUisUkq53p1uPOW/U5gvF7bee2enEXMI9YUY1Z8MHx7nloq+25Nqma8P0gYthB8
6Qk+t1oqC2p7ZMSkyVHH9nySQmoLITZHZmsHqqpLW+jFtanhuckDI75AvmrScs+r
3+2YZXxPI0caZZ1qxMCd7Clmh7ZcSeRe73HXSXmF0xrLffISM3Yg3ZN10cbWQRj2
D6TiHCspLpn+pcYLcWJ2
=D78E
-----END PGP SIGNATURE-----
Merge tag 'sound-4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound updates from Takashi Iwai:
"It was a busy development cycle at this time, as you can see a wide
range of changes in diffstat. There are no big changes but many
refactoring and improvements. Here we go some highlights:
ALSA core:
- Procfs codes were cleaned up to use seq_file
- Procfs can be opt out via Kconfig (only for EXPERT)
- Two types of jack API were unified finally; now both kctl and input
jack devs are handled via a single function call.
HD-audio:
- Continued code restructuring for the future ASoC driver; now HDA
controller driver is split to a core helper module.
- Preliminary codes for Skylake audio support in HDA core.
- Proper i915 gfx power well management for SKL & co
- Enabled runtime PM as default for Intel HDMI/DP codecs
- Newer Tegra chip supports
- More quirks for Dell headsets, Alienware (with CA0132), etc.
- A couple of DRM ELD helper API functions
ASoC:
- Support for loading ASoC topology maps from firmware, intended to
be used to allow self-describing DSP firmware images to be built
which can map controls added by the DSP to userspace without the
kernel needing to know about individual DSP firmwares
- Lots of refactoring to avoid direct access to snd_soc_codec where
it's not needed supporting future refactoring
- Big refactoring, cleanup and enhancement for the Wolfson ADSP
driver
- Cleanup series for TI TAS2552 and R-CAR drivers
- Fixes and improvements on RT56xx codecs
- Support for TI TAS571x power amplifiers
- Support for Qualcomm APQ8016 and ZTE ZX296702 SoCs
- Support for x86 systems with RT5650 and Qualcomm Storm
- Support for Mediatek AFE (Audio Front End) unit
- Other various small fixes to ASoC codec drivers
Firewire:
- Enhanced to allow non-blocking streams to use timestamp
synchronization
- Improve support for DM1500 and BeBoBv3
Misc:
- Cleanup of old pci API functions over all PCI sound drivers
- Fix long-standing regression of the old powermac i2c setup"
* tag 'sound-4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (533 commits)
ALSA: pcm: Fix pcm_class sysfs output
ALSA: hda-beep: Update authors dead email address
ASoC: wm_adsp: Move DSP Rate controls into the codec
ASoC: wm8995: Fix setting sysclk for WM8995_SYSCLK_MCLK2 case
ALSA: hda: provide default bus io ops extended hdac
ALSA: hda: add hda link cleanup routine
ALSA: hda: add hdac_ext stream creation and cleanup routines
ASoC: rsrc-card: remove unused ret
ALSA: HDAC: move SND_HDA_PREALLOC_SIZE to core
ASoC: mediatek: Add machine driver for rt5650 rt5676 codec
ASoC: mediatek: Add machine driver for MAX98090 codec
ASoC: mediatek: Add AFE platform driver
ASoC: rsnd: remove io from rsnd_mod
ASoC: rsnd: move rsnd_mod_is_working() to rsnd_io_is_working()
ASoC: rsnd: don't use rsnd_mod_to_io() on snd_kcontrol
ASoC: rsnd: don't use rsnd_mod_to_io() on rsnd_src_xxx()
ASoC: rsnd: don't use rsnd_mod_to_io() on rsnd_ssi_xxx()
ASoC: rsnd: don't use rsnd_mod_to_io() on rsnd_dma_xxx()
ASoC: rsnd: don't use rsnd_mod_to_io() on rsnd_get_adinr()
ASoC: rsnd: add common interrupt handler for SSI/SRC/DMA
...
This commit is contained in:
commit
4570a37169
415 changed files with 19288 additions and 6679 deletions
|
|
@ -465,6 +465,7 @@ static dma_cookie_t rcar_dmac_tx_submit(struct dma_async_tx_descriptor *tx)
|
|||
static int rcar_dmac_desc_alloc(struct rcar_dmac_chan *chan, gfp_t gfp)
|
||||
{
|
||||
struct rcar_dmac_desc_page *page;
|
||||
unsigned long flags;
|
||||
LIST_HEAD(list);
|
||||
unsigned int i;
|
||||
|
||||
|
|
@ -482,10 +483,10 @@ static int rcar_dmac_desc_alloc(struct rcar_dmac_chan *chan, gfp_t gfp)
|
|||
list_add_tail(&desc->node, &list);
|
||||
}
|
||||
|
||||
spin_lock_irq(&chan->lock);
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
list_splice_tail(&list, &chan->desc.free);
|
||||
list_add_tail(&page->node, &chan->desc.pages);
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -516,6 +517,7 @@ static void rcar_dmac_desc_put(struct rcar_dmac_chan *chan,
|
|||
static void rcar_dmac_desc_recycle_acked(struct rcar_dmac_chan *chan)
|
||||
{
|
||||
struct rcar_dmac_desc *desc, *_desc;
|
||||
unsigned long flags;
|
||||
LIST_HEAD(list);
|
||||
|
||||
/*
|
||||
|
|
@ -524,9 +526,9 @@ static void rcar_dmac_desc_recycle_acked(struct rcar_dmac_chan *chan)
|
|||
* list_for_each_entry_safe, isn't safe if we release the channel lock
|
||||
* around the rcar_dmac_desc_put() call.
|
||||
*/
|
||||
spin_lock_irq(&chan->lock);
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
list_splice_init(&chan->desc.wait, &list);
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
|
||||
list_for_each_entry_safe(desc, _desc, &list, node) {
|
||||
if (async_tx_test_ack(&desc->async_tx)) {
|
||||
|
|
@ -539,9 +541,9 @@ static void rcar_dmac_desc_recycle_acked(struct rcar_dmac_chan *chan)
|
|||
return;
|
||||
|
||||
/* Put the remaining descriptors back in the wait list. */
|
||||
spin_lock_irq(&chan->lock);
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
list_splice(&list, &chan->desc.wait);
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -556,12 +558,13 @@ static void rcar_dmac_desc_recycle_acked(struct rcar_dmac_chan *chan)
|
|||
static struct rcar_dmac_desc *rcar_dmac_desc_get(struct rcar_dmac_chan *chan)
|
||||
{
|
||||
struct rcar_dmac_desc *desc;
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
/* Recycle acked descriptors before attempting allocation. */
|
||||
rcar_dmac_desc_recycle_acked(chan);
|
||||
|
||||
spin_lock_irq(&chan->lock);
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
|
||||
while (list_empty(&chan->desc.free)) {
|
||||
/*
|
||||
|
|
@ -570,17 +573,17 @@ static struct rcar_dmac_desc *rcar_dmac_desc_get(struct rcar_dmac_chan *chan)
|
|||
* allocated descriptors. If the allocation fails return an
|
||||
* error.
|
||||
*/
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
ret = rcar_dmac_desc_alloc(chan, GFP_NOWAIT);
|
||||
if (ret < 0)
|
||||
return NULL;
|
||||
spin_lock_irq(&chan->lock);
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
}
|
||||
|
||||
desc = list_first_entry(&chan->desc.free, struct rcar_dmac_desc, node);
|
||||
list_del(&desc->node);
|
||||
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
|
@ -593,6 +596,7 @@ static struct rcar_dmac_desc *rcar_dmac_desc_get(struct rcar_dmac_chan *chan)
|
|||
static int rcar_dmac_xfer_chunk_alloc(struct rcar_dmac_chan *chan, gfp_t gfp)
|
||||
{
|
||||
struct rcar_dmac_desc_page *page;
|
||||
unsigned long flags;
|
||||
LIST_HEAD(list);
|
||||
unsigned int i;
|
||||
|
||||
|
|
@ -606,10 +610,10 @@ static int rcar_dmac_xfer_chunk_alloc(struct rcar_dmac_chan *chan, gfp_t gfp)
|
|||
list_add_tail(&chunk->node, &list);
|
||||
}
|
||||
|
||||
spin_lock_irq(&chan->lock);
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
list_splice_tail(&list, &chan->desc.chunks_free);
|
||||
list_add_tail(&page->node, &chan->desc.pages);
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -627,9 +631,10 @@ static struct rcar_dmac_xfer_chunk *
|
|||
rcar_dmac_xfer_chunk_get(struct rcar_dmac_chan *chan)
|
||||
{
|
||||
struct rcar_dmac_xfer_chunk *chunk;
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
spin_lock_irq(&chan->lock);
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
|
||||
while (list_empty(&chan->desc.chunks_free)) {
|
||||
/*
|
||||
|
|
@ -638,18 +643,18 @@ rcar_dmac_xfer_chunk_get(struct rcar_dmac_chan *chan)
|
|||
* allocated descriptors. If the allocation fails return an
|
||||
* error.
|
||||
*/
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
ret = rcar_dmac_xfer_chunk_alloc(chan, GFP_NOWAIT);
|
||||
if (ret < 0)
|
||||
return NULL;
|
||||
spin_lock_irq(&chan->lock);
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
}
|
||||
|
||||
chunk = list_first_entry(&chan->desc.chunks_free,
|
||||
struct rcar_dmac_xfer_chunk, node);
|
||||
list_del(&chunk->node);
|
||||
|
||||
spin_unlock_irq(&chan->lock);
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
|
||||
return chunk;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue