* Use 1-byte-read instead of -write for iprobe() function

Add i2c commands to PM826 config

* extend I2C POST code: check for list on known addresses
This commit is contained in:
wdenk
2002-12-17 01:51:00 +00:00
parent 228f29ac6e
commit 6aff3115b9
17 changed files with 1062 additions and 53 deletions

View File

@@ -29,8 +29,13 @@
* I2C test
*
* For verifying the I2C bus, a full I2C bus scanning is performed.
* If any I2C device is found, the test is considered as passed,
* otherwise failed.
*
* #ifdef I2C_ADDR_LIST
* The test is considered as passed if all the devices and
* only the devices in the list are found.
* #else [ ! I2C_ADDR_LIST ]
* The test is considered as passed if any I2C device is found.
* #endif
*/
#include <post.h>
@@ -41,14 +46,48 @@
int i2c_post_test (int flags)
{
unsigned int i;
unsigned int chips = 0;
unsigned int good = 0;
#ifdef I2C_ADDR_LIST
unsigned int bad = 0;
int j;
unsigned char i2c_addr_list[] = I2C_ADDR_LIST;
unsigned char i2c_miss_list[] = I2C_ADDR_LIST;
#endif
for (i = 0; i < 128; i++) {
if (i2c_probe (i) == 0)
chips++;
if (i2c_probe (i) == 0) {
#ifndef I2C_ADDR_LIST
good++;
#else /* I2C_ADDR_LIST */
for (j=0; j<sizeof(i2c_addr_list); ++j) {
if (i == i2c_addr_list[j]) {
good++;
i2c_miss_list[j] = 0xFF;
break;
}
}
if (j == sizeof(i2c_addr_list)) {
bad++;
post_log ("I2C: addr %02X not expected\n",
i);
}
#endif /* I2C_ADDR_LIST */
}
}
return chips > 0 ? 0 : -1;
#ifndef I2C_ADDR_LIST
return good > 0 ? 0 : -1;
#else /* I2C_ADDR_LIST */
if (good != sizeof(i2c_addr_list)) {
for (j=0; j<sizeof(i2c_miss_list); ++j) {
if (i2c_miss_list[j] != 0xFF) {
post_log ("I2C: addr %02X did not respond\n",
i2c_miss_list[j]);
}
}
}
return ((good == sizeof(i2c_addr_list)) && (bad == 0)) ? 0 : -1;
#endif
}
#endif /* CONFIG_POST & CFG_POST_I2C */