Lines Matching refs:cdns_uart

202 struct cdns_uart {  struct
226 #define to_cdns_uart(_nb) container_of(_nb, struct cdns_uart, \ argument
238 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_handle_rx() local
246 is_rxbs_support = cdns_uart->quirks & CDNS_UART_RXBS_SUPPORT; in cdns_uart_handle_rx()
329 static void cdns_rts_gpio_enable(struct cdns_uart *cdns_uart, bool enable) in cdns_rts_gpio_enable() argument
333 if (cdns_uart->gpiod_rts) { in cdns_rts_gpio_enable()
334 gpiod_set_value(cdns_uart->gpiod_rts, enable); in cdns_rts_gpio_enable()
336 val = readl(cdns_uart->port->membase + CDNS_UART_MODEMCR); in cdns_rts_gpio_enable()
341 writel(val, cdns_uart->port->membase + CDNS_UART_MODEMCR); in cdns_rts_gpio_enable()
349 static void cdns_rs485_tx_setup(struct cdns_uart *cdns_uart) in cdns_rs485_tx_setup() argument
353 enable = cdns_uart->port->rs485.flags & SER_RS485_RTS_ON_SEND; in cdns_rs485_tx_setup()
354 cdns_rts_gpio_enable(cdns_uart, enable); in cdns_rs485_tx_setup()
356 cdns_uart->rs485_tx_started = true; in cdns_rs485_tx_setup()
363 static void cdns_rs485_rx_setup(struct cdns_uart *cdns_uart) in cdns_rs485_rx_setup() argument
367 enable = cdns_uart->port->rs485.flags & SER_RS485_RTS_AFTER_SEND; in cdns_rs485_rx_setup()
368 cdns_rts_gpio_enable(cdns_uart, enable); in cdns_rs485_rx_setup()
370 cdns_uart->rs485_tx_started = false; in cdns_rs485_rx_setup()
394 struct cdns_uart *cdns_uart = container_of(t, struct cdns_uart, tx_timer); in cdns_rs485_rx_callback() local
400 cdns_rs485_rx_setup(cdns_uart); in cdns_rs485_rx_callback()
409 static u64 cdns_calc_after_tx_delay(struct cdns_uart *cdns_uart) in cdns_calc_after_tx_delay() argument
414 return cdns_uart->port->frame_time in cdns_calc_after_tx_delay()
415 + DIV_ROUND_UP(cdns_uart->port->frame_time, 7) in cdns_calc_after_tx_delay()
416 + (u64)cdns_uart->port->rs485.delay_rts_after_send * NSEC_PER_MSEC; in cdns_calc_after_tx_delay()
427 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_handle_tx() local
437 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) { in cdns_uart_handle_tx()
438 cdns_uart->tx_timer.function = &cdns_rs485_rx_callback; in cdns_uart_handle_tx()
439 rts_delay = ns_to_ktime(cdns_calc_after_tx_delay(cdns_uart)); in cdns_uart_handle_tx()
440 hrtimer_start(&cdns_uart->tx_timer, rts_delay, HRTIMER_MODE_REL); in cdns_uart_handle_tx()
457 writel(CDNS_UART_IXR_TXEMPTY, cdns_uart->port->membase + CDNS_UART_IER); in cdns_uart_handle_tx()
575 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_set_baud_rate() local
589 cdns_uart->baud = baud; in cdns_uart_set_baud_rate()
609 struct cdns_uart *cdns_uart = to_cdns_uart(nb); in cdns_uart_clk_notifier_cb() local
612 port = cdns_uart->port; in cdns_uart_clk_notifier_cb()
626 if (!cdns_uart_calc_baud_divs(ndata->new_rate, cdns_uart->baud, in cdns_uart_clk_notifier_cb()
632 uart_port_lock_irqsave(cdns_uart->port, &flags); in cdns_uart_clk_notifier_cb()
639 uart_port_unlock_irqrestore(cdns_uart->port, flags); in cdns_uart_clk_notifier_cb()
649 uart_port_lock_irqsave(cdns_uart->port, &flags); in cdns_uart_clk_notifier_cb()
654 cdns_uart->baud = cdns_uart_set_baud_rate(cdns_uart->port, in cdns_uart_clk_notifier_cb()
655 cdns_uart->baud); in cdns_uart_clk_notifier_cb()
659 uart_port_lock_irqsave(cdns_uart->port, &flags); in cdns_uart_clk_notifier_cb()
681 uart_port_unlock_irqrestore(cdns_uart->port, flags); in cdns_uart_clk_notifier_cb()
696 struct cdns_uart *cdns_uart = container_of(t, struct cdns_uart, tx_timer); in cdns_rs485_tx_callback() local
698 uart_port_lock(cdns_uart->port); in cdns_rs485_tx_callback()
699 cdns_uart_handle_tx(cdns_uart->port); in cdns_rs485_tx_callback()
700 uart_port_unlock(cdns_uart->port); in cdns_rs485_tx_callback()
712 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_start_tx() local
732 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) { in cdns_uart_start_tx()
733 if (!cdns_uart->rs485_tx_started) { in cdns_uart_start_tx()
734 hrtimer_update_function(&cdns_uart->tx_timer, cdns_rs485_tx_callback); in cdns_uart_start_tx()
735 cdns_rs485_tx_setup(cdns_uart); in cdns_uart_start_tx()
736 return hrtimer_start(&cdns_uart->tx_timer, in cdns_uart_start_tx()
751 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_stop_tx() local
753 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) in cdns_uart_stop_tx()
754 cdns_rs485_rx_setup(cdns_uart); in cdns_uart_stop_tx()
943 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_startup() local
949 is_brk_support = cdns_uart->quirks & CDNS_UART_RXBS_SUPPORT; in cdns_uart_startup()
951 ret = reset_control_deassert(cdns_uart->rstc); in cdns_uart_startup()
971 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) in cdns_uart_startup()
972 cdns_rs485_rx_setup(cdns_uart); in cdns_uart_startup()
1033 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_shutdown() local
1035 if (cdns_uart->port->rs485.flags & SER_RS485_ENABLED) in cdns_uart_shutdown()
1036 hrtimer_cancel(&cdns_uart->tx_timer); in cdns_uart_shutdown()
1147 struct cdns_uart *cdns_uart_data = port->private_data; in cdns_uart_get_mctrl()
1169 struct cdns_uart *cdns_uart_data = port->private_data; in cdns_uart_set_mctrl()
1501 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_resume() local
1510 ret = clk_enable(cdns_uart->pclk); in cdns_uart_resume()
1514 ret = clk_enable(cdns_uart->uartclk); in cdns_uart_resume()
1516 clk_disable(cdns_uart->pclk); in cdns_uart_resume()
1538 clk_disable(cdns_uart->uartclk); in cdns_uart_resume()
1539 clk_disable(cdns_uart->pclk); in cdns_uart_resume()
1556 struct cdns_uart *cdns_uart = port->private_data; in cdns_runtime_suspend() local
1558 clk_disable(cdns_uart->uartclk); in cdns_runtime_suspend()
1559 clk_disable(cdns_uart->pclk); in cdns_runtime_suspend()
1566 struct cdns_uart *cdns_uart = port->private_data; in cdns_runtime_resume() local
1569 ret = clk_enable(cdns_uart->pclk); in cdns_runtime_resume()
1573 ret = clk_enable(cdns_uart->uartclk); in cdns_runtime_resume()
1575 clk_disable(cdns_uart->pclk); in cdns_runtime_resume()
1615 struct cdns_uart *cdns_uart = port->private_data; in cdns_rs485_config() local
1625 hrtimer_setup(&cdns_uart->tx_timer, &cdns_rs485_tx_callback, CLOCK_MONOTONIC, in cdns_rs485_config()
1631 hrtimer_cancel(&cdns_uart->tx_timer); in cdns_rs485_config()
1647 struct cdns_uart *cdns_uart_data; in cdns_uart_probe()
1871 struct cdns_uart *cdns_uart_data = port->private_data; in cdns_uart_remove()