diff options
Diffstat (limited to 'sound/soc/codecs/ad1980.c')
| -rw-r--r-- | sound/soc/codecs/ad1980.c | 43 | 
1 files changed, 21 insertions, 22 deletions
diff --git a/sound/soc/codecs/ad1980.c b/sound/soc/codecs/ad1980.c index 7257a8885f4..304d3003339 100644 --- a/sound/soc/codecs/ad1980.c +++ b/sound/soc/codecs/ad1980.c @@ -57,8 +57,8 @@ static const u16 ad1980_reg[] = {  static const char *ad1980_rec_sel[] = {"Mic", "CD", "NC", "AUX", "Line",  		"Stereo Mix", "Mono Mix", "Phone"}; -static const struct soc_enum ad1980_cap_src = -	SOC_ENUM_DOUBLE(AC97_REC_SEL, 8, 0, 7, ad1980_rec_sel); +static SOC_ENUM_DOUBLE_DECL(ad1980_cap_src, +			    AC97_REC_SEL, 8, 0, ad1980_rec_sel);  static const struct snd_kcontrol_new ad1980_snd_ac97_controls[] = {  SOC_DOUBLE("Master Playback Volume", AC97_MASTER, 8, 0, 31, 1), @@ -189,28 +189,27 @@ static struct snd_soc_dai_driver ad1980_dai = {  static int ad1980_reset(struct snd_soc_codec *codec, int try_warm)  { -	u16 retry_cnt = 0; +	unsigned int retry_cnt = 0; -retry: -	if (try_warm && soc_ac97_ops->warm_reset) { -		soc_ac97_ops->warm_reset(codec->ac97); -		if (ac97_read(codec, AC97_RESET) == 0x0090) -			return 1; -	} - -	soc_ac97_ops->reset(codec->ac97); -	/* Set bit 16slot in register 74h, then every slot will has only 16 -	 * bits. This command is sent out in 20bit mode, in which case the -	 * first nibble of data is eaten by the addr. (Tag is always 16 bit)*/ -	ac97_write(codec, AC97_AD_SERIAL_CFG, 0x9900); - -	if (ac97_read(codec, AC97_RESET)  != 0x0090) -		goto err; -	return 0; +	do { +		if (try_warm && soc_ac97_ops->warm_reset) { +			soc_ac97_ops->warm_reset(codec->ac97); +			if (ac97_read(codec, AC97_RESET) == 0x0090) +				return 1; +		} -err: -	while (retry_cnt++ < 10) -		goto retry; +		soc_ac97_ops->reset(codec->ac97); +		/* +		 * Set bit 16slot in register 74h, then every slot will has only +		 * 16 bits. This command is sent out in 20bit mode, in which +		 * case the first nibble of data is eaten by the addr. (Tag is +		 * always 16 bit) +		 */ +		ac97_write(codec, AC97_AD_SERIAL_CFG, 0x9900); + +		if (ac97_read(codec, AC97_RESET)  == 0x0090) +			return 0; +	} while (retry_cnt++ < 10);  	printk(KERN_ERR "AD1980 AC97 reset failed\n");  	return -EIO;  | 
