[alsa-devel] [PATCH v4 1/4] ASoC: codecs: adau1701: move firmware download to adau1701_reset()
Lars-Peter Clausen
lars at metafoo.de
Mon Jun 24 19:12:35 CEST 2013
On 06/24/2013 04:31 PM, Daniel Mack wrote:
> 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 at gmail.com>
Acked-by: Lars-Peter Clausen <lars at metafoo.de>
> ---
> sound/soc/codecs/adau1701.c | 32 ++++++++++++--------------------
> 1 file changed, 12 insertions(+), 20 deletions(-)
>
> diff --git a/sound/soc/codecs/adau1701.c b/sound/soc/codecs/adau1701.c
> index b6b1a77..997fc3b 100644
> --- a/sound/soc/codecs/adau1701.c
> +++ b/sound/soc/codecs/adau1701.c
> @@ -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;
> }
>
More information about the Alsa-devel
mailing list