Commit Graph

21252 Commits

Author SHA1 Message Date
Kuninori Morimoto
374a528111 ASoC: rsnd: SSI supports DMA transfer via BUSIF
This patch adds BUSIF support for R-Car sound DMAEngine transfer.
The sound data will be transferred via FIFO which can cover blank time
which will happen when DMA channel is switching.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 17:56:13 +01:00
Kuninori Morimoto
849fc82a6f ASoC: rsnd: SSI supports DMA transfer
This patch adds DMAEngine transfer on SSI.
But, it transfers sound data from memory to SSI directly
without using HPBIF at this time.
It will be updated soon

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 17:56:13 +01:00
Kuninori Morimoto
0a4d94c07c ASoC: rsnd: add common DMAEngine method
R-Car Sound driver will support DMA transfer in the future,
then, SSI/SRU/SRC will use it.
Current R-Car can't use soc-dmaengine-pcm.c since its DMAEngine
doesn't support dmaengine_prep_dma_cyclic(),
and SSI needs double plane transfer (which needs special submit) on DMAC.
This patch adds common DMAEngine method for it

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 17:56:13 +01:00
Kuninori Morimoto
4b4dab8234 ASoC: rsnd: remove platform dai and add dai_id on platform setting
Current rsnd driver is using struct rsnd_dai_platform_info
so that indicate sound DAI information (playback/capture SSI ID).
But, SSI settings were also required separately.
Thus, platform settings was very un-understandable.
This patch adds dai_id to SSI
settings, and removed rsnd_dai_platform_info.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 17:56:13 +01:00
Charles Keepax
c7f3843575 ASoC: wm5110: Correct input OSR bits for wm5110
The input OSR bits are specified differently for wm5110 than for current
revs of wm5102. This patch corrects support for this on wm5110.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 17:41:33 +01:00
Lars-Peter Clausen
0d59ff3a24 ASoC: twl4030: Remove embedded snd_soc_codec structs from private data structs
It is unused and a leftover of the pre multi-component era.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 17:08:24 +01:00
Lars-Peter Clausen
95ad868289 ASoC: mc13783: Remove embedded snd_soc_codec structs from private data structs
It is unused and a leftover of the pre multi-component era.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 12:43:54 +01:00
Lars-Peter Clausen
f8f11795b9 ASoC: tlv320aic26: Fix keyclick feature
The tlv320aic26 contains a embedded snd_soc_codec struct which is referenced in
the keyclick code. That struct is never initialized though, replace the embedded
struct with a pointer and use that in the keyclick code.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 12:43:05 +01:00
Mark Brown
ed6a277239 ASoC: wm8994: Fix class W controls
Commit 6e0650 (ASoC: wm8994: Use SOC_SINGLE_EXT() instead of open-coding
it) went too far and converted a DAPM control to use SOC_SINGLE_EXT()
which crashes.  Revert that portion of the patch.

Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-06 10:52:01 +01:00
Eldad Zack
e7e58df8ef ALSA: usb-audio: WARN_ON when alts is passed as NULL
Prevent NULL dereference in snd_usb_add_endpoints(), when
alts is passed as NULL. In this case, WARN (since this is
a non-fatal bug) and return NULL ep. Call sites treat a NULL
return value as an error.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:52:27 +02:00
Eldad Zack
88abb8eff4 ALSA: usb-audio: remove implicit_fb from quirk
Since the quirks all apply to implicit feedback (the source endpoint
is always a data endpoint), there's no need to set and check
a flag for it.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:52:14 +02:00
Eldad Zack
914273c714 ALSA: usb-audio: remove is_playback from implicit feedback quirks
An implicit feedback endpoint can only be a capture source. The
consumer (sink) of the implicit feedback endpoint is therefore limited
to playback EPs.
Check if the target endpoint is a playback first and remove redundant
checks.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:51:48 +02:00
Eldad Zack
95fec88332 ALSA: usb-audio: do not initialize and check implicit_fb
Since implicit_fb is not changed, !implicit_fb will always
be true - it is set only after these checks.
Similarly, there's also no need to set it at the top of the function.

Change the type of implicit_fb to bool (more appropriate).

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:51:11 +02:00
Eldad Zack
f34d065013 ALSA: usb-audio: reverse condition logic in set_sync_endpoint
Reverse logic on the conditions required to qualify for a sync endpoint
and remove one level of indendation.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:50:15 +02:00
Eldad Zack
a60945fd08 ALSA: usb-audio: move implicit fb quirks to separate function
Separate setting implicit feedback quirks from setting
a sync endpoint (which may also be explicit feedback or async).

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:49:21 +02:00
Eldad Zack
71bb64c56d ALSA: usb-audio: separate sync endpoint setting from set_format
Setting the sync endpoint currently takes up about half of set_format().
Move it to a dedicated function.
No functional change.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:48:34 +02:00
Eldad Zack
d133f2c22e ALSA: usb-audio: remove assignment from if condition
Following general kernel style.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:48:22 +02:00
Eldad Zack
d833cdb10c ALSA: usb-audio: remove disabled debug code in set_format
Code block does not compile when enabled.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-06 10:48:12 +02:00
Lothar Waßmann
d66a5b9c82 ASoC: mxs: add some error messages to help identifying problems
Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 19:03:19 +01:00
Mark Brown
55af2d23c6 ASoC: pcm1792a: Fix build with !OF
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 18:20:53 +01:00
Mark Brown
6c3137fd01 Merge remote-tracking branch 'asoc/topic/pcm1681' into asoc-new-pcm
Trivial add/add conflicts:
	sound/soc/codecs/Kconfig
	sound/soc/codecs/Makefile
2013-08-05 18:12:39 +01:00
Russell King
e4065f3ff1 ASoC: kirkwood: move calculation of max buffer size to kirkwood.h
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 18:06:57 +01:00
Russell King
64ddf1f89c ASoC: kirkwood: combine kirkwood-i2s and kirkwood-dma drivers
These really should be a single driver because they're fully integrated
in hardware.  Make them so.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 18:06:30 +01:00
Russell King
db43b16fa0 ASoC: kirkwood: provide KIRKWOOD_PLAYCTL_ENABLE_MASK
Provide a helper macro which includes the sum of all enable bits in
the playback control register.  This simplifies the code a little.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 18:03:23 +01:00
Michael Trimarchi
13b02fa0db ASoC: Add PCM1792A spi mode codec support
Add PCM1792A spi mode codec support. This version implements only
a subset of functionalities. Tested connect to a pandaboard ES
device and based on recently pcm1681 codec.

Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 18:01:29 +01:00
Russell King
19c2c5f55e ASoC: avoid duplicated DAI routes
ASoC automatically creates snd_soc_dapm_dai_in and snd_soc_dapm_dai_out
widgets for DAI drivers, and adds them to the list.  Later on, ASoC
creates automatic routes between these widgets and a widget with a
stream name.

We look for a snd_soc_dapm_dai_in or snd_soc_dapm_dai_out widget, and
use this to obtain the DAI structure.  We then scan all widgets for
any with a stream name refering to either the capture or the playback
stream, and create routes.

If you have both a snd_soc_dapm_dai_in and a snd_soc_dapm_dai_out
referring to the same DAI structure, this ends up creating one set of
routes for the DAI for the snd_soc_dapm_dai_in widget, and a duplicated
set of routes for the snd_soc_dapm_dai_out widget.

Fix this by checking that the stream name for the widget matches the
DAI widget name.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 17:16:41 +01:00
Russell King
af64d7341a ASoC: kirkwood: Free external clock if it is a duplicate of internal
[Remaining patch from "ASoC: kirkwood: use devm_clk_get() for the
external clock" -- broonie]

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 17:11:12 +01:00
Richard Fitzgerald
9d58a07746 ASoC: core: init delayed_work for codec-codec links
We must init the delayed_work for codec-codec links
otherwise shutting down the DAI chain will fault when
calling flush_delayed_work_sync() on the linked DAI.

Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 17:07:57 +01:00
Oskar Schirmer
e06e4c2d53 ASoC: sgtl5000: fix codec clock source transition to avoid clockless moment
Powering down PLL before switching to a mode that does not use it
is a bad idea. It would cause the SGTL5000 be without internal
clock supply, especially on the I2C interface, which would make
subsequent access to it fail.

Thus, in case of not using PLL any longer, first set the mode
control, then power down PLL.

Signed-off-by: Oskar Schirmer <oskar@scara.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 17:03:42 +01:00
Lars-Peter Clausen
57295073b6 ASoC: dapm: Implement mixer input auto-disable
Some devices have the problem that if a internal audio signal source is disabled
the output of the source becomes undefined or goes to a undesired state (E.g.
DAC output goes to ground instead of VMID). In this case it is necessary, in
order to avoid unwanted clicks and pops, to disable any mixer input the signal
feeds into or to active a mute control along the path to the output. Often it is
still desirable to expose the same mixer input control to userspace, so cerain
paths can sill be disabled manually. This means we can not use conventional DAPM
to manage the mixer input control. This patch implements a method for letting
DAPM overwrite the state of a userspace visible control. I.e. DAPM will disable
the control if the path on which the control sits becomes inactive. Userspace
will then only see a cached copy of the controls state. Once DAPM powers the
path up again it will sync the userspace setting with the hardware and give
control back to userspace.

To implement this a new widget type is introduced. One widget of this type will
be created for each DAPM kcontrol which has the auto-disable feature enabled.
For each path that is controlled by the kcontrol the widget will be connected to
the source of that path. The new widget type behaves like a supply widget,
which means it will power up if one of its sinks are powered up and will only
power down if all of its sinks are powered down. In order to only have the mixer
input enabled when the source signal is valid the new widget type will be
disabled before all other widget types and only be enabled after all other
widget types.

E.g. consider the following simplified example. A DAC is connected to a mixer
and the mixer has a control to enable or disable the signal from the DAC.

                     +-------+
  +-----+            |       |
  | DAC |-----[Ctrl]-| Mixer |
  +-----+       :    |       |
     |          :    +-------+
     |          :
    +-------------+
    | Ctrl widget |
    +-------------+

If the control has the auto-disable feature enabled we'll create a widget for
the control. This widget is connected to the DAC as it is the source for the
mixer input. If the DAC powers up the control widget powers up and if the DAC
powers down the control widget is powered down. As long as the control widget
is powered down the hardware input control is kept disabled and if it is enabled
userspace can freely change the control's state.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 15:50:27 +01:00
Russell King
a7d0942979 ASoC: kirkwood: merge struct kirkwood_dma_priv with struct kirkwood_dma_data
Merge these two structures together; nothing other than the I2S and
DMA driver makes use of struct kirkwood_dma_data, and it's not like
struct kirkwood_dma_data is really just used to convey DMA specific
data to the backend; it's more a general shared structure between the
two halves.

This will later allow kirkwood-dma.c and kirkwood-i2s.c to be merged
together.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 15:49:20 +01:00
Russell King
6ad709482e ASoC: spdif_transceiver: add output pin widget
CODECs without any outputs now remain powered down, which means any
paths to these codecs also remain powered down.

Add an always-enabled output pin widget to the spdif transceiver codec.
This enables DAPM to correctly identify that the spdif transceiver is
in use when playback is enabled, which will then allow DAPM to power up
any links from the CPU DAI to the S/PDIF transceiver.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-05 12:32:40 +01:00
Chih-Chung Chang
bde7bc6014 ALSA: hda - Fix jack gating when auto_{mute,mic} is suppressed.
The snd_hda_jack_set_gating_jack() call didn't work when
auto_{mute,mic} is suppressed because (1) am_entry is
not filled with nid of the mic pin. (2) The jacks are not
created (by snd_hda_jack_detect_enable_callback) before the
snd_hda_jack_set_gating_jack call.

Now we use the first input pin nid directly, and create the jack if it
doesn't exist yet.

Signed-off-by: Chih-Chung Chang <chihchung@chromium.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-05 11:19:59 +02:00
Takashi Iwai
697aebab78 ALSA: hda - Fix missing fixup for Mac Mini with STAC9221
A fixup for Apple Mac Mini was lost during the adaption to the generic
parser because the fallback for the generic ID 8384:7680 was dropped,
and it resulted in the silence output (and maybe other problems).

Unfortunately, just adding the missing subsystem ID wasn't enough, in
this case.  The subsystem ID of this machine is 0000:0100 (what Apple
thought...?), and since snd_hda_pick_fixup() doesn't take the vendor
id zero into account, the driver ignored this entry.  Now it's fixed
to regard the vendor id zero as a valid value.

Reported-and-tested-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: <stable@vger.kernel.org> [v3.9+]
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-02 08:16:52 +02:00
Lars-Peter Clausen
fe58139114 ASoC: dapm: Fix empty list check in dapm_new_mux()
list_first_entry() will always return a valid pointer, even if the list is
empty. So the check whether path is NULL will always be false. So we end up
calling dapm_create_or_share_mixmux_kcontrol() with a path struct that points
right in the middle of the widget struct and by trying to modify the path the
widgets memory will become corrupted. Fix this by using list_emtpy() to check if
the widget doesn't have any paths.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Tested-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
Cc: stable@vger.kernel.org
2013-08-01 19:25:16 +01:00
Lars-Peter Clausen
2c75bdf3fd ASoC: dapm: Fix kcontrol path list corruption
When calling krealloc for the kcontrol data the items in the path list that
point back to the head of the list will now point to freed memory, which causes
the list to become corrupted. To fix this, instead of resizing the whole data
struct, only resize the widget list.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 19:24:28 +01:00
Lothar Waßmann
65f2b22676 ASoC: sgtl5000: fix buggy 'Capture Attenuate Switch' control
The SGTL5000 Capture Attenuate Switch (or "ADC Volume Range Reduction"
as it is called in the manual) is single bit only.

Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de>
Reviewed-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 14:48:20 +01:00
Lothar Waßmann
f091f3f073 ASoC: sgtl5000: prevent playback to be muted when terminating concurrent capture
When a sound capture/playback is terminated while a playback/capture
is running, power_vag_event() will clear SGTL5000_CHIP_ANA_POWER in
the SND_SOC_DAPM_PRE_PMD event, thus muting the respective other
channel.

Don't clear SGTL5000_CHIP_ANA_POWER when both DAC and ADC are active
to prevent this.

Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de>
Reviewed-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 14:48:17 +01:00
Bard Liao
868ead653e ASoC: rt5640: remove unused mux
Remove unused "INL Mux" and "INR Mux".

Signed-off-by: Bard Liao <bardliao@realtek.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 14:45:22 +01:00
Lars-Peter Clausen
9356e9d51c ASoC: dapm: Check return value of snd_soc_cnew()
snd_soc_cnew() can return NULL, so we should check the result before trying to
use it.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 14:12:59 +01:00
Mark Brown
2f6f0ffb2b ASoC: samsung: Make secondary I2S DAI device a child of primary
More for neatness than for any great utility. Really we shouldn't be
creating the child device at all, refactoring will follow.

Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 12:01:29 +01:00
Dimitris Papastamos
92bb4c3270 ASoC: wm_adsp: Sanitize parameter passing
No need to hold on to the `codec' pointer.  We can use the `dsp'
pointer and grab all the information we need from there.  This
makes the parameters for the functions a bit more sane and idiomatic.

Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 11:58:46 +01:00
Marek Belisko
95169d080f ASoC: Add PCM1681 codec driver.
PCM1681 can be controlled via I2C, SPI or in bootstrap mode (no control mode). This code add
support only for I2C mode.

Signed-off-by: Marek Belisko <marek.belisko@streamunlimited.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 10:40:02 +01:00
Takashi Iwai
209fb1b7e2 Merge tag 'asoc-v3.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v3.11

A fix to make sure userspace knows when control writes have caused a
change in value, fixing some UIs, plus a few few driver fixes mainly
cleaning up issues from recent refactorings on less mainstream platforms.
2013-08-01 11:12:10 +02:00
Dimitris Papastamos
d4780eec77 ASoC: wm0010: Use DMA-safe memory for SPI transfers
We should be allocating our buffers for the SPI transfers
from the DMA zone.

Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-01 10:01:42 +01:00
Mark Brown
3fef7f795f Merge remote-tracking branch 'asoc/fix/wm0010' into asoc-linus 2013-07-31 21:07:23 +01:00
Mark Brown
08d0a9757d Merge remote-tracking branch 'asoc/fix/dapm' into asoc-linus 2013-07-31 21:07:23 +01:00
Mark Brown
0d054318d5 Merge remote-tracking branch 'asoc/fix/blackfin' into asoc-linus 2013-07-31 21:07:22 +01:00
Peter Ujfalusi
8fe120b5a6 ASoC: omap-abe-twl6040: Remove support for pdata (legacy boot)
Just recently OMAP4 legacy boot support has been removed. No reason to keep
the code used by the legacy boot (pdata based) since neither OMAP4 or OMAP5
can boot in this mode.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-07-31 20:03:00 +01:00
Wei Yongjun
70263cb474 ASoC: rcar: fix return value check in rsnd_gen1_probe()
In case of error, the function devm_ioremap_resource() returns ERR_PTR()
and never returns NULL. The NULL test in the return value check should be
replaced with IS_ERR(), and also remove the dev_err call to avoid redundant
error message.

Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-07-31 15:00:01 +01:00