@@ -200,7 +200,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
200
200
u8 * value )
201
201
{
202
202
struct tlv320dac33_priv * dac33 = snd_soc_codec_get_drvdata (codec );
203
- int val ;
203
+ int val , ret = 0 ;
204
204
205
205
* value = reg & 0xff ;
206
206
@@ -210,6 +210,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
210
210
if (val < 0 ) {
211
211
dev_err (codec -> dev , "Read failed (%d)\n" , val );
212
212
value [0 ] = dac33_read_reg_cache (codec , reg );
213
+ ret = val ;
213
214
} else {
214
215
value [0 ] = val ;
215
216
dac33_write_reg_cache (codec , reg , val );
@@ -218,7 +219,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
218
219
value [0 ] = dac33_read_reg_cache (codec , reg );
219
220
}
220
221
221
- return 0 ;
222
+ return ret ;
222
223
}
223
224
224
225
static int dac33_write (struct snd_soc_codec * codec , unsigned int reg ,
@@ -329,13 +330,18 @@ static void dac33_init_chip(struct snd_soc_codec *codec)
329
330
dac33_read_reg_cache (codec , DAC33_LINER_TO_RLO_VOL ));
330
331
}
331
332
332
- static inline void dac33_read_id (struct snd_soc_codec * codec )
333
+ static inline int dac33_read_id (struct snd_soc_codec * codec )
333
334
{
335
+ int i , ret = 0 ;
334
336
u8 reg ;
335
337
336
- dac33_read (codec , DAC33_DEVICE_ID_MSB , & reg );
337
- dac33_read (codec , DAC33_DEVICE_ID_LSB , & reg );
338
- dac33_read (codec , DAC33_DEVICE_REV_ID , & reg );
338
+ for (i = 0 ; i < 3 ; i ++ ) {
339
+ ret = dac33_read (codec , DAC33_DEVICE_ID_MSB + i , & reg );
340
+ if (ret < 0 )
341
+ break ;
342
+ }
343
+
344
+ return ret ;
339
345
}
340
346
341
347
static inline void dac33_soft_power (struct snd_soc_codec * codec , int power )
@@ -1414,9 +1420,15 @@ static int dac33_soc_probe(struct snd_soc_codec *codec)
1414
1420
dev_err (codec -> dev , "Failed to power up codec: %d\n" , ret );
1415
1421
goto err_power ;
1416
1422
}
1417
- dac33_read_id (codec );
1423
+ ret = dac33_read_id (codec );
1418
1424
dac33_hard_power (codec , 0 );
1419
1425
1426
+ if (ret < 0 ) {
1427
+ dev_err (codec -> dev , "Failed to read chip ID: %d\n" , ret );
1428
+ ret = - ENODEV ;
1429
+ goto err_power ;
1430
+ }
1431
+
1420
1432
/* Check if the IRQ number is valid and request it */
1421
1433
if (dac33 -> irq >= 0 ) {
1422
1434
ret = request_irq (dac33 -> irq , dac33_interrupt_handler ,
0 commit comments