serial: stm32x7: add clk_get_rate() support
authorPatrice Chotard <patrice.chotard@st.com>
Tue, 18 Jul 2017 07:29:08 +0000 (09:29 +0200)
committerTom Rini <trini@konsulko.com>
Wed, 26 Jul 2017 15:28:08 +0000 (11:28 -0400)
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>
drivers/serial/serial_stm32x7.c
drivers/serial/serial_stm32x7.h

index 05c73da2301245cbe9190017e4b40446827103b3..bf118a78cf9dc17151148fa35dd8cb1c320c68f7 100644 (file)
@@ -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);
index 42b05f14b52a682163ad1c28a379adc787a40b4d..9fe37af5cc998db1d3bb563fefe679a3a5364ca7 100644 (file)
@@ -25,7 +25,7 @@ struct stm32_usart {
 /* Information about a serial port */
 struct stm32x7_serial_platdata {
        struct stm32_usart *base;  /* address of registers in physical memory */
-       unsigned int clock;
+       unsigned long int clock_rate;
 };
 
 #define USART_CR1_OVER8                        (1 << 15)