diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2002-11-24 11:47:24 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2002-11-24 11:47:24 +0000 |
commit | 63f0b5ec3a773e55c6565483a3da959cf935f231 (patch) | |
tree | 2423d91df8e48753c05c8a1eb7d4c45c7e2994ee /firmware | |
parent | c833a816d8ca98c4d44578da7f9a467fc0c1e8a8 (diff) | |
download | rockbox-63f0b5ec3a773e55c6565483a3da959cf935f231.tar.gz rockbox-63f0b5ec3a773e55c6565483a3da959cf935f231.zip |
Removed a potential I2C deadlock
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2879 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/drivers/mas.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/firmware/drivers/mas.c b/firmware/drivers/mas.c index ec4de76a84..e5967fe5f0 100644 --- a/firmware/drivers/mas.c +++ b/firmware/drivers/mas.c | |||
@@ -380,32 +380,34 @@ int mas_codec_readreg(int reg) | |||
380 | /* send read command */ | 380 | /* send read command */ |
381 | if (i2c_write(MAS_DEV_WRITE,buf,3)) | 381 | if (i2c_write(MAS_DEV_WRITE,buf,3)) |
382 | { | 382 | { |
383 | return -1; | 383 | ret = -1; |
384 | } | 384 | } |
385 | 385 | else | |
386 | i2c_start(); | 386 | { |
387 | i2c_outb(MAS_DEV_WRITE); | 387 | i2c_start(); |
388 | if (i2c_getack()) { | 388 | i2c_outb(MAS_DEV_WRITE); |
389 | i2c_outb(MAS_CODEC_READ); | ||
390 | if (i2c_getack()) { | 389 | if (i2c_getack()) { |
391 | i2c_start(); | 390 | i2c_outb(MAS_CODEC_READ); |
392 | i2c_outb(MAS_DEV_READ); | ||
393 | if (i2c_getack()) { | 391 | if (i2c_getack()) { |
394 | tmp[0] = i2c_inb(0); | 392 | i2c_start(); |
395 | tmp[1] = i2c_inb(1); /* NAK the last byte */ | 393 | i2c_outb(MAS_DEV_READ); |
396 | ret = (tmp[0] << 8) | tmp[1]; | 394 | if (i2c_getack()) { |
395 | tmp[0] = i2c_inb(0); | ||
396 | tmp[1] = i2c_inb(1); /* NAK the last byte */ | ||
397 | ret = (tmp[0] << 8) | tmp[1]; | ||
398 | } | ||
399 | else | ||
400 | ret = -4; | ||
397 | } | 401 | } |
398 | else | 402 | else |
399 | ret = -3; | 403 | ret = -3; |
400 | } | 404 | } |
401 | else | 405 | else |
402 | ret = -2; | 406 | ret = -2; |
407 | |||
408 | i2c_stop(); | ||
403 | } | 409 | } |
404 | else | ||
405 | ret = -1; | ||
406 | 410 | ||
407 | i2c_stop(); | ||
408 | |||
409 | i2c_end(); | 411 | i2c_end(); |
410 | return ret; | 412 | return ret; |
411 | } | 413 | } |