summaryrefslogtreecommitdiffstats
path: root/drivers/serial
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:02:17 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:02:17 +0200
commite74a1633aa3f33e9149c427b431915988ceedbce (patch)
treeeb7d6d632a0d5fca2be351250447158fdb8308bb /drivers/serial
parent31d3ca035475ae9933d4398e56a170384fb9693f (diff)
downloadbarebox-e74a1633aa3f33e9149c427b431915988ceedbce.tar.gz
barebox-e74a1633aa3f33e9149c427b431915988ceedbce.tar.xz
svn_rev_686
implement console baudrate switching
Diffstat (limited to 'drivers/serial')
-rw-r--r--drivers/serial/serial_mpc5xxx.c21
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);