All of lore.kernel.org
 help / color / mirror / Atom feed
From: Liam Girdwood <lrg@ti.com>
To: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"patches@opensource.wolfsonmicro.com"
	<patches@opensource.wolfsonmicro.com>
Subject: Re: [PATCH 1/2] ASoC: Implement new DC servo readback mode for late WM8994 revisions
Date: Mon, 1 Aug 2011 14:13:59 +0100	[thread overview]
Message-ID: <4E36A697.4080909@ti.com> (raw)
In-Reply-To: <1312175572-13551-1-git-send-email-broonie@opensource.wolfsonmicro.com>

On 01/08/11 06:12, Mark Brown wrote:
> Later WM8994 devices implement a new DC servo readback mode with the
> register used to access the offset moved to register 0x59. Implement
> support for this and enable it on the appropriate devices.
> 
> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

both 

Acked-by: Liam Girdwood <lrg@ti.com>
 
> ---
>  include/linux/mfd/wm8994/registers.h |    1 +
>  sound/soc/codecs/wm8994.c            |    3 ++-
>  sound/soc/codecs/wm_hubs.c           |   19 +++++++++++++++----
>  3 files changed, 18 insertions(+), 5 deletions(-)
> 
> diff --git a/include/linux/mfd/wm8994/registers.h b/include/linux/mfd/wm8994/registers.h
> index f3ee842..6152914 100644
> --- a/include/linux/mfd/wm8994/registers.h
> +++ b/include/linux/mfd/wm8994/registers.h
> @@ -72,6 +72,7 @@
>  #define WM8994_DC_SERVO_2                       0x55
>  #define WM8994_DC_SERVO_4                       0x57
>  #define WM8994_DC_SERVO_READBACK                0x58
> +#define WM8994_DC_SERVO_4E			0x59
>  #define WM8994_ANALOGUE_HP_1                    0x60
>  #define WM8958_MIC_DETECT_1                     0xD0
>  #define WM8958_MIC_DETECT_2                     0xD1
> diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
> index cc8222c..e1e9aca 100644
> --- a/sound/soc/codecs/wm8994.c
> +++ b/sound/soc/codecs/wm8994.c
> @@ -107,6 +107,7 @@ static int wm8994_volatile(struct snd_soc_codec *codec, unsigned int reg)
>  	case WM8994_LDO_2:
>  	case WM8958_DSP2_EXECCONTROL:
>  	case WM8958_MIC_DETECT_3:
> +	case WM8994_DC_SERVO_4E:
>  		return 1;
>  	default:
>  		return 0;
> @@ -2965,7 +2966,7 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)
>  			wm8994->hubs.series_startup = 1;
>  			break;
>  		default:
> -			wm8994->hubs.dcs_readback_mode = 1;
> +			wm8994->hubs.dcs_readback_mode = 2;
>  			break;
>  		}
>  
> diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c
> index 4416a76..524bdc6 100644
> --- a/sound/soc/codecs/wm_hubs.c
> +++ b/sound/soc/codecs/wm_hubs.c
> @@ -18,6 +18,7 @@
>  #include <linux/pm.h>
>  #include <linux/i2c.h>
>  #include <linux/platform_device.h>
> +#include <linux/mfd/wm8994/registers.h>
>  #include <sound/core.h>
>  #include <sound/pcm.h>
>  #include <sound/pcm_params.h>
> @@ -116,14 +117,23 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec)
>  {
>  	struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
>  	s8 offset;
> -	u16 reg, reg_l, reg_r, dcs_cfg;
> +	u16 reg, reg_l, reg_r, dcs_cfg, dcs_reg;
> +
> +	switch (hubs->dcs_readback_mode) {
> +	case 2:
> +		dcs_reg = WM8994_DC_SERVO_4E;
> +		break;
> +	default:
> +		dcs_reg = WM8993_DC_SERVO_3;
> +		break;
> +	}
>  
>  	/* If we're using a digital only path and have a previously
>  	 * callibrated DC servo offset stored then use that. */
>  	if (hubs->class_w && hubs->class_w_dcs) {
>  		dev_dbg(codec->dev, "Using cached DC servo offset %x\n",
>  			hubs->class_w_dcs);
> -		snd_soc_write(codec, WM8993_DC_SERVO_3, hubs->class_w_dcs);
> +		snd_soc_write(codec, dcs_reg, hubs->class_w_dcs);
>  		wait_for_dc_servo(codec,
>  				  WM8993_DCS_TRIG_DAC_WR_0 |
>  				  WM8993_DCS_TRIG_DAC_WR_1);
> @@ -154,8 +164,9 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec)
>  		reg_r = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_2)
>  			& WM8993_DCS_INTEG_CHAN_1_MASK;
>  		break;
> +	case 2:
>  	case 1:
> -		reg = snd_soc_read(codec, WM8993_DC_SERVO_3);
> +		reg = snd_soc_read(codec, dcs_reg);
>  		reg_r = (reg & WM8993_DCS_DAC_WR_VAL_1_MASK)
>  			>> WM8993_DCS_DAC_WR_VAL_1_SHIFT;
>  		reg_l = reg & WM8993_DCS_DAC_WR_VAL_0_MASK;
> @@ -185,7 +196,7 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec)
>  		dev_dbg(codec->dev, "DCS result: %x\n", dcs_cfg);
>  
>  		/* Do it */
> -		snd_soc_write(codec, WM8993_DC_SERVO_3, dcs_cfg);
> +		snd_soc_write(codec, dcs_reg, dcs_cfg);
>  		wait_for_dc_servo(codec,
>  				  WM8993_DCS_TRIG_DAC_WR_0 |
>  				  WM8993_DCS_TRIG_DAC_WR_1);

      parent reply	other threads:[~2011-08-01 13:14 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-01  5:12 [PATCH 1/2] ASoC: Implement new DC servo readback mode for late WM8994 revisions Mark Brown
2011-08-01  5:12 ` [PATCH 2/2] ASoC: Support separate left and right channel dcs_codes values Mark Brown
2011-08-01 13:13 ` Liam Girdwood [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E36A697.4080909@ti.com \
    --to=lrg@ti.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=patches@opensource.wolfsonmicro.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.