diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/cmd_i2c.c | 20 | 
1 files changed, 16 insertions, 4 deletions
| diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c index b59470e7f..82e63e132 100644 --- a/common/cmd_i2c.c +++ b/common/cmd_i2c.c @@ -605,18 +605,28 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const arg  /*   * Syntax: - *	i2c probe {addr}{.0, .1, .2} + *	i2c probe {addr} + * + * Returns zero (success) if one or more I2C devices was found   */  static int do_i2c_probe (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  {  	int j; +	int addr = -1; +	int found = 0;  #if defined(CONFIG_SYS_I2C_NOPROBES)  	int k, skip;  	uchar bus = GET_BUS_NUM;  #endif	/* NOPROBES */ +	if (argc == 2) +		addr = simple_strtol(argv[1], 0, 16); +  	puts ("Valid chip addresses:");  	for (j = 0; j < 128; j++) { +		if ((0 <= addr) && (j != addr)) +			continue; +  #if defined(CONFIG_SYS_I2C_NOPROBES)  		skip = 0;  		for (k=0; k < NUM_ELEMENTS_NOPROBE; k++) { @@ -628,8 +638,10 @@ static int do_i2c_probe (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv  		if (skip)  			continue;  #endif -		if (i2c_probe(j) == 0) +		if (i2c_probe(j) == 0) {  			printf(" %02X", j); +			found++; +		}  	}  	putc ('\n'); @@ -642,7 +654,7 @@ static int do_i2c_probe (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv  	putc ('\n');  #endif -	return 0; +	return (0 == found);  }  /* @@ -1380,7 +1392,7 @@ U_BOOT_CMD(  	"i2c mm chip address[.0, .1, .2] - write to I2C device (auto-incrementing)\n"  	"i2c mw chip address[.0, .1, .2] value [count] - write to I2C device (fill)\n"  	"i2c nm chip address[.0, .1, .2] - write to I2C device (constant address)\n" -	"i2c probe - show devices on the I2C bus\n" +	"i2c probe [address] - test for and show device(s) on the I2C bus\n"  	"i2c read chip address[.0, .1, .2] length memaddress - read to memory \n"  	"i2c write memaddress chip address[.0, .1, .2] length - write memory to i2c\n"  	"i2c reset - re-init the I2C Controller\n" |