dm: serial: bcm6345: fix baud rate clock calculation
It's currently bugged and doesn't work for even cases. Right shift bits instead of dividing and fix even cases. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
parent
6b7185f3ee
commit
24f85482c9
@ -157,11 +157,11 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate)
|
|||||||
UART_FIFO_CFG_TX_4);
|
UART_FIFO_CFG_TX_4);
|
||||||
|
|
||||||
/* set baud rate */
|
/* set baud rate */
|
||||||
val = (clk / baudrate) / 16;
|
val = ((clk / baudrate) >> 4);
|
||||||
if (val & 0x1)
|
if (val & 0x1)
|
||||||
val = val;
|
val = (val >> 1);
|
||||||
else
|
else
|
||||||
val = val / 2 - 1;
|
val = (val >> 1) - 1;
|
||||||
writel_be(val, base + UART_BAUD_REG);
|
writel_be(val, base + UART_BAUD_REG);
|
||||||
|
|
||||||
/* clear interrupts */
|
/* clear interrupts */
|
||||||
@ -243,7 +243,7 @@ static int bcm6345_serial_probe(struct udevice *dev)
|
|||||||
ret = clk_get_by_index(dev, 0, &clk);
|
ret = clk_get_by_index(dev, 0, &clk);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
priv->uartclk = clk_get_rate(&clk) / 2;
|
priv->uartclk = clk_get_rate(&clk);
|
||||||
clk_free(&clk);
|
clk_free(&clk);
|
||||||
|
|
||||||
/* initialize serial */
|
/* initialize serial */
|
||||||
|
Loading…
Reference in New Issue
Block a user