aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/max98090.c
Commit message (Collapse)AuthorAge
*-. Merge remote-tracking branches 'asoc/topic/max98090', 'asoc/topic/rockchip', ↵Mark Brown2014-10-06
|\ \ | | | | | | | | | 'asoc/topic/rsnd' and 'asoc/topic/rt286' into asoc-next
| * | ASoC: max98090: Remove structure member extmic_mux from private dataJarkko Nikula2014-09-24
| | | | | | | | | | | | | | | | | | | | | There is no other use for extmic_mux than setting it to zero so remove it. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * | ASoC: max98090: Remove structure member irq from private dataJarkko Nikula2014-09-24
| | | | | | | | | | | | | | | | | | | | | | | | struct max98090_priv member irq is now used only locally in max98090_i2c_probe() and can be removed. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * | ASoC: max98090: Move interrupt request from codec probe to i2c probeJarkko Nikula2014-09-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Keep MAX98090 interrupt requested after i2c device probing as long as the driver is loaded. This fixes the issue where subsequent codec probe max98090_probe() call fails in interrupt request since interrupt wasn't freed over codec remove-reprobe cycle. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* | | ASoC: max98090: Enable both DMIC channels also when using mono configurationJarkko Nikula2014-09-28
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to MAX98090 specification "Digital microphone clock (DMC) is enabled once both data channels are enabled.". Therefore both digital microphone data channels must be enabled also when using mono microphone configuration. Fix this by moving "DMICL_ENA" and "DMICR_ENA" supply widgets from "DMICL" and "DMICR" inputs to "DMIC Mux" in order to enable both data channels whenever there is active mono or stereo digital microphone input path. Use of "DMICL" and "DMICR" inputs are retained for informative source and in case the driver would find use for exact digital microphone configuration in the future. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* / ASoC: max98090: Add recovery for PLL lock failureJarkko Nikula2014-09-03
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | All MAX98090 input clocks MCLK, LRCLK and BCLK must be running and stable before powering on the codec in slave mode. Otherwise the PLL may not lock to LRCLK causing silence in playback and capture. How often that happens is somewhat hardware and clock configuration specific. Now if wanting to follow strictly this clocks must be active before powering the codec on requirement we should have a notification from DAI driver to codec driver when clocks are activated and take codec out of shutdown only after that. Plus take care of possible active bypass paths. However, when PLL unlock occurs, MAX98090 asserts the PLL Unlock Flag which can be configured as an IRQ source. This allows to workaround around the issue by toggling the codec power shortly in case of PLL lock failure. In order to prevent needlessly toggling codec power in case of short PLL unlocks at the beginning of stream this patch implements delayed activation for PLL unlock interrupt. Then workaround is run only when the PLL doesn't lock at all. Power toggling workaround for PLL unlock comes originally from Liam Girdwood <liam.r.girdwood@linux.intel.com> and delayed activation from me. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
*-. Merge remote-tracking branches 'asoc/topic/intel', 'asoc/topic/kirkwood', ↵Mark Brown2014-08-04
|\ \ | | | | | | | | | 'asoc/topic/max98090' and 'asoc/topic/mc13783' into asoc-next
| | * ASoC: max98090: Fix build warningThierry Reding2014-07-07
| | | | | | | | | | | | | | | | | | | | | | | | The max98090_{suspend,resume}() functions are used for system sleep and therefore need to be guarded by CONFIG_PM_SLEEP rather than CONFIG_PM. Signed-off-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| | * ASoC: max98090: Remove redundant max98090_handle_pdata()Tushar Behera2014-07-04
| | | | | | | | | | | | | | | | | | | | | | | | max98090_handle_pdata() is not doing anything other than printing a message if pdata is not valid. This can be removed. Signed-off-by: Tushar Behera <tushar.b@samsung.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| | * ASoC: max98090: Add check for CODEC typeTushar Behera2014-07-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CODEC type (MAX98090/MAX98091) can be specified from device-tree file, it can also be obtained from the CODEC during runtime. Add an explicit check to figure out if both are matching, else print a message warning about the same. Signed-off-by: Tushar Behera <tushar.b@samsung.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| | * ASoC: max98090: Add max98091 compatible stringWonjoon Lee2014-06-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The MAX98091 CODEC is the same as MAX98090 CODEC, but with an extra microphone. Existing driver for MAX98090 CODEC already has support for MAX98091 CODEC. Adding proper compatible string so that MAX98091 CODEC can be specified from device tree. Signed-off-by: Wonjoon Lee <woojoo.lee@samsung.com> Signed-off-by: Doug Anderson <dianders@chromium.org> Signed-off-by: Tushar Behera <tushar.b@samsung.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| | * ASoC: max98090: Remove needless defines and line feedsJarkko Nikula2014-06-19
| |/ | | | | | | | | Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* / ASoC: max98090: Fix missing free_irqJarkko Nikula2014-06-19
|/ | | | | | | | | | | | max98090.c doesn't free the threaded interrupt it requests. This causes an oops when doing "cat /proc/interrupts" after snd-soc-max98090.ko is unloaded. Fix this by requesting the interrupt by using devm_request_threaded_irq(). Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Cc: Stable <stable@vger.kernel.org> # 3.10+ Signed-off-by: Mark Brown <broonie@linaro.org>
*-. Merge remote-tracking branches 'asoc/topic/max98090' and ↵Mark Brown2014-06-03
|\ \ | | | | | | | | | 'asoc/topic/max98095' into asoc-next
| * | ASoC: max98090: Add master clock handlingTushar Behera2014-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If master clock is provided through device tree, then update the master clock frequency during set_sysclk. Documentation has been updated to reflect the change. Signed-off-by: Tushar Behera <tushar.behera@linaro.org> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: max98090: Add NI/MI values for user pclk 19.2 MHzChen Zhen2014-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds the clock divisor and multiplier NI, MI values for audio sampling frequencies 44100 and 48000 Hz and PCLK 19.2 MHz. This is useful for the Odroid X2/U2 boards when the codec works in master mode and its MCLK clock is fed from the I2S CDCLK output. Signed-off-by: Chen Zhen <zhen1.chen@samsung.com> [s.nawrocki@samsung.com: edited the commit description] Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| | |
| \ \
| \ \
| \ \
*---. | | Merge remote-tracking branches 'asoc/topic/headers', 'asoc/topic/intel', ↵Mark Brown2014-05-21
|\ \ \| | | | | |/ | | |/| | | | | 'asoc/topic/jz4740', 'asoc/topic/max98090', 'asoc/topic/max98095', 'asoc/topic/mc13783' and 'asoc/topic/multicodec' into asoc-next
| | | * ASoC: max98090: Move microphone bias voltage setting to probe functionJarkko Nikula2014-05-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Microphone bias level configuration register can configure voltage between 2.2 V and 2.8 V but doesn't manage is voltage on or off. Microphone bias on/off state is controlled by "MICBIAS" DAPM widget. Therefore there is no need to update bias voltage conditionally depending on jack state each time when codec goes to SND_SOC_BIAS_ON state and setting can be moved to max98090_probe() as driver currently doesn't support other levels than 2.8 V. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| | | * ASoC: max98090: Make sure we configure BCLK in one placeLiam Girdwood2014-05-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | BCL is being configured in two places producing a warning message. Make sure we only configure BCLK once and when we are master. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| | | * ASoC: max98090: Add ACPI probing supportJarkko Nikula2014-05-16
| | |/ | | | | | | | | | | | | | | | | | | Add ACPI ID for MAX98090 and ACPI 5 I2C device probing support. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * / ASoC: max98090: Include of.hSachin Kamat2014-04-14
| |/ | | | | | | | | | | | | of_match_ptr is defined in of.h. Include it explicitly. Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Signed-off-by: Mark Brown <broonie@linaro.org>
* | Merge remote-tracking branch 'asoc/topic/enum' into asoc-nextMark Brown2014-05-21
|\ \
| * | ASoC: max98090: Replace usage deprecated MUX/ENUM macrosLars-Peter Clausen2014-04-14
| |/ | | | | | | | | | | | | | | | | SND_SOC_DAPM_VIRT_MUX and SOC_DAPM_ENUM_VIRT are deprecated and merely an alias for SND_SOC_DAPM_MUX and SOC_DAPM_ENUM. Replace the deprecated macros so we can eventually remove their definition. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* | Merge remote-tracking branch 'asoc/topic/component' into asoc-nextMark Brown2014-05-21
|\ \
| * | ASoC: Add snd_soc_kcontrol_codec() helper functionLars-Peter Clausen2014-04-14
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | For CODEC controls snd_kcontrol_chip() currently returns a pointer to the CODEC that registered the control. With the upcoming consolidation of platform and CODEC controls this will change. Prepare for this by introducing the snd_soc_kcontrol_codec() helper function that will hide the implementation details of how the CODEC for a control can be obtained. This will allow us to change this easily in the future. The patch also updates all CODEC drivers to use the new helper function. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* | ASoC: max98090: Mark cache as dirty prior to restoringLiam Girdwood2014-05-16
| | | | | | | | | | | | | | | | Make sure the cache is fully flushed at resume time. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* | ASoC: max98090: Reset codec on resumeLiam Girdwood2014-05-16
| | | | | | | | | | | | | | | | | | Make sure we reset codec and clear any IRQs on resume. This matches the init sequence in probe. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* | ASoC: max98090: Fix reset at resume timeLiam Girdwood2014-05-16
| | | | | | | | | | | | | | | | | | | | | | | | Reset needs to wait 20ms before other codec IO is performed. This wait was not being performed. Fix this by making sure the reset register is not restored with the cache, but use the manual reset method in resume with the wait. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org> Cc: stable@vger.kernel.org
* | ASoC: max98090: Fix digital sidetone gain TLVLiam Girdwood2014-05-16
|/ | | | | | | | | TLV for digital sidetone volume is wrong, this fix matches it to the datasheet. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
*-. Merge remote-tracking branches 'asoc/fix/alc5632', 'asoc/fix/cs42l52', ↵Mark Brown2014-04-08
|\ \ | | | | | | | | | 'asoc/fix/cs42xxx8', 'asoc/fix/da732x', 'asoc/fix/davinci', 'asoc/fix/fsl-sai', 'asoc/fix/fsl-ssi' and 'asoc/fix/max98090' into asoc-linus
| | * ASoC: max98090: add an of_match tableStephen Warren2014-04-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a device tree match table. This serves to make the driver's support of device tree more explicit. Perhaps the fallback for DT matching to using the i2c_device_id table will go away one day, since it fails in face of devices from different vendors with the same name. Signed-off-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| | |
| \ \
*-. | | Merge remote-tracking branches 'asoc/topic/max98090' and 'asoc/topic/omap' ↵Mark Brown2014-03-23
|\ \| | | | |/ | |/| | | | into asoc-next
| * | ASoC: max98090: Remove unused control_data fieldLars-Peter Clausen2014-03-14
| | | | | | | | | | | | | | | | | | | | | | | | The driver assigns a value to the control_data field of the driver's state struct, but never reads it again. Which means it is unused and can be removed. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* | | Merge remote-tracking branch 'asoc/topic/io' into asoc-nextMark Brown2014-03-13
|\ \ \
| * | | ASoC: codec: Simplify ASoC probe code.Xiubo Li2014-03-11
| | |/ | |/| | | | | | | | | | | | | | | | | | | For some CODEC drivers like who act as the MFDs children are ignored by this patch. Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* | | Merge remote-tracking branch 'asoc/topic/enum' into asoc-nextMark Brown2014-03-12
|\ \ \
| * | | ASoC: max98090: Use SOC_ENUM_SINGLE_VIRT_DECL()Lars-Peter Clausen2014-02-28
| | |/ | |/| | | | | | | | | | | | | | | | | | | For the upcoming consolidation for MUXs and virtual MUXs we need to mark virtual enums as such. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: max98090: Use SOC_ENUM_SINGLE_DECL()Takashi Iwai2014-02-19
| |/ | | | | | | | | | | | | | | | | Just replace with the helper macro. No functional change at all. 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>
* | ASoC: max98090: make REVISION_ID readableStephen Warren2014-02-15
| | | | | | | | | | | | | | | | | | | | | | | | The REVISION_ID register is not currently marked readable. snd_soc_read() refuses to read the register, and hence probe() fails. Fixes: d4807ad2c4c0 ("regmap: Check readable regs in _regmap_read") [exposed the bug, by checking for readability] Fixes: 685e42154dcf ("ASoC: Replace max98090 Device Driver") [left out this register from the readable list] Signed-off-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* | ASoC: max98090: sync regcache on entering STANDBYDylan Reid2014-02-12
|/ | | | | | | | | | | | Sync regcache when entering STANDBY from OFF. ON isn't entered with OFF as the current state, so the registers were not being re-synced after suspend/resume. The 98088 and 98095 already call regcache_sync from STANDBY. Signed-off-by: Dylan Reid <dgreid@chromium.org> Signed-off-by: Mark Brown <broonie@linaro.org> Cc: stable@vger.kernel.org
* ASoC: max98090: Use params_width() rather than memory formatMark Brown2014-01-13
| | | | Signed-off-by: Mark Brown <broonie@linaro.org>
* ASoC: max98090: Use power efficient workqueueMark Brown2013-07-19
| | | | | | | | | | None of the delayed work the driver schedules has particularly short delays and it 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>
* Merge remote-tracking branch 'asoc/topic/max98090' into asoc-nextMark Brown2013-06-17
|\
| * ASoC: max98090: Guard runtime PM callbacksMark Brown2013-06-06
| | | | | | | | | | | | | | Otherwise the functions will be defined but unreferenced when runtime PM is disabled, generating warnings. Signed-off-by: Mark Brown <broonie@linaro.org>
| * ASoC: max98090: add digital mic mux to record pathAndrew Bresticker2013-05-17
| | | | | | | | | | | | | | | | | | | | | | | | | | The max98090 driver currently treats the digital mic enable as a supply on the record path, causing the digital mic enable to always be turned on when attempting to record. This is incorrect, however, since the digital mic enable is also a mux control where 0 selects the ADC output as input to the record-path DSP and 1 selects the digital mic. This patch adds a virtual DMIC mux to the reocrd path so that we can switch between the ADC and the digital mic for recording. Signed-off-by: Andrew Bresticker <abrestic@chromium.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* | ASoC: max98090: request IRQF_ONESHOT interruptAndrew Bresticker2013-05-20
|/ | | | | | | | | | | | | | request_threaded_irq() rejects calls which both do not specify a handler (indicating that the primary IRQ handler should be used) and do not set IRQF_ONESHOT because the combination is unsafe with level-triggered interrupts. It is safe in this case, though, since max98090 IRQs are edge-triggered and the interrupts aren't ACK'ed until the codec's IRQ status register is read. Because of this, an IRQF_ONESHOT interrupt doesn't really make a difference, but request one anyway in order to make request_threaded_irq() happy. Signed-off-by: Andrew Bresticker <abrestic@chromium.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* Merge remote-tracking branch 'asoc/topic/max98090' into asoc-nextMark Brown2013-04-12
|\
| * ASoC: max98090: Remove unnecessary bracesSachin Kamat2013-03-03
| | | | | | | | | | | | | | | | | | Braces are not required for single line statements. Silences the following checkpatch warnings: WARNING: braces {} are not necessary for single statement blocks. Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
| * ASoC: max98090: Fix checkpatch errors related to spacingSachin Kamat2013-03-03
| | | | | | | | | | | | | | | | Fixes the following type of checkpatch errors: ERROR: "foo * bar" should be "foo *bar" Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
| * ASoC: max98090: Make struct dev_pm_ops constSachin Kamat2013-03-03
| | | | | | | | | | | | | | | | Silences the following checkpatch warning: WARNING: struct dev_pm_ops should normally be const. Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>