[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] drivers: char: omap-uart: add "clock-hz" option
Quite a few TI K3 devices do not have clock-frequency specified in their respective UART nodes. However hard-coding the frequency is not a solution as the function clock input can differ between SoCs. So, similar to com1/com2, let the user pass the frequency as a dtuart option via the bootargs. If not specified it will fallback to the same DT parsing as before. For example, dtuart=serial2:clock-hz=48000000 can be a valid bootarg. Signed-off-by: Amneesh Singh <a-singh21@xxxxxx> --- xen/drivers/char/omap-uart.c | 62 +++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/xen/drivers/char/omap-uart.c b/xen/drivers/char/omap-uart.c index 1079198..660c486 100644 --- a/xen/drivers/char/omap-uart.c +++ b/xen/drivers/char/omap-uart.c @@ -305,33 +305,71 @@ static struct uart_driver __read_mostly omap_uart_driver = { .vuart_info = omap_vuart_info, }; +static void __init omap_uart_parse_config(struct omap_uart *uart, + const char *config) { + + char options[256]; + char *value, *start = options; + + if ( !strcmp(config, "") ) + return; + + strlcpy(options, config, ARRAY_SIZE(options)); + + while (start != NULL) + { + char *name; + + /* Parse next name-value pair. */ + value = strsep(&start, ","); + name = strsep(&value, "="); + + if ( !strcmp(name, "clock-hz") ) + uart->clock_hz = simple_strtoul(value, NULL, 0); + else + printk("WARNING: UART configuration option %s is not supported\n", + name); + + } +} + static int __init omap_uart_init(struct dt_device_node *dev, const void *data) { const char *config = data; struct omap_uart *uart; - u32 clkspec; int res; paddr_t addr, size; - if ( strcmp(config, "") ) - printk("WARNING: UART configuration is not supported\n"); - uart = &omap_com; - res = dt_property_read_u32(dev, "clock-frequency", &clkspec); - if ( !res ) - { - printk("omap-uart: Unable to retrieve the clock frequency\n"); - return -EINVAL; - } - - uart->clock_hz = clkspec; + /* Default configuration. */ + uart->clock_hz = 0; uart->baud = 115200; uart->data_bits = 8; uart->parity = UART_PARITY_NONE; uart->stop_bits = 1; + /* + * Parse dtuart options. + * Valid options: + * - clock-hz + */ + omap_uart_parse_config(uart, config); + + /* If clock-hz is missing. */ + if ( uart->clock_hz == 0 ) + { + u32 clkspec; + res = dt_property_read_u32(dev, "clock-frequency", &clkspec); + if ( !res ) + { + printk("omap-uart: Unable to retrieve the clock frequency\n"); + return -EINVAL; + } + uart->clock_hz = clkspec; + } + res = dt_device_get_paddr(dev, 0, &addr, &size); if ( res ) { -- 2.34.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |