Lines Matching refs:efm_port

87 #define efm_debug(efm_port, format, arg...)			\  argument
88 dev_dbg(efm_port->port.dev, format, ##arg)
90 static void efm32_uart_write32(struct efm32_uart_port *efm_port, in efm32_uart_write32() argument
93 writel_relaxed(value, efm_port->port.membase + offset); in efm32_uart_write32()
96 static u32 efm32_uart_read32(struct efm32_uart_port *efm_port, in efm32_uart_read32() argument
99 return readl_relaxed(efm_port->port.membase + offset); in efm32_uart_read32()
104 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_tx_empty() local
105 u32 status = efm32_uart_read32(efm_port, UARTn_STATUS); in efm32_uart_tx_empty()
126 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_stop_tx() local
127 u32 ien = efm32_uart_read32(efm_port, UARTn_IEN); in efm32_uart_stop_tx()
129 efm32_uart_write32(efm_port, UARTn_CMD_TXDIS, UARTn_CMD); in efm32_uart_stop_tx()
131 efm32_uart_write32(efm_port, ien, UARTn_IEN); in efm32_uart_stop_tx()
134 static void efm32_uart_tx_chars(struct efm32_uart_port *efm_port) in efm32_uart_tx_chars() argument
136 struct uart_port *port = &efm_port->port; in efm32_uart_tx_chars()
139 while (efm32_uart_read32(efm_port, UARTn_STATUS) & in efm32_uart_tx_chars()
143 efm32_uart_write32(efm_port, port->x_char, in efm32_uart_tx_chars()
150 efm32_uart_write32(efm_port, xmit->buf[xmit->tail], in efm32_uart_tx_chars()
161 efm32_uart_read32(efm_port, UARTn_STATUS) & in efm32_uart_tx_chars()
168 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_start_tx() local
171 efm32_uart_write32(efm_port, in efm32_uart_start_tx()
173 ien = efm32_uart_read32(efm_port, UARTn_IEN); in efm32_uart_start_tx()
174 efm32_uart_write32(efm_port, in efm32_uart_start_tx()
176 efm32_uart_write32(efm_port, UARTn_CMD_TXEN, UARTn_CMD); in efm32_uart_start_tx()
178 efm32_uart_tx_chars(efm_port); in efm32_uart_start_tx()
183 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_stop_rx() local
185 efm32_uart_write32(efm_port, UARTn_CMD_RXDIS, UARTn_CMD); in efm32_uart_stop_rx()
193 static void efm32_uart_rx_chars(struct efm32_uart_port *efm_port) in efm32_uart_rx_chars() argument
195 struct uart_port *port = &efm_port->port; in efm32_uart_rx_chars()
197 while (efm32_uart_read32(efm_port, UARTn_STATUS) & in efm32_uart_rx_chars()
199 u32 rxdata = efm32_uart_read32(efm_port, UARTn_RXDATAX); in efm32_uart_rx_chars()
243 struct efm32_uart_port *efm_port = data; in efm32_uart_rxirq() local
244 u32 irqflag = efm32_uart_read32(efm_port, UARTn_IF); in efm32_uart_rxirq()
246 struct uart_port *port = &efm_port->port; in efm32_uart_rxirq()
252 efm32_uart_write32(efm_port, UARTn_IF_RXDATAV, UARTn_IFC); in efm32_uart_rxirq()
253 efm32_uart_rx_chars(efm_port); in efm32_uart_rxirq()
259 efm32_uart_write32(efm_port, UARTn_IF_RXOF, UARTn_IFC); in efm32_uart_rxirq()
275 struct efm32_uart_port *efm_port = data; in efm32_uart_txirq() local
276 u32 irqflag = efm32_uart_read32(efm_port, UARTn_IF); in efm32_uart_txirq()
280 efm32_uart_write32(efm_port, UARTn_IF_TXC, UARTn_IFC); in efm32_uart_txirq()
283 efm32_uart_tx_chars(efm_port); in efm32_uart_txirq()
291 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_startup() local
294 ret = clk_enable(efm_port->clk); in efm32_uart_startup()
296 efm_debug(efm_port, "failed to enable clk\n"); in efm32_uart_startup()
299 port->uartclk = clk_get_rate(efm_port->clk); in efm32_uart_startup()
302 efm32_uart_write32(efm_port, in efm32_uart_startup()
303 UARTn_ROUTE_LOCATION(efm_port->pdata.location) | in efm32_uart_startup()
308 DRIVER_NAME, efm_port); in efm32_uart_startup()
310 efm_debug(efm_port, "failed to register rxirq\n"); in efm32_uart_startup()
315 efm32_uart_write32(efm_port, 0, UARTn_IEN); in efm32_uart_startup()
317 ret = request_irq(efm_port->txirq, efm32_uart_txirq, 0, in efm32_uart_startup()
318 DRIVER_NAME, efm_port); in efm32_uart_startup()
320 efm_debug(efm_port, "failed to register txirq\n"); in efm32_uart_startup()
321 free_irq(port->irq, efm_port); in efm32_uart_startup()
324 clk_disable(efm_port->clk); in efm32_uart_startup()
326 efm32_uart_write32(efm_port, in efm32_uart_startup()
328 efm32_uart_write32(efm_port, UARTn_CMD_RXEN, UARTn_CMD); in efm32_uart_startup()
337 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_shutdown() local
339 efm32_uart_write32(efm_port, 0, UARTn_IEN); in efm32_uart_shutdown()
340 free_irq(port->irq, efm_port); in efm32_uart_shutdown()
342 clk_disable(efm_port->clk); in efm32_uart_shutdown()
348 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_set_termios() local
398 efm32_uart_write32(efm_port, in efm32_uart_set_termios()
417 efm32_uart_write32(efm_port, UARTn_CTRL_TXBIL, UARTn_CTRL); in efm32_uart_set_termios()
418 efm32_uart_write32(efm_port, frame, UARTn_FRAME); in efm32_uart_set_termios()
419 efm32_uart_write32(efm_port, clkdiv, UARTn_CLKDIV); in efm32_uart_set_termios()
421 efm32_uart_write32(efm_port, UARTn_CMD_TXEN | UARTn_CMD_RXEN, in efm32_uart_set_termios()
434 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_release_port() local
436 clk_unprepare(efm_port->clk); in efm32_uart_release_port()
437 clk_put(efm_port->clk); in efm32_uart_release_port()
443 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_request_port() local
447 if (!efm_port->port.membase) { in efm32_uart_request_port()
449 efm_debug(efm_port, "failed to remap\n"); in efm32_uart_request_port()
453 efm_port->clk = clk_get(port->dev, NULL); in efm32_uart_request_port()
454 if (IS_ERR(efm_port->clk)) { in efm32_uart_request_port()
455 ret = PTR_ERR(efm_port->clk); in efm32_uart_request_port()
456 efm_debug(efm_port, "failed to get clock\n"); in efm32_uart_request_port()
460 ret = clk_prepare(efm_port->clk); in efm32_uart_request_port()
462 clk_put(efm_port->clk); in efm32_uart_request_port()
513 struct efm32_uart_port *efm_port = to_efm_port(port); in efm32_uart_console_putchar() local
518 status = efm32_uart_read32(efm_port, UARTn_STATUS); in efm32_uart_console_putchar()
525 efm32_uart_write32(efm_port, ch, UARTn_TXDATA); in efm32_uart_console_putchar()
531 struct efm32_uart_port *efm_port = efm32_uart_ports[co->index]; in efm32_uart_console_write() local
532 u32 status = efm32_uart_read32(efm_port, UARTn_STATUS); in efm32_uart_console_write()
536 efm32_uart_write32(efm_port, UARTn_CMD_TXEN, UARTn_CMD); in efm32_uart_console_write()
538 uart_console_write(&efm_port->port, s, count, in efm32_uart_console_write()
543 u32 status = efm32_uart_read32(efm_port, UARTn_STATUS); in efm32_uart_console_write()
551 efm32_uart_write32(efm_port, UARTn_CMD_TXDIS, UARTn_CMD); in efm32_uart_console_write()
554 static void efm32_uart_console_get_options(struct efm32_uart_port *efm_port, in efm32_uart_console_get_options() argument
557 u32 ctrl = efm32_uart_read32(efm_port, UARTn_CTRL); in efm32_uart_console_get_options()
564 route = efm32_uart_read32(efm_port, UARTn_ROUTE); in efm32_uart_console_get_options()
569 clkdiv = efm32_uart_read32(efm_port, UARTn_CLKDIV); in efm32_uart_console_get_options()
571 *baud = DIV_ROUND_CLOSEST(4 * efm_port->port.uartclk, in efm32_uart_console_get_options()
574 frame = efm32_uart_read32(efm_port, UARTn_FRAME); in efm32_uart_console_get_options()
585 efm_debug(efm_port, "get_opts: options=%d%c%d\n", in efm32_uart_console_get_options()
591 struct efm32_uart_port *efm_port; in efm32_uart_console_setup() local
610 efm_port = efm32_uart_ports[co->index]; in efm32_uart_console_setup()
611 if (!efm_port) { in efm32_uart_console_setup()
616 ret = clk_prepare(efm_port->clk); in efm32_uart_console_setup()
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()
628 efm32_uart_console_get_options(efm_port, in efm32_uart_console_setup()
631 return uart_set_options(&efm_port->port, co, baud, parity, bits, flow); in efm32_uart_console_setup()
659 struct efm32_uart_port *efm_port) in efm32_uart_probe_dt() argument
683 efm_debug(efm_port, "using location %u\n", location); in efm32_uart_probe_dt()
684 efm_port->pdata.location = location; in efm32_uart_probe_dt()
686 efm_debug(efm_port, "fall back to location 0\n"); in efm32_uart_probe_dt()
694 efm_port->port.line = ret; in efm32_uart_probe_dt()
702 struct efm32_uart_port *efm_port; in efm32_uart_probe() local
707 efm_port = kzalloc(sizeof(*efm_port), GFP_KERNEL); in efm32_uart_probe()
708 if (!efm_port) { in efm32_uart_probe()
732 efm_port->port.irq = ret; in efm32_uart_probe()
736 ret = efm_port->port.irq + 1; in efm32_uart_probe()
738 efm_port->txirq = ret; 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()
748 ret = efm32_uart_probe_dt(pdev, efm_port); in efm32_uart_probe()
753 efm_port->port.line = pdev->id; in efm32_uart_probe()
756 efm_port->pdata = *pdata; in efm32_uart_probe()
760 line = efm_port->port.line; in efm32_uart_probe()
763 efm32_uart_ports[line] = efm_port; in efm32_uart_probe()
765 ret = uart_add_one_port(&efm32_uart_reg, &efm_port->port); in efm32_uart_probe()
775 kfree(efm_port); in efm32_uart_probe()
777 platform_set_drvdata(pdev, efm_port); in efm32_uart_probe()
786 struct efm32_uart_port *efm_port = platform_get_drvdata(pdev); in efm32_uart_remove() local
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()
794 kfree(efm_port); in efm32_uart_remove()