]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_i2c.c
Merge branch 'master' of git://git.denx.de/u-boot-imx
[karo-tx-uboot.git] / common / cmd_i2c.c
index 371e022f79e90ed450d1ec09d65e11e99efefcf9..0a0cfceb45ca6d7e424655dec811a6540355df31 100644 (file)
@@ -152,7 +152,7 @@ int i2c_set_bus_speed(unsigned int)
 
 /*
  * get_alen: small parser helper function to get address length
- * returns the address length,or 0 on error
+ * returns the address length
  */
 static uint get_alen(char *arg)
 {
@@ -163,9 +163,6 @@ static uint get_alen(char *arg)
        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;
@@ -198,7 +195,7 @@ static int do_i2c_read ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
         */
        devaddr = simple_strtoul(argv[2], NULL, 16);
        alen = get_alen(argv[2]);
-       if (alen == 0)
+       if (alen > 3)
                return cmd_usage(cmdtp);
 
        /*
@@ -255,7 +252,7 @@ static int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
                 */
                addr = simple_strtoul(argv[2], NULL, 16);
                alen = get_alen(argv[2]);
-               if (alen == 0)
+               if (alen > 3)
                        return cmd_usage(cmdtp);
 
                /*
@@ -337,7 +334,7 @@ static int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
         */
        addr = simple_strtoul(argv[2], NULL, 16);
        alen = get_alen(argv[2]);
-       if (alen == 0)
+       if (alen > 3)
                return cmd_usage(cmdtp);
 
        /*
@@ -399,7 +396,7 @@ static int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
         */
        addr = simple_strtoul(argv[2], NULL, 16);
        alen = get_alen(argv[2]);
-       if (alen == 0)
+       if (alen > 3)
                return cmd_usage(cmdtp);
 
        /*
@@ -477,7 +474,7 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const arg
                 */
                addr = simple_strtoul(argv[2], NULL, 16);
                alen = get_alen(argv[2]);
-               if (alen == 0)
+               if (alen > 3)
                        return cmd_usage(cmdtp);
        }
 
@@ -621,7 +618,7 @@ static int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
         */
        addr = simple_strtoul(argv[2], NULL, 16);
        alen = get_alen(argv[2]);
-       if (alen == 0)
+       if (alen > 3)
                return cmd_usage(cmdtp);
 
        /*
@@ -1287,10 +1284,19 @@ static cmd_tbl_t cmd_i2c_sub[] = {
        U_BOOT_CMD_MKENT(speed, 1, 1, do_i2c_bus_speed, "", ""),
 };
 
+#ifndef CONFIG_RELOC_FIXUP_WORKS
+void i2c_reloc(void) {
+       fixup_cmdtable(cmd_i2c_sub, ARRAY_SIZE(cmd_i2c_sub));
+}
+#endif
+
 static int do_i2c(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
 {
        cmd_tbl_t *c;
 
+       if (argc < 2)
+               return cmd_usage(cmdtp);
+
        /* Strip off leading 'i2c' command argument */
        argc--;
        argv++;