mirror of
https://xff.cz/git/u-boot/
synced 2025-09-02 09:12:08 +02:00
cmd_i2c: introduced get_alen helper function
The code to parse alen appeared 6 times in the function. Factored this out in a small helper function Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
This commit is contained in:
committed by
Heiko Schocher
parent
a266fe955a
commit
2c0dc99020
@@ -150,6 +150,29 @@ int __def_i2c_set_bus_speed(unsigned int speed)
|
||||
int i2c_set_bus_speed(unsigned int)
|
||||
__attribute__((weak, alias("__def_i2c_set_bus_speed")));
|
||||
|
||||
/*
|
||||
* get_alen: small parser helper function to get address length
|
||||
* returns the address length,or 0 on error
|
||||
*/
|
||||
static uint get_alen(char *arg)
|
||||
{
|
||||
int j;
|
||||
int alen;
|
||||
|
||||
alen = 1;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (arg[j] == '.') {
|
||||
alen = arg[j+1] - '0';
|
||||
if (alen > 3) {
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
} else if (arg[j] == '\0')
|
||||
break;
|
||||
}
|
||||
return alen;
|
||||
}
|
||||
|
||||
/*
|
||||
* Syntax:
|
||||
* i2c read {i2c_chip} {devaddr}{.0, .1, .2} {len} {memaddr}
|
||||
@@ -160,7 +183,6 @@ static int do_i2c_read ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
u_char chip;
|
||||
uint devaddr, alen, length;
|
||||
u_char *memaddr;
|
||||
int j;
|
||||
|
||||
if (argc != 5) {
|
||||
cmd_usage(cmdtp);
|
||||
@@ -177,18 +199,11 @@ static int do_i2c_read ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
* 2 bytes long. Some day it might be 3 bytes long :-).
|
||||
*/
|
||||
devaddr = simple_strtoul(argv[2], NULL, 16);
|
||||
alen = 1;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (argv[2][j] == '.') {
|
||||
alen = argv[2][j+1] - '0';
|
||||
if (alen > 3) {
|
||||
alen = get_alen(argv[2]);
|
||||
if (alen == 0) {
|
||||
cmd_usage(cmdtp);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
} else if (argv[2][j] == '\0')
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Length is the number of objects, not number of bytes.
|
||||
@@ -234,7 +249,6 @@ static int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
/*
|
||||
* New command specified.
|
||||
*/
|
||||
alen = 1;
|
||||
|
||||
/*
|
||||
* I2C chip address
|
||||
@@ -246,18 +260,11 @@ static int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
* 2 bytes long. Some day it might be 3 bytes long :-).
|
||||
*/
|
||||
addr = simple_strtoul(argv[2], NULL, 16);
|
||||
alen = 1;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (argv[2][j] == '.') {
|
||||
alen = argv[2][j+1] - '0';
|
||||
if (alen > 3) {
|
||||
alen = get_alen(argv[2]);
|
||||
if (alen == 0) {
|
||||
cmd_usage(cmdtp);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
} else if (argv[2][j] == '\0')
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* If another parameter, it is the length to display.
|
||||
@@ -324,7 +331,6 @@ static int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
uint alen;
|
||||
uchar byte;
|
||||
int count;
|
||||
int j;
|
||||
|
||||
if ((argc < 4) || (argc > 5)) {
|
||||
cmd_usage(cmdtp);
|
||||
@@ -340,18 +346,11 @@ static int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
* Address is always specified.
|
||||
*/
|
||||
addr = simple_strtoul(argv[2], NULL, 16);
|
||||
alen = 1;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (argv[2][j] == '.') {
|
||||
alen = argv[2][j+1] - '0';
|
||||
if (alen > 3) {
|
||||
alen = get_alen(argv[2]);
|
||||
if (alen == 0) {
|
||||
cmd_usage(cmdtp);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
} else if (argv[2][j] == '\0')
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Value to write is always specified.
|
||||
@@ -398,7 +397,6 @@ static int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
uchar byte;
|
||||
ulong crc;
|
||||
ulong err;
|
||||
int j;
|
||||
|
||||
if (argc < 4) {
|
||||
cmd_usage(cmdtp);
|
||||
@@ -414,18 +412,11 @@ static int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
* Address is always specified.
|
||||
*/
|
||||
addr = simple_strtoul(argv[2], NULL, 16);
|
||||
alen = 1;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (argv[2][j] == '.') {
|
||||
alen = argv[2][j+1] - '0';
|
||||
if (alen > 3) {
|
||||
alen = get_alen(argv[2]);
|
||||
if (alen == 0) {
|
||||
cmd_usage(cmdtp);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
} else if (argv[2][j] == '\0')
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Count is always specified
|
||||
@@ -469,7 +460,6 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
|
||||
ulong data;
|
||||
int size = 1;
|
||||
int nbytes;
|
||||
int j;
|
||||
extern char console_buffer[];
|
||||
|
||||
if (argc != 3) {
|
||||
@@ -504,18 +494,11 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
|
||||
* Address is always specified.
|
||||
*/
|
||||
addr = simple_strtoul(argv[2], NULL, 16);
|
||||
alen = 1;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (argv[2][j] == '.') {
|
||||
alen = argv[2][j+1] - '0';
|
||||
if (alen > 3) {
|
||||
alen = get_alen(argv[2]);
|
||||
if (alen == 0) {
|
||||
cmd_usage(cmdtp);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
} else if (argv[2][j] == '\0')
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -644,7 +627,6 @@ static int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
uint length;
|
||||
u_char bytes[16];
|
||||
int delay;
|
||||
int j;
|
||||
|
||||
if (argc < 3) {
|
||||
cmd_usage(cmdtp);
|
||||
@@ -660,18 +642,11 @@ static int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
* Address is always specified.
|
||||
*/
|
||||
addr = simple_strtoul(argv[2], NULL, 16);
|
||||
alen = 1;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (argv[2][j] == '.') {
|
||||
alen = argv[2][j+1] - '0';
|
||||
if (alen > 3) {
|
||||
alen = get_alen(argv[2]);
|
||||
if (alen == 0) {
|
||||
cmd_usage(cmdtp);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
} else if (argv[2][j] == '\0')
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Length is the number of objects, not number of bytes.
|
||||
|
Reference in New Issue
Block a user