From 17a6d29f675201924a49d20b739046f70b3955fd Mon Sep 17 00:00:00 2001 From: Maureen Helm Date: Sat, 26 Aug 2017 16:18:28 -0500 Subject: [PATCH] serial: Refactor mcux lpuart shim driver to use clock control interface Refactors the mcux lpuart shim driver to use the clock control interface instead of calling CLOCK_GetFreq() directly. This will allow SoCs with different clock architectures to reuse this driver. Signed-off-by: Maureen Helm --- drivers/serial/Kconfig.mcux_lpuart | 2 +- drivers/serial/uart_mcux_lpuart.c | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/serial/Kconfig.mcux_lpuart b/drivers/serial/Kconfig.mcux_lpuart index 24bb18fe142..bd1010aa7e7 100644 --- a/drivers/serial/Kconfig.mcux_lpuart +++ b/drivers/serial/Kconfig.mcux_lpuart @@ -7,7 +7,7 @@ menuconfig UART_MCUX_LPUART bool "MCUX LPUART driver" - depends on HAS_MCUX_LPUART + depends on HAS_MCUX_LPUART && CLOCK_CONTROL default n select SERIAL_HAS_DRIVER select SERIAL_SUPPORT_INTERRUPT diff --git a/drivers/serial/uart_mcux_lpuart.c b/drivers/serial/uart_mcux_lpuart.c index 59b868fbd8e..163459a5167 100644 --- a/drivers/serial/uart_mcux_lpuart.c +++ b/drivers/serial/uart_mcux_lpuart.c @@ -7,13 +7,14 @@ #include #include #include +#include #include -#include #include struct mcux_lpuart_config { LPUART_Type *base; - clock_name_t clock_source; + char *clock_name; + clock_control_subsys_t clock_subsys; u32_t baud_rate; #ifdef CONFIG_UART_INTERRUPT_DRIVEN void (*irq_config_func)(struct device *dev); @@ -231,9 +232,18 @@ static int mcux_lpuart_init(struct device *dev) { const struct mcux_lpuart_config *config = dev->config->config_info; lpuart_config_t uart_config; + struct device *clock_dev; u32_t clock_freq; - clock_freq = CLOCK_GetFreq(config->clock_source); + clock_dev = device_get_binding(config->clock_name); + if (clock_dev == NULL) { + return -EINVAL; + } + + if (clock_control_get_rate(clock_dev, config->clock_subsys, + &clock_freq)) { + return -EINVAL; + } LPUART_GetDefaultConfig(&uart_config); uart_config.enableTx = true; @@ -279,7 +289,9 @@ static void mcux_lpuart_config_func_0(struct device *dev); static const struct mcux_lpuart_config mcux_lpuart_0_config = { .base = LPUART0, - .clock_source = LPUART0_CLK_SRC, + .clock_name = CONFIG_UART_MCUX_LPUART_0_CLOCK_NAME, + .clock_subsys = + (clock_control_subsys_t)CONFIG_UART_MCUX_LPUART_0_CLOCK_SUBSYS, .baud_rate = CONFIG_UART_MCUX_LPUART_0_BAUD_RATE, #ifdef CONFIG_UART_INTERRUPT_DRIVEN .irq_config_func = mcux_lpuart_config_func_0,