env: Add a baudrate env handler

Remove the hard-coded baudrate handler and use a callback instead

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
Joe Hershberger
2012-12-11 22:16:27 -06:00
committed by Tom Rini
parent a9f51c9b43
commit 32057717e0
3 changed files with 71 additions and 47 deletions

View File

@@ -77,12 +77,6 @@ ulong load_addr = CONFIG_SYS_LOAD_ADDR; /* Default Load Address */
ulong save_addr; /* Default Save Address */
ulong save_size; /* Default Save Size (in bytes) */
/*
* Table with supported baudrates (defined in config_xyz.h)
*/
static const unsigned long baudrate_table[] = CONFIG_SYS_BAUDRATE_TABLE;
#define N_BAUDRATES (sizeof(baudrate_table) / sizeof(baudrate_table[0]))
/*
* This variable is incremented on each do_env_set(), so it can
* be used via get_env_id() as an indication, if the environment
@@ -275,47 +269,6 @@ int env_change_ok(const ENTRY *item, const char *newval, enum env_op op,
}
}
#endif
/*
* When we change baudrate, or we are doing an env default -a
* (which will erase all variables prior to calling this),
* we want the baudrate to actually change - for real.
*/
if (op != env_op_create || /* variable exists */
(flag & H_NOCLEAR) == 0) { /* or env is clear */
/*
* Switch to new baudrate if new baudrate is supported
*/
if (strcmp(name, "baudrate") == 0) {
int baudrate = simple_strtoul(newval, NULL, 10);
int i;
for (i = 0; i < N_BAUDRATES; ++i) {
if (baudrate == baudrate_table[i])
break;
}
if (i == N_BAUDRATES) {
if ((flag & H_FORCE) == 0)
printf("## Baudrate %d bps not "
"supported\n", baudrate);
return 1;
}
if (gd->baudrate == baudrate) {
/* If unchanged, we just say it's OK */
return 0;
}
printf("## Switch baudrate to %d bps and"
"press ENTER ...\n", baudrate);
udelay(50000);
gd->baudrate = baudrate;
#if defined(CONFIG_PPC) || defined(CONFIG_MCF52x2)
gd->bd->bi_baudrate = baudrate;
#endif
serial_setbrg();
udelay(50000);
while (getc() != '\r')
;
}
}
/*
* Some variables should be updated when the corresponding