summaryrefslogtreecommitdiff
path: root/sound/soc/codecs/wm8994.c
AgeCommit message (Collapse)AuthorFilesLines
2012-02-12ASoC: wm_hubs: Improve single ended line output enable performanceMark Brown1-0/+5
The enable of the single ended line outputs on wm_hubs devices performs better if the output is enabled prior to starting VMID. Since inactive outputs are held at VMID anyway there is little cost to doing this for unused outputs. Add callbacks into wm_hubs and keep track of which outputs are really active so we can disable them once we're active. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-02-09Merge tag 'v3.3-rc3' as we've got several bugfixes in there which areMark Brown1-1/+10
colliding annoyingly with development. Linux 3.3-rc3 .. the number of the half-beast? Conflicts: sound/soc/codecs/wm5100.c sound/soc/codecs/wm8994.c
2012-02-08ASoC: wm8994: Disable line output discharge prior to ramping VMIDMark Brown1-0/+5
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-02-08ASoC: wm8994: Fix typo in VMID ramp settingMark Brown1-1/+1
The VMID ramp rate is supposed to be 0x3, not 11b. Fix that. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: stable@vger.kernel.org
2012-02-06ASoC: wm8994: Bring WM8994 accessory detection up to dateMark Brown1-21/+61
Make the mechanism used for WM8994 more like that for WM1811 and WM8958: provide the logic to distinguish between headphone and headset and hard code the reporting of sensible SND_JACK values. Should integration with other detection mechanisms be required we can add appropriate callbacks (though some integrations should be able to use the subsystem ones). Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-02-06ASoC: wm8994: Unsuspend the device while reading GPIO statusesMark Brown1-0/+5
Otherwise we might get an error if the GPIO is configured as an input since that makes the register volatile and a suspended device can't be read from. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-02-06ASoC: wm8994: We don't need to runtime resume by defaultMark Brown1-1/+1
This is the default state that the runtime PM infrastructure expects so instead just kick the runtime PM core to suspend us if we're not doing anything (as is default). Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-02-06ASoC: wm8994: Don't bring up to STANDBY by defaultMark Brown1-9/+0
In cases where we should enter STANDBY DAPM will power us up, otherwise there is no need to power up and we can remain in OFF. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-02-06ASoC: wm8994: Enabling VMID should take a runtime PM referenceMark Brown1-0/+4
We can enable VMID independently of the bias in some use cases so we need to ensure that the core device is powered up. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: stable@vger.kernel.org
2012-02-04ASoC: core: Add support for DAI and machine kcontrols.Liam Girdwood1-6/+6
Currently ASoC can only add kcontrols using codec and platform component device handles. It's also desirable to add kcontrols for DAIs (i.e. McBSP) and for SoC card machine drivers too. This allows the kcontrol to have a direct handle to the parent ASoC component DAI/SoC Card/Platform/Codec device and hence easily get it's private data. This change makes snd_soc_add_controls() static and wraps it in the folowing calls (card and dai are new) :- snd_soc_add_card_controls() snd_soc_add_codec_controls() snd_soc_add_dai_controls() snd_soc_add_platform_controls() This patch also does a lot of small mechanical changes in individual codec drivers to replace snd_soc_add_controls() with snd_soc_add_codec_controls(). It also updates the McBSP DAI driver to use snd_soc_add_dai_controls(). Finally, it updates the existing machine drivers that register controls to either :- 1) Use snd_soc_add_card_controls() where no direct codec control is required. 2) Use snd_soc_add_codec_controls() where there is direct codec control. In the case of 1) above we also update the machine drivers to get the correct component data pointers from the kcontrol (rather than getting the machine pointer via the codec pointer). Signed-off-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-01-31ASoC: wm_hubs: Push check for idle_bias_off out into driversMark Brown1-0/+8
For later wm_hubs devices we have much less need to keep the biases up even when using single ended line outputs so flag idle_bias_off for everything except the WM8993 and WM8994. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-01-31ASoC: wm8994: Remove ASoC level register cache syncMark Brown1-5/+0
Now we've switched over to regmap the ASoC level cache sync will be ineffectual and potentially harmful as there is no longer an ASoC level cache. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-01-26ASoC: wm8994: Report any low impedance accessory as a headphoneMark Brown1-1/+1
Report any accessory with a low impedance as a headphone, previously anything other than a short or microphone would not be reported at all. The most likely reason is a microphone with incorrect polarity. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-01-20ASoC: 24 bits are significant on wm_hubs DAIsMark Brown1-1/+7
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-30ASoC: Enable ASoC register map dump for some regmap CODECsMark Brown1-0/+8
It's still useful to be able to poke around in the register map at runtime. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-29ASoC: Remove unused label from wm8994 probe()Mark Brown1-1/+1
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-12ASoC: Remove WM8994 register cacheMark Brown1-87/+0
Now that the mfd is using the register map cache there's no need for the CODEC driver to do any register cache management or any funny dances to interact with the other drivers using the device so just remove the cache initialisation and volatility information. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-12ASoC: Remove ASoC-specific WM8994 I/O codeMark Brown1-51/+12
Just go directly to the regmap API, saving code and making integration that bit more direct. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-08ASoC: Rely on core enabling the wm8994 with runtime PMMark Brown1-6/+1
No need to do this in the driver now. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-02Merge branch 'for-3.2' into for-3.3Mark Brown1-6/+6
2011-12-02ASoC: Mark WM8994 ADC muxes as virtualMark Brown1-6/+6
Since they don't actually have power bits but do have events associated with them it's important that we bootstrap their state properly which making them virtual does. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-02ASoC: Add missing err labelMark Brown1-0/+1
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-02ASoC: Drop unused state parameter from CODEC suspend callbackLars-Peter Clausen1-1/+1
The existence of this parameter is purely historical. None of the CODEC drivers uses it and we always pass in the same value anyway, so it should be safe to remove it. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Convert WM8994 to devm_kzalloc()Mark Brown1-7/+4
Still have a manual free in there for some realloc()ed memory as there's no devm version of that. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Add platform data for WM8958/WM1811 microphone detection ratesMark Brown1-8/+4
Allow systems to override the default microphone detection rates using platform data in case the settings are not suitable (eg, due to an unusually noisy jack). Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Ensure we reconfigure WM8958 microphone detection on rate changesMark Brown1-4/+2
We don't need to rerun DAPM if the clock source is the same but we do need to adjust the microphone detection rate in case we are moving from an audio to a non-audio rate. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Implement support for WM1811A jack detectionMark Brown1-19/+245
The WM1811A features an advanced low power accessory detection subsystem which allows the device to be maintained in a very low power state while the system is idle without sacrificing any accessory detection features. Implement software support for this, automatically managing the power configuration of the device depending on the detected accessory. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Rename WM8994 detecting flag to mic_detectingMark Brown1-6/+6
More specific and avoids confusion with a following change. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Allow more WM8958/WM1811 button levels with default handlerMark Brown1-8/+34
The WM8958 and WM1811 support detecting a range of buttons. Allow the user to provide platform data enabling more of these levels without having to write a custom detection handler. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Tune down active mode detection rate for WM8958 mic detectionMark Brown1-2/+2
Saves a little power. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Don't use control_data to get struct wm8994Mark Brown1-34/+38
This will support refactoring to make use of the regmap API more directly in the core. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-12-01ASoC: Provide debug log of accessory status on WM8958Mark Brown1-0/+2
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-30ASoC: Enhance default WM8958 microphone detectionMark Brown1-11/+109
Actively manage the detection rate for microphones with WM8958, providing improved power consumption and maximising the benefit from the hardware debounce. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-29ASoC: Put WM8958 and WM1811 MICBIAS into bypass mode when no audioMark Brown1-1/+39
When we don't have any active audio we can put the microphone biases into bypass mode to save power at the expense of performance. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-29ASoC: Ensure SYSCLK is enabled for WM8958 accessory detectionMark Brown1-0/+3
Ensure SYSCLK is enabled while running accessory detection on WM8958. It is always required so there is no sense in requiring machine drivers to individually do this. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-29Merge branch 'for-3.2' into for-3.3Mark Brown1-0/+2
2011-11-29ASoC: Supply dcs_codes for newer WM1811 revisionsMark Brown1-0/+2
Based on initial data. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-29Merge branch 'for-3.2' into for-3.3Mark Brown1-0/+5
2011-11-29ASoC: Error out if we can't generate a LRCLK at all for WM8994Mark Brown1-0/+5
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-28ASoC: Convert CODEC drivers to module_platform_driverMark Brown1-12/+1
Factors out a bit of boilerplate. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-23ASoC: Constify snd_soc_dai_ops structsLars-Peter Clausen1-3/+3
Commit 1ee46ebd("ASoC: Make the DAI ops constant in the DAI structure") introduced the possibility to have constant DAI ops structures, yet this is barley used in both existing drivers and also new drivers being submitted, although none of them modifies its DAI ops structure. The later is not surprising since existing drivers are often used as templates for new drivers. So this patch just constifies all existing snd_soc_dai_ops structs to eliminate the issue altogether. The patch was generated with the following coccinelle semantic patch: // <smpl> @@ identifier ops; @@ -struct snd_soc_dai_ops ops = +const struct snd_soc_dai_ops ops = { ... }; // </smpl> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-05ASoC: Ensure we get an impedence reported for WM8958 jack detectMark Brown1-11/+26
Occasionally we may see an accessory reported before we have a stable impedance for the accessory. If this happens then reread the status in order to ensure that the handler can take the appropriate action for the status change. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-05ASoC: Don't use wm8994->control_data when requesting IRQsMark Brown1-2/+2
The field is no longer initialised so this will crash if running on wm8958. Reported-by: Thomas Abraham <thomas.abraham@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-11-05ASoC: Don't use wm8994->control_data in wm8994_readable_register()Mark Brown1-1/+1
The field is no longer initialised so this will crash if running on wm8958. Reported-by: Thomas Abraham <thomas.abraham@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: stable@kernel.org
2011-10-20ASoC: wm8994: Use SND_SOC_DAPM_AIF_OUT for AIF3 CaptureAxel Lin1-1/+1
Signed-off-by: Axel Lin <axel.lin@gmail.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: stable@kernel.org
2011-10-18ASoC: Update WM1811 DCS codes for latest evaluation resultsMark Brown1-2/+2
Evaluation of larger quantities of material has provided new DCS codes values to be applied for WM1811. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
2011-10-12ASoC: Remove impossible case from wm8994_hw_paramsAxel Lin1-10/+0
We set hw_params callback for wm8994_aif3_dai_ops to wm8994_aif3_hw_params. Thus no need to check wm8994-aif3 in wm8994_hw_params. Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2011-10-04Merge branch 'for-3.1' into for-3.2Mark Brown1-1/+1
2011-10-04ASoC: wm8994: Fix setting rate_reg for wm8994-aif2Axel Lin1-1/+1
For wm8994-aif2, the rate_reg should be WM8994_AIF2_RATE. Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: stable@kernel.org
2011-10-04ASoC: wm8994: Slightly optimize configure_clockAxel Lin1-7/+4
snd_soc_update_bits() will only write new register value if the old value is different from the new value. In additional, snd_soc_update_bits() returns 0 for no change. No need to read WM8994_CLOCKING_1 register before calling snd_soc_update_bits(). Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>