Merge tag 'sound-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound updates from Takashi Iwai:
"This contains pretty many small commits covering fairly large range of
files in sound/ directory. Partly because of additional API support
and partly because of constantly developed ASoC and ARM stuff.
Some highlights:
- Introduced the helper function and documentation for exposing the
channel map via control API, as discussed in Plumbers; most of PCI
drivers are covered, will follow more drivers later
- Most of drivers have been replaced with the new PM callbacks (if
the bus is supported)
- HD-audio controller got the support of runtime PM and the support
of D3 clock-stop. Also changing the power_save option in sysfs
kicks off immediately to enable / disable the power-save mode.
- Another significant code change in HD-audio is the rewrite of
firmware loading code. Other than that, most of changes in
HD-audio are continued cleanups and standardization for the generic
auto parser and bug fixes (HBR, device-specific fixups), in
addition to the support of channel-map API.
- Addition of ASoC bindings for the compressed API, used by the
mid-x86 drivers.
- Lots of cleanups and API refreshes for ASoC codec drivers and
DaVinci.
- Conversion of OMAP to dmaengine.
- New machine driver for Wolfson Microelectronics Bells.
- New CODEC driver for Wolfson Microelectronics WM0010.
- Enhancements to the ux500 and wm2000 drivers
- A new driver for DA9055 and the support for regulator bypass mode."
Fix up various arm soc header file reorg conflicts.
* tag 'sound-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (339 commits)
ALSA: hda - Add new codec ALC283 ALC290 support
ALSA: hda - avoid unneccesary indices on "Headphone Jack" controls
ALSA: hda - fix indices on boost volume on Conexant
ALSA: aloop - add locking to timer access
ALSA: hda - Fix hang caused by race during suspend.
sound: Remove unnecessary semicolon
ALSA: hda/realtek - Fix detection of ALC271X codec
ALSA: hda - Add inverted internal mic quirk for Lenovo IdeaPad U310
ALSA: hda - make Realtek/Sigmatel/Conexant use the generic unsol event
ALSA: hda - make a generic unsol event handler
ASoC: codecs: Add DA9055 codec driver
ASoC: eukrea-tlv320: Convert it to platform driver
ALSA: ASoC: add DT bindings for CS4271
ASoC: wm_hubs: Ensure volume updates are handled during class W startup
ASoC: wm5110: Adding missing volume update bits
ASoC: wm5110: Add OUT3R support
ASoC: wm5110: Add AEC loopback support
ASoC: wm5110: Rename EPOUT to HPOUT3
ASoC: arizona: Add more clock rates
ASoC: arizona: Add more DSP options for mixer input muxes
...
This commit is contained in:
+36
-9
@@ -36,6 +36,7 @@ struct omap_chan {
|
||||
struct dma_slave_config cfg;
|
||||
unsigned dma_sig;
|
||||
bool cyclic;
|
||||
bool paused;
|
||||
|
||||
int dma_ch;
|
||||
struct omap_desc *desc;
|
||||
@@ -367,7 +368,8 @@ static struct dma_async_tx_descriptor *omap_dma_prep_slave_sg(
|
||||
|
||||
static struct dma_async_tx_descriptor *omap_dma_prep_dma_cyclic(
|
||||
struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
|
||||
size_t period_len, enum dma_transfer_direction dir, void *context)
|
||||
size_t period_len, enum dma_transfer_direction dir, unsigned long flags,
|
||||
void *context)
|
||||
{
|
||||
struct omap_chan *c = to_omap_dma_chan(chan);
|
||||
enum dma_slave_buswidth dev_width;
|
||||
@@ -415,7 +417,10 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_cyclic(
|
||||
d->dev_addr = dev_addr;
|
||||
d->fi = burst;
|
||||
d->es = es;
|
||||
d->sync_mode = OMAP_DMA_SYNC_PACKET;
|
||||
if (burst)
|
||||
d->sync_mode = OMAP_DMA_SYNC_PACKET;
|
||||
else
|
||||
d->sync_mode = OMAP_DMA_SYNC_ELEMENT;
|
||||
d->sync_type = sync_type;
|
||||
d->periph_port = OMAP_DMA_PORT_MPUI;
|
||||
d->sg[0].addr = buf_addr;
|
||||
@@ -426,7 +431,10 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_cyclic(
|
||||
if (!c->cyclic) {
|
||||
c->cyclic = true;
|
||||
omap_dma_link_lch(c->dma_ch, c->dma_ch);
|
||||
omap_enable_dma_irq(c->dma_ch, OMAP_DMA_FRAME_IRQ);
|
||||
|
||||
if (flags & DMA_PREP_INTERRUPT)
|
||||
omap_enable_dma_irq(c->dma_ch, OMAP_DMA_FRAME_IRQ);
|
||||
|
||||
omap_disable_dma_irq(c->dma_ch, OMAP_DMA_BLOCK_IRQ);
|
||||
}
|
||||
|
||||
@@ -435,7 +443,7 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_cyclic(
|
||||
omap_set_dma_dest_burst_mode(c->dma_ch, OMAP_DMA_DATA_BURST_16);
|
||||
}
|
||||
|
||||
return vchan_tx_prep(&c->vc, &d->vd, DMA_CTRL_ACK | DMA_PREP_INTERRUPT);
|
||||
return vchan_tx_prep(&c->vc, &d->vd, flags);
|
||||
}
|
||||
|
||||
static int omap_dma_slave_config(struct omap_chan *c, struct dma_slave_config *cfg)
|
||||
@@ -469,11 +477,14 @@ static int omap_dma_terminate_all(struct omap_chan *c)
|
||||
*/
|
||||
if (c->desc) {
|
||||
c->desc = NULL;
|
||||
omap_stop_dma(c->dma_ch);
|
||||
/* Avoid stopping the dma twice */
|
||||
if (!c->paused)
|
||||
omap_stop_dma(c->dma_ch);
|
||||
}
|
||||
|
||||
if (c->cyclic) {
|
||||
c->cyclic = false;
|
||||
c->paused = false;
|
||||
omap_dma_unlink_lch(c->dma_ch, c->dma_ch);
|
||||
}
|
||||
|
||||
@@ -486,14 +497,30 @@ static int omap_dma_terminate_all(struct omap_chan *c)
|
||||
|
||||
static int omap_dma_pause(struct omap_chan *c)
|
||||
{
|
||||
/* FIXME: not supported by platform private API */
|
||||
return -EINVAL;
|
||||
/* Pause/Resume only allowed with cyclic mode */
|
||||
if (!c->cyclic)
|
||||
return -EINVAL;
|
||||
|
||||
if (!c->paused) {
|
||||
omap_stop_dma(c->dma_ch);
|
||||
c->paused = true;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap_dma_resume(struct omap_chan *c)
|
||||
{
|
||||
/* FIXME: not supported by platform private API */
|
||||
return -EINVAL;
|
||||
/* Pause/Resume only allowed with cyclic mode */
|
||||
if (!c->cyclic)
|
||||
return -EINVAL;
|
||||
|
||||
if (c->paused) {
|
||||
omap_start_dma(c->dma_ch);
|
||||
c->paused = false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap_dma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
|
||||
|
||||
Reference in New Issue
Block a user