diff options
author | Pradeep Goudagunta <pgoudagunta@nvidia.com> | 2011-02-11 16:25:43 +0530 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:43:17 -0800 |
commit | abd90087edd4d832c6dc42a973c35203aa83a035 (patch) | |
tree | 1521c506eddd0a0e6f7168cda75f01809498c9d7 /drivers/tty | |
parent | fc2fd76581f2615f1f44da967016279d53033412 (diff) |
arm:tegra:uart: Set clk rate according to baudrate
Adding support to hs_uart driver to set clock rate according to given
baudrate.
Original-Change-Id: Ia15421bf1db7f46f77b5d63c863703e441f1d3ff
Reviewed-on: http://git-master/r/19233
Tested-by: Pradeep Goudagunta <pgoudagunta@nvidia.com>
Tested-by: Rakesh Goyal <rgoyal@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Original-Change-Id: I6d1beeb962f446eb0e169d8e316a39b9d7fe78e4
Rebase-Id: R28a0fa4eb5fd34ed555cb2ec02d5aa5132da93c8
Diffstat (limited to 'drivers/tty')
-rw-r--r-- | drivers/tty/serial/tegra_hsuart.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/tty/serial/tegra_hsuart.c b/drivers/tty/serial/tegra_hsuart.c index 36dd63b45500..c11d804fdad5 100644 --- a/drivers/tty/serial/tegra_hsuart.c +++ b/drivers/tty/serial/tegra_hsuart.c @@ -999,10 +999,14 @@ static void tegra_set_baudrate(struct tegra_uart_port *t, unsigned int baud) unsigned long rate; unsigned int divisor; unsigned char lcr; + unsigned int baud_actual; + unsigned int baud_delta; if (t->baud == baud) return; + rate = baud * 16; + clk_set_rate(t->clk, rate); rate = clk_get_rate(t->clk); divisor = rate; @@ -1010,6 +1014,14 @@ static void tegra_set_baudrate(struct tegra_uart_port *t, unsigned int baud) divisor += baud/2; do_div(divisor, baud); + /* The allowable baudrate error from desired baudrate is 5% */ + baud_actual = divisor ? rate / (16 * divisor) : 0; + baud_delta = abs(baud_actual - baud); + if (WARN_ON(baud_delta * 20 > baud)) { + dev_err(t->uport.dev, "requested baud %u, actual %u\n", + baud, baud_actual); + } + lcr = t->lcr_shadow; lcr |= UART_LCR_DLAB; uart_writeb(t, lcr, UART_LCR); |