Lines Matching refs:port
304 struct uart_port port; member
324 static u8 sc16is7xx_port_read(struct uart_port *port, u8 reg) in sc16is7xx_port_read() argument
326 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_port_read()
330 (reg << SC16IS7XX_REG_SHIFT) | port->line, &val); in sc16is7xx_port_read()
335 static void sc16is7xx_port_write(struct uart_port *port, u8 reg, u8 val) in sc16is7xx_port_write() argument
337 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_port_write()
340 (reg << SC16IS7XX_REG_SHIFT) | port->line, val); in sc16is7xx_port_write()
343 static void sc16is7xx_port_update(struct uart_port *port, u8 reg, in sc16is7xx_port_update() argument
346 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_port_update()
349 (reg << SC16IS7XX_REG_SHIFT) | port->line, in sc16is7xx_port_update()
354 static void sc16is7xx_power(struct uart_port *port, int on) in sc16is7xx_power() argument
356 sc16is7xx_port_update(port, SC16IS7XX_IER_REG, in sc16is7xx_power()
421 static int sc16is7xx_set_baud(struct uart_port *port, int baud) in sc16is7xx_set_baud() argument
423 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_set_baud()
426 unsigned long clk = port->uartclk, div = clk / 16 / baud; in sc16is7xx_set_baud()
433 lcr = sc16is7xx_port_read(port, SC16IS7XX_LCR_REG); in sc16is7xx_set_baud()
436 sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, in sc16is7xx_set_baud()
441 sc16is7xx_port_write(port, SC16IS7XX_EFR_REG, in sc16is7xx_set_baud()
446 sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, lcr); in sc16is7xx_set_baud()
448 sc16is7xx_port_update(port, SC16IS7XX_MCR_REG, in sc16is7xx_set_baud()
453 sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, in sc16is7xx_set_baud()
458 sc16is7xx_port_write(port, SC16IS7XX_DLH_REG, div / 256); in sc16is7xx_set_baud()
459 sc16is7xx_port_write(port, SC16IS7XX_DLL_REG, div % 256); in sc16is7xx_set_baud()
463 sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, lcr); in sc16is7xx_set_baud()
468 static void sc16is7xx_handle_rx(struct uart_port *port, unsigned int rxlen, in sc16is7xx_handle_rx() argument
471 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_handle_rx()
476 dev_warn_ratelimited(port->dev, in sc16is7xx_handle_rx()
478 port->line, rxlen); in sc16is7xx_handle_rx()
479 port->icount.buf_overrun++; in sc16is7xx_handle_rx()
487 lsr = sc16is7xx_port_read(port, SC16IS7XX_LSR_REG); in sc16is7xx_handle_rx()
494 s->buf[0] = sc16is7xx_port_read(port, SC16IS7XX_RHR_REG); in sc16is7xx_handle_rx()
506 port->icount.rx++; in sc16is7xx_handle_rx()
511 port->icount.brk++; in sc16is7xx_handle_rx()
512 if (uart_handle_break(port)) in sc16is7xx_handle_rx()
515 port->icount.parity++; in sc16is7xx_handle_rx()
517 port->icount.frame++; in sc16is7xx_handle_rx()
519 port->icount.overrun++; in sc16is7xx_handle_rx()
521 lsr &= port->read_status_mask; in sc16is7xx_handle_rx()
534 if (uart_handle_sysrq_char(port, ch)) in sc16is7xx_handle_rx()
537 if (lsr & port->ignore_status_mask) in sc16is7xx_handle_rx()
540 uart_insert_char(port, lsr, SC16IS7XX_LSR_OE_BIT, ch, in sc16is7xx_handle_rx()
546 tty_flip_buffer_push(&port->state->port); in sc16is7xx_handle_rx()
549 static void sc16is7xx_handle_tx(struct uart_port *port) in sc16is7xx_handle_tx() argument
551 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_handle_tx()
552 struct circ_buf *xmit = &port->state->xmit; in sc16is7xx_handle_tx()
555 if (unlikely(port->x_char)) { in sc16is7xx_handle_tx()
556 sc16is7xx_port_write(port, SC16IS7XX_THR_REG, port->x_char); in sc16is7xx_handle_tx()
557 port->icount.tx++; in sc16is7xx_handle_tx()
558 port->x_char = 0; in sc16is7xx_handle_tx()
562 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) in sc16is7xx_handle_tx()
569 txlen = sc16is7xx_port_read(port, SC16IS7XX_TXLVL_REG); in sc16is7xx_handle_tx()
573 port->icount.tx += to_send; in sc16is7xx_handle_tx()
586 uart_write_wakeup(port); in sc16is7xx_handle_tx()
591 struct uart_port *port = &s->p[portno].port; in sc16is7xx_port_irq() local
596 iir = sc16is7xx_port_read(port, SC16IS7XX_IIR_REG); in sc16is7xx_port_irq()
607 rxlen = sc16is7xx_port_read(port, SC16IS7XX_RXLVL_REG); in sc16is7xx_port_irq()
609 sc16is7xx_handle_rx(port, rxlen, iir); in sc16is7xx_port_irq()
613 msr = sc16is7xx_port_read(port, SC16IS7XX_MSR_REG); in sc16is7xx_port_irq()
614 uart_handle_cts_change(port, in sc16is7xx_port_irq()
619 sc16is7xx_handle_tx(port); in sc16is7xx_port_irq()
623 dev_err_ratelimited(port->dev, in sc16is7xx_port_irq()
625 port->line, iir); in sc16is7xx_port_irq()
645 struct sc16is7xx_port *s = dev_get_drvdata(one->port.dev); in sc16is7xx_wq_proc()
648 sc16is7xx_handle_tx(&one->port); in sc16is7xx_wq_proc()
652 static void sc16is7xx_stop_tx(struct uart_port* port) in sc16is7xx_stop_tx() argument
654 struct sc16is7xx_one *one = to_sc16is7xx_one(port, port); in sc16is7xx_stop_tx()
655 struct circ_buf *xmit = &one->port.state->xmit; in sc16is7xx_stop_tx()
658 if (port->rs485.flags & SER_RS485_ENABLED) { in sc16is7xx_stop_tx()
660 int lsr = sc16is7xx_port_read(port, SC16IS7XX_LSR_REG); in sc16is7xx_stop_tx()
665 (port->rs485.delay_rts_after_send > 0)) in sc16is7xx_stop_tx()
666 mdelay(port->rs485.delay_rts_after_send); in sc16is7xx_stop_tx()
669 sc16is7xx_port_update(port, SC16IS7XX_IER_REG, in sc16is7xx_stop_tx()
674 static void sc16is7xx_stop_rx(struct uart_port* port) in sc16is7xx_stop_rx() argument
676 struct sc16is7xx_one *one = to_sc16is7xx_one(port, port); in sc16is7xx_stop_rx()
678 one->port.read_status_mask &= ~SC16IS7XX_LSR_DR_BIT; in sc16is7xx_stop_rx()
679 sc16is7xx_port_update(port, SC16IS7XX_IER_REG, in sc16is7xx_stop_rx()
684 static void sc16is7xx_start_tx(struct uart_port *port) in sc16is7xx_start_tx() argument
686 struct sc16is7xx_one *one = to_sc16is7xx_one(port, port); in sc16is7xx_start_tx()
689 if ((port->rs485.flags & SER_RS485_ENABLED) && in sc16is7xx_start_tx()
690 (port->rs485.delay_rts_before_send > 0)) { in sc16is7xx_start_tx()
691 mdelay(port->rs485.delay_rts_before_send); in sc16is7xx_start_tx()
698 static unsigned int sc16is7xx_tx_empty(struct uart_port *port) in sc16is7xx_tx_empty() argument
702 lvl = sc16is7xx_port_read(port, SC16IS7XX_TXLVL_REG); in sc16is7xx_tx_empty()
703 lsr = sc16is7xx_port_read(port, SC16IS7XX_LSR_REG); in sc16is7xx_tx_empty()
708 static unsigned int sc16is7xx_get_mctrl(struct uart_port *port) in sc16is7xx_get_mctrl() argument
720 sc16is7xx_port_update(&one->port, SC16IS7XX_MCR_REG, in sc16is7xx_md_proc()
722 (one->port.mctrl & TIOCM_LOOP) ? in sc16is7xx_md_proc()
726 static void sc16is7xx_set_mctrl(struct uart_port *port, unsigned int mctrl) in sc16is7xx_set_mctrl() argument
728 struct sc16is7xx_one *one = to_sc16is7xx_one(port, port); in sc16is7xx_set_mctrl()
733 static void sc16is7xx_break_ctl(struct uart_port *port, int break_state) in sc16is7xx_break_ctl() argument
735 sc16is7xx_port_update(port, SC16IS7XX_LCR_REG, in sc16is7xx_break_ctl()
740 static void sc16is7xx_set_termios(struct uart_port *port, in sc16is7xx_set_termios() argument
744 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_set_termios()
784 port->read_status_mask = SC16IS7XX_LSR_OE_BIT; in sc16is7xx_set_termios()
786 port->read_status_mask |= SC16IS7XX_LSR_PE_BIT | in sc16is7xx_set_termios()
789 port->read_status_mask |= SC16IS7XX_LSR_BI_BIT; in sc16is7xx_set_termios()
792 port->ignore_status_mask = 0; in sc16is7xx_set_termios()
794 port->ignore_status_mask |= SC16IS7XX_LSR_BI_BIT; in sc16is7xx_set_termios()
796 port->ignore_status_mask |= SC16IS7XX_LSR_BRK_ERROR_MASK; in sc16is7xx_set_termios()
798 sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, in sc16is7xx_set_termios()
803 sc16is7xx_port_write(port, SC16IS7XX_XON1_REG, termios->c_cc[VSTART]); in sc16is7xx_set_termios()
804 sc16is7xx_port_write(port, SC16IS7XX_XOFF1_REG, termios->c_cc[VSTOP]); in sc16is7xx_set_termios()
813 sc16is7xx_port_write(port, SC16IS7XX_EFR_REG, flow); in sc16is7xx_set_termios()
817 sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, lcr); in sc16is7xx_set_termios()
820 baud = uart_get_baud_rate(port, termios, old, in sc16is7xx_set_termios()
821 port->uartclk / 16 / 4 / 0xffff, in sc16is7xx_set_termios()
822 port->uartclk / 16); in sc16is7xx_set_termios()
825 baud = sc16is7xx_set_baud(port, baud); in sc16is7xx_set_termios()
828 uart_update_timeout(port, termios->c_cflag, baud); in sc16is7xx_set_termios()
831 static int sc16is7xx_config_rs485(struct uart_port *port, in sc16is7xx_config_rs485() argument
851 dev_err(port->dev, in sc16is7xx_config_rs485()
856 sc16is7xx_port_update(port, SC16IS7XX_EFCR_REG, mask, efcr); in sc16is7xx_config_rs485()
858 port->rs485 = *rs485; in sc16is7xx_config_rs485()
863 static int sc16is7xx_startup(struct uart_port *port) in sc16is7xx_startup() argument
865 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_startup()
868 sc16is7xx_power(port, 1); in sc16is7xx_startup()
872 sc16is7xx_port_write(port, SC16IS7XX_FCR_REG, val); in sc16is7xx_startup()
874 sc16is7xx_port_write(port, SC16IS7XX_FCR_REG, in sc16is7xx_startup()
878 sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, in sc16is7xx_startup()
884 sc16is7xx_port_write(port, SC16IS7XX_EFR_REG, in sc16is7xx_startup()
888 sc16is7xx_port_update(port, SC16IS7XX_MCR_REG, in sc16is7xx_startup()
894 sc16is7xx_port_write(port, SC16IS7XX_TCR_REG, in sc16is7xx_startup()
901 sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, SC16IS7XX_LCR_WORD_LEN_8); in sc16is7xx_startup()
904 sc16is7xx_port_update(port, SC16IS7XX_EFCR_REG, in sc16is7xx_startup()
912 sc16is7xx_port_write(port, SC16IS7XX_IER_REG, val); in sc16is7xx_startup()
917 static void sc16is7xx_shutdown(struct uart_port *port) in sc16is7xx_shutdown() argument
920 sc16is7xx_port_write(port, SC16IS7XX_IER_REG, 0); in sc16is7xx_shutdown()
922 sc16is7xx_port_update(port, SC16IS7XX_EFCR_REG, in sc16is7xx_shutdown()
928 sc16is7xx_power(port, 0); in sc16is7xx_shutdown()
931 static const char *sc16is7xx_type(struct uart_port *port) in sc16is7xx_type() argument
933 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_type()
935 return (port->type == PORT_SC16IS7XX) ? s->devtype->name : NULL; in sc16is7xx_type()
938 static int sc16is7xx_request_port(struct uart_port *port) in sc16is7xx_request_port() argument
944 static void sc16is7xx_config_port(struct uart_port *port, int flags) in sc16is7xx_config_port() argument
947 port->type = PORT_SC16IS7XX; in sc16is7xx_config_port()
950 static int sc16is7xx_verify_port(struct uart_port *port, in sc16is7xx_verify_port() argument
955 if (s->irq != port->irq) in sc16is7xx_verify_port()
961 static void sc16is7xx_pm(struct uart_port *port, unsigned int state, in sc16is7xx_pm() argument
964 sc16is7xx_power(port, (state == UART_PM_STATE_ON) ? 1 : 0); in sc16is7xx_pm()
967 static void sc16is7xx_null_void(struct uart_port *port) in sc16is7xx_null_void() argument
997 struct uart_port *port = &s->p[0].port; in sc16is7xx_gpio_get() local
999 val = sc16is7xx_port_read(port, SC16IS7XX_IOSTATE_REG); in sc16is7xx_gpio_get()
1008 struct uart_port *port = &s->p[0].port; in sc16is7xx_gpio_set() local
1010 sc16is7xx_port_update(port, SC16IS7XX_IOSTATE_REG, BIT(offset), in sc16is7xx_gpio_set()
1019 struct uart_port *port = &s->p[0].port; in sc16is7xx_gpio_direction_input() local
1021 sc16is7xx_port_update(port, SC16IS7XX_IODIR_REG, BIT(offset), 0); in sc16is7xx_gpio_direction_input()
1031 struct uart_port *port = &s->p[0].port; in sc16is7xx_gpio_direction_output() local
1033 sc16is7xx_port_update(port, SC16IS7XX_IOSTATE_REG, BIT(offset), in sc16is7xx_gpio_direction_output()
1035 sc16is7xx_port_update(port, SC16IS7XX_IODIR_REG, BIT(offset), in sc16is7xx_gpio_direction_output()
1110 s->p[i].port.line = i; in sc16is7xx_probe()
1111 s->p[i].port.dev = dev; in sc16is7xx_probe()
1112 s->p[i].port.irq = irq; in sc16is7xx_probe()
1113 s->p[i].port.type = PORT_SC16IS7XX; in sc16is7xx_probe()
1114 s->p[i].port.fifosize = SC16IS7XX_FIFO_SIZE; in sc16is7xx_probe()
1115 s->p[i].port.flags = UPF_FIXED_TYPE | UPF_LOW_LATENCY; in sc16is7xx_probe()
1116 s->p[i].port.iotype = UPIO_PORT; in sc16is7xx_probe()
1117 s->p[i].port.uartclk = freq; in sc16is7xx_probe()
1118 s->p[i].port.rs485_config = sc16is7xx_config_rs485; in sc16is7xx_probe()
1119 s->p[i].port.ops = &sc16is7xx_ops; in sc16is7xx_probe()
1121 sc16is7xx_port_write(&s->p[i].port, SC16IS7XX_IER_REG, 0); in sc16is7xx_probe()
1123 sc16is7xx_port_write(&s->p[i].port, SC16IS7XX_EFCR_REG, in sc16is7xx_probe()
1131 uart_add_one_port(&s->uart, &s->p[i].port); in sc16is7xx_probe()
1133 sc16is7xx_power(&s->p[i].port, 0); in sc16is7xx_probe()
1143 uart_remove_one_port(&s->uart, &s->p[i].port); in sc16is7xx_probe()
1175 uart_remove_one_port(&s->uart, &s->p[i].port); in sc16is7xx_remove()
1176 sc16is7xx_power(&s->p[i].port, 0); in sc16is7xx_remove()