post/i2c: Clean up detection logic

The logic previously used in the I2C post was a bit convoluted.

Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
Acked-by: Heiko Schocher <hs@denx.de>
Acked-by: Wolfgang Denk <wd@denx.de>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
master
Peter Tyser 14 years ago committed by Kumar Gala
parent b9b1bc8542
commit 7e263cea88
  1. 29
      post/drivers/i2c.c

@ -51,38 +51,35 @@ int i2c_post_test (int flags)
/* No devices found */ /* No devices found */
return -1; return -1;
#else #else
unsigned int good = 0; unsigned int ret = 0;
unsigned int bad = 0;
int j; int j;
unsigned char i2c_addr_list[] = I2C_ADDR_LIST; const unsigned char i2c_addr_list[] = I2C_ADDR_LIST;
unsigned char i2c_miss_list[] = I2C_ADDR_LIST;
for (i = 0; i < 128; i++) { for (i = 0; i < 128; i++) {
if (i2c_probe(i) != 0) if (i2c_probe(i) != 0)
continue; continue;
for (j = 0; j < sizeof(i2c_addr_list); ++j) { for (j = 0; j < sizeof(i2c_addr_list); ++j) {
if (i == i2c_addr_list[j]) { if (i == i2c_addr_list[j]) {
good++; i2c_addr_list[j] = 0xff;
i2c_miss_list[j] = 0xFF;
break; break;
} }
} }
if (j == sizeof(i2c_addr_list)) { if (j == sizeof(i2c_addr_list)) {
bad++; ret = -1;
post_log("I2C: addr %02X not expected\n", i); post_log("I2C: addr %02x not expected\n", i);
} }
} }
if (good != sizeof(i2c_addr_list)) { for (i = 0; i < sizeof(i2c_addr_list); ++i) {
for (j = 0; j < sizeof(i2c_miss_list); ++j) { if (i2c_addr_list[i] == 0xff)
if (i2c_miss_list[j] != 0xFF) { continue;
post_log("I2C: addr %02X did not respond\n", post_log("I2C: addr %02x did not respond\n", i2c_addr_list[i]);
i2c_miss_list[j]); ret = -1;
}
}
} }
return ((good == sizeof(i2c_addr_list)) && (bad == 0)) ? 0 : -1;
return ret;
#endif #endif
} }

Loading…
Cancel
Save