ASoC: adau1701: move firmware download to adau1701_reset()
authorDaniel Mack <zonque@gmail.com>
Mon, 24 Jun 2013 14:31:29 +0000 (16:31 +0200)
committerMark Brown <broonie@linaro.org>
Tue, 25 Jun 2013 09:32:03 +0000 (10:32 +0100)
The chip needs a new download after each reset, so the code to do that
needs to live in adau1701_reset().

Signed-off-by: Daniel Mack <zonque@gmail.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/codecs/adau1701.c

index b6b1a773bd374abcc35080b7ed58b17ce9635563..997fc3b881feeb93bd7efe4c8e70809649e50b9a 100644 (file)
@@ -184,27 +184,20 @@ static unsigned int adau1701_read(struct snd_soc_codec *codec, unsigned int reg)
        return value;
 }
 
-static void adau1701_reset(struct snd_soc_codec *codec)
+static int adau1701_reset(struct snd_soc_codec *codec)
 {
        struct adau1701 *adau1701 = snd_soc_codec_get_drvdata(codec);
-
-       if (!gpio_is_valid(adau1701->gpio_nreset))
-               return;
-
-       gpio_set_value(adau1701->gpio_nreset, 0);
-       /* minimum reset time is 20ns */
-       udelay(1);
-       gpio_set_value(adau1701->gpio_nreset, 1);
-       /* power-up time may be as long as 85ms */
-       mdelay(85);
-}
-
-static int adau1701_init(struct snd_soc_codec *codec)
-{
-       int ret;
        struct i2c_client *client = to_i2c_client(codec->dev);
+       int ret;
 
-       adau1701_reset(codec);
+       if (gpio_is_valid(adau1701->gpio_nreset)) {
+               gpio_set_value(adau1701->gpio_nreset, 0);
+               /* minimum reset time is 20ns */
+               udelay(1);
+               gpio_set_value(adau1701->gpio_nreset, 1);
+               /* power-up time may be as long as 85ms */
+               mdelay(85);
+       }
 
        ret = process_sigma_firmware(client, ADAU1701_FIRMWARE);
        if (ret) {
@@ -213,6 +206,7 @@ static int adau1701_init(struct snd_soc_codec *codec)
        }
 
        snd_soc_write(codec, ADAU1701_DACSET, ADAU1701_DACSET_DACINIT);
+       snd_soc_write(codec, ADAU1701_DSPCTRL, ADAU1701_DSPCTRL_CR);
 
        return 0;
 }
@@ -498,12 +492,10 @@ static int adau1701_probe(struct snd_soc_codec *codec)
 
        codec->control_data = to_i2c_client(codec->dev);
 
-       ret = adau1701_init(codec);
+       ret = adau1701_reset(codec);
        if (ret)
                return ret;
 
-       snd_soc_write(codec, ADAU1701_DSPCTRL, ADAU1701_DSPCTRL_CR);
-
        return 0;
 }