diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-05 18:02:17 +0200 |
---|---|---|
committer | Sascha Hauer <sha@octopus.labnet.pengutronix.de> | 2007-07-05 18:02:17 +0200 |
commit | e74a1633aa3f33e9149c427b431915988ceedbce (patch) | |
tree | eb7d6d632a0d5fca2be351250447158fdb8308bb /drivers | |
parent | 31d3ca035475ae9933d4398e56a170384fb9693f (diff) | |
download | barebox-e74a1633aa3f33e9149c427b431915988ceedbce.tar.gz barebox-e74a1633aa3f33e9149c427b431915988ceedbce.tar.xz |
svn_rev_686
implement console baudrate switching
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/serial/serial_mpc5xxx.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/drivers/serial/serial_mpc5xxx.c b/drivers/serial/serial_mpc5xxx.c index 54c2d02ba6..c008cfd51d 100644 --- a/drivers/serial/serial_mpc5xxx.c +++ b/drivers/serial/serial_mpc5xxx.c @@ -41,36 +41,32 @@ #include <xfuncs.h> #include <asm/arch/clocks.h> -static void mpc5xxx_serial_setbrg(struct console_device *cdev) +static int mpc5xxx_serial_setbrg(struct console_device *cdev, int baudrate) { struct device_d *dev = cdev->dev; volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev->map_base; unsigned long baseclk; int div; -return; - printf("%s: ipb\n", __FUNCTION__); + #if defined(CONFIG_MGT5100) baseclk = (CFG_MPC5XXX_CLKIN + 16) / 32; #elif defined(CONFIG_MPC5200) baseclk = (get_ipb_clock() + 16) / 32; #endif - printf("done: %d\n", get_ipb_clock()); + /* set up UART divisor */ -#if 0 - div = (baseclk + (gd->baudrate/2)) / gd->baudrate; -#else -#warning mpc5200 serial: temporary baudrate hack - div = (baseclk + (115200 / 2)) / 115200; -#endif + div = (baseclk + (baudrate/2)) / baudrate; psc->ctur = (div >> 8) & 0xFF; psc->ctlr = div & 0xff; + + return 0; } static int mpc5xxx_serial_init(struct console_device *cdev) { struct device_d *dev = cdev->dev; volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev->map_base; -return 0; + /* reset PSC */ psc->command = PSC_SEL_MODE_REG_1; @@ -92,8 +88,6 @@ return 0; #endif psc->mode = PSC_MODE_ONE_STOP; - mpc5xxx_serial_setbrg(cdev); - /* disable all interrupts */ psc->psc_imr = 0; @@ -148,6 +142,7 @@ static int mpc5xxx_serial_probe(struct device_d *dev) cdev->tstc = mpc5xxx_serial_tstc; cdev->putc = mpc5xxx_serial_putc; cdev->getc = mpc5xxx_serial_getc; + cdev->setbrg = mpc5xxx_serial_setbrg; mpc5xxx_serial_init(cdev); |