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 | |
| parent | c833a816d8ca98c4d44578da7f9a467fc0c1e8a8 (diff) | |
| download | rockbox-63f0b5ec3a773e55c6565483a3da959cf935f231.zip rockbox-63f0b5ec3a773e55c6565483a3da959cf935f231.tar.gz rockbox-63f0b5ec3a773e55c6565483a3da959cf935f231.tar.bz2 rockbox-63f0b5ec3a773e55c6565483a3da959cf935f231.tar.xz | |
Removed a potential I2C deadlock
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2879 a1c6a512-1295-4272-9138-f99709370657
| -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 ec4de76..e5967fe 100644 --- a/firmware/drivers/mas.c +++ b/firmware/drivers/mas.c @@ -380,32 +380,34 @@ int mas_codec_readreg(int reg) /* send read command */ if (i2c_write(MAS_DEV_WRITE,buf,3)) { - return -1; + ret = -1; } - - i2c_start(); - i2c_outb(MAS_DEV_WRITE); - if (i2c_getack()) { - i2c_outb(MAS_CODEC_READ); + else + { + i2c_start(); + i2c_outb(MAS_DEV_WRITE); if (i2c_getack()) { - i2c_start(); - i2c_outb(MAS_DEV_READ); + i2c_outb(MAS_CODEC_READ); if (i2c_getack()) { - tmp[0] = i2c_inb(0); - tmp[1] = i2c_inb(1); /* NAK the last byte */ - ret = (tmp[0] << 8) | tmp[1]; + i2c_start(); + i2c_outb(MAS_DEV_READ); + if (i2c_getack()) { + tmp[0] = i2c_inb(0); + tmp[1] = i2c_inb(1); /* NAK the last byte */ + ret = (tmp[0] << 8) | tmp[1]; + } + else + ret = -4; } else ret = -3; } else ret = -2; + + i2c_stop(); } - else - ret = -1; - i2c_stop(); - i2c_end(); return ret; } |