]> Pileus Git - ~andy/linux/commitdiff
ASoC: TWL4030: Helper to check chip default registers
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>
Wed, 26 May 2010 08:38:18 +0000 (11:38 +0300)
committerLiam Girdwood <lrg@slimlogic.co.uk>
Mon, 31 May 2010 10:08:58 +0000 (11:08 +0100)
Since the twl4030 codec driver supports different version
of the PM chip, a helper function can come handy, which
can check the driver's default versus the chip values.

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 08f24de406c204b7344c666363fd3209019db2a1..30b7bbaf6aed5bf6c67f3cf1458110893dff31b3 100644 (file)
@@ -243,6 +243,25 @@ static void twl4030_codec_enable(struct snd_soc_codec *codec, int enable)
        udelay(10);
 }
 
+static inline void twl4030_check_defaults(struct snd_soc_codec *codec)
+{
+       int i, difference = 0;
+       u8 val;
+
+       dev_dbg(codec->dev, "Checking TWL audio default configuration\n");
+       for (i = 1; i <= TWL4030_REG_MISC_SET_2; i++) {
+               twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &val, i);
+               if (val != twl4030_reg[i]) {
+                       difference++;
+                       dev_dbg(codec->dev,
+                                "Reg 0x%02x: chip: 0x%02x driver: 0x%02x\n",
+                                i, val, twl4030_reg[i]);
+               }
+       }
+       dev_dbg(codec->dev, "Found %d non maching registers. %s\n",
+                difference, difference ? "Not OK" : "OK");
+}
+
 static void twl4030_init_chip(struct platform_device *pdev)
 {
        struct snd_soc_device *socdev = platform_get_drvdata(pdev);
@@ -252,8 +271,12 @@ static void twl4030_init_chip(struct platform_device *pdev)
        u8 reg, byte;
        int i = 0;
 
+       /* Check defaults, if instructed before anything else */
+       if (setup && setup->check_defaults)
+               twl4030_check_defaults(codec);
+
        /* Refresh APLL_CTL register from HW */
-       twl4030_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &byte,
+       twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &byte,
                            TWL4030_REG_APLL_CTL);
        twl4030_write_reg_cache(codec, TWL4030_REG_APLL_CTL, byte);
 
index c98e30347e877b2e59f47c47f397af0a3666b930..c22542c2690ca9e2fbd19b3f990d2af196cc9db6 100644 (file)
@@ -43,6 +43,7 @@ struct twl4030_setup_data {
        unsigned int ramp_delay_value;
        unsigned int sysclk;
        unsigned int offset_cncl_path;
+       unsigned int check_defaults:1;
        unsigned int hs_extmute:1;
        void (*set_hs_extmute)(int mute);
 };