Lines Matching refs:cdns_uart
204 struct cdns_uart { struct
229 #define to_cdns_uart(_nb) container_of(_nb, struct cdns_uart, \ argument
241 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_handle_rx() local
249 is_rxbs_support = cdns_uart->quirks & CDNS_UART_RXBS_SUPPORT; in cdns_uart_handle_rx()
332 static void cdns_rts_gpio_enable(struct cdns_uart *cdns_uart, bool enable) in cdns_rts_gpio_enable() argument
336 if (cdns_uart->gpiod_rts) { in cdns_rts_gpio_enable()
337 gpiod_set_value(cdns_uart->gpiod_rts, enable); in cdns_rts_gpio_enable()
339 val = readl(cdns_uart->port->membase + CDNS_UART_MODEMCR); in cdns_rts_gpio_enable()
344 writel(val, cdns_uart->port->membase + CDNS_UART_MODEMCR); in cdns_rts_gpio_enable()
352 static void cdns_rs485_tx_setup(struct cdns_uart *cdns_uart) in cdns_rs485_tx_setup() argument
356 enable = cdns_uart->port->rs485.flags & SER_RS485_RTS_ON_SEND; in cdns_rs485_tx_setup()
357 cdns_rts_gpio_enable(cdns_uart, enable); in cdns_rs485_tx_setup()
359 cdns_uart->rs485_tx_started = true; in cdns_rs485_tx_setup()
366 static void cdns_rs485_rx_setup(struct cdns_uart *cdns_uart) in cdns_rs485_rx_setup() argument
370 enable = cdns_uart->port->rs485.flags & SER_RS485_RTS_AFTER_SEND; in cdns_rs485_rx_setup()
371 cdns_rts_gpio_enable(cdns_uart, enable); in cdns_rs485_rx_setup()
373 cdns_uart->rs485_tx_started = false; in cdns_rs485_rx_setup()
397 struct cdns_uart *cdns_uart = container_of(t, struct cdns_uart, tx_timer); in cdns_rs485_rx_callback() local
403 cdns_rs485_rx_setup(cdns_uart); in cdns_rs485_rx_callback()
412 static u64 cdns_calc_after_tx_delay(struct cdns_uart *cdns_uart) in cdns_calc_after_tx_delay() argument
417 return cdns_uart->port->frame_time in cdns_calc_after_tx_delay()
418 + DIV_ROUND_UP(cdns_uart->port->frame_time, 7) in cdns_calc_after_tx_delay()
419 + (u64)cdns_uart->port->rs485.delay_rts_after_send * NSEC_PER_MSEC; in cdns_calc_after_tx_delay()
430 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_handle_tx() local
453 writel(CDNS_UART_IXR_TXEMPTY, cdns_uart->port->membase + CDNS_UART_IER); in cdns_uart_handle_tx()
455 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED && in cdns_uart_handle_tx()
457 cdns_uart->tx_timer.function = &cdns_rs485_rx_callback; in cdns_uart_handle_tx()
458 hrtimer_start(&cdns_uart->tx_timer, in cdns_uart_handle_tx()
459 ns_to_ktime(cdns_calc_after_tx_delay(cdns_uart)), HRTIMER_MODE_REL); in cdns_uart_handle_tx()
578 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_set_baud_rate() local
592 cdns_uart->baud = baud; in cdns_uart_set_baud_rate()
612 struct cdns_uart *cdns_uart = to_cdns_uart(nb); in cdns_uart_clk_notifier_cb() local
615 port = cdns_uart->port; in cdns_uart_clk_notifier_cb()
629 if (!cdns_uart_calc_baud_divs(ndata->new_rate, cdns_uart->baud, in cdns_uart_clk_notifier_cb()
635 uart_port_lock_irqsave(cdns_uart->port, &flags); in cdns_uart_clk_notifier_cb()
642 uart_port_unlock_irqrestore(cdns_uart->port, flags); in cdns_uart_clk_notifier_cb()
652 uart_port_lock_irqsave(cdns_uart->port, &flags); in cdns_uart_clk_notifier_cb()
657 cdns_uart->baud = cdns_uart_set_baud_rate(cdns_uart->port, in cdns_uart_clk_notifier_cb()
658 cdns_uart->baud); in cdns_uart_clk_notifier_cb()
662 uart_port_lock_irqsave(cdns_uart->port, &flags); in cdns_uart_clk_notifier_cb()
684 uart_port_unlock_irqrestore(cdns_uart->port, flags); in cdns_uart_clk_notifier_cb()
699 struct cdns_uart *cdns_uart = container_of(t, struct cdns_uart, tx_timer); in cdns_rs485_tx_callback() local
701 uart_port_lock(cdns_uart->port); in cdns_rs485_tx_callback()
702 cdns_uart_handle_tx(cdns_uart->port); in cdns_rs485_tx_callback()
703 uart_port_unlock(cdns_uart->port); in cdns_rs485_tx_callback()
715 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_start_tx() local
735 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) { in cdns_uart_start_tx()
736 if (!cdns_uart->rs485_tx_started) { in cdns_uart_start_tx()
737 cdns_uart->tx_timer.function = &cdns_rs485_tx_callback; in cdns_uart_start_tx()
738 cdns_rs485_tx_setup(cdns_uart); in cdns_uart_start_tx()
739 return hrtimer_start(&cdns_uart->tx_timer, in cdns_uart_start_tx()
754 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_stop_tx() local
756 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) in cdns_uart_stop_tx()
757 cdns_rs485_rx_setup(cdns_uart); in cdns_uart_stop_tx()
946 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_startup() local
952 is_brk_support = cdns_uart->quirks & CDNS_UART_RXBS_SUPPORT; in cdns_uart_startup()
954 ret = reset_control_deassert(cdns_uart->rstc); in cdns_uart_startup()
974 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) in cdns_uart_startup()
975 cdns_rs485_rx_setup(cdns_uart); in cdns_uart_startup()
1036 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_shutdown() local
1038 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) in cdns_uart_shutdown()
1039 hrtimer_cancel(&cdns_uart->tx_timer); in cdns_uart_shutdown()
1150 struct cdns_uart *cdns_uart_data = port->private_data; in cdns_uart_get_mctrl()
1172 struct cdns_uart *cdns_uart_data = port->private_data; in cdns_uart_set_mctrl()
1469 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_suspend() local
1493 return uart_suspend_port(cdns_uart->cdns_uart_driver, port); in cdns_uart_suspend()
1505 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_resume() local
1514 ret = clk_enable(cdns_uart->pclk); in cdns_uart_resume()
1518 ret = clk_enable(cdns_uart->uartclk); in cdns_uart_resume()
1520 clk_disable(cdns_uart->pclk); in cdns_uart_resume()
1542 clk_disable(cdns_uart->uartclk); in cdns_uart_resume()
1543 clk_disable(cdns_uart->pclk); in cdns_uart_resume()
1554 return uart_resume_port(cdns_uart->cdns_uart_driver, port); in cdns_uart_resume()
1560 struct cdns_uart *cdns_uart = port->private_data; in cdns_runtime_suspend() local
1562 clk_disable(cdns_uart->uartclk); in cdns_runtime_suspend()
1563 clk_disable(cdns_uart->pclk); in cdns_runtime_suspend()
1570 struct cdns_uart *cdns_uart = port->private_data; in cdns_runtime_resume() local
1573 ret = clk_enable(cdns_uart->pclk); in cdns_runtime_resume()
1577 ret = clk_enable(cdns_uart->uartclk); in cdns_runtime_resume()
1579 clk_disable(cdns_uart->pclk); in cdns_runtime_resume()
1619 struct cdns_uart *cdns_uart = port->private_data; in cdns_rs485_config() local
1629 hrtimer_init(&cdns_uart->tx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in cdns_rs485_config()
1630 cdns_uart->tx_timer.function = &cdns_rs485_tx_callback; in cdns_rs485_config()
1635 hrtimer_cancel(&cdns_uart->tx_timer); in cdns_rs485_config()
1651 struct cdns_uart *cdns_uart_data; in cdns_uart_probe()
1876 struct cdns_uart *cdns_uart_data = port->private_data; in cdns_uart_remove()