Lines Matching refs:port
116 struct uart_port port; member
124 static inline unsigned int serial_in(struct uart_port *port, int offset) in serial_in() argument
126 return readl_relaxed(port->membase + offset); in serial_in()
129 static inline void serial_out(struct uart_port *port, int offset, int value) in serial_out() argument
131 writel_relaxed(value, port->membase + offset); in serial_out()
134 static unsigned int sprd_tx_empty(struct uart_port *port) in sprd_tx_empty() argument
136 if (serial_in(port, SPRD_STS1) & 0xff00) in sprd_tx_empty()
142 static unsigned int sprd_get_mctrl(struct uart_port *port) in sprd_get_mctrl() argument
147 static void sprd_set_mctrl(struct uart_port *port, unsigned int mctrl) in sprd_set_mctrl() argument
152 static void sprd_stop_tx(struct uart_port *port) in sprd_stop_tx() argument
156 iclr = serial_in(port, SPRD_ICLR); in sprd_stop_tx()
157 ien = serial_in(port, SPRD_IEN); in sprd_stop_tx()
162 serial_out(port, SPRD_ICLR, iclr); in sprd_stop_tx()
163 serial_out(port, SPRD_IEN, ien); in sprd_stop_tx()
166 static void sprd_start_tx(struct uart_port *port) in sprd_start_tx() argument
170 ien = serial_in(port, SPRD_IEN); in sprd_start_tx()
173 serial_out(port, SPRD_IEN, ien); in sprd_start_tx()
177 static void sprd_stop_rx(struct uart_port *port) in sprd_stop_rx() argument
181 iclr = serial_in(port, SPRD_ICLR); in sprd_stop_rx()
182 ien = serial_in(port, SPRD_IEN); in sprd_stop_rx()
187 serial_out(port, SPRD_IEN, ien); in sprd_stop_rx()
188 serial_out(port, SPRD_ICLR, iclr); in sprd_stop_rx()
192 static void sprd_break_ctl(struct uart_port *port, int break_state) in sprd_break_ctl() argument
197 static int handle_lsr_errors(struct uart_port *port, in handle_lsr_errors() argument
206 port->icount.brk++; in handle_lsr_errors()
207 ret = uart_handle_break(port); in handle_lsr_errors()
211 port->icount.parity++; in handle_lsr_errors()
213 port->icount.frame++; in handle_lsr_errors()
215 port->icount.overrun++; in handle_lsr_errors()
218 *lsr &= port->read_status_mask; in handle_lsr_errors()
229 static inline void sprd_rx(struct uart_port *port) in sprd_rx() argument
231 struct tty_port *tty = &port->state->port; in sprd_rx()
234 while ((serial_in(port, SPRD_STS1) & 0x00ff) && max_count--) { in sprd_rx()
235 lsr = serial_in(port, SPRD_LSR); in sprd_rx()
236 ch = serial_in(port, SPRD_RXD); in sprd_rx()
238 port->icount.rx++; in sprd_rx()
242 if (handle_lsr_errors(port, &lsr, &flag)) in sprd_rx()
244 if (uart_handle_sysrq_char(port, ch)) in sprd_rx()
247 uart_insert_char(port, lsr, SPRD_LSR_OE, ch, flag); in sprd_rx()
253 static inline void sprd_tx(struct uart_port *port) in sprd_tx() argument
255 struct circ_buf *xmit = &port->state->xmit; in sprd_tx()
258 if (port->x_char) { in sprd_tx()
259 serial_out(port, SPRD_TXD, port->x_char); in sprd_tx()
260 port->icount.tx++; in sprd_tx()
261 port->x_char = 0; in sprd_tx()
265 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { in sprd_tx()
266 sprd_stop_tx(port); in sprd_tx()
272 serial_out(port, SPRD_TXD, xmit->buf[xmit->tail]); in sprd_tx()
274 port->icount.tx++; in sprd_tx()
280 uart_write_wakeup(port); in sprd_tx()
283 sprd_stop_tx(port); in sprd_tx()
289 struct uart_port *port = dev_id; in sprd_handle_irq() local
292 spin_lock(&port->lock); in sprd_handle_irq()
294 ims = serial_in(port, SPRD_IMSR); in sprd_handle_irq()
297 spin_unlock(&port->lock); in sprd_handle_irq()
301 serial_out(port, SPRD_ICLR, ~0); in sprd_handle_irq()
305 sprd_rx(port); in sprd_handle_irq()
308 sprd_tx(port); in sprd_handle_irq()
310 spin_unlock(&port->lock); in sprd_handle_irq()
315 static int sprd_startup(struct uart_port *port) in sprd_startup() argument
323 serial_out(port, SPRD_CTL2, ((THLD_TX_EMPTY << 8) | THLD_RX_FULL)); in sprd_startup()
327 while (timeout-- && serial_in(port, SPRD_STS1) & 0x00ff) in sprd_startup()
328 serial_in(port, SPRD_RXD); in sprd_startup()
332 while (timeout-- && serial_in(port, SPRD_STS1) & 0xff00) in sprd_startup()
336 serial_out(port, SPRD_IEN, 0); in sprd_startup()
337 serial_out(port, SPRD_ICLR, ~0); in sprd_startup()
340 sp = container_of(port, struct sprd_uart_port, port); in sprd_startup()
341 snprintf(sp->name, sizeof(sp->name), "sprd_serial%d", port->line); in sprd_startup()
342 ret = devm_request_irq(port->dev, port->irq, sprd_handle_irq, in sprd_startup()
343 IRQF_SHARED, sp->name, port); in sprd_startup()
345 dev_err(port->dev, "fail to request serial irq %d, ret=%d\n", in sprd_startup()
346 port->irq, ret); in sprd_startup()
349 fc = serial_in(port, SPRD_CTL1); in sprd_startup()
351 serial_out(port, SPRD_CTL1, fc); in sprd_startup()
354 spin_lock_irqsave(&port->lock, flags); in sprd_startup()
355 ien = serial_in(port, SPRD_IEN); in sprd_startup()
357 serial_out(port, SPRD_IEN, ien); in sprd_startup()
358 spin_unlock_irqrestore(&port->lock, flags); in sprd_startup()
363 static void sprd_shutdown(struct uart_port *port) in sprd_shutdown() argument
365 serial_out(port, SPRD_IEN, 0); in sprd_shutdown()
366 serial_out(port, SPRD_ICLR, ~0); in sprd_shutdown()
367 devm_free_irq(port->dev, port->irq, port); in sprd_shutdown()
370 static void sprd_set_termios(struct uart_port *port, in sprd_set_termios() argument
379 baud = uart_get_baud_rate(port, termios, old, 0, SPRD_BAUD_IO_LIMIT); in sprd_set_termios()
381 quot = (unsigned int)((port->uartclk + baud / 2) / baud); in sprd_set_termios()
418 spin_lock_irqsave(&port->lock, flags); in sprd_set_termios()
421 uart_update_timeout(port, termios->c_cflag, baud); in sprd_set_termios()
423 port->read_status_mask = SPRD_LSR_OE; in sprd_set_termios()
425 port->read_status_mask |= SPRD_LSR_FE | SPRD_LSR_PE; in sprd_set_termios()
427 port->read_status_mask |= SPRD_LSR_BI; in sprd_set_termios()
430 port->ignore_status_mask = 0; in sprd_set_termios()
432 port->ignore_status_mask |= SPRD_LSR_PE | SPRD_LSR_FE; in sprd_set_termios()
434 port->ignore_status_mask |= SPRD_LSR_BI; in sprd_set_termios()
440 port->ignore_status_mask |= SPRD_LSR_OE; in sprd_set_termios()
444 fc = serial_in(port, SPRD_CTL1); in sprd_set_termios()
453 serial_out(port, SPRD_CLKD0, quot & 0xffff); in sprd_set_termios()
456 serial_out(port, SPRD_CLKD1, (quot & 0x1f0000) >> 16); in sprd_set_termios()
457 serial_out(port, SPRD_LCR, lcr); in sprd_set_termios()
459 serial_out(port, SPRD_CTL1, fc); in sprd_set_termios()
461 spin_unlock_irqrestore(&port->lock, flags); in sprd_set_termios()
468 static const char *sprd_type(struct uart_port *port) in sprd_type() argument
473 static void sprd_release_port(struct uart_port *port) in sprd_release_port() argument
478 static int sprd_request_port(struct uart_port *port) in sprd_request_port() argument
483 static void sprd_config_port(struct uart_port *port, int flags) in sprd_config_port() argument
486 port->type = PORT_SPRD; in sprd_config_port()
489 static int sprd_verify_port(struct uart_port *port, in sprd_verify_port() argument
494 if (port->irq != ser->irq) in sprd_verify_port()
496 if (port->iotype != ser->io_type) in sprd_verify_port()
520 static inline void wait_for_xmitr(struct uart_port *port) in wait_for_xmitr() argument
526 status = serial_in(port, SPRD_STS1); in wait_for_xmitr()
533 static void sprd_console_putchar(struct uart_port *port, int ch) in sprd_console_putchar() argument
535 wait_for_xmitr(port); in sprd_console_putchar()
536 serial_out(port, SPRD_TXD, ch); in sprd_console_putchar()
542 struct uart_port *port = &sprd_port[co->index]->port; in sprd_console_write() local
546 if (port->sysrq) in sprd_console_write()
549 locked = spin_trylock_irqsave(&port->lock, flags); in sprd_console_write()
551 spin_lock_irqsave(&port->lock, flags); in sprd_console_write()
553 uart_console_write(port, s, count, sprd_console_putchar); in sprd_console_write()
556 wait_for_xmitr(port); in sprd_console_write()
559 spin_unlock_irqrestore(&port->lock, flags); in sprd_console_write()
564 struct uart_port *port; in sprd_console_setup() local
573 port = &sprd_port[co->index]->port; in sprd_console_setup()
574 if (port == NULL) { in sprd_console_setup()
581 return uart_set_options(port, co, baud, parity, bits, flow); in sprd_console_setup()
598 static void sprd_putc(struct uart_port *port, int c) in sprd_putc() argument
603 !(readl(port->membase + SPRD_LSR) & SPRD_LSR_TX_OVER)) in sprd_putc()
606 writeb(c, port->membase + SPRD_TXD); in sprd_putc()
614 uart_console_write(&dev->port, s, n, sprd_putc); in sprd_early_write()
621 if (!device->port.membase) in sprd_early_console_setup()
674 uart_remove_one_port(&sprd_uart_driver, &sup->port); in sprd_remove()
675 sprd_port[sup->port.line] = NULL; in sprd_remove()
708 up = &sprd_port[index]->port; in sprd_probe()
764 uart_suspend_port(&sprd_uart_driver, &sup->port); in sprd_suspend()
773 uart_resume_port(&sprd_uart_driver, &sup->port); in sprd_resume()