Lines Matching +full:dtr +full:- +full:gpios
1 // SPDX-License-Identifier: GPL-2.0+
8 * Copyright (C) 2000-2001 Deep Blue Solutions Ltd.
38 * lockdep: port->lock is initialized in two places, but we
39 * want only one lock-class:
43 #define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
55 return !!(uport->status & UPSTAT_DCD_ENABLE); in uart_dcd_enabled()
60 if (atomic_add_unless(&state->refcount, 1, 0)) in uart_port_ref()
61 return state->uart_port; in uart_port_ref()
67 if (atomic_dec_and_test(&uport->state->refcount)) in uart_port_deref()
68 wake_up(&uport->state->remove_wait); in uart_port_deref()
75 spin_lock_irqsave(&__uport->lock, flags); \
83 spin_unlock_irqrestore(&__uport->lock, flags); \
90 lockdep_assert_held(&state->port.mutex); in uart_port_check()
91 return state->uart_port; in uart_port_check()
100 struct uart_state *state = port->state; in uart_write_wakeup()
106 tty_port_tty_wakeup(&state->port); in uart_write_wakeup()
111 struct uart_state *state = tty->driver_data; in uart_stop()
117 port->ops->stop_tx(port); in uart_stop()
123 struct uart_state *state = tty->driver_data; in __uart_start()
124 struct uart_port *port = state->uart_port; in __uart_start()
127 port->ops->start_tx(port); in __uart_start()
132 struct uart_state *state = tty->driver_data; in uart_start()
147 spin_lock_irqsave(&port->lock, flags); in uart_update_mctrl()
148 old = port->mctrl; in uart_update_mctrl()
149 port->mctrl = (old & ~clear) | set; in uart_update_mctrl()
150 if (old != port->mctrl) in uart_update_mctrl()
151 port->ops->set_mctrl(port, port->mctrl); in uart_update_mctrl()
152 spin_unlock_irqrestore(&port->lock, flags); in uart_update_mctrl()
160 int rs485_on = uport->rs485_config && in uart_port_dtr_rts()
161 (uport->rs485.flags & SER_RS485_ENABLED); in uart_port_dtr_rts()
162 int RTS_after_send = !!(uport->rs485.flags & SER_RS485_RTS_AFTER_SEND); in uart_port_dtr_rts()
181 * will be serialised by the per-port mutex.
191 if (uport->type == PORT_UNKNOWN) in uart_port_startup()
205 return -ENOMEM; in uart_port_startup()
208 if (!state->xmit.buf) { in uart_port_startup()
209 state->xmit.buf = (unsigned char *) page; in uart_port_startup()
210 uart_circ_clear(&state->xmit); in uart_port_startup()
221 retval = uport->ops->startup(uport); in uart_port_startup()
223 if (uart_console(uport) && uport->cons->cflag) { in uart_port_startup()
224 tty->termios.c_cflag = uport->cons->cflag; in uart_port_startup()
225 uport->cons->cflag = 0; in uart_port_startup()
233 * Setup the RTS and DTR signals once the in uart_port_startup()
254 struct tty_port *port = &state->port; in uart_startup()
262 set_bit(TTY_IO_ERROR, &tty->flags); in uart_startup()
269 * DTR is dropped if the hangup on close termio flag is on. Calls to
270 * uart_shutdown are serialised by the per-port semaphore.
277 struct tty_port *port = &state->port; in uart_shutdown()
285 set_bit(TTY_IO_ERROR, &tty->flags); in uart_shutdown()
291 * Turn off DTR and RTS early. in uart_shutdown()
294 uport->cons->cflag = tty->termios.c_cflag; in uart_shutdown()
316 xmit_buf = state->xmit.buf; in uart_shutdown()
317 state->xmit.buf = NULL; in uart_shutdown()
325 * uart_update_timeout - update per-port FIFO timeout.
363 bits = bits * port->fifosize; in uart_update_timeout()
369 port->timeout = (HZ * bits) / baud + HZ/50; in uart_update_timeout()
375 * uart_get_baud_rate - return baud rate for a particular port
401 upf_t flags = port->flags & UPF_SPD_MASK; in uart_get_baud_rate()
446 termios->c_cflag &= ~CBAUD; in uart_get_baud_rate()
466 max - 1, max - 1); in uart_get_baud_rate()
477 * uart_get_divisor - return uart clock divisor
491 if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) in uart_get_divisor()
492 quot = port->custom_divisor; in uart_get_divisor()
494 quot = DIV_ROUND_CLOSEST(port->uartclk, 16 * baud); in uart_get_divisor()
513 if (!tty || uport->type == PORT_UNKNOWN) in uart_change_speed()
516 termios = &tty->termios; in uart_change_speed()
517 uport->ops->set_termios(uport, termios, old_termios); in uart_change_speed()
522 spin_lock_irq(&uport->lock); in uart_change_speed()
523 if (termios->c_cflag & CRTSCTS) in uart_change_speed()
524 uport->status |= UPSTAT_CTS_ENABLE; in uart_change_speed()
526 uport->status &= ~UPSTAT_CTS_ENABLE; in uart_change_speed()
528 if (termios->c_cflag & CLOCAL) in uart_change_speed()
529 uport->status &= ~UPSTAT_DCD_ENABLE; in uart_change_speed()
531 uport->status |= UPSTAT_DCD_ENABLE; in uart_change_speed()
533 /* reset sw-assisted CTS flow control based on (possibly) new mode */ in uart_change_speed()
534 hw_stopped = uport->hw_stopped; in uart_change_speed()
535 uport->hw_stopped = uart_softcts_mode(uport) && in uart_change_speed()
536 !(uport->ops->get_mctrl(uport) & TIOCM_CTS); in uart_change_speed()
537 if (uport->hw_stopped) { in uart_change_speed()
539 uport->ops->stop_tx(uport); in uart_change_speed()
544 spin_unlock_irq(&uport->lock); in uart_change_speed()
549 struct uart_state *state = tty->driver_data; in uart_put_char()
555 circ = &state->xmit; in uart_put_char()
557 if (!circ->buf) { in uart_put_char()
563 circ->buf[circ->head] = c; in uart_put_char()
564 circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1); in uart_put_char()
579 struct uart_state *state = tty->driver_data; in uart_write()
591 return -EL3HLT; in uart_write()
595 circ = &state->xmit; in uart_write()
596 if (!circ->buf) { in uart_write()
602 c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); in uart_write()
607 memcpy(circ->buf + circ->head, buf, c); in uart_write()
608 circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1); in uart_write()
610 count -= c; in uart_write()
621 struct uart_state *state = tty->driver_data; in uart_write_room()
627 ret = uart_circ_chars_free(&state->xmit); in uart_write_room()
634 struct uart_state *state = tty->driver_data; in uart_chars_in_buffer()
640 ret = uart_circ_chars_pending(&state->xmit); in uart_chars_in_buffer()
647 struct uart_state *state = tty->driver_data; in uart_flush_buffer()
660 pr_debug("uart_flush_buffer(%d) called\n", tty->index); in uart_flush_buffer()
665 uart_circ_clear(&state->xmit); in uart_flush_buffer()
666 if (port->ops->flush_buffer) in uart_flush_buffer()
667 port->ops->flush_buffer(port); in uart_flush_buffer()
669 tty_port_tty_wakeup(&state->port); in uart_flush_buffer()
673 * This function is used to send a high-priority XON/XOFF character to
678 struct uart_state *state = tty->driver_data; in uart_send_xchar()
686 if (port->ops->send_xchar) in uart_send_xchar()
687 port->ops->send_xchar(port, ch); in uart_send_xchar()
689 spin_lock_irqsave(&port->lock, flags); in uart_send_xchar()
690 port->x_char = ch; in uart_send_xchar()
692 port->ops->start_tx(port); in uart_send_xchar()
693 spin_unlock_irqrestore(&port->lock, flags); in uart_send_xchar()
700 struct uart_state *state = tty->driver_data; in uart_throttle()
713 if (port->status & mask) { in uart_throttle()
714 port->ops->throttle(port); in uart_throttle()
715 mask &= ~port->status; in uart_throttle()
729 struct uart_state *state = tty->driver_data; in uart_unthrottle()
742 if (port->status & mask) { in uart_unthrottle()
743 port->ops->unthrottle(port); in uart_unthrottle()
744 mask &= ~port->status; in uart_unthrottle()
760 int ret = -ENODEV; in uart_get_info()
768 mutex_lock(&port->mutex); in uart_get_info()
773 retinfo->type = uport->type; in uart_get_info()
774 retinfo->line = uport->line; in uart_get_info()
775 retinfo->port = uport->iobase; in uart_get_info()
777 retinfo->port_high = (long) uport->iobase >> HIGH_BITS_OFFSET; in uart_get_info()
778 retinfo->irq = uport->irq; in uart_get_info()
779 retinfo->flags = (__force int)uport->flags; in uart_get_info()
780 retinfo->xmit_fifo_size = uport->fifosize; in uart_get_info()
781 retinfo->baud_base = uport->uartclk / 16; in uart_get_info()
782 retinfo->close_delay = jiffies_to_msecs(port->close_delay) / 10; in uart_get_info()
783 retinfo->closing_wait = port->closing_wait == ASYNC_CLOSING_WAIT_NONE ? in uart_get_info()
785 jiffies_to_msecs(port->closing_wait) / 10; in uart_get_info()
786 retinfo->custom_divisor = uport->custom_divisor; in uart_get_info()
787 retinfo->hub6 = uport->hub6; in uart_get_info()
788 retinfo->io_type = uport->iotype; in uart_get_info()
789 retinfo->iomem_reg_shift = uport->regshift; in uart_get_info()
790 retinfo->iomem_base = (void *)(unsigned long)uport->mapbase; in uart_get_info()
794 mutex_unlock(&port->mutex); in uart_get_info()
801 struct uart_state *state = tty->driver_data; in uart_get_info_user()
802 struct tty_port *port = &state->port; in uart_get_info_user()
804 return uart_get_info(port, ss) < 0 ? -EIO : 0; in uart_get_info_user()
819 return -EIO; in uart_set_info()
821 new_port = new_info->port; in uart_set_info()
823 new_port += (unsigned long) new_info->port_high << HIGH_BITS_OFFSET; in uart_set_info()
825 new_info->irq = irq_canonicalize(new_info->irq); in uart_set_info()
826 close_delay = msecs_to_jiffies(new_info->close_delay * 10); in uart_set_info()
827 closing_wait = new_info->closing_wait == ASYNC_CLOSING_WAIT_NONE ? in uart_set_info()
829 msecs_to_jiffies(new_info->closing_wait * 10); in uart_set_info()
832 change_irq = !(uport->flags & UPF_FIXED_PORT) in uart_set_info()
833 && new_info->irq != uport->irq; in uart_set_info()
840 change_port = !(uport->flags & UPF_FIXED_PORT) in uart_set_info()
841 && (new_port != uport->iobase || in uart_set_info()
842 (unsigned long)new_info->iomem_base != uport->mapbase || in uart_set_info()
843 new_info->hub6 != uport->hub6 || in uart_set_info()
844 new_info->io_type != uport->iotype || in uart_set_info()
845 new_info->iomem_reg_shift != uport->regshift || in uart_set_info()
846 new_info->type != uport->type); in uart_set_info()
848 old_flags = uport->flags; in uart_set_info()
849 new_flags = (__force upf_t)new_info->flags; in uart_set_info()
850 old_custom_divisor = uport->custom_divisor; in uart_set_info()
853 retval = -EPERM; in uart_set_info()
855 (new_info->baud_base != uport->uartclk / 16) || in uart_set_info()
856 (close_delay != port->close_delay) || in uart_set_info()
857 (closing_wait != port->closing_wait) || in uart_set_info()
858 (new_info->xmit_fifo_size && in uart_set_info()
859 new_info->xmit_fifo_size != uport->fifosize) || in uart_set_info()
862 uport->flags = ((uport->flags & ~UPF_USR_MASK) | in uart_set_info()
864 uport->custom_divisor = new_info->custom_divisor; in uart_set_info()
875 if (uport->ops->verify_port) in uart_set_info()
876 retval = uport->ops->verify_port(uport, new_info); in uart_set_info()
878 if ((new_info->irq >= nr_irqs) || (new_info->irq < 0) || in uart_set_info()
879 (new_info->baud_base < 9600)) in uart_set_info()
880 retval = -EINVAL; in uart_set_info()
886 retval = -EBUSY; in uart_set_info()
905 old_iobase = uport->iobase; in uart_set_info()
906 old_mapbase = uport->mapbase; in uart_set_info()
907 old_type = uport->type; in uart_set_info()
908 old_hub6 = uport->hub6; in uart_set_info()
909 old_iotype = uport->iotype; in uart_set_info()
910 old_shift = uport->regshift; in uart_set_info()
915 if (old_type != PORT_UNKNOWN && uport->ops->release_port) in uart_set_info()
916 uport->ops->release_port(uport); in uart_set_info()
918 uport->iobase = new_port; in uart_set_info()
919 uport->type = new_info->type; in uart_set_info()
920 uport->hub6 = new_info->hub6; in uart_set_info()
921 uport->iotype = new_info->io_type; in uart_set_info()
922 uport->regshift = new_info->iomem_reg_shift; in uart_set_info()
923 uport->mapbase = (unsigned long)new_info->iomem_base; in uart_set_info()
928 if (uport->type != PORT_UNKNOWN && uport->ops->request_port) { in uart_set_info()
929 retval = uport->ops->request_port(uport); in uart_set_info()
931 /* Always success - Jean II */ in uart_set_info()
940 uport->iobase = old_iobase; in uart_set_info()
941 uport->type = old_type; in uart_set_info()
942 uport->hub6 = old_hub6; in uart_set_info()
943 uport->iotype = old_iotype; in uart_set_info()
944 uport->regshift = old_shift; in uart_set_info()
945 uport->mapbase = old_mapbase; in uart_set_info()
948 retval = uport->ops->request_port(uport); in uart_set_info()
954 uport->type = PORT_UNKNOWN; in uart_set_info()
959 retval = -EBUSY; in uart_set_info()
962 /* Added to return the correct error -Ram Gupta */ in uart_set_info()
968 uport->irq = new_info->irq; in uart_set_info()
969 if (!(uport->flags & UPF_FIXED_PORT)) in uart_set_info()
970 uport->uartclk = new_info->baud_base * 16; in uart_set_info()
971 uport->flags = (uport->flags & ~UPF_CHANGE_MASK) | in uart_set_info()
973 uport->custom_divisor = new_info->custom_divisor; in uart_set_info()
974 port->close_delay = close_delay; in uart_set_info()
975 port->closing_wait = closing_wait; in uart_set_info()
976 if (new_info->xmit_fifo_size) in uart_set_info()
977 uport->fifosize = new_info->xmit_fifo_size; in uart_set_info()
978 port->low_latency = (uport->flags & UPF_LOW_LATENCY) ? 1 : 0; in uart_set_info()
982 if (uport->type == PORT_UNKNOWN) in uart_set_info()
985 if (((old_flags ^ uport->flags) & UPF_SPD_MASK) || in uart_set_info()
986 old_custom_divisor != uport->custom_divisor) { in uart_set_info()
991 if (uport->flags & UPF_SPD_MASK) { in uart_set_info()
992 dev_notice_ratelimited(uport->dev, in uart_set_info()
994 current->comm, in uart_set_info()
995 tty_name(port->tty)); in uart_set_info()
1012 struct uart_state *state = tty->driver_data; in uart_set_info_user()
1013 struct tty_port *port = &state->port; in uart_set_info_user()
1016 down_write(&tty->termios_rwsem); in uart_set_info_user()
1018 * This semaphore protects port->count. It is also in uart_set_info_user()
1024 mutex_lock(&port->mutex); in uart_set_info_user()
1026 mutex_unlock(&port->mutex); in uart_set_info_user()
1027 up_write(&tty->termios_rwsem); in uart_set_info_user()
1032 * uart_get_lsr_info - get line status register info
1043 result = uport->ops->tx_empty(uport); in uart_get_lsr_info()
1051 if (uport->x_char || in uart_get_lsr_info()
1052 ((uart_circ_chars_pending(&state->xmit) > 0) && in uart_get_lsr_info()
1061 struct uart_state *state = tty->driver_data; in uart_tiocmget()
1062 struct tty_port *port = &state->port; in uart_tiocmget()
1064 int result = -EIO; in uart_tiocmget()
1066 mutex_lock(&port->mutex); in uart_tiocmget()
1072 result = uport->mctrl; in uart_tiocmget()
1073 spin_lock_irq(&uport->lock); in uart_tiocmget()
1074 result |= uport->ops->get_mctrl(uport); in uart_tiocmget()
1075 spin_unlock_irq(&uport->lock); in uart_tiocmget()
1078 mutex_unlock(&port->mutex); in uart_tiocmget()
1085 struct uart_state *state = tty->driver_data; in uart_tiocmset()
1086 struct tty_port *port = &state->port; in uart_tiocmset()
1088 int ret = -EIO; in uart_tiocmset()
1090 mutex_lock(&port->mutex); in uart_tiocmset()
1100 mutex_unlock(&port->mutex); in uart_tiocmset()
1106 struct uart_state *state = tty->driver_data; in uart_break_ctl()
1107 struct tty_port *port = &state->port; in uart_break_ctl()
1109 int ret = -EIO; in uart_break_ctl()
1111 mutex_lock(&port->mutex); in uart_break_ctl()
1116 if (uport->type != PORT_UNKNOWN && uport->ops->break_ctl) in uart_break_ctl()
1117 uport->ops->break_ctl(uport, break_state); in uart_break_ctl()
1120 mutex_unlock(&port->mutex); in uart_break_ctl()
1126 struct tty_port *port = &state->port; in uart_do_autoconfig()
1131 return -EPERM; in uart_do_autoconfig()
1134 * Take the per-port semaphore. This prevents count from in uart_do_autoconfig()
1136 * we're auto-configuring. in uart_do_autoconfig()
1138 if (mutex_lock_interruptible(&port->mutex)) in uart_do_autoconfig()
1139 return -ERESTARTSYS; in uart_do_autoconfig()
1143 ret = -EIO; in uart_do_autoconfig()
1147 ret = -EBUSY; in uart_do_autoconfig()
1155 if (uport->type != PORT_UNKNOWN && uport->ops->release_port) in uart_do_autoconfig()
1156 uport->ops->release_port(uport); in uart_do_autoconfig()
1159 if (uport->flags & UPF_AUTO_IRQ) in uart_do_autoconfig()
1166 uport->ops->config_port(uport, flags); in uart_do_autoconfig()
1175 mutex_unlock(&port->mutex); in uart_do_autoconfig()
1184 if (uport->ops->enable_ms) in uart_enable_ms()
1185 uport->ops->enable_ms(uport); in uart_enable_ms()
1190 * - mask passed in arg for lines of interest
1200 struct tty_port *port = &state->port; in uart_wait_modem_status()
1210 return -EIO; in uart_wait_modem_status()
1211 spin_lock_irq(&uport->lock); in uart_wait_modem_status()
1212 memcpy(&cprev, &uport->icount, sizeof(struct uart_icount)); in uart_wait_modem_status()
1214 spin_unlock_irq(&uport->lock); in uart_wait_modem_status()
1216 add_wait_queue(&port->delta_msr_wait, &wait); in uart_wait_modem_status()
1218 spin_lock_irq(&uport->lock); in uart_wait_modem_status()
1219 memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); in uart_wait_modem_status()
1220 spin_unlock_irq(&uport->lock); in uart_wait_modem_status()
1236 ret = -ERESTARTSYS; in uart_wait_modem_status()
1243 remove_wait_queue(&port->delta_msr_wait, &wait); in uart_wait_modem_status()
1252 * NB: both 1->0 and 0->1 transitions are counted except for
1253 * RI where only 0->1 is counted.
1258 struct uart_state *state = tty->driver_data; in uart_get_icount()
1264 return -EIO; in uart_get_icount()
1265 spin_lock_irq(&uport->lock); in uart_get_icount()
1266 memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); in uart_get_icount()
1267 spin_unlock_irq(&uport->lock); in uart_get_icount()
1270 icount->cts = cnow.cts; in uart_get_icount()
1271 icount->dsr = cnow.dsr; in uart_get_icount()
1272 icount->rng = cnow.rng; in uart_get_icount()
1273 icount->dcd = cnow.dcd; in uart_get_icount()
1274 icount->rx = cnow.rx; in uart_get_icount()
1275 icount->tx = cnow.tx; in uart_get_icount()
1276 icount->frame = cnow.frame; in uart_get_icount()
1277 icount->overrun = cnow.overrun; in uart_get_icount()
1278 icount->parity = cnow.parity; in uart_get_icount()
1279 icount->brk = cnow.brk; in uart_get_icount()
1280 icount->buf_overrun = cnow.buf_overrun; in uart_get_icount()
1291 spin_lock_irqsave(&port->lock, flags); in uart_get_rs485_config()
1292 aux = port->rs485; in uart_get_rs485_config()
1293 spin_unlock_irqrestore(&port->lock, flags); in uart_get_rs485_config()
1296 return -EFAULT; in uart_get_rs485_config()
1308 if (!port->rs485_config) in uart_set_rs485_config()
1309 return -ENOIOCTLCMD; in uart_set_rs485_config()
1312 return -EFAULT; in uart_set_rs485_config()
1314 spin_lock_irqsave(&port->lock, flags); in uart_set_rs485_config()
1315 ret = port->rs485_config(port, &rs485); in uart_set_rs485_config()
1316 spin_unlock_irqrestore(&port->lock, flags); in uart_set_rs485_config()
1320 if (copy_to_user(rs485_user, &port->rs485, sizeof(port->rs485))) in uart_set_rs485_config()
1321 return -EFAULT; in uart_set_rs485_config()
1332 if (!port->iso7816_config) in uart_get_iso7816_config()
1333 return -ENOIOCTLCMD; in uart_get_iso7816_config()
1335 spin_lock_irqsave(&port->lock, flags); in uart_get_iso7816_config()
1336 aux = port->iso7816; in uart_get_iso7816_config()
1337 spin_unlock_irqrestore(&port->lock, flags); in uart_get_iso7816_config()
1340 return -EFAULT; in uart_get_iso7816_config()
1352 if (!port->iso7816_config) in uart_set_iso7816_config()
1353 return -ENOIOCTLCMD; in uart_set_iso7816_config()
1356 return -EFAULT; in uart_set_iso7816_config()
1364 return -EINVAL; in uart_set_iso7816_config()
1366 spin_lock_irqsave(&port->lock, flags); in uart_set_iso7816_config()
1367 ret = port->iso7816_config(port, &iso7816); in uart_set_iso7816_config()
1368 spin_unlock_irqrestore(&port->lock, flags); in uart_set_iso7816_config()
1372 if (copy_to_user(iso7816_user, &port->iso7816, sizeof(port->iso7816))) in uart_set_iso7816_config()
1373 return -EFAULT; in uart_set_iso7816_config()
1384 struct uart_state *state = tty->driver_data; in uart_ioctl()
1385 struct tty_port *port = &state->port; in uart_ioctl()
1388 int ret = -ENOIOCTLCMD; in uart_ioctl()
1396 down_write(&tty->termios_rwsem); in uart_ioctl()
1398 up_write(&tty->termios_rwsem); in uart_ioctl()
1402 if (ret != -ENOIOCTLCMD) in uart_ioctl()
1406 ret = -EIO; in uart_ioctl()
1419 if (ret != -ENOIOCTLCMD) in uart_ioctl()
1422 mutex_lock(&port->mutex); in uart_ioctl()
1426 ret = -EIO; in uart_ioctl()
1449 ret = uart_set_iso7816_config(state->uart_port, uarg); in uart_ioctl()
1453 ret = uart_get_iso7816_config(state->uart_port, uarg); in uart_ioctl()
1456 if (uport->ops->ioctl) in uart_ioctl()
1457 ret = uport->ops->ioctl(uport, cmd, arg); in uart_ioctl()
1461 mutex_unlock(&port->mutex); in uart_ioctl()
1468 struct uart_state *state = tty->driver_data; in uart_set_ldisc()
1471 mutex_lock(&state->port.mutex); in uart_set_ldisc()
1473 if (uport && uport->ops->set_ldisc) in uart_set_ldisc()
1474 uport->ops->set_ldisc(uport, &tty->termios); in uart_set_ldisc()
1475 mutex_unlock(&state->port.mutex); in uart_set_ldisc()
1481 struct uart_state *state = tty->driver_data; in uart_set_termios()
1483 unsigned int cflag = tty->termios.c_cflag; in uart_set_termios()
1487 mutex_lock(&state->port.mutex); in uart_set_termios()
1496 if (uport->flags & UPF_SOFT_FLOW) { in uart_set_termios()
1499 tty->termios.c_cc[VSTART] != old_termios->c_cc[VSTART] || in uart_set_termios()
1500 tty->termios.c_cc[VSTOP] != old_termios->c_cc[VSTOP]; in uart_set_termios()
1509 if ((cflag ^ old_termios->c_cflag) == 0 && in uart_set_termios()
1510 tty->termios.c_ospeed == old_termios->c_ospeed && in uart_set_termios()
1511 tty->termios.c_ispeed == old_termios->c_ispeed && in uart_set_termios()
1512 ((tty->termios.c_iflag ^ old_termios->c_iflag) & iflag_mask) == 0 && in uart_set_termios()
1519 cflag = tty->termios.c_cflag; in uart_set_termios()
1522 if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD)) in uart_set_termios()
1525 else if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) { in uart_set_termios()
1533 mutex_unlock(&state->port.mutex); in uart_set_termios()
1543 struct uart_state *state = tty->driver_data; in uart_close()
1546 struct uart_driver *drv = tty->driver->driver_state; in uart_close()
1549 state = drv->state + tty->index; in uart_close()
1550 port = &state->port; in uart_close()
1551 spin_lock_irq(&port->lock); in uart_close()
1552 --port->count; in uart_close()
1553 spin_unlock_irq(&port->lock); in uart_close()
1557 pr_debug("uart_close(%d) called\n", tty->index); in uart_close()
1559 tty_port_close(tty->port, tty, filp); in uart_close()
1574 spin_lock_irq(&uport->lock); in uart_tty_port_shutdown()
1575 uport->ops->stop_rx(uport); in uart_tty_port_shutdown()
1576 spin_unlock_irq(&uport->lock); in uart_tty_port_shutdown()
1593 struct uart_state *state = tty->driver_data; in uart_wait_until_sent()
1601 if (port->type == PORT_UNKNOWN || port->fifosize == 0) { in uart_wait_until_sent()
1612 * the NIST-PCTS. in uart_wait_until_sent()
1614 char_time = (port->timeout - HZ/50) / port->fifosize; in uart_wait_until_sent()
1626 * takes longer than port->timeout, this is probably due to a in uart_wait_until_sent()
1628 * 2*port->timeout. in uart_wait_until_sent()
1630 if (timeout == 0 || timeout > 2 * port->timeout) in uart_wait_until_sent()
1631 timeout = 2 * port->timeout; in uart_wait_until_sent()
1636 port->line, jiffies, expire); in uart_wait_until_sent()
1643 while (!port->ops->tx_empty(port)) { in uart_wait_until_sent()
1660 struct uart_state *state = tty->driver_data; in uart_hangup()
1661 struct tty_port *port = &state->port; in uart_hangup()
1665 pr_debug("uart_hangup(%d)\n", tty->index); in uart_hangup()
1667 mutex_lock(&port->mutex); in uart_hangup()
1674 spin_lock_irqsave(&port->lock, flags); in uart_hangup()
1675 port->count = 0; in uart_hangup()
1676 spin_unlock_irqrestore(&port->lock, flags); in uart_hangup()
1681 wake_up_interruptible(&port->open_wait); in uart_hangup()
1682 wake_up_interruptible(&port->delta_msr_wait); in uart_hangup()
1684 mutex_unlock(&port->mutex); in uart_hangup()
1700 wake_up_interruptible(&port->delta_msr_wait); in uart_port_shutdown()
1706 uport->ops->shutdown(uport); in uart_port_shutdown()
1712 synchronize_irq(uport->irq); in uart_port_shutdown()
1725 * raised -- but report carrier raised if it does anyway so open will in uart_carrier_raised()
1730 spin_lock_irq(&uport->lock); in uart_carrier_raised()
1732 mctrl = uport->ops->get_mctrl(uport); in uart_carrier_raised()
1733 spin_unlock_irq(&uport->lock); in uart_carrier_raised()
1754 struct uart_driver *drv = driver->driver_state; in uart_install()
1755 struct uart_state *state = drv->state + tty->index; in uart_install()
1757 tty->driver_data = state; in uart_install()
1774 struct uart_state *state = tty->driver_data; in uart_open()
1777 retval = tty_port_open(&state->port, tty, filp); in uart_open()
1791 if (!uport || uport->flags & UPF_DEAD) in uart_port_activate()
1792 return -ENXIO; in uart_port_activate()
1794 port->low_latency = (uport->flags & UPF_LOW_LATENCY) ? 1 : 0; in uart_port_activate()
1810 if (port->ops->type) in uart_type()
1811 str = port->ops->type(port); in uart_type()
1823 struct uart_state *state = drv->state + i; in uart_line_info()
1824 struct tty_port *port = &state->port; in uart_line_info()
1831 mutex_lock(&port->mutex); in uart_line_info()
1836 mmio = uport->iotype >= UPIO_MEM; in uart_line_info()
1838 uport->line, uart_type(uport), in uart_line_info()
1840 mmio ? (unsigned long long)uport->mapbase in uart_line_info()
1841 : (unsigned long long)uport->iobase, in uart_line_info()
1842 uport->irq); in uart_line_info()
1844 if (uport->type == PORT_UNKNOWN) { in uart_line_info()
1850 pm_state = state->pm_state; in uart_line_info()
1853 spin_lock_irq(&uport->lock); in uart_line_info()
1854 status = uport->ops->get_mctrl(uport); in uart_line_info()
1855 spin_unlock_irq(&uport->lock); in uart_line_info()
1860 uport->icount.tx, uport->icount.rx); in uart_line_info()
1861 if (uport->icount.frame) in uart_line_info()
1862 seq_printf(m, " fe:%d", uport->icount.frame); in uart_line_info()
1863 if (uport->icount.parity) in uart_line_info()
1864 seq_printf(m, " pe:%d", uport->icount.parity); in uart_line_info()
1865 if (uport->icount.brk) in uart_line_info()
1866 seq_printf(m, " brk:%d", uport->icount.brk); in uart_line_info()
1867 if (uport->icount.overrun) in uart_line_info()
1868 seq_printf(m, " oe:%d", uport->icount.overrun); in uart_line_info()
1869 if (uport->icount.buf_overrun) in uart_line_info()
1870 seq_printf(m, " bo:%d", uport->icount.buf_overrun); in uart_line_info()
1873 if (uport->mctrl & (bit)) \ in uart_line_info()
1874 strncat(stat_buf, (str), sizeof(stat_buf) - \ in uart_line_info()
1875 strlen(stat_buf) - 2) in uart_line_info()
1878 strncat(stat_buf, (str), sizeof(stat_buf) - \ in uart_line_info()
1879 strlen(stat_buf) - 2) in uart_line_info()
1885 INFOBIT(TIOCM_DTR, "|DTR"); in uart_line_info()
1898 mutex_unlock(&port->mutex); in uart_line_info()
1903 struct tty_driver *ttydrv = m->private; in uart_proc_show()
1904 struct uart_driver *drv = ttydrv->driver_state; in uart_proc_show()
1908 for (i = 0; i < drv->nr; i++) in uart_proc_show()
1916 return uart_console(port) && (port->cons->flags & CON_ENABLED); in uart_console_enabled()
1921 spin_lock_init(&port->lock); in uart_port_spin_lock_init()
1922 lockdep_set_class(&port->lock, &port_lock_key); in uart_port_spin_lock_init()
1927 * uart_console_write - write a console message to a serial port
1955 int idx = co->index; in uart_get_console()
1964 co->index = idx; in uart_get_console()
1970 * uart_parse_earlycon - Parse earlycon options
1987 * Returns 0 on success or -EINVAL on failure
2014 return -EINVAL; in uart_parse_earlycon()
2032 * uart_parse_options - Parse serial port baud/parity/bits/flow control.
2055 *bits = *s++ - '0'; in uart_parse_options()
2062 * uart_set_options - setup the serial console parameters
2066 * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even)
2068 * @flow: flow control character - 'r' (rts)
2078 * Ensure that the serial-console lock is initialised early. in uart_set_options()
2080 * Note that the console-enabled check is needed because of kgdboc, in uart_set_options()
2084 if (!uart_console_enabled(port) && !port->console_reinit) in uart_set_options()
2111 * So we set * DTR in host uart to make them happy in uart_set_options()
2113 port->mctrl |= TIOCM_DTR; in uart_set_options()
2115 port->ops->set_termios(port, &termios, &dummy); in uart_set_options()
2121 co->cflag = termios.c_cflag; in uart_set_options()
2129 * uart_change_pm - set power state of the port
2134 * Locking: port->mutex has to be held
2141 if (state->pm_state != pm_state) { in uart_change_pm()
2142 if (port && port->ops->pm) in uart_change_pm()
2143 port->ops->pm(port, pm_state, state->pm_state); in uart_change_pm()
2144 state->pm_state = pm_state; in uart_change_pm()
2156 struct tty_driver *tty_drv = match->driver->tty_driver; in serial_match_port()
2157 dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) + in serial_match_port()
2158 match->port->line; in serial_match_port()
2160 return dev->devt == devt; /* Actually, only one tty per port */ in serial_match_port()
2165 struct uart_state *state = drv->state + uport->line; in uart_suspend_port()
2166 struct tty_port *port = &state->port; in uart_suspend_port()
2170 mutex_lock(&port->mutex); in uart_suspend_port()
2172 tty_dev = device_find_child(uport->dev, &match, serial_match_port); in uart_suspend_port()
2174 enable_irq_wake(uport->irq); in uart_suspend_port()
2176 mutex_unlock(&port->mutex); in uart_suspend_port()
2185 uport->suspended = 1; in uart_suspend_port()
2188 const struct uart_ops *ops = uport->ops; in uart_suspend_port()
2194 spin_lock_irq(&uport->lock); in uart_suspend_port()
2195 ops->stop_tx(uport); in uart_suspend_port()
2196 ops->set_mctrl(uport, 0); in uart_suspend_port()
2197 ops->stop_rx(uport); in uart_suspend_port()
2198 spin_unlock_irq(&uport->lock); in uart_suspend_port()
2203 for (tries = 3; !ops->tx_empty(uport) && tries; tries--) in uart_suspend_port()
2206 dev_err(uport->dev, "%s: Unable to drain transmitter\n", in uart_suspend_port()
2207 uport->name); in uart_suspend_port()
2209 ops->shutdown(uport); in uart_suspend_port()
2216 console_stop(uport->cons); in uart_suspend_port()
2220 mutex_unlock(&port->mutex); in uart_suspend_port()
2227 struct uart_state *state = drv->state + uport->line; in uart_resume_port()
2228 struct tty_port *port = &state->port; in uart_resume_port()
2233 mutex_lock(&port->mutex); in uart_resume_port()
2235 tty_dev = device_find_child(uport->dev, &match, serial_match_port); in uart_resume_port()
2236 if (!uport->suspended && device_may_wakeup(tty_dev)) { in uart_resume_port()
2237 if (irqd_is_wakeup_set(irq_get_irq_data((uport->irq)))) in uart_resume_port()
2238 disable_irq_wake(uport->irq); in uart_resume_port()
2240 mutex_unlock(&port->mutex); in uart_resume_port()
2244 uport->suspended = 0; in uart_resume_port()
2247 * Re-enable the console device after suspending. in uart_resume_port()
2254 termios.c_cflag = uport->cons->cflag; in uart_resume_port()
2259 if (port->tty && termios.c_cflag == 0) in uart_resume_port()
2260 termios = port->tty->termios; in uart_resume_port()
2264 uport->ops->set_termios(uport, &termios, NULL); in uart_resume_port()
2266 console_start(uport->cons); in uart_resume_port()
2270 const struct uart_ops *ops = uport->ops; in uart_resume_port()
2274 spin_lock_irq(&uport->lock); in uart_resume_port()
2275 ops->set_mctrl(uport, 0); in uart_resume_port()
2276 spin_unlock_irq(&uport->lock); in uart_resume_port()
2279 struct tty_struct *tty = port->tty; in uart_resume_port()
2281 ret = ops->startup(uport); in uart_resume_port()
2285 spin_lock_irq(&uport->lock); in uart_resume_port()
2286 ops->set_mctrl(uport, uport->mctrl); in uart_resume_port()
2287 ops->start_tx(uport); in uart_resume_port()
2288 spin_unlock_irq(&uport->lock); in uart_resume_port()
2292 * Failed to resume - maybe hardware went away? in uart_resume_port()
2303 mutex_unlock(&port->mutex); in uart_resume_port()
2313 switch (port->iotype) { in uart_report_port()
2315 snprintf(address, sizeof(address), "I/O 0x%lx", port->iobase); in uart_report_port()
2319 "I/O 0x%lx offset 0x%x", port->iobase, port->hub6); in uart_report_port()
2328 "MMIO 0x%llx", (unsigned long long)port->mapbase); in uart_report_port()
2336 port->dev ? dev_name(port->dev) : "", in uart_report_port()
2337 port->dev ? ": " : "", in uart_report_port()
2338 port->name, in uart_report_port()
2339 address, port->irq, port->uartclk / 16, uart_type(port)); in uart_report_port()
2351 if (!port->iobase && !port->mapbase && !port->membase) in uart_configure_port()
2359 if (port->flags & UPF_AUTO_IRQ) in uart_configure_port()
2361 if (port->flags & UPF_BOOT_AUTOCONF) { in uart_configure_port()
2362 if (!(port->flags & UPF_FIXED_TYPE)) { in uart_configure_port()
2363 port->type = PORT_UNKNOWN; in uart_configure_port()
2366 port->ops->config_port(port, flags); in uart_configure_port()
2369 if (port->type != PORT_UNKNOWN) { in uart_configure_port()
2378 * Ensure that the modem control lines are de-activated. in uart_configure_port()
2379 * keep the DTR setting that is set in uart_set_options() in uart_configure_port()
2382 spin_lock_irqsave(&port->lock, flags); in uart_configure_port()
2383 port->ops->set_mctrl(port, port->mctrl & TIOCM_DTR); in uart_configure_port()
2384 spin_unlock_irqrestore(&port->lock, flags); in uart_configure_port()
2388 * successfully registered yet, try to re-register it. in uart_configure_port()
2391 if (port->cons && !(port->cons->flags & CON_ENABLED)) in uart_configure_port()
2392 register_console(port->cons); in uart_configure_port()
2407 struct uart_driver *drv = driver->driver_state; in uart_poll_init()
2408 struct uart_state *state = drv->state + line; in uart_poll_init()
2417 tport = &state->port; in uart_poll_init()
2418 mutex_lock(&tport->mutex); in uart_poll_init()
2421 if (!port || !(port->ops->poll_get_char && port->ops->poll_put_char)) { in uart_poll_init()
2422 ret = -1; in uart_poll_init()
2426 if (port->ops->poll_init) { in uart_poll_init()
2429 * e.g. state->xmit is still uninitialized. in uart_poll_init()
2432 ret = port->ops->poll_init(port); in uart_poll_init()
2440 mutex_unlock(&tport->mutex); in uart_poll_init()
2446 struct uart_driver *drv = driver->driver_state; in uart_poll_get_char()
2447 struct uart_state *state = drv->state + line; in uart_poll_get_char()
2449 int ret = -1; in uart_poll_get_char()
2453 ret = port->ops->poll_get_char(port); in uart_poll_get_char()
2462 struct uart_driver *drv = driver->driver_state; in uart_poll_put_char()
2463 struct uart_state *state = drv->state + line; in uart_poll_put_char()
2471 port->ops->poll_put_char(port, '\r'); in uart_poll_put_char()
2472 port->ops->poll_put_char(port, ch); in uart_poll_put_char()
2521 * uart_register_driver - register a driver with the uart core layer
2525 * with the tty layer, and initialise the core driver per-port state.
2530 * drv->port should be NULL, and the per-port structures should be
2536 int i, retval = -ENOMEM; in uart_register_driver()
2538 BUG_ON(drv->state); in uart_register_driver()
2544 drv->state = kcalloc(drv->nr, sizeof(struct uart_state), GFP_KERNEL); in uart_register_driver()
2545 if (!drv->state) in uart_register_driver()
2548 normal = alloc_tty_driver(drv->nr); in uart_register_driver()
2552 drv->tty_driver = normal; in uart_register_driver()
2554 normal->driver_name = drv->driver_name; in uart_register_driver()
2555 normal->name = drv->dev_name; in uart_register_driver()
2556 normal->major = drv->major; in uart_register_driver()
2557 normal->minor_start = drv->minor; in uart_register_driver()
2558 normal->type = TTY_DRIVER_TYPE_SERIAL; in uart_register_driver()
2559 normal->subtype = SERIAL_TYPE_NORMAL; in uart_register_driver()
2560 normal->init_termios = tty_std_termios; in uart_register_driver()
2561 normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; in uart_register_driver()
2562 normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600; in uart_register_driver()
2563 normal->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; in uart_register_driver()
2564 normal->driver_state = drv; in uart_register_driver()
2570 for (i = 0; i < drv->nr; i++) { in uart_register_driver()
2571 struct uart_state *state = drv->state + i; in uart_register_driver()
2572 struct tty_port *port = &state->port; in uart_register_driver()
2575 port->ops = &uart_port_ops; in uart_register_driver()
2582 for (i = 0; i < drv->nr; i++) in uart_register_driver()
2583 tty_port_destroy(&drv->state[i].port); in uart_register_driver()
2586 kfree(drv->state); in uart_register_driver()
2592 * uart_unregister_driver - remove a driver from the uart core layer
2598 * (ie, drv->port == NULL)
2602 struct tty_driver *p = drv->tty_driver; in uart_unregister_driver()
2607 for (i = 0; i < drv->nr; i++) in uart_unregister_driver()
2608 tty_port_destroy(&drv->state[i].port); in uart_unregister_driver()
2609 kfree(drv->state); in uart_unregister_driver()
2610 drv->state = NULL; in uart_unregister_driver()
2611 drv->tty_driver = NULL; in uart_unregister_driver()
2616 struct uart_driver *p = co->data; in uart_console_device()
2617 *index = co->index; in uart_console_device()
2618 return p->tty_driver; in uart_console_device()
2764 mutex_lock(&port->mutex); in console_show()
2768 mutex_unlock(&port->mutex); in console_show()
2786 mutex_lock(&port->mutex); in console_store()
2791 ret = unregister_console(uport->cons); in console_store()
2794 uport->console_reinit = 1; in console_store()
2795 register_console(uport->cons); in console_store()
2797 ret = -ENOENT; in console_store()
2801 ret = -ENXIO; in console_store()
2803 mutex_unlock(&port->mutex); in console_store()
2846 * uart_add_one_port - attach a driver-defined port structure
2865 if (uport->line >= drv->nr) in uart_add_one_port()
2866 return -EINVAL; in uart_add_one_port()
2868 state = drv->state + uport->line; in uart_add_one_port()
2869 port = &state->port; in uart_add_one_port()
2872 mutex_lock(&port->mutex); in uart_add_one_port()
2873 if (state->uart_port) { in uart_add_one_port()
2874 ret = -EINVAL; in uart_add_one_port()
2879 atomic_set(&state->refcount, 1); in uart_add_one_port()
2880 init_waitqueue_head(&state->remove_wait); in uart_add_one_port()
2881 state->uart_port = uport; in uart_add_one_port()
2882 uport->state = state; in uart_add_one_port()
2884 state->pm_state = UART_PM_STATE_UNDEFINED; in uart_add_one_port()
2885 uport->cons = drv->cons; in uart_add_one_port()
2886 uport->minor = drv->tty_driver->minor_start + uport->line; in uart_add_one_port()
2887 uport->name = kasprintf(GFP_KERNEL, "%s%d", drv->dev_name, in uart_add_one_port()
2888 drv->tty_driver->name_base + uport->line); in uart_add_one_port()
2889 if (!uport->name) { in uart_add_one_port()
2890 ret = -ENOMEM; in uart_add_one_port()
2901 if (uport->cons && uport->dev) in uart_add_one_port()
2902 of_console_check(uport->dev->of_node, uport->cons->name, uport->line); in uart_add_one_port()
2904 tty_port_link_device(port, drv->tty_driver, uport->line); in uart_add_one_port()
2907 port->console = uart_console(uport); in uart_add_one_port()
2910 if (uport->attr_group) in uart_add_one_port()
2913 uport->tty_groups = kcalloc(num_groups, sizeof(*uport->tty_groups), in uart_add_one_port()
2915 if (!uport->tty_groups) { in uart_add_one_port()
2916 ret = -ENOMEM; in uart_add_one_port()
2919 uport->tty_groups[0] = &tty_dev_attr_group; in uart_add_one_port()
2920 if (uport->attr_group) in uart_add_one_port()
2921 uport->tty_groups[1] = uport->attr_group; in uart_add_one_port()
2927 tty_dev = tty_port_register_device_attr_serdev(port, drv->tty_driver, in uart_add_one_port()
2928 uport->line, uport->dev, port, uport->tty_groups); in uart_add_one_port()
2932 dev_err(uport->dev, "Cannot register tty device on line %d\n", in uart_add_one_port()
2933 uport->line); in uart_add_one_port()
2939 uport->flags &= ~UPF_DEAD; in uart_add_one_port()
2942 mutex_unlock(&port->mutex); in uart_add_one_port()
2949 * uart_remove_one_port - detach a driver defined port structure
2954 * core driver. No further calls will be made to the low-level code
2959 struct uart_state *state = drv->state + uport->line; in uart_remove_one_port()
2960 struct tty_port *port = &state->port; in uart_remove_one_port()
2970 * Mark the port "dead" - this prevents any opens from in uart_remove_one_port()
2973 mutex_lock(&port->mutex); in uart_remove_one_port()
2976 dev_alert(uport->dev, "Removing wrong port: %p != %p\n", in uart_remove_one_port()
2980 mutex_unlock(&port->mutex); in uart_remove_one_port()
2981 ret = -EINVAL; in uart_remove_one_port()
2984 uport->flags |= UPF_DEAD; in uart_remove_one_port()
2985 mutex_unlock(&port->mutex); in uart_remove_one_port()
2990 tty_port_unregister_device(port, drv->tty_driver, uport->line); in uart_remove_one_port()
2994 tty_vhangup(port->tty); in uart_remove_one_port()
3002 unregister_console(uport->cons); in uart_remove_one_port()
3007 if (uport->type != PORT_UNKNOWN && uport->ops->release_port) in uart_remove_one_port()
3008 uport->ops->release_port(uport); in uart_remove_one_port()
3009 kfree(uport->tty_groups); in uart_remove_one_port()
3010 kfree(uport->name); in uart_remove_one_port()
3015 uport->type = PORT_UNKNOWN; in uart_remove_one_port()
3017 mutex_lock(&port->mutex); in uart_remove_one_port()
3018 WARN_ON(atomic_dec_return(&state->refcount) < 0); in uart_remove_one_port()
3019 wait_event(state->remove_wait, !atomic_read(&state->refcount)); in uart_remove_one_port()
3020 state->uart_port = NULL; in uart_remove_one_port()
3021 mutex_unlock(&port->mutex); in uart_remove_one_port()
3033 if (port1->iotype != port2->iotype) in uart_match_port()
3036 switch (port1->iotype) { in uart_match_port()
3038 return (port1->iobase == port2->iobase); in uart_match_port()
3040 return (port1->iobase == port2->iobase) && in uart_match_port()
3041 (port1->hub6 == port2->hub6); in uart_match_port()
3048 return (port1->mapbase == port2->mapbase); in uart_match_port()
3055 * uart_handle_dcd_change - handle a change of carrier detect state
3059 * Caller must hold uport->lock
3063 struct tty_port *port = &uport->state->port; in uart_handle_dcd_change()
3064 struct tty_struct *tty = port->tty; in uart_handle_dcd_change()
3067 lockdep_assert_held_once(&uport->lock); in uart_handle_dcd_change()
3072 if (ld->ops->dcd_change) in uart_handle_dcd_change()
3073 ld->ops->dcd_change(tty, status); in uart_handle_dcd_change()
3078 uport->icount.dcd++; in uart_handle_dcd_change()
3082 wake_up_interruptible(&port->open_wait); in uart_handle_dcd_change()
3090 * uart_handle_cts_change - handle a change of clear-to-send state
3094 * Caller must hold uport->lock
3098 lockdep_assert_held_once(&uport->lock); in uart_handle_cts_change()
3100 uport->icount.cts++; in uart_handle_cts_change()
3103 if (uport->hw_stopped) { in uart_handle_cts_change()
3105 uport->hw_stopped = 0; in uart_handle_cts_change()
3106 uport->ops->start_tx(uport); in uart_handle_cts_change()
3111 uport->hw_stopped = 1; in uart_handle_cts_change()
3112 uport->ops->stop_tx(uport); in uart_handle_cts_change()
3121 * uart_insert_char - push a char to the uart layer
3135 struct tty_port *tport = &port->state->port; in uart_insert_char()
3137 if ((status & port->ignore_status_mask & ~overrun) == 0) in uart_insert_char()
3139 ++port->icount.buf_overrun; in uart_insert_char()
3145 if (status & ~port->ignore_status_mask & overrun) in uart_insert_char()
3147 ++port->icount.buf_overrun; in uart_insert_char()
3165 * uart_try_toggle_sysrq - Enables SysRq from serial line
3183 if (sysrq_toggle_seq[port->sysrq_seq] != ch) { in uart_try_toggle_sysrq()
3184 port->sysrq_seq = 0; in uart_try_toggle_sysrq()
3188 if (++port->sysrq_seq < sysrq_toggle_seq_len) { in uart_try_toggle_sysrq()
3189 port->sysrq = jiffies + SYSRQ_TIMEOUT; in uart_try_toggle_sysrq()
3195 port->sysrq = 0; in uart_try_toggle_sysrq()
3210 * uart_get_rs485_mode() - retrieve rs485 properties for given uart
3218 struct serial_rs485 *rs485conf = &port->rs485; in uart_get_rs485_mode()
3219 struct device *dev = port->dev; in uart_get_rs485_mode()
3223 ret = device_property_read_u32_array(dev, "rs485-rts-delay", in uart_get_rs485_mode()
3226 rs485conf->delay_rts_before_send = rs485_delay[0]; in uart_get_rs485_mode()
3227 rs485conf->delay_rts_after_send = rs485_delay[1]; in uart_get_rs485_mode()
3229 rs485conf->delay_rts_before_send = 0; in uart_get_rs485_mode()
3230 rs485conf->delay_rts_after_send = 0; in uart_get_rs485_mode()
3234 * Clear full-duplex and enabled flags, set RTS polarity to active high in uart_get_rs485_mode()
3237 rs485conf->flags &= ~(SER_RS485_RX_DURING_TX | SER_RS485_ENABLED | in uart_get_rs485_mode()
3240 rs485conf->flags |= SER_RS485_RTS_ON_SEND; in uart_get_rs485_mode()
3242 if (device_property_read_bool(dev, "rs485-rx-during-tx")) in uart_get_rs485_mode()
3243 rs485conf->flags |= SER_RS485_RX_DURING_TX; in uart_get_rs485_mode()
3245 if (device_property_read_bool(dev, "linux,rs485-enabled-at-boot-time")) in uart_get_rs485_mode()
3246 rs485conf->flags |= SER_RS485_ENABLED; in uart_get_rs485_mode()
3248 if (device_property_read_bool(dev, "rs485-rts-active-low")) { in uart_get_rs485_mode()
3249 rs485conf->flags &= ~SER_RS485_RTS_ON_SEND; in uart_get_rs485_mode()
3250 rs485conf->flags |= SER_RS485_RTS_AFTER_SEND; in uart_get_rs485_mode()
3258 port->rs485_term_gpio = devm_gpiod_get_optional(dev, "rs485-term", in uart_get_rs485_mode()
3260 if (IS_ERR(port->rs485_term_gpio)) { in uart_get_rs485_mode()
3261 ret = PTR_ERR(port->rs485_term_gpio); in uart_get_rs485_mode()
3262 port->rs485_term_gpio = NULL; in uart_get_rs485_mode()
3263 return dev_err_probe(dev, ret, "Cannot get rs485-term-gpios\n"); in uart_get_rs485_mode()