diff options
Diffstat (limited to 'sound/soc/codecs/ad1980.c')
-rw-r--r-- | sound/soc/codecs/ad1980.c | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/sound/soc/codecs/ad1980.c b/sound/soc/codecs/ad1980.c index 34d965a4a040..304d3003339a 100644 --- a/sound/soc/codecs/ad1980.c +++ b/sound/soc/codecs/ad1980.c | |||
@@ -189,28 +189,27 @@ static struct snd_soc_dai_driver ad1980_dai = { | |||
189 | 189 | ||
190 | static int ad1980_reset(struct snd_soc_codec *codec, int try_warm) | 190 | static int ad1980_reset(struct snd_soc_codec *codec, int try_warm) |
191 | { | 191 | { |
192 | u16 retry_cnt = 0; | 192 | unsigned int retry_cnt = 0; |
193 | 193 | ||
194 | retry: | 194 | do { |
195 | if (try_warm && soc_ac97_ops->warm_reset) { | 195 | if (try_warm && soc_ac97_ops->warm_reset) { |
196 | soc_ac97_ops->warm_reset(codec->ac97); | 196 | soc_ac97_ops->warm_reset(codec->ac97); |
197 | if (ac97_read(codec, AC97_RESET) == 0x0090) | 197 | if (ac97_read(codec, AC97_RESET) == 0x0090) |
198 | return 1; | 198 | return 1; |
199 | } | 199 | } |
200 | |||
201 | soc_ac97_ops->reset(codec->ac97); | ||
202 | /* Set bit 16slot in register 74h, then every slot will has only 16 | ||
203 | * bits. This command is sent out in 20bit mode, in which case the | ||
204 | * first nibble of data is eaten by the addr. (Tag is always 16 bit)*/ | ||
205 | ac97_write(codec, AC97_AD_SERIAL_CFG, 0x9900); | ||
206 | |||
207 | if (ac97_read(codec, AC97_RESET) != 0x0090) | ||
208 | goto err; | ||
209 | return 0; | ||
210 | 200 | ||
211 | err: | 201 | soc_ac97_ops->reset(codec->ac97); |
212 | while (retry_cnt++ < 10) | 202 | /* |
213 | goto retry; | 203 | * Set bit 16slot in register 74h, then every slot will has only |
204 | * 16 bits. This command is sent out in 20bit mode, in which | ||
205 | * case the first nibble of data is eaten by the addr. (Tag is | ||
206 | * always 16 bit) | ||
207 | */ | ||
208 | ac97_write(codec, AC97_AD_SERIAL_CFG, 0x9900); | ||
209 | |||
210 | if (ac97_read(codec, AC97_RESET) == 0x0090) | ||
211 | return 0; | ||
212 | } while (retry_cnt++ < 10); | ||
214 | 213 | ||
215 | printk(KERN_ERR "AD1980 AC97 reset failed\n"); | 214 | printk(KERN_ERR "AD1980 AC97 reset failed\n"); |
216 | return -EIO; | 215 | return -EIO; |