Lines Matching refs:port
81 struct uart_port port; member
86 #define to_efm_port(_port) container_of(_port, struct efm32_uart_port, port)
88 dev_dbg(efm_port->port.dev, format, ##arg)
93 writel_relaxed(value, efm_port->port.membase + offset); in efm32_uart_write32()
99 return readl_relaxed(efm_port->port.membase + offset); in efm32_uart_read32()
102 static unsigned int efm32_uart_tx_empty(struct uart_port *port) in efm32_uart_tx_empty() argument
104 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_tx_empty()
113 static void efm32_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) in efm32_uart_set_mctrl() argument
118 static unsigned int efm32_uart_get_mctrl(struct uart_port *port) in efm32_uart_get_mctrl() argument
124 static void efm32_uart_stop_tx(struct uart_port *port) in efm32_uart_stop_tx() argument
126 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_stop_tx()
136 struct uart_port *port = &efm_port->port; in efm32_uart_tx_chars() local
137 struct circ_buf *xmit = &port->state->xmit; in efm32_uart_tx_chars()
141 if (port->x_char) { in efm32_uart_tx_chars()
142 port->icount.tx++; in efm32_uart_tx_chars()
143 efm32_uart_write32(efm_port, port->x_char, in efm32_uart_tx_chars()
145 port->x_char = 0; in efm32_uart_tx_chars()
148 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in efm32_uart_tx_chars()
149 port->icount.tx++; in efm32_uart_tx_chars()
158 uart_write_wakeup(port); in efm32_uart_tx_chars()
160 if (!port->x_char && uart_circ_empty(xmit) && in efm32_uart_tx_chars()
163 efm32_uart_stop_tx(port); in efm32_uart_tx_chars()
166 static void efm32_uart_start_tx(struct uart_port *port) in efm32_uart_start_tx() argument
168 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_start_tx()
181 static void efm32_uart_stop_rx(struct uart_port *port) in efm32_uart_stop_rx() argument
183 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_stop_rx()
188 static void efm32_uart_break_ctl(struct uart_port *port, int ctl) in efm32_uart_break_ctl() argument
195 struct uart_port *port = &efm_port->port; in efm32_uart_rx_chars() local
210 port->icount.rx++; in efm32_uart_rx_chars()
215 port->icount.brk++; in efm32_uart_rx_chars()
216 if (uart_handle_break(port)) in efm32_uart_rx_chars()
219 port->icount.parity++; in efm32_uart_rx_chars()
221 port->icount.frame++; in efm32_uart_rx_chars()
223 rxdata &= port->read_status_mask; in efm32_uart_rx_chars()
231 else if (uart_handle_sysrq_char(port, in efm32_uart_rx_chars()
235 if ((rxdata & port->ignore_status_mask) == 0) in efm32_uart_rx_chars()
236 tty_insert_flip_char(&port->state->port, in efm32_uart_rx_chars()
246 struct uart_port *port = &efm_port->port; in efm32_uart_rxirq() local
247 struct tty_port *tport = &port->state->port; in efm32_uart_rxirq()
249 spin_lock(&port->lock); in efm32_uart_rxirq()
260 port->icount.overrun++; in efm32_uart_rxirq()
266 spin_unlock(&port->lock); in efm32_uart_rxirq()
289 static int efm32_uart_startup(struct uart_port *port) in efm32_uart_startup() argument
291 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_startup()
299 port->uartclk = clk_get_rate(efm_port->clk); in efm32_uart_startup()
307 ret = request_irq(port->irq, efm32_uart_rxirq, 0, in efm32_uart_startup()
321 free_irq(port->irq, efm_port); in efm32_uart_startup()
335 static void efm32_uart_shutdown(struct uart_port *port) in efm32_uart_shutdown() argument
337 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_shutdown()
340 free_irq(port->irq, efm_port); in efm32_uart_shutdown()
345 static void efm32_uart_set_termios(struct uart_port *port, in efm32_uart_set_termios() argument
348 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_set_termios()
357 baud = uart_get_baud_rate(port, new, old, in efm32_uart_set_termios()
358 DIV_ROUND_CLOSEST(port->uartclk, 16 * 8192), in efm32_uart_set_termios()
359 DIV_ROUND_CLOSEST(port->uartclk, 16)); in efm32_uart_set_termios()
394 clkdiv = (DIV_ROUND_CLOSEST(4 * port->uartclk, 16 * baud) - 4) << 6; in efm32_uart_set_termios()
396 spin_lock_irqsave(&port->lock, flags); in efm32_uart_set_termios()
401 port->read_status_mask = UARTn_RXDATAX_RXDATA__MASK; in efm32_uart_set_termios()
403 port->read_status_mask |= in efm32_uart_set_termios()
406 port->read_status_mask |= SW_UARTn_RXDATAX_BERR; in efm32_uart_set_termios()
408 port->ignore_status_mask = 0; in efm32_uart_set_termios()
410 port->ignore_status_mask |= in efm32_uart_set_termios()
413 port->ignore_status_mask |= SW_UARTn_RXDATAX_BERR; in efm32_uart_set_termios()
415 uart_update_timeout(port, new->c_cflag, baud); in efm32_uart_set_termios()
424 spin_unlock_irqrestore(&port->lock, flags); in efm32_uart_set_termios()
427 static const char *efm32_uart_type(struct uart_port *port) in efm32_uart_type() argument
429 return port->type == PORT_EFMUART ? "efm32-uart" : NULL; in efm32_uart_type()
432 static void efm32_uart_release_port(struct uart_port *port) in efm32_uart_release_port() argument
434 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_release_port()
438 iounmap(port->membase); in efm32_uart_release_port()
441 static int efm32_uart_request_port(struct uart_port *port) in efm32_uart_request_port() argument
443 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_request_port()
446 port->membase = ioremap(port->mapbase, 60); in efm32_uart_request_port()
447 if (!efm_port->port.membase) { in efm32_uart_request_port()
453 efm_port->clk = clk_get(port->dev, NULL); in efm32_uart_request_port()
465 iounmap(port->membase); in efm32_uart_request_port()
472 static void efm32_uart_config_port(struct uart_port *port, int type) in efm32_uart_config_port() argument
475 !efm32_uart_request_port(port)) in efm32_uart_config_port()
476 port->type = PORT_EFMUART; in efm32_uart_config_port()
479 static int efm32_uart_verify_port(struct uart_port *port, in efm32_uart_verify_port() argument
511 static void efm32_uart_console_putchar(struct uart_port *port, int ch) in efm32_uart_console_putchar() argument
513 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_console_putchar()
538 uart_console_write(&efm_port->port, s, count, in efm32_uart_console_write()
571 *baud = DIV_ROUND_CLOSEST(4 * efm_port->port.uartclk, in efm32_uart_console_get_options()
618 dev_warn(efm_port->port.dev, in efm32_uart_console_setup()
623 efm_port->port.uartclk = clk_get_rate(efm_port->clk); in efm32_uart_console_setup()
631 return uart_set_options(&efm_port->port, co, baud, parity, bits, flow); in efm32_uart_console_setup()
694 efm_port->port.line = ret; in efm32_uart_probe_dt()
732 efm_port->port.irq = ret; in efm32_uart_probe()
736 ret = efm_port->port.irq + 1; in efm32_uart_probe()
740 efm_port->port.dev = &pdev->dev; in efm32_uart_probe()
741 efm_port->port.mapbase = res->start; in efm32_uart_probe()
742 efm_port->port.type = PORT_EFMUART; in efm32_uart_probe()
743 efm_port->port.iotype = UPIO_MEM32; in efm32_uart_probe()
744 efm_port->port.fifosize = 2; in efm32_uart_probe()
745 efm_port->port.ops = &efm32_uart_pops; in efm32_uart_probe()
746 efm_port->port.flags = UPF_BOOT_AUTOCONF; in efm32_uart_probe()
753 efm_port->port.line = pdev->id; in efm32_uart_probe()
760 line = efm_port->port.line; in efm32_uart_probe()
765 ret = uart_add_one_port(&efm32_uart_reg, &efm_port->port); in efm32_uart_probe()
787 unsigned int line = efm_port->port.line; in efm32_uart_remove()
789 uart_remove_one_port(&efm32_uart_reg, &efm_port->port); in efm32_uart_remove()