mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-07 07:11:35 +00:00
dm: i2c: Move error reporting into a common function
Factor out the common code to make it easier to adjust it. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@ti.com> Acked-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
38687ae676
commit
c1a6f371ae
1 changed files with 22 additions and 10 deletions
|
@ -198,6 +198,19 @@ static uint get_alen(char *arg)
|
||||||
return alen;
|
return alen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum i2c_err_op {
|
||||||
|
I2C_ERR_READ,
|
||||||
|
I2C_ERR_WRITE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int i2c_report_err(int ret, enum i2c_err_op op)
|
||||||
|
{
|
||||||
|
printf("Error %s the chip: %d\n",
|
||||||
|
op == I2C_ERR_READ ? "reading" : "writing", ret);
|
||||||
|
|
||||||
|
return CMD_RET_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* do_i2c_read() - Handle the "i2c read" command-line command
|
* do_i2c_read() - Handle the "i2c read" command-line command
|
||||||
* @cmdtp: Command data struct pointer
|
* @cmdtp: Command data struct pointer
|
||||||
|
@ -245,7 +258,7 @@ static int do_i2c_read ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
|
||||||
memaddr = (u_char *)simple_strtoul(argv[4], NULL, 16);
|
memaddr = (u_char *)simple_strtoul(argv[4], NULL, 16);
|
||||||
|
|
||||||
if (i2c_read(chip, devaddr, alen, memaddr, length) != 0) {
|
if (i2c_read(chip, devaddr, alen, memaddr, length) != 0) {
|
||||||
puts ("Error reading the chip.\n");
|
i2c_report_err(-1, I2C_ERR_READ);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -286,8 +299,7 @@ static int do_i2c_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
|
||||||
|
|
||||||
while (length-- > 0) {
|
while (length-- > 0) {
|
||||||
if (i2c_write(chip, devaddr++, alen, memaddr++, 1) != 0) {
|
if (i2c_write(chip, devaddr++, alen, memaddr++, 1) != 0) {
|
||||||
puts("Error writing to the chip.\n");
|
return i2c_report_err(-1, I2C_ERR_WRITE);
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* No write delay with FRAM devices.
|
* No write delay with FRAM devices.
|
||||||
|
@ -370,7 +382,7 @@ static int do_i2c_md ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
|
||||||
linebytes = (nbytes > DISP_LINE_LEN) ? DISP_LINE_LEN : nbytes;
|
linebytes = (nbytes > DISP_LINE_LEN) ? DISP_LINE_LEN : nbytes;
|
||||||
|
|
||||||
if (i2c_read(chip, addr, alen, linebuf, linebytes) != 0)
|
if (i2c_read(chip, addr, alen, linebuf, linebytes) != 0)
|
||||||
puts ("Error reading the chip.\n");
|
i2c_report_err(-1, I2C_ERR_READ);
|
||||||
else {
|
else {
|
||||||
printf("%04x:", addr);
|
printf("%04x:", addr);
|
||||||
cp = linebuf;
|
cp = linebuf;
|
||||||
|
@ -452,7 +464,7 @@ static int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
|
||||||
|
|
||||||
while (count-- > 0) {
|
while (count-- > 0) {
|
||||||
if (i2c_write(chip, addr++, alen, &byte, 1) != 0)
|
if (i2c_write(chip, addr++, alen, &byte, 1) != 0)
|
||||||
puts ("Error writing the chip.\n");
|
i2c_report_err(-1, I2C_ERR_WRITE);
|
||||||
/*
|
/*
|
||||||
* Wait for the write to complete. The write can take
|
* Wait for the write to complete. The write can take
|
||||||
* up to 10mSec (we allow a little more time).
|
* up to 10mSec (we allow a little more time).
|
||||||
|
@ -528,7 +540,7 @@ static int do_i2c_crc (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
|
||||||
addr++;
|
addr++;
|
||||||
}
|
}
|
||||||
if (err > 0)
|
if (err > 0)
|
||||||
puts ("Error reading the chip,\n");
|
i2c_report_err(-1, I2C_ERR_READ);
|
||||||
else
|
else
|
||||||
printf ("%08lx\n", crc);
|
printf ("%08lx\n", crc);
|
||||||
|
|
||||||
|
@ -601,7 +613,7 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const arg
|
||||||
do {
|
do {
|
||||||
printf("%08lx:", addr);
|
printf("%08lx:", addr);
|
||||||
if (i2c_read(chip, addr, alen, (uchar *)&data, size) != 0)
|
if (i2c_read(chip, addr, alen, (uchar *)&data, size) != 0)
|
||||||
puts ("\nError reading the chip,\n");
|
i2c_report_err(-1, I2C_ERR_READ);
|
||||||
else {
|
else {
|
||||||
data = cpu_to_be32(data);
|
data = cpu_to_be32(data);
|
||||||
if (size == 1)
|
if (size == 1)
|
||||||
|
@ -644,7 +656,7 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const arg
|
||||||
*/
|
*/
|
||||||
bootretry_reset_cmd_timeout();
|
bootretry_reset_cmd_timeout();
|
||||||
if (i2c_write(chip, addr, alen, (uchar *)&data, size) != 0)
|
if (i2c_write(chip, addr, alen, (uchar *)&data, size) != 0)
|
||||||
puts ("Error writing the chip.\n");
|
i2c_report_err(-1, I2C_ERR_WRITE);
|
||||||
#ifdef CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS
|
#ifdef CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS
|
||||||
udelay(CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS * 1000);
|
udelay(CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS * 1000);
|
||||||
#endif
|
#endif
|
||||||
|
@ -783,7 +795,7 @@ static int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
|
||||||
*/
|
*/
|
||||||
while (1) {
|
while (1) {
|
||||||
if (i2c_read(chip, addr, alen, bytes, length) != 0)
|
if (i2c_read(chip, addr, alen, bytes, length) != 0)
|
||||||
puts ("Error reading the chip.\n");
|
i2c_report_err(-1, I2C_ERR_READ);
|
||||||
udelay(delay);
|
udelay(delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1341,7 +1353,7 @@ int do_edid(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
|
||||||
|
|
||||||
chip = simple_strtoul(argv[1], NULL, 16);
|
chip = simple_strtoul(argv[1], NULL, 16);
|
||||||
if (i2c_read(chip, 0, 1, (uchar *)&edid, sizeof(edid)) != 0) {
|
if (i2c_read(chip, 0, 1, (uchar *)&edid, sizeof(edid)) != 0) {
|
||||||
puts("Error reading EDID content.\n");
|
i2c_report_err(-1, I2C_ERR_READ);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue