diff options
author | Patrice Chotard <patrice.chotard@st.com> | 2017-07-18 10:29:08 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-07-26 18:28:08 +0300 |
commit | 27265cee76ee7ee779e2e26549bdedb9d38a56de (patch) | |
tree | 72f98dc6633a7711d22b264d8853bfe90060426a /drivers/serial/serial_stm32x7.c | |
parent | 122b2d4763e82e13f9b2735624813266047ddcd5 (diff) | |
download | u-boot-27265cee76ee7ee779e2e26549bdedb9d38a56de.tar.xz |
serial: stm32x7: add clk_get_rate() support
Replace proprietary clock_get() by clk_get_rate()
The stm32x7 serial driver is now "generic" and can be used
by other STM32 SoCs.
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Acked-by: Vikas MANOCHA <vikas.manocha@st.com>
Diffstat (limited to 'drivers/serial/serial_stm32x7.c')
-rw-r--r-- | drivers/serial/serial_stm32x7.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/serial/serial_stm32x7.c b/drivers/serial/serial_stm32x7.c index 05c73da230..bf118a78cf 100644 --- a/drivers/serial/serial_stm32x7.c +++ b/drivers/serial/serial_stm32x7.c @@ -19,16 +19,9 @@ static int stm32_serial_setbrg(struct udevice *dev, int baudrate) { struct stm32x7_serial_platdata *plat = dev->platdata; struct stm32_usart *const usart = plat->base; - u32 clock, int_div, mantissa, fraction, oversampling; + u32 int_div, mantissa, fraction, oversampling; - if (((u32)usart & STM32_BUS_MASK) == APB1_PERIPH_BASE) - clock = clock_get(CLOCK_APB1); - else if (((u32)usart & STM32_BUS_MASK) == APB2_PERIPH_BASE) - clock = clock_get(CLOCK_APB2); - else - return -EINVAL; - - int_div = DIV_ROUND_CLOSEST(clock, baudrate); + int_div = DIV_ROUND_CLOSEST(plat->clock_rate, baudrate); if (int_div < 16) { oversampling = 8; @@ -101,6 +94,12 @@ static int stm32_serial_probe(struct udevice *dev) } #endif + plat->clock_rate = clk_get_rate(&clk); + if (plat->clock_rate < 0) { + clk_disable(&clk); + return plat->clock_rate; + }; + /* Disable usart-> disable overrun-> enable usart */ clrbits_le32(&usart->cr1, USART_CR1_RE | USART_CR1_TE | USART_CR1_UE); setbits_le32(&usart->cr3, USART_CR3_OVRDIS); |