ASoC: TWL4030: Make offset cancellation path configurable
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>
Wed, 26 May 2010 08:38:16 +0000 (11:38 +0300)
committerLiam Girdwood <lrg@slimlogic.co.uk>
Mon, 31 May 2010 10:08:58 +0000 (11:08 +0100)
Add means for machine drivers to select the path for offset
cancellation.
Reset the reg cache value to the chip reset value at the
same time.

Machine drivers can specify which path need to be used for
offset cancellation via the twl4030_setup.offset_cncl_path.
For paths use the defines from
include/linux/mfd/twl4030-codec.h:
TWL4030_OFFSET_CNCL_SEL_*

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
sound/soc/codecs/twl4030.c
sound/soc/codecs/twl4030.h

index 1e0aba5b2c5da3ba4bcb6a9f8f4ee41d5c582145..a6cbaf3c51f21cd46988f48b48d3fe0734448b52 100644 (file)
@@ -46,7 +46,7 @@ static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = {
        0xc3, /* REG_OPTION             (0x2)   */
        0x00, /* REG_UNKNOWN            (0x3)   */
        0x00, /* REG_MICBIAS_CTL        (0x4)   */
-       0x20, /* REG_ANAMICL            (0x5)   */
+       0x00, /* REG_ANAMICL            (0x5)   */
        0x00, /* REG_ANAMICR            (0x6)   */
        0x00, /* REG_AVADC_CTL          (0x7)   */
        0x00, /* REG_ADCMICSEL          (0x8)   */
@@ -281,6 +281,8 @@ static void twl4030_apll_enable(struct snd_soc_codec *codec, int enable)
 
 static void twl4030_power_up(struct snd_soc_codec *codec)
 {
+       struct snd_soc_device *socdev = codec->socdev;
+       struct twl4030_setup_data *setup = socdev->codec_data;
        struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
        u8 anamicl, regmisc1, byte;
        int i = 0;
@@ -293,6 +295,8 @@ static void twl4030_power_up(struct snd_soc_codec *codec)
 
        /* initiate offset cancellation */
        anamicl = twl4030_read_reg_cache(codec, TWL4030_REG_ANAMICL);
+       anamicl &= ~TWL4030_OFFSET_CNCL_SEL;
+       anamicl |= setup->offset_cncl_path;
        twl4030_write(codec, TWL4030_REG_ANAMICL,
                anamicl | TWL4030_CNCL_OFFSET_START);
 
index f206d242ca3130a932bae30aa3074bd2fb28b98f..c98e30347e877b2e59f47c47f397af0a3666b930 100644 (file)
@@ -42,6 +42,7 @@ extern struct snd_soc_codec_device soc_codec_dev_twl4030;
 struct twl4030_setup_data {
        unsigned int ramp_delay_value;
        unsigned int sysclk;
+       unsigned int offset_cncl_path;
        unsigned int hs_extmute:1;
        void (*set_hs_extmute)(int mute);
 };