diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2019-01-25 21:59:34 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-01-28 10:01:36 +0100 |
commit | d4c88b90c558d595bec49de933052ad855da5c69 (patch) | |
tree | 8595bc69a5a08ea84a14625ed488600b52f90c6a /commands | |
parent | 5d966f708a72bd81863dbe9b182929d88f7614fc (diff) | |
download | barebox-d4c88b90c558d595bec49de933052ad855da5c69.tar.gz barebox-d4c88b90c558d595bec49de933052ad855da5c69.tar.xz |
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.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/commands/i2c.c b/commands/i2c.c index 2f7f820d4d..65ff7378ec 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 { |