From 63f0b5ec3a773e55c6565483a3da959cf935f231 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Sun, 24 Nov 2002 11:47:24 +0000 Subject: Removed a potential I2C deadlock git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2879 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/mas.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'firmware') 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) /* 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; } -- cgit v1.2.3