Commit Graph

342 Commits

Author SHA1 Message Date
Mark Brown
a304681f36 Merge branches 'topic/dapm', 'topic/sign', 'topic/adau1373', 'topic/max98090', 'topic/mc13783', 'fix/wm8994' and 'topic/wm8995' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-enum 2014-03-01 12:03:16 +09:00
Charles Keepax
babce8211b ASoC: wm8994: Update locking around use of DAPM pin API
The pin updates in this driver look like they are intended to be done
atomically, update to do so.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2014-02-20 19:22:57 +09:00
Takashi Iwai
9a8d38db03 ASoC: Rename soc_enum.max field with items
The name "max" in struct soc_enum is rather confusing since it
actually takes the number of items.  With "max", one might try to
assign (nitems - 1) value.

Rename the field to a more appropriate one, "items", which is also
used in struct snd_ctl_elem_info, too.

This patch also rewrites some code like "if (x > e->nitems - 1)" with
"if (x >= e->nitems)".  Not only the latter improves the readability,
it also fixes a potential bug when e->items is zero.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2014-02-20 10:42:53 +09:00
Takashi Iwai
e61a35b798 ASoC: wm8994: Fix the wrong number of enum items
wm8994 codec driver has a few places wrongly defining the number of
enum items.

Use SOC_ENUM_SINGLE_DECL() macro and they are automatically fixed.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2014-02-20 10:33:33 +09:00
wangbiao
b888edbc68 ASoC: wm8994: Move DCS done IRQ request later
once code return from request_threaded_irq, irq was setup enabled by
default, but completion var dcs_done not got initialized yet, if then a
dcs done irq was raised, system will got hung as the sync mechanism is
invalid now.

so this patch move dcs done irq request to the end of initialization
of completion.

Signed-off-by: wang, biao <biao.wang@intel.com>
Signed-off-by: Zhang, Di <di.zhang@intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-11-27 18:17:22 +00:00
Mark Brown
43bcb402f8 Merge remote-tracking branch 'asoc/topic/wm8994' into asoc-next 2013-08-22 14:29:02 +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
Lars-Peter Clausen
eee5d7f99a ASoC: dapm: Add a helper to get the CODEC for DAPM kcontrol
We use the same 3 lines to get the CODEC for a kcontrol in a quite a few places.
This patch puts them into a common helper function. Having this encapsulated in
a helper function will also make it more easier to eventually change the data
layout of the kcontrol's private data.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-07-29 18:40:59 +01:00
Mark Brown
68defe585f ASoC: wm8994: Use power efficient workqueue
The accessory detect debounce work is not performance sensitive so let
the scheduler run it wherever is most efficient rather than in a per CPU
workqueue by using the system power efficient workqueue.

Signed-off-by: Mark Brown <broonie@linaro.org>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
2013-07-19 12:25:28 +01:00
Mark Brown
4824b69a92 Merge remote-tracking branch 'asoc/fix/wm8994' into asoc-linus 2013-07-15 11:13:58 +01:00
Mark Brown
57e265c8d7 ASoC: wm8994: Move runtime PM init to platform device init
As well as being better style this allows the device to idle when there is
no audio card instantaited which is probably what we want.

Signed-off-by: Mark Brown <broonie@linaro.org>
2013-07-15 11:12:57 +01:00
Mark Brown
82e414fa1d ASoC: wm8994: Remove overly noisy debug logging
This was committed in error.

Signed-off-by: Mark Brown <broonie@linaro.org>
2013-07-05 12:46:12 +01:00
Takashi Iwai
accaf69da1 ASoC: More updates for v3.11
Some more fixes and enhancements, and also a bunch of refectoring for
 AC'97 support which enables more than one AC'97 controller driver to be
 built in.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.12 (GNU/Linux)
 
 iQIcBAABAgAGBQJRzXInAAoJELSic+t+oim9jBoQAJjGBiMyEyPv51CV5h2Cfo7c
 SGvoYwC+Q90fBsCLt4J/ei0rP+LUEbNUdnvs+xFeRiCqWHYs/d3/PeIZnuPMUQvZ
 VQOen7L1S+zd6mvDAr45LFmQOpAi74QkqRL1cwtuxWYeLJvFJwvYFTME6pYgjLi4
 HYAmZPZjMhOu3oNZmQIb+4Cmrf0/YbaIserI5kzHWd4b+pC8QCneBqvfwIaMowe0
 qBHw/bSB/haLTpjjbxZGw8NtnJyBvTT90ixgmv1akcZY/8NEh2bMIlzu52olNCci
 ZsCaS0HnjnICV7X5j6bBSjoqt7BQfXdQGFM7mbLn7BqW16MW/R0ONoSk1vE0RQQ0
 RGNYRA/X5yG4XReFE+93sHbJ2esGYnynwbykJd19DNFq0JRpdEpBUuudk8GsTEGh
 jsdh7YbRRGz1EUCxjiyMKiN7jHUhYGB9RRXjbR8Fo4GmTI1HHkOuv07gUfWr7v8F
 o2EcgvNdsEYtOrHP/Y7NCqkd7GkZOzDm3Xfp8Z5Wb81uKhJ3vbldvvUyjWBHrXLO
 Lzb2EACJYE8rqNN3FPsmNDBiuVlRrHeQQmtLL21lz5ZBK7b93+/NK44jN5OnNgU1
 D1PyErveZwogvtAUhZamx7FoZfnHxXQ4nNUWlLacBl3gRLrjzVqB8LQ9IdTyV1/V
 rqTrG1nTPJRCJLN0DLqq
 =UZaY
 -----END PGP SIGNATURE-----

Merge tag 'asoc-v3.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next

ASoC: More updates for v3.11

Some more fixes and enhancements, and also a bunch of refectoring for
AC'97 support which enables more than one AC'97 controller driver to be
built in.
2013-06-28 13:36:22 +02:00
Lars-Peter Clausen
6e06509c58 ASoC: wm8994: Use SOC_SINGLE_EXT() instead of open-coding it
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-06-19 19:47:40 +01:00
Mark Brown
5464389755 Merge remote-tracking branch 'asoc/topic/wm8994' into asoc-next 2013-06-17 17:20:32 +01:00
Mark Brown
2da1c4bf76 ASoC: wm8994: Allow debounce before MICDET identification
For systems which do not have a jack detection feature allow some debounce
to be specified before we perform accessory identification, improving
robustness without impacting button detection responsiveness.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-06-01 19:28:58 +01:00
Mark Brown
2d01e39b90 ASoC: wm8994: Remove unused variable
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-06-01 19:28:54 +01:00
Mark Brown
50941968fc ASoC: wm8994: Add digital loopback paths
There is loopback control within the audio interfaces, provide control of
this as there are some obscure scenarios where this could be used in
production.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-30 13:48:08 +01:00
Mark Brown
7afce3f5e5 ASoC: wm8994: Ensure microphone detection state is reset on removal
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-30 13:47:46 +01:00
Mark Brown
9e43088bb0 ASoC: wm8994: Avoid leaking pm_runtime reference on removed jack race
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-30 12:10:02 +01:00
Mark Brown
70bd3b298b ASoC: wm8994: Defer declaration of open circuit microphones
Provide a bit of debounce to handle pathological cases with slow input
better by allowing the microphone detection to run for a bit longer.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-29 20:31:33 +01:00
Mark Brown
f7dbd399ef ASoC: wm8994: Ensure lambda is zeroed for WM8994
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-28 15:57:38 +01:00
Mark Brown
287d03e9cd ASoC: wm8994: Remove restore of DAC enable state
It's not been needed since the regmap conversion.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-28 15:57:34 +01:00
Vinod Koul
7d6898be8d ASoC: wm8994: check for array index returned
The array 'drc_cfg' of size 3 may use index value -22 (EINVAL)
The array 'retune_mobile_cfg' of size 3 may use index value -22 (EINVAL)

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-28 15:36:45 +01:00
Mark Brown
9767a58b8b ASoC: wm8994: Fix reporting of accessory removal on WM8958
During recent refactoring the code to report removal when MICDET reports
an absent microphone was removed, causing problems for systems which rely
solely on the MICDET for this functionality. Restore it.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-28 10:22:36 -04:00
Vinod Koul
d3134e211e ASoC: wm8994: use the correct pointer to get the control value
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-28 10:10:09 -04:00
Mark Brown
435705e892 ASoC: wm8994: Handle LRCLK inversion for WM8958 and WM1811A
On WM8958 and WM1811A separate control of the LRCLK inversion bit is
available for the DAC and ADC LRCLKs which for compatibility reasons is
done in a new register bit.

Since writes to each scheme have no effect on parts using the other just
always write to both for simplicity.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Tested-by: Samreen Nilofer <samreen.nilofer@intel.com>
2013-05-20 11:27:06 -05:00
Dan Carpenter
571ab6c6f3 ASoC: wm8994: missing break in wm8994_get_fll_config()
Smatch complains that:

	sound/soc/codecs/wm8994.c:2087 wm8994_get_fll_config()
		warn: missing break? reassigning 'fll->k'

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-18 12:25:49 +01:00
Mark Brown
d1a0a29958 ASoC: wm8994: Support EFS mode for FLL
Later WM8994 devices support an enhanced accuracy FLL divisor mode called
EFS which allows more precise selection of fractional source to output
ratios. Support this on relevant devices.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-05-13 09:40:12 +04:00
Takashi Iwai
f91eeeb595 ASoC: Updates for v3.10
A few more bug fixes, the DAPM clock fix is actually a driver specific
 one since currently there's only one user of the clock support due to
 the problems relying on the clock API.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.12 (GNU/Linux)
 
 iQIcBAABAgAGBQJRg3/MAAoJELSic+t+oim9W+cP/3NERwICTNvllNOrZXii7akJ
 DnzzIaw0fEJ2+hIXJzU/lEI/KjqIT7SADQRWg+eid8ZrjaUB6LXUPPuv67V4TseD
 1+8ClQp1cDg1KepBcD2S1liVjPKvW64IpXwZNgLGigW6PP21yK8+DoQvVKPVB+sP
 q72jntTzy9qWenmjygpPEYDeOfe5EM7hAaa2tFuYIPEL+EkMOXXvjx8ojylwQV6V
 5xFQ+CBSS8WHz7CKlawF3JH8TkcFGZNT9Hibhv1fpGM+iJDCsh/+MNiBwOpO+1wk
 eCJSiCWWTGgVK+3AvlSIQr8ml0EDEbS8Aq6bbJb9w4wgV65oFt2hOxOpkcK/8NcP
 qnKNYc3nRQsb3H+dObMdQNPWDjOfwsolKUOjetxosRIq4Pzm8afY96gu06EqTnw9
 XYXqoSAVpCuPDpmlu87Lajoj4T5XNq3G7ONAMpsAfMrl/xxmV11Wrs4/7S0o3Csb
 tNhO5XjLbFNTw9nVT6qZQViH7Bm1ItDM2B/tLb1yqnlgBAjNW/WlUyFg4bE4Qeyr
 hUg7DwvYPSVnr25t8RmPMmB2MdD4N+PfRy+aIEIuE9KMeYUTPVr5kFdDP7uA7Yw2
 Dn7lmAdDEq33zfTGYhGWs87IdxhD3VyEWveR6alrtBW0LS7ArtsPlWKhA074XuJj
 AmAU6RS3+75nymA9ucY+
 =WQzu
 -----END PGP SIGNATURE-----

Merge tag 'asoc-v3.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next

ASoC: Updates for v3.10

A few more bug fixes, the DAPM clock fix is actually a driver specific
one since currently there's only one user of the clock support due to
the problems relying on the clock API.
2013-05-03 11:39:36 +02:00
Dan Carpenter
4495e46fe1 ASoC: wm8994: missing break in wm8994_aif3_hw_params()
The missing break here means that we always return early and the
function is a no-op.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2013-04-30 19:45:42 +01:00
Mark Brown
da445afe35 ASoC: wm8994: Remove duplicate revision cache
There's already a device revision stored in the core data structure,
don't duplicate it in the CODEC driver.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-04-09 12:15:35 +01:00
Mark Brown
d3725761ee ASoC: wm8994: Restore AIFnCLK after reducing it for low clock rates
This helps to ensure a smooth startup when we restore.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-21 21:37:09 +01:00
Mark Brown
3cf956eebe ASoC: wm8994: Support constraining the maximum number of channels clocked
Some systems use the audio CODEC to clock a DAI with multiple data lines
in parallel, meaning that bit clocks are only required for a smaller number
of channels than data is sent for. In some cases providing the extra bit
clocks can take the other devices on the audio bus out of spec.

Support such systems by allowing a maximum number of channels to be
specified.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2013-03-21 17:27:32 +01:00
Mark Brown
e951f7e85d Merge remote-tracking branch 'asoc/topic/wm8994' into asoc-next 2013-02-12 22:19:08 +00:00
Bill Pemberton
7a79e94e97 ASoC: codecs: remove __dev* attributes
CONFIG_HOTPLUG is going away as an option.  As result the __dev*
markings will be going away.

Remove use of __devinit, __devexit_p, __devinitdata, __devinitconst,
and __devexit.

Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-12-10 00:31:51 +09:00
Mark Brown
06f1c66324 Merge remote-tracking branch 'asoc/topic/wm8994' into asoc-next 2012-12-10 00:22:37 +09:00
Mark Brown
8afd0ef263 ASoC: wm8994: Fix variable double use
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-12-07 17:14:04 +09:00
Mark Brown
98869f68f2 ASoC: wm8994: Allow microphone identification callback to be overridden
Allow custom accessory identification mechanisms to make use of the MICDET
support in the device.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-12-03 16:35:00 +09:00
Mark Brown
e874de436f ASoC: wm8994: Check jack is inserted when handling mic IRQ
If we've got jack detection support then check that the jack is still
inserted when handling a mic IRQ in order to avoid transient reports
caused by shorts during the removal process as the two interrupts race
with each other.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-12-03 16:34:26 +09:00
Mark Brown
63dd54521f ASoC: wm8994: Support custom accessory identification for WM1811A
Allow the user to override the accessory identification code with their
own implementation if the system provides an alternative method.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-12-03 16:34:12 +09:00
Mark Brown
78b76dbec8 ASoC: wm8994: Simplify button detection code
Currently the WM8994 driver allows the WM8958 microphone detection code to
be replaced in its entirety, providing a default implementation. This
doesn't actually reflect the needs of users well. They generally wish to
replace only the accessory identification parts of the algorithm (eg,
using an external GPIO to provide the equivalent of the JACKDET support in
the WM1811A).

In preparation for supporting these users better refactor the existing code
so that we have separate identification and button detection callbacks,
selecting between them rather than using the mic_detecting flag in the
existing callback. This also simplifies the code by introducing a more
explicit state machine for the detecting and button states.

In anticipation of future refactoring the callback is left in the signature
for wm8958_mic_detect(), it will be removed at a later stage.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-12-03 16:34:09 +09:00
Mark Brown
f02b0de0f0 ASoC: wm8994: Stop mic detection whenever we detect an open circuit
Jack detection will not do anything to help us detect a microphone when
there is a fault in the cable and the debounce we have is enough to avoid
getting an intermediate result so halt microphone detection when we detect
that one is not present.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-12-03 16:34:06 +09:00
Mark Brown
72222be39a ASoC: wm8994: Use the same DCS codes for all WM1811 variants
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2012-11-28 13:47:32 +00:00
Mark Brown
d9dd4ada0e ASoC: wm8994: Use pdata cached in MFD driver
This is better style and facilitates implementation of device tree support
for the driver.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-11-24 00:15:08 +09:00
Mark Brown
cd22000ade ASoC: wm8994: Lower AIFnCLK divisor when dropping to 32kHz
When lowering SYSCLK to 50kHz for accessory detection also lower the
AIFnCLK divisor to normalise the clocking configuration within the
device. This will not disrupt audio as we cannot support active audio
with such a low SYSCLK.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-11-22 17:36:30 +09:00
Masanari Iida
ec8f53fb69 ALSA: Fix typo in drivers sound
Correct spelling typo in debug messages within drivers/sound

Signed-off-by: Masanari Iida <standby24x7@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-11-04 09:20:58 +01:00
Mark Brown
79748cdb39 ASoC: wm8994: Only enable extra BCLK cycles when required
Rather than always assuming the maximum possible BCLK rate will be
required generate BCLKs for stereo if either one or two channels is
enabled. In order to support this we also need to ensure that only
the relevant channels are enabled.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-10-24 13:24:29 +01:00
Mark Brown
6730049a47 ASoC: wm8994: Lower AIFnCLK divisor when dropping to 32kHz
When lowering SYSCLK to 50kHz for accessory detection also lower the
AIFnCLK divisor to normalise the clocking configuration within the
device. This will not disrupt audio as we cannot support active audio
with such a low SYSCLK.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-10-24 10:58:01 +01:00
Mark Brown
f95be9d616 ASoC: wm8994: Tune VMID power down sequence
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-10-15 11:51:33 +09:00
Mark Brown
a3a1d9d21d ASoC: wm8994: Tune VMID power up sequence
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-10-15 11:51:32 +09:00
Mark Brown
c0cc3f1665 ASoC: wm8994: Allow a delay between jack insertion and microphone detect
This can be used to provide some additional settling time to ensure that
we don't start microphone detection while the microphone pin is connected
to one of the headphone pins.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-10-15 11:51:32 +09:00
Mark Brown
75d8f2931a Merge branch 'asoc-omap' into for-3.7 2012-09-05 20:05:11 +08:00
Mark Brown
52ca1138fa ASoC: wm8994: Update for new WM1811 variants
There are some new WM1811 variants distinguished by both revision and
cust_id which need slightly different handling.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-23 16:01:48 +01:00
Mark Brown
02e7947699 ASoC: wm_hubs: Allow configuration of MICBIAS power up delay via pdata
Sometimes the analogue circuitry connected to the microphone needs some
time to settle after power up. Allow systems to configure this delay in
the platform data, the driver will then insert the required delay during
power up of paths that involve the microphone.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-22 19:00:37 +01:00
Mark Brown
45a690f6bc ASoC: wm8994: Add bytes controls for DRC
If DRC coefficients are not configured via platform data then add bytes
controls for them instead so they can be configured by applications. This
is the normal means of controlling things like this for newer systems, we
maintain compatibility with platform data to avoid disruption to existing
systems.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-17 22:40:53 +01:00
Chris Rattray
15676937e6 ASoC: wm8994: Add missing dapm routes for WM8958 rev A
Signed-off-by: Chris Rattray <crattray@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-09 14:21:47 +01:00
Chris Rattray
d9f34df782 ASoC: wm8994: enable mic and short detect debounce.
Signed-off-by: Chris Rattray <crattray@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-03 23:03:57 +01:00
Mark Brown
7435d4eec7 ASoC: wm8994: Fix some indentation issues
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-03 23:03:57 +01:00
Mark Brown
99af79dff5 ASoC: wm8994: Ensure we get a notification on startup for jackdet
Since jackdet only reports deltas it won't generate an interrupt on startup
when a jack is not present. This doesn't make a difference to userspace
but does mean we don't generate a notification via the internal notifier
chains. Fix that by scheduling a work to poll the chip after the clock is
enabled. Use an extremely large timeout since there's no urgency and we
don't want to report a false negative.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-03 23:03:56 +01:00
Mark Brown
8cb8e83bfa ASoC: wm_hubs: Move CODEC stored in private data into wm_hubs
Further wm_hubs code will use this.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-03 23:03:56 +01:00
Mark Brown
fbfe69836c ASoC: wm8994: Implement support for self-oscillation mode in the FLL
The FLLs in the WM8994 series devices can be started without any reference
being supplied, mainly for use in analogue bypass cases. Implement support
for this mode.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-08-03 23:03:55 +01:00
Mark Brown
b8176627b8 ASoC: wm8994: Hold runtime PM reference while handling mic and jack IRQs
Ensures that we don't interact badly with the power management framework,
especially in the cases where we're doing deferred work or we're using a
direct GPIO for these signals.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-07-24 20:22:18 +01:00
Mark Brown
b8edf3e552 ASoC: wm8994: Ensure there are enough BCLKs for four channels
Otherwise if someone tries to use all four channels on AIF1 with the
device in master mode we won't be able to clock out all the data.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2012-07-23 18:49:14 +01:00
Mark Brown
15d47763b3 Merge branch 'for-3.5' into for-3.6 2012-07-23 10:45:07 +01:00
Mark Brown
b4046d013b ASoC: wm8994: Update micdet for irqdomain conversion
The conversion of the core driver to irqdomains means that we don't need
and irq_base to have working interrupts so use wm8994_request_irq() to
deal with looking up the interrupt number for the micdet IRQ.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-07-18 22:09:23 +01:00
Mark Brown
2974d6b1aa ASoC: wm8994: Don't suspend accessory detection
Leave it up to the machine driver to disable accessory detection if
desired, the common pattern is to have accessory detection be a wake
source.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-07-03 20:11:16 +01:00
Jaroslav Kysela
6cab3e1e65 ASoC: wm8994: remove duplicate code
It seems that the code duplication was added at a merge operation.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-06-25 11:14:13 +02:00
Mark Brown
d1e16c1a61 Linux 3.5-rc4
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.18 (GNU/Linux)
 
 iQEcBAABAgAGBQJP53AxAAoJEHm+PkMAQRiGs2QH/RaqkXz96fwjhDcyiKpDqA3c
 kGuS5mz5cOhnqKSmR88HFm6pwuhLux/qSJzeAmoQy1MC8a0ACx7AnANW0lfN3/qe
 /HGYz8h60yCL/fhn8/bUYtdt9xsoDqoDcq/ooFl9mcsJGWbC6WeMSZU5dAUYqviE
 qFrp5zjY07FG53CRGT0hFpezQNwNL+VLH30CF9LD+fJLPVEYum2zBNGXWM42rcw5
 fxzGL/6SO8YqA/Upic1ht6HAd6s5LOrlST7qvnyXUMvRXN5z/Y92ueYJZefkS1Om
 ohuLIKM2bv9/dJS67H8N2baSKGCzBdfSe5/5WaHdLYW9MiVju0wRl6HPJtAMrkk=
 =H8t8
 -----END PGP SIGNATURE-----

Merge tag 'v3.5-rc4' into for-3.6

Linux 3.5-rc4 contains some bug fixes which overlap with new features.
2012-06-25 09:52:59 +01:00
Mark Brown
bfd37bb5f6 ASoC: wm8994: Apply volume updates with clocks enabled
Volume updates may not be acted upon if there is no clock applied when
the volume update is written. Ensure this doesn't happen by writing out
registers with volume updates after we enable each of the clocks.

There are more registers updated than before as previously we were
relying on wm_hubs to set those for controls it manages.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2012-06-05 14:10:41 +01:00
Mark Brown
c8fdc1b566 ASoC: wm8994: Ensure all AIFnCLK events are run from the _late variants
Ensure that all the actions get taken at appropriate times by calling the
_PRE and _POST events for the aifNclk_ev functions explicitly.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2012-06-05 14:10:20 +01:00
Mark Brown
656baaebf9 ASoC: codecs: Refresh copyrights for Wolfson drivers
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-06-03 13:06:37 +01:00
Takashi Iwai
775b2449bd Merge branch 'topic/asoc' into for-linus 2012-05-21 12:45:18 +02:00
Mark Brown
c7f5f23893 ASoC: wm8994: Fix AIF2ADC power down
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2012-05-15 18:29:30 +01:00
Mark Brown
dc2af52c0d Linux 3.4-rc7
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.18 (GNU/Linux)
 
 iQEcBAABAgAGBQJPrxCRAAoJEHm+PkMAQRiGQAgH/icr6rDF/e7Y7LoNErjVag94
 +PUhYx851xH3ApPlB1fBaU1ZTvQS2Pb34B8G8WrqWJ+yTs4XfE9sCPj2yb+7ySA8
 vb0vPsErVvAcRWv8sP22NF2ERKNFj/PtSNAcAUJHb5djrRmJcZJ3aw03cdY/INAS
 2OqJEoMc2IBa5Z+WePQJ8N+J2YgDSDdCnpBKNuSHDGN0rBm4suiWY8PWXgTzMAhG
 TNgNrKIlN8bnaX4hPJr6ooN+sxInkUl8ZglAPxwwjVtmYvGch4FiowpDC7BQbSGB
 WFSVsIuv3jMI6VaYDo/NQOFDQqqoK4h7DmBIqbL5eXBRTJg9xW+1A8zloGd4Rks=
 =IWBQ
 -----END PGP SIGNATURE-----

Merge tag 'v3.4-rc7' into for-3.5

Linux 3.4-rc7

Conflicts):
	drivers/base/regmap/regmap.c         (overlap with bug fixes)
	sound/soc/blackfin/bf5xx-ssm2602.c   (overlap with bug fixes)
2012-05-13 13:32:54 +01:00
Mark Brown
fdfc4f3eb7 ASoC: wm8994: Use regmap directly for wm8994_mic_work
Make it clearer what context we're operating in.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-05-09 19:32:44 +01:00
Mark Brown
e9b54de420 ASoC: wm8994: Add debounce to wm8994 mic detection
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-05-09 19:32:43 +01:00
Mark Brown
cbd71f304a ASoC: wm8994: Fix sparse warning due to use of 0 as NULL
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-05-09 19:32:40 +01:00
Mark Brown
c340304dd8 ASoC: wm_hubs: Factor out class W management
Since the analogue portions of the checks for class W are the same over
all the devices factor out these checks into wm_hubs and while we're at
it also use wm_hubs_dac_hp_direct() to enable class W optimisations on
more paths.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-27 18:42:11 +01:00
Mark Brown
af31a227e1 ASoC: wm_hubs: Special case headphones for digital paths in more use cases
The optimisations which we can do with caching the headphone DCS result in
wm_hubs have only been enabled in cases where class W is enabled. However,
there are more use cases which can benefit from the cache, especially with
WM8994 series devices with their more advanced digital routing.

Rather than keying off the class W information from the CODECs have a
check in wm_hubs for a suitable path and use that to determine if we can
deploy our headphone optimisations.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-27 18:42:10 +01:00
Mark Brown
3a334adab0 ASoC: wm8994: Add trace showing wm8958_micd_set_rate()
This can be helpful to users when tuning their systems.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-26 18:08:56 +01:00
Mark Brown
fcdc4de7ad ASoC: wm8994: Allow rate configuration with custom mic callback
If a driver using a custom mic detection callback has provided a table
of mic detection rates via platform data then use it.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-26 18:08:45 +01:00
Mark Brown
e9d9a968e7 ASoC: wm8994: Tune debounce rates for jack detect mode
Use a slightly larger debounce when identifying accessory type and a
slightly smaller one when detecting buttons in response to user feedback
from large scale testing.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-26 18:08:39 +01:00
Kyung-Kwee Ryu
e05854ddaa ASoC: wm8994: Make sure we disable FLL bypass when stopping the FLL
If FLL bypass is left enabled when we disable the CODEC then the output
clock will be left running which consumes a small amount of additional
current. Only enable bypass when there is an output.

Signed-off-by: Kyung-Kwee Ryu <Kyung-Kwee.Ryu@wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-25 09:50:50 +01:00
Jesper Juhl
c1a4ecd921 ASoC: wm8994: Delete trailing whitespace from sound/soc/codecs/wm8994.c
While reading through sound/soc/codecs/wm8994.c I noticed a fair
amount of trailing whitespace. This patch gets rid of it.

Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-23 19:02:20 +01:00
Mark Brown
1a38336b86 ASoC: wm8994: Improve sequencing of AIF channel enables
This ensures a clean startup of the channels, without this change some
use cases could result in issues in a small proportion of cases.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2012-04-23 12:55:52 +01:00
Mark Brown
8c5b842b83 ASoC: wm8994: Keep AIF3 tristated when not in use
Since AIF3 shares clock signals with other audio interfaces in order to
ensure it doesn't drive undesirable clocks we need to tristate it. Rather
than forcing the machine driver to do so have the driver do this.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-17 20:53:56 +01:00
Mark Brown
20dc24a951 ASoC: wm8994: Implement FLL bypass support
Later WM8994 class devices can bypass the FLL from BCLK. Do this
automatically when the FLL input and output frequencies match up.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-10 11:11:22 +01:00
Jesper Juhl
34ff0f95b1 ASoC: wm8994: Don't test for NULL before release_firmware()
release_firmware() does its own NULL ptr testing, it's redundant to
also test before calling it.

Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-10 11:07:58 +01:00
Mark Brown
149c53b514 ASoC: wm8994: Don't bother updating the jackdet mode needlessly
If we're not doing jackdet it's not needed.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-04 12:35:20 +01:00
Mark Brown
1947dadf2a ASoC: wm8994: Don't bother lowering clock dividers inside idle AIFs
This increases the chances we'll manage to hit a partially configured
state on restart and the power savings are extremely small.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-01 11:28:31 +01:00
Mark Brown
e413ba8804 ASoC: wm8994: Don't allow reconfiguration of FLL when it provides SYSCLK
Rather than trying to work around machine drivers which try to reprogram
the FLL while it is providing SYSCLK just return an error if they try.
This will avoid audio glitches during FLL reconfiguration, or at least
move the introduction of the glitches to the machine driver.

Since disabling the source for an active SYSCLK is not supported in the
first place systems shouldn't be doing this in the first place.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-01 11:28:29 +01:00
Mark Brown
ecd1732f01 ASoC: wm8994: Don't lock CODEC mutex to do DAPM sync
DAPM now has a DAPM-level lock which it manages itself so we don't need
to take the CODEC mutex to call DAPM any more.  Also remove a redundant
call to snd_soc_dapm_sync(), jack reporting also triggers a DAPM sync.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-04-01 11:28:23 +01:00
Linus Torvalds
48a46752a9 sound fixes for 3.4-rc1
A collection of small fixes for 3.4-rc1, including
 - mic-recording regression fix for Realtek codec
 - clean-up of dmaengine parameter mess
 - WM8894 calibration tweak
 - minor fixes for asihpi and some bool module parms
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.18 (GNU/Linux)
 
 iQIcBAABAgAGBQJPdX6XAAoJEGwxgFQ9KSmkFMcP+wTpqgoQgfcb6IMCY9KVGstd
 Uy2LgocxKSwcIv7a+OTN4WTfCJBjf045jY+coKHRhO0ybMqLIyqqeLzyCShksKdB
 PQ8+T+deIgezkhWuNdr+e+h+v39lRHQOPLiDDzEbToKryGxmx2YVbGh9b/4/oJfK
 U7oXYbMZu1RBm4btUR5jfyfC8dKMPwB0/gRG6662hw/WqkNalQyXnPvJPhl+Ky+J
 fbC2sggPlSwz6IzUdX023B7zuzUexiY3CVqZrFFskMiAEwB4xDIJ+aroQYhRSO+f
 C93EB4f3gQ0zr65n07QFIHICUogLDKdbx9GLUdfrFwoWMeKamd0YZBZNTIUEzrtc
 OkrLU5IDKxB+smjGul0SvJV/EkwYYCIx4dASoCUBORHAtAmEYrbUnHR/ga5c+i0X
 YIB5mvurSCYNZesmSzLeET6F7zS1VHbaK9qopHDrivK/ZMe90Y06D/gWuhNySHOm
 lwo4vepDG5rlDQBxVhHQGI7J1JXHBC8KI/drSROBJKb3XLIt76Qf0nmyTfRyLAqa
 xF3axkB53uiAyK9YXY2hWcOPH2klNCat9y45fQ9Z4o2wU0t74lO2VuQJzsePGWKc
 MP6cGAQ75G86jPPbsOY650AS4Lu4t4ZRDal/5q/Y+c5gLqM6ZoHI7RMmpSVa8uUS
 LTrgwwBT/V87snKMwAKW
 =cW/4
 -----END PGP SIGNATURE-----

Merge tag 'sound-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "A collection of small fixes for 3.4-rc1, including
   - mic-recording regression fix for Realtek codec
   - clean-up of dmaengine parameter mess
   - WM8894 calibration tweak
   - minor fixes for asihpi and some bool module parms"

* tag 'sound-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: fix isa/opti9xx module param type
  sound: fix oss/msnd_pinnacle module param type
  ALSA: asihpi - fix return type of hpios_locked_mem_alloc()
  ASoC: dmaengine_pcm: use dmaengine cyclic wrapper
  ASoC: Add extra parameter to device_prep_dma_cyclic
  ALSA: hda/realtek - Fix ADC assignment with a shared HP/Mic pin
  ASoC: wm8994: Update WM8994 DCS calibration
2012-03-30 10:59:52 -07:00
Linus Torvalds
9586c959bf Things are really quieting down with the regmap API, while we're still
seeing a trickle of new features coming in they're getting much smaller
 than they were.  It's also nice to have some features which support
 other subsystems building infrastructure on top of regmap.  Highlights
 include:
 
 - Support for padding between the register and the value when
   interacting with the device, sometimes needed for fast interfaces.
 - Support for applying register updates to the device when restoring the
   register state.  This is intended to be used to apply updates supplied by
   manufacturers for tuning the performance of the device (many of which
   are to undocumented registers which aren't otherwise covered).
 - Support for multi-register operations on cached registers.
 - Support for syncing only part of the register cache.
 - Stubs and parameter query functions intended to make it easier for other
   subsystems to build infrastructure on top of the regmap API.
 
 plus a few driver updates making use of the new features which it was
 easier to merge via this tree.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQIcBAABAgAGBQJPYJuOAAoJEBus8iNuMP3dauMP/1mYgILz0lpRHjGmUF86vQre
 AcualwUE4UY/WacyUkke72kxa9jcznwzbFjKKNSvL3rLnNy+QPY8Z9v6zBDL90or
 D9Ok8nRVRldIIDlDE708b10AP9sDSB25ra9IVVPzOEX/0NKoE+Y7ZkXcn0s3zGgI
 Y+bLwd1uufFopMpV3m5gXipi1/+PEK+jO7q6vgdUp3C1TcMzOqSyCg+uuHWffHGp
 iO/1XzdxNGx9BTDO/XDEqxUMRnjsQg/VS9JN3CMz8gXwxXD3zrWB/9+SMIfDb5Iy
 /iXqc58uJ6PTY87t5q9TEGyRKo0Xj7NEPnW4isXg/3r0UUb8kls3frXKigtLEUb7
 wnwQD/GCRvXOTbC6TUkFDiZ3OX1qLmnk8YMQ6xhQlbNGM7jJfzj/fFiwBdre58BC
 iKPdF9gfL/gyH5yefySau/YeYqJUbVLzdOAfYVDkjApmQJv67CrPPd96xAsEsTFU
 YojkF9NcapBnk6Vs4adzjxD1YCTThaXnFtUSu/bBNZu1xNFD12TORl5fs0OedUe8
 zvPMZEEKrE5CxHhQNB6j2Z0zajNOgsh183mNSr2VJK1vI4o4pY7MBENYYPzFiPB4
 BfX8KFftxu8O50OVZnweZ80LKVZ9fAo57oWlgR8lfaEbetjY0WdRYOyDT8w5jrtW
 nU+mtlQLc5SmugTs+CiD
 =4Eo9
 -----END PGP SIGNATURE-----

Merge tag 'regmap-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap

Pull regmap updates from Mark Brown:
 "Things are really quieting down with the regmap API, while we're still
  seeing a trickle of new features coming in they're getting much
  smaller than they were.  It's also nice to have some features which
  support other subsystems building infrastructure on top of regmap.
  Highlights include:

  - Support for padding between the register and the value when
    interacting with the device, sometimes needed for fast interfaces.
  - Support for applying register updates to the device when restoring
    the register state.  This is intended to be used to apply updates
    supplied by manufacturers for tuning the performance of the device
    (many of which are to undocumented registers which aren't otherwise
    covered).
  - Support for multi-register operations on cached registers.
  - Support for syncing only part of the register cache.
  - Stubs and parameter query functions intended to make it easier for
    other subsystems to build infrastructure on top of the regmap API.

  plus a few driver updates making use of the new features which it was
  easier to merge via this tree."

* tag 'regmap-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap: (41 commits)
  regmap: Fix future missing prototype of devres_alloc() and friends
  regmap: Rejig struct declarations for stubbed API
  regmap: Fix rbtree block base in sync
  regcache: Make sure we sync register 0 in an rbtree cache
  regmap: delete unused module.h from drivers/base/regmap files
  regmap: Add stub for regcache_sync_region()
  mfd: Improve performance of later WM1811 revisions
  regmap: Fix x86_64 breakage
  regmap: Allow drivers to sync only part of the register cache
  regmap: Supply ranges to the sync operations
  regmap: Add tracepoints for cache only and cache bypass
  regmap: Mark the cache as clean after a successful sync
  regmap: Remove default cache sync implementation
  regmap: Skip hardware defaults for LZO caches
  regmap: Expose the driver name in debugfs
  mfd: wm8400: Convert to devm_regmap_init_i2c()
  mfd: wm831x: Convert to devm_regmap_init()
  mfd: wm8994: Convert to devm_regmap_init()
  mfd/ASoC: Convert WM8994 driver to use regmap patches
  mfd: Add __devinit and __devexit annotations in wm8994
  ...
2012-03-22 20:33:14 -07:00
Mark Brown
e16605855d ASoC: wm8994: Update WM8994 DCS calibration
Based on latest production information.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2012-03-21 13:40:52 +00:00
Mark Brown
22f8d05535 ASoC: wm8994: Provide VMID mode control and fix default sequence
The optimal management of VMID depends on a number of factors which vary
dynamically at runtime, for example the connection to a system docking
station. In some circumstances it is desirable to keep VMID enabled all
the time, in others it is desirable to aggressively power it up and down.

Provide a callback allowing machine driver to configure either the normal
power up/down mode (WM8994_VMID_MODE_NORMAL) or to maintain VMID even
when idle (WM8994_VMID_MODE_FORCE). This callback, wm8994_vmid_mode(),
should be called with the CODEC lock.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-03-19 19:08:17 +00:00
Mark Brown
6f8270cc9a ASoC: wm8994: Add missing break in resume
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-03-19 19:08:15 +00:00
Mark Brown
c986564b31 ASoC: wm8994: Prevent ABBA deadlock with CODEC and accdet mutexes
Currently we can the accdet mutex from within DAPM when updating the device
state which means we take accdet then the CODEC mutex but we also do the
locking the other way around when responding to the jackdet IRQ. Move all
the jackdet use of the CODEC mutex out of the accdet lock to avoid this.
Since all the DAPM interactions depend only on a single threaded IRQ this
is still serialised.

The locking improvements in 3.5 allow a better solution there.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-03-12 18:12:09 +00:00
Mark Brown
4752a88719 ASoC: wm8994: Use audio mode for jack detection when system is active
When we are out of system sleep always use audio mode for jack detection
in order to avoid potential performance issues handing off between modes.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-03-06 00:05:24 +00:00