Skip to content
Snippets Groups Projects
Commit 2c0dc990 authored by Frans Meulenbroeks's avatar Frans Meulenbroeks Committed by Heiko Schocher
Browse files

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: default avatarFrans Meulenbroeks <fransmeulenbroeks@gmail.com>
parent a266fe95
No related branches found
No related tags found
No related merge requests found
...@@ -150,6 +150,29 @@ int __def_i2c_set_bus_speed(unsigned int speed) ...@@ -150,6 +150,29 @@ int __def_i2c_set_bus_speed(unsigned int speed)
int i2c_set_bus_speed(unsigned int) int i2c_set_bus_speed(unsigned int)
__attribute__((weak, alias("__def_i2c_set_bus_speed"))); __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: * Syntax:
* i2c read {i2c_chip} {devaddr}{.0, .1, .2} {len} {memaddr} * 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[]) ...@@ -160,7 +183,6 @@ static int do_i2c_read ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
u_char chip; u_char chip;
uint devaddr, alen, length; uint devaddr, alen, length;
u_char *memaddr; u_char *memaddr;
int j;
if (argc != 5) { if (argc != 5) {
cmd_usage(cmdtp); cmd_usage(cmdtp);
...@@ -177,17 +199,10 @@ static int do_i2c_read ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -177,17 +199,10 @@ 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 :-). * 2 bytes long. Some day it might be 3 bytes long :-).
*/ */
devaddr = simple_strtoul(argv[2], NULL, 16); devaddr = simple_strtoul(argv[2], NULL, 16);
alen = 1; alen = get_alen(argv[2]);
for (j = 0; j < 8; j++) { if (alen == 0) {
if (argv[2][j] == '.') { cmd_usage(cmdtp);
alen = argv[2][j+1] - '0'; return 1;
if (alen > 3) {
cmd_usage(cmdtp);
return 1;
}
break;
} else if (argv[2][j] == '\0')
break;
} }
/* /*
...@@ -234,7 +249,6 @@ static int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -234,7 +249,6 @@ static int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
/* /*
* New command specified. * New command specified.
*/ */
alen = 1;
/* /*
* I2C chip address * I2C chip address
...@@ -246,17 +260,10 @@ static int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -246,17 +260,10 @@ 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 :-). * 2 bytes long. Some day it might be 3 bytes long :-).
*/ */
addr = simple_strtoul(argv[2], NULL, 16); addr = simple_strtoul(argv[2], NULL, 16);
alen = 1; alen = get_alen(argv[2]);
for (j = 0; j < 8; j++) { if (alen == 0) {
if (argv[2][j] == '.') { cmd_usage(cmdtp);
alen = argv[2][j+1] - '0'; return 1;
if (alen > 3) {
cmd_usage(cmdtp);
return 1;
}
break;
} else if (argv[2][j] == '\0')
break;
} }
/* /*
...@@ -324,7 +331,6 @@ static int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -324,7 +331,6 @@ static int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
uint alen; uint alen;
uchar byte; uchar byte;
int count; int count;
int j;
if ((argc < 4) || (argc > 5)) { if ((argc < 4) || (argc > 5)) {
cmd_usage(cmdtp); cmd_usage(cmdtp);
...@@ -340,17 +346,10 @@ static int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -340,17 +346,10 @@ static int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
* Address is always specified. * Address is always specified.
*/ */
addr = simple_strtoul(argv[2], NULL, 16); addr = simple_strtoul(argv[2], NULL, 16);
alen = 1; alen = get_alen(argv[2]);
for (j = 0; j < 8; j++) { if (alen == 0) {
if (argv[2][j] == '.') { cmd_usage(cmdtp);
alen = argv[2][j+1] - '0'; return 1;
if (alen > 3) {
cmd_usage(cmdtp);
return 1;
}
break;
} else if (argv[2][j] == '\0')
break;
} }
/* /*
...@@ -398,7 +397,6 @@ static int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -398,7 +397,6 @@ static int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
uchar byte; uchar byte;
ulong crc; ulong crc;
ulong err; ulong err;
int j;
if (argc < 4) { if (argc < 4) {
cmd_usage(cmdtp); cmd_usage(cmdtp);
...@@ -414,17 +412,10 @@ static int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -414,17 +412,10 @@ static int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
* Address is always specified. * Address is always specified.
*/ */
addr = simple_strtoul(argv[2], NULL, 16); addr = simple_strtoul(argv[2], NULL, 16);
alen = 1; alen = get_alen(argv[2]);
for (j = 0; j < 8; j++) { if (alen == 0) {
if (argv[2][j] == '.') { cmd_usage(cmdtp);
alen = argv[2][j+1] - '0'; return 1;
if (alen > 3) {
cmd_usage(cmdtp);
return 1;
}
break;
} else if (argv[2][j] == '\0')
break;
} }
/* /*
...@@ -469,7 +460,6 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[]) ...@@ -469,7 +460,6 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
ulong data; ulong data;
int size = 1; int size = 1;
int nbytes; int nbytes;
int j;
extern char console_buffer[]; extern char console_buffer[];
if (argc != 3) { if (argc != 3) {
...@@ -504,17 +494,10 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[]) ...@@ -504,17 +494,10 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
* Address is always specified. * Address is always specified.
*/ */
addr = simple_strtoul(argv[2], NULL, 16); addr = simple_strtoul(argv[2], NULL, 16);
alen = 1; alen = get_alen(argv[2]);
for (j = 0; j < 8; j++) { if (alen == 0) {
if (argv[2][j] == '.') { cmd_usage(cmdtp);
alen = argv[2][j+1] - '0'; return 1;
if (alen > 3) {
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[]) ...@@ -644,7 +627,6 @@ static int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
uint length; uint length;
u_char bytes[16]; u_char bytes[16];
int delay; int delay;
int j;
if (argc < 3) { if (argc < 3) {
cmd_usage(cmdtp); cmd_usage(cmdtp);
...@@ -660,17 +642,10 @@ static int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -660,17 +642,10 @@ static int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
* Address is always specified. * Address is always specified.
*/ */
addr = simple_strtoul(argv[2], NULL, 16); addr = simple_strtoul(argv[2], NULL, 16);
alen = 1; alen = get_alen(argv[2]);
for (j = 0; j < 8; j++) { if (alen == 0) {
if (argv[2][j] == '.') { cmd_usage(cmdtp);
alen = argv[2][j+1] - '0'; return 1;
if (alen > 3) {
cmd_usage(cmdtp);
return 1;
}
break;
} else if (argv[2][j] == '\0')
break;
} }
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment