Lines Matching refs:port
196 struct uart_port port; member
289 static void imx_port_ucrs_save(struct uart_port *port, in imx_port_ucrs_save() argument
293 ucr->ucr1 = readl(port->membase + UCR1); in imx_port_ucrs_save()
294 ucr->ucr2 = readl(port->membase + UCR2); in imx_port_ucrs_save()
295 ucr->ucr3 = readl(port->membase + UCR3); in imx_port_ucrs_save()
298 static void imx_port_ucrs_restore(struct uart_port *port, in imx_port_ucrs_restore() argument
302 writel(ucr->ucr1, port->membase + UCR1); in imx_port_ucrs_restore()
303 writel(ucr->ucr2, port->membase + UCR2); in imx_port_ucrs_restore()
304 writel(ucr->ucr3, port->membase + UCR3); in imx_port_ucrs_restore()
315 status = sport->port.ops->get_mctrl(&sport->port); in imx_mctrl_check()
324 sport->port.icount.rng++; in imx_mctrl_check()
326 sport->port.icount.dsr++; in imx_mctrl_check()
328 uart_handle_dcd_change(&sport->port, status & TIOCM_CAR); in imx_mctrl_check()
330 uart_handle_cts_change(&sport->port, status & TIOCM_CTS); in imx_mctrl_check()
332 wake_up_interruptible(&sport->port.state->port.delta_msr_wait); in imx_mctrl_check()
344 if (sport->port.state) { in imx_timeout()
345 spin_lock_irqsave(&sport->port.lock, flags); in imx_timeout()
347 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_timeout()
356 static void imx_stop_tx(struct uart_port *port) in imx_stop_tx() argument
358 struct imx_port *sport = (struct imx_port *)port; in imx_stop_tx()
368 temp = readl(port->membase + UCR1); in imx_stop_tx()
369 writel(temp & ~UCR1_TXMPTYEN, port->membase + UCR1); in imx_stop_tx()
372 if (port->rs485.flags & SER_RS485_ENABLED && in imx_stop_tx()
373 readl(port->membase + USR2) & USR2_TXDC) { in imx_stop_tx()
374 temp = readl(port->membase + UCR2); in imx_stop_tx()
375 if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND) in imx_stop_tx()
379 writel(temp, port->membase + UCR2); in imx_stop_tx()
381 temp = readl(port->membase + UCR4); in imx_stop_tx()
383 writel(temp, port->membase + UCR4); in imx_stop_tx()
390 static void imx_stop_rx(struct uart_port *port) in imx_stop_rx() argument
392 struct imx_port *sport = (struct imx_port *)port; in imx_stop_rx()
396 if (sport->port.suspended) { in imx_stop_rx()
404 temp = readl(sport->port.membase + UCR2); in imx_stop_rx()
405 writel(temp & ~UCR2_RXEN, sport->port.membase + UCR2); in imx_stop_rx()
408 temp = readl(sport->port.membase + UCR1); in imx_stop_rx()
409 writel(temp & ~UCR1_RRDYEN, sport->port.membase + UCR1); in imx_stop_rx()
415 static void imx_enable_ms(struct uart_port *port) in imx_enable_ms() argument
417 struct imx_port *sport = (struct imx_port *)port; in imx_enable_ms()
425 struct circ_buf *xmit = &sport->port.state->xmit; in imx_transmit_buffer()
428 if (sport->port.x_char) { in imx_transmit_buffer()
430 writel(sport->port.x_char, sport->port.membase + URTX0); in imx_transmit_buffer()
431 sport->port.icount.tx++; in imx_transmit_buffer()
432 sport->port.x_char = 0; in imx_transmit_buffer()
436 if (uart_circ_empty(xmit) || uart_tx_stopped(&sport->port)) { in imx_transmit_buffer()
437 imx_stop_tx(&sport->port); in imx_transmit_buffer()
446 temp = readl(sport->port.membase + UCR1); in imx_transmit_buffer()
450 writel(temp, sport->port.membase + UCR1); in imx_transmit_buffer()
452 writel(temp, sport->port.membase + UCR1); in imx_transmit_buffer()
458 !(readl(sport->port.membase + uts_reg(sport)) & UTS_TXFULL)) { in imx_transmit_buffer()
461 writel(xmit->buf[xmit->tail], sport->port.membase + URTX0); in imx_transmit_buffer()
463 sport->port.icount.tx++; in imx_transmit_buffer()
467 uart_write_wakeup(&sport->port); in imx_transmit_buffer()
470 imx_stop_tx(&sport->port); in imx_transmit_buffer()
477 struct circ_buf *xmit = &sport->port.state->xmit; in dma_tx_callback()
481 spin_lock_irqsave(&sport->port.lock, flags); in dma_tx_callback()
483 dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE); in dma_tx_callback()
485 temp = readl(sport->port.membase + UCR1); in dma_tx_callback()
487 writel(temp, sport->port.membase + UCR1); in dma_tx_callback()
491 sport->port.icount.tx += sport->tx_bytes; in dma_tx_callback()
493 dev_dbg(sport->port.dev, "we finish the TX DMA.\n"); in dma_tx_callback()
497 spin_unlock_irqrestore(&sport->port.lock, flags); in dma_tx_callback()
500 uart_write_wakeup(&sport->port); in dma_tx_callback()
504 dev_dbg(sport->port.dev, "exit in %s.\n", __func__); in dma_tx_callback()
508 spin_lock_irqsave(&sport->port.lock, flags); in dma_tx_callback()
509 if (!uart_circ_empty(xmit) && !uart_tx_stopped(&sport->port)) in dma_tx_callback()
511 spin_unlock_irqrestore(&sport->port.lock, flags); in dma_tx_callback()
516 struct circ_buf *xmit = &sport->port.state->xmit; in imx_dma_tx()
520 struct device *dev = sport->port.dev; in imx_dma_tx()
559 temp = readl(sport->port.membase + UCR1); in imx_dma_tx()
561 writel(temp, sport->port.membase + UCR1); in imx_dma_tx()
573 static void imx_start_tx(struct uart_port *port) in imx_start_tx() argument
575 struct imx_port *sport = (struct imx_port *)port; in imx_start_tx()
578 if (port->rs485.flags & SER_RS485_ENABLED) { in imx_start_tx()
580 temp = readl(port->membase + UCR2); in imx_start_tx()
581 if (port->rs485.flags & SER_RS485_RTS_ON_SEND) in imx_start_tx()
585 writel(temp, port->membase + UCR2); in imx_start_tx()
587 temp = readl(port->membase + UCR4); in imx_start_tx()
589 writel(temp, port->membase + UCR4); in imx_start_tx()
593 temp = readl(sport->port.membase + UCR1); in imx_start_tx()
594 writel(temp | UCR1_TXMPTYEN, sport->port.membase + UCR1); in imx_start_tx()
598 if (sport->port.x_char) { in imx_start_tx()
601 temp = readl(sport->port.membase + UCR1); in imx_start_tx()
604 writel(temp, sport->port.membase + UCR1); in imx_start_tx()
608 if (!uart_circ_empty(&port->state->xmit) && in imx_start_tx()
609 !uart_tx_stopped(port)) in imx_start_tx()
621 spin_lock_irqsave(&sport->port.lock, flags); in imx_rtsint()
623 writel(USR1_RTSD, sport->port.membase + USR1); in imx_rtsint()
624 val = readl(sport->port.membase + USR1) & USR1_RTSS; in imx_rtsint()
625 uart_handle_cts_change(&sport->port, !!val); in imx_rtsint()
626 wake_up_interruptible(&sport->port.state->port.delta_msr_wait); in imx_rtsint()
628 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_rtsint()
637 spin_lock_irqsave(&sport->port.lock, flags); in imx_txint()
639 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_txint()
647 struct tty_port *port = &sport->port.state->port; in imx_rxint() local
650 spin_lock_irqsave(&sport->port.lock, flags); in imx_rxint()
652 while (readl(sport->port.membase + USR2) & USR2_RDR) { in imx_rxint()
654 sport->port.icount.rx++; in imx_rxint()
656 rx = readl(sport->port.membase + URXD0); in imx_rxint()
658 temp = readl(sport->port.membase + USR2); in imx_rxint()
660 writel(USR2_BRCD, sport->port.membase + USR2); in imx_rxint()
661 if (uart_handle_break(&sport->port)) in imx_rxint()
665 if (uart_handle_sysrq_char(&sport->port, (unsigned char)rx)) in imx_rxint()
670 sport->port.icount.brk++; in imx_rxint()
672 sport->port.icount.parity++; in imx_rxint()
674 sport->port.icount.frame++; in imx_rxint()
676 sport->port.icount.overrun++; in imx_rxint()
678 if (rx & sport->port.ignore_status_mask) { in imx_rxint()
684 rx &= (sport->port.read_status_mask | 0xFF); in imx_rxint()
696 sport->port.sysrq = 0; in imx_rxint()
700 if (sport->port.ignore_status_mask & URXD_DUMMY_READ) in imx_rxint()
703 tty_insert_flip_char(port, rx, flg); in imx_rxint()
707 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_rxint()
708 tty_flip_buffer_push(port); in imx_rxint()
722 spin_lock_irqsave(&sport->port.lock, flags); in imx_dma_rxint()
724 temp = readl(sport->port.membase + USR2); in imx_dma_rxint()
729 temp = readl(sport->port.membase + UCR1); in imx_dma_rxint()
731 writel(temp, sport->port.membase + UCR1); in imx_dma_rxint()
737 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_dma_rxint()
746 sts = readl(sport->port.membase + USR1); in imx_int()
747 sts2 = readl(sport->port.membase + USR2); in imx_int()
757 readl(sport->port.membase + UCR1) & UCR1_TXMPTYEN) || in imx_int()
759 readl(sport->port.membase + UCR4) & UCR4_TCEN)) in imx_int()
766 writel(USR1_AWAKE, sport->port.membase + USR1); in imx_int()
769 dev_err(sport->port.dev, "Rx FIFO overrun\n"); in imx_int()
770 sport->port.icount.overrun++; in imx_int()
771 writel(USR2_ORE, sport->port.membase + USR2); in imx_int()
780 static unsigned int imx_tx_empty(struct uart_port *port) in imx_tx_empty() argument
782 struct imx_port *sport = (struct imx_port *)port; in imx_tx_empty()
785 ret = (readl(sport->port.membase + USR2) & USR2_TXDC) ? TIOCSER_TEMT : 0; in imx_tx_empty()
797 static unsigned int imx_get_mctrl(struct uart_port *port) in imx_get_mctrl() argument
799 struct imx_port *sport = (struct imx_port *)port; in imx_get_mctrl()
802 if (readl(sport->port.membase + USR1) & USR1_RTSS) in imx_get_mctrl()
805 if (readl(sport->port.membase + UCR2) & UCR2_CTS) in imx_get_mctrl()
808 if (readl(sport->port.membase + uts_reg(sport)) & UTS_LOOP) in imx_get_mctrl()
814 static void imx_set_mctrl(struct uart_port *port, unsigned int mctrl) in imx_set_mctrl() argument
816 struct imx_port *sport = (struct imx_port *)port; in imx_set_mctrl()
819 if (!(port->rs485.flags & SER_RS485_ENABLED)) { in imx_set_mctrl()
820 temp = readl(sport->port.membase + UCR2); in imx_set_mctrl()
824 writel(temp, sport->port.membase + UCR2); in imx_set_mctrl()
827 temp = readl(sport->port.membase + uts_reg(sport)) & ~UTS_LOOP; in imx_set_mctrl()
830 writel(temp, sport->port.membase + uts_reg(sport)); in imx_set_mctrl()
836 static void imx_break_ctl(struct uart_port *port, int break_state) in imx_break_ctl() argument
838 struct imx_port *sport = (struct imx_port *)port; in imx_break_ctl()
841 spin_lock_irqsave(&sport->port.lock, flags); in imx_break_ctl()
843 temp = readl(sport->port.membase + UCR1) & ~UCR1_SNDBRK; in imx_break_ctl()
848 writel(temp, sport->port.membase + UCR1); in imx_break_ctl()
850 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_break_ctl()
861 val = readl(sport->port.membase + UFCR) & (UFCR_RFDIV | UFCR_DCEDTE); in imx_setup_ufcr()
863 writel(val, sport->port.membase + UFCR); in imx_setup_ufcr()
873 spin_lock_irqsave(&sport->port.lock, flags); in imx_rx_dma_done()
876 temp = readl(sport->port.membase + UCR1); in imx_rx_dma_done()
878 writel(temp, sport->port.membase + UCR1); in imx_rx_dma_done()
886 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_rx_dma_done()
904 struct tty_port *port = &sport->port.state->port; in dma_rx_callback() local
910 dma_unmap_sg(sport->port.dev, sgl, 1, DMA_FROM_DEVICE); in dma_rx_callback()
915 if (readl(sport->port.membase + USR2) & USR2_IDLE) { in dma_rx_callback()
919 writel(USR2_IDLE, sport->port.membase + USR2); in dma_rx_callback()
922 dev_dbg(sport->port.dev, "We get %d bytes.\n", count); in dma_rx_callback()
925 if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) in dma_rx_callback()
926 tty_insert_flip_string(port, sport->rx_buf, count); in dma_rx_callback()
927 tty_flip_buffer_push(port); in dma_rx_callback()
930 } else if (readl(sport->port.membase + USR2) & USR2_RDR) { in dma_rx_callback()
951 struct device *dev = sport->port.dev; in start_rx_dma()
998 struct device *dev = sport->port.dev; in imx_uart_dma_init()
1010 slave_config.src_addr = sport->port.mapbase + URXD0; in imx_uart_dma_init()
1034 slave_config.dst_addr = sport->port.mapbase + URTX0; in imx_uart_dma_init()
1058 temp = readl(sport->port.membase + UCR1); in imx_enable_dma()
1062 writel(temp, sport->port.membase + UCR1); in imx_enable_dma()
1065 temp = readl(sport->port.membase + UCR4); in imx_enable_dma()
1067 writel(temp, sport->port.membase + UCR4); in imx_enable_dma()
1077 temp = readl(sport->port.membase + UCR1); in imx_disable_dma()
1079 writel(temp, sport->port.membase + UCR1); in imx_disable_dma()
1082 temp = readl(sport->port.membase + UCR2); in imx_disable_dma()
1084 writel(temp, sport->port.membase + UCR2); in imx_disable_dma()
1087 temp = readl(sport->port.membase + UCR4); in imx_disable_dma()
1089 writel(temp, sport->port.membase + UCR4); in imx_disable_dma()
1097 static int imx_startup(struct uart_port *port) in imx_startup() argument
1099 struct imx_port *sport = (struct imx_port *)port; in imx_startup()
1117 temp = readl(sport->port.membase + UCR4); in imx_startup()
1123 writel(temp & ~UCR4_DREN, sport->port.membase + UCR4); in imx_startup()
1128 temp = readl(sport->port.membase + UCR2); in imx_startup()
1130 writel(temp, sport->port.membase + UCR2); in imx_startup()
1132 while (!(readl(sport->port.membase + UCR2) & UCR2_SRST) && (--i > 0)) in imx_startup()
1135 spin_lock_irqsave(&sport->port.lock, flags); in imx_startup()
1140 writel(USR1_RTSD, sport->port.membase + USR1); in imx_startup()
1141 writel(USR2_ORE, sport->port.membase + USR2); in imx_startup()
1143 temp = readl(sport->port.membase + UCR1); in imx_startup()
1146 writel(temp, sport->port.membase + UCR1); in imx_startup()
1148 temp = readl(sport->port.membase + UCR4); in imx_startup()
1150 writel(temp, sport->port.membase + UCR4); in imx_startup()
1152 temp = readl(sport->port.membase + UCR2); in imx_startup()
1156 writel(temp, sport->port.membase + UCR2); in imx_startup()
1159 temp = readl(sport->port.membase + UCR3); in imx_startup()
1161 writel(temp, sport->port.membase + UCR3); in imx_startup()
1167 imx_enable_ms(&sport->port); in imx_startup()
1168 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_startup()
1173 static void imx_shutdown(struct uart_port *port) in imx_shutdown() argument
1175 struct imx_port *sport = (struct imx_port *)port; in imx_shutdown()
1191 spin_lock_irqsave(&sport->port.lock, flags); in imx_shutdown()
1192 imx_stop_tx(port); in imx_shutdown()
1193 imx_stop_rx(port); in imx_shutdown()
1195 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_shutdown()
1199 spin_lock_irqsave(&sport->port.lock, flags); in imx_shutdown()
1200 temp = readl(sport->port.membase + UCR2); in imx_shutdown()
1202 writel(temp, sport->port.membase + UCR2); in imx_shutdown()
1203 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_shutdown()
1214 spin_lock_irqsave(&sport->port.lock, flags); in imx_shutdown()
1215 temp = readl(sport->port.membase + UCR1); in imx_shutdown()
1218 writel(temp, sport->port.membase + UCR1); in imx_shutdown()
1219 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_shutdown()
1225 static void imx_flush_buffer(struct uart_port *port) in imx_flush_buffer() argument
1227 struct imx_port *sport = (struct imx_port *)port; in imx_flush_buffer()
1238 dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, in imx_flush_buffer()
1240 temp = readl(sport->port.membase + UCR1); in imx_flush_buffer()
1242 writel(temp, sport->port.membase + UCR1); in imx_flush_buffer()
1253 ubir = readl(sport->port.membase + UBIR); in imx_flush_buffer()
1254 ubmr = readl(sport->port.membase + UBMR); in imx_flush_buffer()
1255 uts = readl(sport->port.membase + IMX21_UTS); in imx_flush_buffer()
1257 temp = readl(sport->port.membase + UCR2); in imx_flush_buffer()
1259 writel(temp, sport->port.membase + UCR2); in imx_flush_buffer()
1261 while (!(readl(sport->port.membase + UCR2) & UCR2_SRST) && (--i > 0)) in imx_flush_buffer()
1265 writel(ubir, sport->port.membase + UBIR); in imx_flush_buffer()
1266 writel(ubmr, sport->port.membase + UBMR); in imx_flush_buffer()
1267 writel(uts, sport->port.membase + IMX21_UTS); in imx_flush_buffer()
1271 imx_set_termios(struct uart_port *port, struct ktermios *termios, in imx_set_termios() argument
1274 struct imx_port *sport = (struct imx_port *)port; in imx_set_termios()
1301 if (port->rs485.flags & SER_RS485_ENABLED) { in imx_set_termios()
1307 if (!(port->rs485.flags & in imx_set_termios()
1315 if (is_imx6q_uart(sport) && !uart_console(port) in imx_set_termios()
1321 } else if (port->rs485.flags & SER_RS485_ENABLED) in imx_set_termios()
1323 if (!(port->rs485.flags & SER_RS485_RTS_AFTER_SEND)) in imx_set_termios()
1339 baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16); in imx_set_termios()
1340 quot = uart_get_divisor(port, baud); in imx_set_termios()
1342 spin_lock_irqsave(&sport->port.lock, flags); in imx_set_termios()
1344 sport->port.read_status_mask = 0; in imx_set_termios()
1346 sport->port.read_status_mask |= (URXD_FRMERR | URXD_PRERR); in imx_set_termios()
1348 sport->port.read_status_mask |= URXD_BRK; in imx_set_termios()
1353 sport->port.ignore_status_mask = 0; in imx_set_termios()
1355 sport->port.ignore_status_mask |= URXD_PRERR | URXD_FRMERR; in imx_set_termios()
1357 sport->port.ignore_status_mask |= URXD_BRK; in imx_set_termios()
1363 sport->port.ignore_status_mask |= URXD_OVRRUN; in imx_set_termios()
1367 sport->port.ignore_status_mask |= URXD_DUMMY_READ; in imx_set_termios()
1372 uart_update_timeout(port, termios->c_cflag, baud); in imx_set_termios()
1377 old_ucr1 = readl(sport->port.membase + UCR1); in imx_set_termios()
1379 sport->port.membase + UCR1); in imx_set_termios()
1381 while (!(readl(sport->port.membase + USR2) & USR2_TXDC)) in imx_set_termios()
1385 old_txrxen = readl(sport->port.membase + UCR2); in imx_set_termios()
1387 sport->port.membase + UCR2); in imx_set_termios()
1391 div = sport->port.uartclk / (baud * 16); in imx_set_termios()
1393 baud = sport->port.uartclk / (quot * 16); in imx_set_termios()
1395 div = sport->port.uartclk / (baud * 16); in imx_set_termios()
1401 rational_best_approximation(16 * div * baud, sport->port.uartclk, in imx_set_termios()
1404 tdiv64 = sport->port.uartclk; in imx_set_termios()
1413 ufcr = readl(sport->port.membase + UFCR); in imx_set_termios()
1417 writel(ufcr, sport->port.membase + UFCR); in imx_set_termios()
1419 writel(num, sport->port.membase + UBIR); in imx_set_termios()
1420 writel(denom, sport->port.membase + UBMR); in imx_set_termios()
1423 writel(sport->port.uartclk / div / 1000, in imx_set_termios()
1424 sport->port.membase + IMX21_ONEMS); in imx_set_termios()
1426 writel(old_ucr1, sport->port.membase + UCR1); in imx_set_termios()
1429 writel(ucr2 | old_txrxen, sport->port.membase + UCR2); in imx_set_termios()
1431 if (UART_ENABLE_MS(&sport->port, termios->c_cflag)) in imx_set_termios()
1432 imx_enable_ms(&sport->port); in imx_set_termios()
1436 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_set_termios()
1439 static const char *imx_type(struct uart_port *port) in imx_type() argument
1441 struct imx_port *sport = (struct imx_port *)port; in imx_type()
1443 return sport->port.type == PORT_IMX ? "IMX" : NULL; in imx_type()
1449 static void imx_config_port(struct uart_port *port, int flags) in imx_config_port() argument
1451 struct imx_port *sport = (struct imx_port *)port; in imx_config_port()
1454 sport->port.type = PORT_IMX; in imx_config_port()
1463 imx_verify_port(struct uart_port *port, struct serial_struct *ser) in imx_verify_port() argument
1465 struct imx_port *sport = (struct imx_port *)port; in imx_verify_port()
1470 if (sport->port.irq != ser->irq) in imx_verify_port()
1474 if (sport->port.uartclk / 16 != ser->baud_base) in imx_verify_port()
1476 if (sport->port.mapbase != (unsigned long)ser->iomem_base) in imx_verify_port()
1478 if (sport->port.iobase != ser->port) in imx_verify_port()
1487 static int imx_poll_init(struct uart_port *port) in imx_poll_init() argument
1489 struct imx_port *sport = (struct imx_port *)port; in imx_poll_init()
1503 spin_lock_irqsave(&sport->port.lock, flags); in imx_poll_init()
1505 temp = readl(sport->port.membase + UCR1); in imx_poll_init()
1510 writel(temp, sport->port.membase + UCR1); in imx_poll_init()
1512 temp = readl(sport->port.membase + UCR2); in imx_poll_init()
1514 writel(temp, sport->port.membase + UCR2); in imx_poll_init()
1516 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_poll_init()
1521 static int imx_poll_get_char(struct uart_port *port) in imx_poll_get_char() argument
1523 if (!(readl_relaxed(port->membase + USR2) & USR2_RDR)) in imx_poll_get_char()
1526 return readl_relaxed(port->membase + URXD0) & URXD_RX_DATA; in imx_poll_get_char()
1529 static void imx_poll_put_char(struct uart_port *port, unsigned char c) in imx_poll_put_char() argument
1535 status = readl_relaxed(port->membase + USR1); in imx_poll_put_char()
1539 writel_relaxed(c, port->membase + URTX0); in imx_poll_put_char()
1543 status = readl_relaxed(port->membase + USR2); in imx_poll_put_char()
1548 static int imx_rs485_config(struct uart_port *port, in imx_rs485_config() argument
1551 struct imx_port *sport = (struct imx_port *)port; in imx_rs485_config()
1566 temp = readl(sport->port.membase + UCR2); in imx_rs485_config()
1572 writel(temp, sport->port.membase + UCR2); in imx_rs485_config()
1575 port->rs485 = *rs485conf; in imx_rs485_config()
1606 static void imx_console_putchar(struct uart_port *port, int ch) in imx_console_putchar() argument
1608 struct imx_port *sport = (struct imx_port *)port; in imx_console_putchar()
1610 while (readl(sport->port.membase + uts_reg(sport)) & UTS_TXFULL) in imx_console_putchar()
1613 writel(ch, sport->port.membase + URTX0); in imx_console_putchar()
1638 if (sport->port.sysrq) in imx_console_write()
1641 locked = spin_trylock_irqsave(&sport->port.lock, flags); in imx_console_write()
1643 spin_lock_irqsave(&sport->port.lock, flags); in imx_console_write()
1648 imx_port_ucrs_save(&sport->port, &old_ucr); in imx_console_write()
1656 writel(ucr1, sport->port.membase + UCR1); in imx_console_write()
1658 writel(old_ucr.ucr2 | UCR2_TXEN, sport->port.membase + UCR2); in imx_console_write()
1660 uart_console_write(&sport->port, s, count, imx_console_putchar); in imx_console_write()
1666 while (!(readl(sport->port.membase + USR2) & USR2_TXDC)); in imx_console_write()
1668 imx_port_ucrs_restore(&sport->port, &old_ucr); in imx_console_write()
1671 spin_unlock_irqrestore(&sport->port.lock, flags); in imx_console_write()
1686 if (readl(sport->port.membase + UCR1) & UCR1_UARTEN) { in imx_console_get_options()
1692 ucr2 = readl(sport->port.membase + UCR2); in imx_console_get_options()
1707 ubir = readl(sport->port.membase + UBIR) & 0xffff; in imx_console_get_options()
1708 ubmr = readl(sport->port.membase + UBMR) & 0xffff; in imx_console_get_options()
1710 ucfr_rfdiv = (readl(sport->port.membase + UFCR) & UFCR_RFDIV) >> 7; in imx_console_get_options()
1773 retval = uart_set_options(&sport->port, co, baud, parity, bits, flow); in imx_console_setup()
1821 val = readl(sport->port.membase + UCR3); in serial_imx_suspend()
1823 writel(val, sport->port.membase + UCR3); in serial_imx_suspend()
1825 uart_suspend_port(&imx_reg, &sport->port); in serial_imx_suspend()
1836 val = readl(sport->port.membase + UCR3); in serial_imx_resume()
1838 writel(val, sport->port.membase + UCR3); in serial_imx_resume()
1840 uart_resume_port(&imx_reg, &sport->port); in serial_imx_resume()
1867 sport->port.line = ret; in serial_imx_probe_dt()
1892 sport->port.line = pdev->id; in serial_imx_probe_pdata()
1929 sport->port.dev = &pdev->dev; in serial_imx_probe()
1930 sport->port.mapbase = res->start; in serial_imx_probe()
1931 sport->port.membase = base; in serial_imx_probe()
1932 sport->port.type = PORT_IMX, in serial_imx_probe()
1933 sport->port.iotype = UPIO_MEM; in serial_imx_probe()
1934 sport->port.irq = rxirq; in serial_imx_probe()
1935 sport->port.fifosize = 32; in serial_imx_probe()
1936 sport->port.ops = &imx_pops; in serial_imx_probe()
1937 sport->port.rs485_config = imx_rs485_config; in serial_imx_probe()
1938 sport->port.rs485.flags = in serial_imx_probe()
1940 sport->port.flags = UPF_BOOT_AUTOCONF; in serial_imx_probe()
1959 sport->port.uartclk = clk_get_rate(sport->clk_per); in serial_imx_probe()
1982 imx_ports[sport->port.line] = sport; in serial_imx_probe()
1986 return uart_add_one_port(&imx_reg, &sport->port); in serial_imx_probe()
1993 return uart_remove_one_port(&imx_reg, &sport->port); in serial_imx_remove()