[U-Boot] RFC: factor out common i2c code

Frans Meulenbroeks fransmeulenbroeks at gmail.com
Mon Mar 22 22:18:20 CET 2010


In cmd_i2c the following snippet of code appears 6 times so it would
be a good candidate to factor out into a static helper function:

        /*
         * I2C chip address
         */
        chip = simple_strtoul(argv[1], NULL, 16);

        /*
         * I2C data address within the chip.  This can be 1 or
         * 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) {
                                cmd_usage(cmdtp);
                                return 1;
                        }
                        break;
                } else if (argv[2][j] == '\0')
                        break;
        }

Now before I actually start doing that a few questions.
Should I factor out all lines and create a helper function with three
pointer arguments to contain the return values chip, devaddr and alen
(apart from argv and cmdptp which are input parameters).

Or would it be better to only factor out only the alen code and have a
function like:
int get_alen(char *str, cmd_tbl_t *cmdtp)
{
    int alen, j;
        alen = 1;
        for (j = 0; j < 8; j++) {
                if str[j] == '.') {
                        alen = str[j+1] - '0';
                        if (alen > 3) {
                                cmd_usage(cmdtp);
                                return -1;
                        }
                        break;
                } else if (str[j] == '\0')
                        break;
       return alen;
}

and call it by something like

   alen = get_alen(argv[2]);
   if (alen < 0) return alen; /* or return -1 */

Your opinion on the preferred solution is appreciated (and ofc keeping
the current code is also an option).

Frans


More information about the U-Boot mailing list