summaryrefslogtreecommitdiffstats
path: root/commands
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2019-01-25 21:59:34 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2019-01-28 10:01:36 +0100
commitd4c88b90c558d595bec49de933052ad855da5c69 (patch)
tree8595bc69a5a08ea84a14625ed488600b52f90c6a /commands
parent5d966f708a72bd81863dbe9b182929d88f7614fc (diff)
downloadbarebox-d4c88b90c558d595bec49de933052ad855da5c69.tar.gz
i2c_probe: limit slave addresses to [0x04, 0x77]
Adresses below 0x04 and above 0x77 are reserved in the i2c bus specification, so don't probe these addresses unless requested explicitly. Also do more strict boundary checking: - ensure start address is greater or equal to zero; - don't decrease stopaddr after checking it being greater or equal to startaddr. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'commands')
-rw-r--r--commands/i2c.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/commands/i2c.c b/commands/i2c.c
index 2f7f820..65ff737 100644
--- a/commands/i2c.c
+++ b/commands/i2c.c
@@ -44,7 +44,7 @@ static void i2c_probe_range(struct i2c_adapter *adapter, int startaddr, int stop
static int do_i2c_probe(int argc, char *argv[])
{
struct i2c_adapter *adapter = NULL;
- int startaddr = 0, stopaddr = 0x7f;
+ int startaddr = 4, stopaddr = 0x77;
if (argc > 1) {
adapter = i2c_get_adapter(simple_strtoul(argv[1], NULL, 0));
@@ -57,13 +57,15 @@ static int do_i2c_probe(int argc, char *argv[])
if (argc > 3)
stopaddr = simple_strtol(argv[3], NULL, 0);
+ if (stopaddr > 0x7f)
+ stopaddr = 0x7f;
+
+ if (startaddr < 0)
+ startaddr = 0;
if (startaddr > stopaddr)
return COMMAND_ERROR_USAGE;
- if (stopaddr > 0x7F)
- stopaddr = 0x7F;
-
if (adapter) {
i2c_probe_range(adapter, startaddr, stopaddr);
} else {