summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Russ <graeme.russ@gmail.com>2011-08-29 02:14:05 +0000
committerWolfgang Denk <wd@denx.de>2011-10-01 21:54:49 +0200
commite3e454cd72f319908355427b1a3ae54b3dd53356 (patch)
treeb461a0dc8287aa0c7d3e3eab525cd4f76c27481a
parent79df1208ee6984aa63468673c042667d121bb0bc (diff)
console: Squelch pre-console output in console functions
There are some locations in the code which anticipate printf() being called before the console is ready by squelching printf() on gd->have_console. Move this squelching into printf(), vprintf(), puts() and putc(). Also make tstc() and getc() return 0 if console is not yet initialised Signed-off-by: Graeme Russ <graeme.russ@gmail.com> Tested-by: Simon Glass <sjg@chromium.org>
-rw-r--r--arch/powerpc/cpu/mpc5xxx/i2c.c30
-rw-r--r--arch/powerpc/cpu/mpc8xx/i2c.c18
-rw-r--r--common/console.c18
-rw-r--r--drivers/i2c/ppc4xx_i2c.c5
-rw-r--r--drivers/i2c/soft_i2c.c1
5 files changed, 35 insertions, 37 deletions
diff --git a/arch/powerpc/cpu/mpc5xxx/i2c.c b/arch/powerpc/cpu/mpc5xxx/i2c.c
index 9fb330f82f..f9d293b7ce 100644
--- a/arch/powerpc/cpu/mpc5xxx/i2c.c
+++ b/arch/powerpc/cpu/mpc5xxx/i2c.c
@@ -332,8 +332,7 @@ static int mpc_get_fdr(int speed)
if (gd->flags & GD_FLG_RELOC) {
fdr = divider;
} else {
- if (gd->have_console)
- printf("%ld kHz, ", best_speed / 1000);
+ printf("%ld kHz, ", best_speed / 1000);
return divider;
}
}
@@ -374,34 +373,29 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len)
xaddr[3] = addr & 0xFF;
if (wait_for_bb()) {
- if (gd->have_console)
- printf("i2c_read: bus is busy\n");
+ printf("i2c_read: bus is busy\n");
goto Done;
}
mpc_reg_out(&regs->mcr, I2C_STA, I2C_STA);
if (do_address(chip, 0)) {
- if (gd->have_console)
- printf("i2c_read: failed to address chip\n");
+ printf("i2c_read: failed to address chip\n");
goto Done;
}
if (send_bytes(chip, &xaddr[4-alen], alen)) {
- if (gd->have_console)
- printf("i2c_read: send_bytes failed\n");
+ printf("i2c_read: send_bytes failed\n");
goto Done;
}
mpc_reg_out(&regs->mcr, I2C_RSTA, I2C_RSTA);
if (do_address(chip, 1)) {
- if (gd->have_console)
- printf("i2c_read: failed to address chip\n");
+ printf("i2c_read: failed to address chip\n");
goto Done;
}
if (receive_bytes(chip, (char *)buf, len)) {
- if (gd->have_console)
- printf("i2c_read: receive_bytes failed\n");
+ printf("i2c_read: receive_bytes failed\n");
goto Done;
}
@@ -423,27 +417,23 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len)
xaddr[3] = addr & 0xFF;
if (wait_for_bb()) {
- if (gd->have_console)
- printf("i2c_write: bus is busy\n");
+ printf("i2c_write: bus is busy\n");
goto Done;
}
mpc_reg_out(&regs->mcr, I2C_STA, I2C_STA);
if (do_address(chip, 0)) {
- if (gd->have_console)
- printf("i2c_write: failed to address chip\n");
+ printf("i2c_write: failed to address chip\n");
goto Done;
}
if (send_bytes(chip, &xaddr[4-alen], alen)) {
- if (gd->have_console)
- printf("i2c_write: send_bytes failed\n");
+ printf("i2c_write: send_bytes failed\n");
goto Done;
}
if (send_bytes(chip, (char *)buf, len)) {
- if (gd->have_console)
- printf("i2c_write: send_bytes failed\n");
+ printf("i2c_write: send_bytes failed\n");
goto Done;
}
diff --git a/arch/powerpc/cpu/mpc8xx/i2c.c b/arch/powerpc/cpu/mpc8xx/i2c.c
index 338cababe8..1ca51fddef 100644
--- a/arch/powerpc/cpu/mpc8xx/i2c.c
+++ b/arch/powerpc/cpu/mpc8xx/i2c.c
@@ -633,22 +633,19 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
rc = i2c_send(&state, chip, 0, I2CF_START_COND, alen, &xaddr[4-alen]);
if (rc != 0) {
- if (gd->have_console)
- printf("i2c_read: i2c_send failed (%d)\n", rc);
+ printf("i2c_read: i2c_send failed (%d)\n", rc);
return 1;
}
rc = i2c_receive(&state, chip, 0, I2CF_STOP_COND, len, buffer);
if (rc != 0) {
- if (gd->have_console)
- printf("i2c_read: i2c_receive failed (%d)\n", rc);
+ printf("i2c_read: i2c_receive failed (%d)\n", rc);
return 1;
}
rc = i2c_doio(&state);
if (rc != 0) {
- if (gd->have_console)
- printf("i2c_read: i2c_doio failed (%d)\n", rc);
+ printf("i2c_read: i2c_doio failed (%d)\n", rc);
return 1;
}
return 0;
@@ -683,22 +680,19 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
rc = i2c_send(&state, chip, 0, I2CF_START_COND, alen, &xaddr[4-alen]);
if (rc != 0) {
- if (gd->have_console)
- printf("i2c_write: first i2c_send failed (%d)\n", rc);
+ printf("i2c_write: first i2c_send failed (%d)\n", rc);
return 1;
}
rc = i2c_send(&state, 0, 0, I2CF_STOP_COND, len, buffer);
if (rc != 0) {
- if (gd->have_console)
- printf("i2c_write: second i2c_send failed (%d)\n", rc);
+ printf("i2c_write: second i2c_send failed (%d)\n", rc);
return 1;
}
rc = i2c_doio(&state);
if (rc != 0) {
- if (gd->have_console)
- printf("i2c_write: i2c_doio failed (%d)\n", rc);
+ printf("i2c_write: i2c_doio failed (%d)\n", rc);
return 1;
}
return 0;
diff --git a/common/console.c b/common/console.c
index 8c650e05e1..b23d933d2c 100644
--- a/common/console.c
+++ b/common/console.c
@@ -298,6 +298,9 @@ int getc(void)
return 0;
#endif
+ if (!gd->have_console)
+ return 0;
+
if (gd->flags & GD_FLG_DEVINIT) {
/* Get from the standard input */
return fgetc(stdin);
@@ -314,6 +317,9 @@ int tstc(void)
return 0;
#endif
+ if (!gd->have_console)
+ return 0;
+
if (gd->flags & GD_FLG_DEVINIT) {
/* Test the standard input */
return ftstc(stdin);
@@ -335,6 +341,9 @@ void putc(const char c)
return;
#endif
+ if (!gd->have_console)
+ return;
+
if (gd->flags & GD_FLG_DEVINIT) {
/* Send to the standard output */
fputc(stdout, c);
@@ -356,6 +365,9 @@ void puts(const char *s)
return;
#endif
+ if (!gd->have_console)
+ return;
+
if (gd->flags & GD_FLG_DEVINIT) {
/* Send to the standard output */
fputs(stdout, s);
@@ -371,6 +383,9 @@ int printf(const char *fmt, ...)
uint i;
char printbuffer[CONFIG_SYS_PBSIZE];
+ if (!gd->have_console)
+ return 0;
+
va_start(args, fmt);
/* For this to work, printbuffer must be larger than
@@ -389,6 +404,9 @@ int vprintf(const char *fmt, va_list args)
uint i;
char printbuffer[CONFIG_SYS_PBSIZE];
+ if (!gd->have_console)
+ return 0;
+
/* For this to work, printbuffer must be larger than
* anything we ever want to print.
*/
diff --git a/drivers/i2c/ppc4xx_i2c.c b/drivers/i2c/ppc4xx_i2c.c
index c1cbe55bb9..53fedd594c 100644
--- a/drivers/i2c/ppc4xx_i2c.c
+++ b/drivers/i2c/ppc4xx_i2c.c
@@ -396,10 +396,7 @@ static int ppc4xx_i2c_transfer(uchar chip, uint addr, int alen, uchar *buffer,
#endif
if ((ret = i2c_transfer(read, chip << 1, &xaddr[4 - alen], alen,
buffer, len)) != 0) {
- if (gd->have_console) {
- printf("I2C %s: failed %d\n",
- read ? "read" : "write", ret);
- }
+ printf("I2C %s: failed %d\n", read ? "read" : "write", ret);
return 1;
}
diff --git a/drivers/i2c/soft_i2c.c b/drivers/i2c/soft_i2c.c
index 9b02e89e03..36c6114e3c 100644
--- a/drivers/i2c/soft_i2c.c
+++ b/drivers/i2c/soft_i2c.c
@@ -119,7 +119,6 @@ DECLARE_GLOBAL_DATA_PTR;
#ifdef DEBUG_I2C
#define PRINTD(fmt,args...) do { \
- if (gd->have_console) \
printf (fmt ,##args); \
} while (0)
#else