[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