Lines Matching full:port

55 /* Revisit: We should calculate this based on the actual port settings */
64 static void atmel_start_rx(struct uart_port *port);
65 static void atmel_stop_rx(struct uart_port *port);
78 /* Use device name ttyS, major 4, minor 64-68. This is the usual serial port
89 #define UART_PUT_CR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_CR) argument
90 #define UART_GET_MR(port) __raw_readl((port)->membase + ATMEL_US_MR) argument
91 #define UART_PUT_MR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_MR) argument
92 #define UART_PUT_IER(port,v) __raw_writel(v, (port)->membase + ATMEL_US_IER) argument
93 #define UART_PUT_IDR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_IDR) argument
94 #define UART_GET_IMR(port) __raw_readl((port)->membase + ATMEL_US_IMR) argument
95 #define UART_GET_CSR(port) __raw_readl((port)->membase + ATMEL_US_CSR) argument
96 #define UART_GET_CHAR(port) __raw_readl((port)->membase + ATMEL_US_RHR) argument
97 #define UART_PUT_CHAR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_THR) argument
98 #define UART_GET_BRGR(port) __raw_readl((port)->membase + ATMEL_US_BRGR) argument
99 #define UART_PUT_BRGR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_BRGR) argument
100 #define UART_PUT_RTOR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_RTOR) argument
101 #define UART_PUT_TTGR(port, v) __raw_writel(v, (port)->membase + ATMEL_US_TTGR) argument
104 #define UART_PUT_PTCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_PTCR) argument
105 #define UART_GET_PTSR(port) __raw_readl((port)->membase + ATMEL_PDC_PTSR) argument
107 #define UART_PUT_RPR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RPR) argument
108 #define UART_GET_RPR(port) __raw_readl((port)->membase + ATMEL_PDC_RPR) argument
109 #define UART_PUT_RCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RCR) argument
110 #define UART_PUT_RNPR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RNPR) argument
111 #define UART_PUT_RNCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RNCR) argument
113 #define UART_PUT_TPR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_TPR) argument
114 #define UART_PUT_TCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_TCR) argument
115 #define UART_GET_TCR(port) __raw_readl((port)->membase + ATMEL_PDC_TCR) argument
135 * We wrap our port structure around the generic uart_port.
185 static bool atmel_use_dma_rx(struct uart_port *port) in atmel_use_dma_rx() argument
187 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_rx()
192 static bool atmel_use_dma_tx(struct uart_port *port) in atmel_use_dma_tx() argument
194 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_tx()
199 static bool atmel_use_dma_rx(struct uart_port *port) in atmel_use_dma_rx() argument
204 static bool atmel_use_dma_tx(struct uart_port *port) in atmel_use_dma_tx() argument
211 void atmel_config_rs485(struct uart_port *port, struct serial_rs485 *rs485conf) in atmel_config_rs485() argument
213 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_config_rs485()
217 spin_lock_irqsave(&port->lock, flags); in atmel_config_rs485()
220 UART_PUT_IDR(port, atmel_port->tx_done_mask); in atmel_config_rs485()
222 mode = UART_GET_MR(port); in atmel_config_rs485()
230 dev_dbg(port->dev, "Setting UART to RS485\n"); in atmel_config_rs485()
233 UART_PUT_TTGR(port, rs485conf->delay_rts_after_send); in atmel_config_rs485()
236 dev_dbg(port->dev, "Setting UART to RS232\n"); in atmel_config_rs485()
237 if (atmel_use_dma_tx(port)) in atmel_config_rs485()
243 UART_PUT_MR(port, mode); in atmel_config_rs485()
246 UART_PUT_IER(port, atmel_port->tx_done_mask); in atmel_config_rs485()
248 spin_unlock_irqrestore(&port->lock, flags); in atmel_config_rs485()
255 static u_int atmel_tx_empty(struct uart_port *port) in atmel_tx_empty() argument
257 return (UART_GET_CSR(port) & ATMEL_US_TXEMPTY) ? TIOCSER_TEMT : 0; in atmel_tx_empty()
263 static void atmel_set_mctrl(struct uart_port *port, u_int mctrl) in atmel_set_mctrl() argument
267 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_mctrl()
275 if (port->mapbase == AT91RM9200_BASE_US0) { in atmel_set_mctrl()
294 UART_PUT_CR(port, control); in atmel_set_mctrl()
297 mode = UART_GET_MR(port) & ~ATMEL_US_CHMODE; in atmel_set_mctrl()
307 dev_dbg(port->dev, "Setting UART to RS485\n"); in atmel_set_mctrl()
309 UART_PUT_TTGR(port, in atmel_set_mctrl()
313 dev_dbg(port->dev, "Setting UART to RS232\n"); in atmel_set_mctrl()
315 UART_PUT_MR(port, mode); in atmel_set_mctrl()
321 static u_int atmel_get_mctrl(struct uart_port *port) in atmel_get_mctrl() argument
325 status = UART_GET_CSR(port); in atmel_get_mctrl()
345 static void atmel_stop_tx(struct uart_port *port) in atmel_stop_tx() argument
347 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_stop_tx()
349 if (atmel_use_dma_tx(port)) { in atmel_stop_tx()
351 UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); in atmel_stop_tx()
354 UART_PUT_IDR(port, atmel_port->tx_done_mask); in atmel_stop_tx()
358 atmel_start_rx(port); in atmel_stop_tx()
364 static void atmel_start_tx(struct uart_port *port) in atmel_start_tx() argument
366 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_start_tx()
368 if (atmel_use_dma_tx(port)) { in atmel_start_tx()
369 if (UART_GET_PTSR(port) & ATMEL_PDC_TXTEN) in atmel_start_tx()
376 atmel_stop_rx(port); in atmel_start_tx()
379 UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); in atmel_start_tx()
382 UART_PUT_IER(port, atmel_port->tx_done_mask); in atmel_start_tx()
386 * start receiving - port is in process of being opened.
388 static void atmel_start_rx(struct uart_port *port) in atmel_start_rx() argument
390 UART_PUT_CR(port, ATMEL_US_RSTSTA); /* reset status and receiver */ in atmel_start_rx()
392 if (atmel_use_dma_rx(port)) { in atmel_start_rx()
394 UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT | in atmel_start_rx()
395 port->read_status_mask); in atmel_start_rx()
396 UART_PUT_PTCR(port, ATMEL_PDC_RXTEN); in atmel_start_rx()
398 UART_PUT_IER(port, ATMEL_US_RXRDY); in atmel_start_rx()
403 * Stop receiving - port is in process of being closed.
405 static void atmel_stop_rx(struct uart_port *port) in atmel_stop_rx() argument
407 if (atmel_use_dma_rx(port)) { in atmel_stop_rx()
409 UART_PUT_PTCR(port, ATMEL_PDC_RXTDIS); in atmel_stop_rx()
410 UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT | in atmel_stop_rx()
411 port->read_status_mask); in atmel_stop_rx()
413 UART_PUT_IDR(port, ATMEL_US_RXRDY); in atmel_stop_rx()
420 static void atmel_enable_ms(struct uart_port *port) in atmel_enable_ms() argument
422 UART_PUT_IER(port, ATMEL_US_RIIC | ATMEL_US_DSRIC in atmel_enable_ms()
429 static void atmel_break_ctl(struct uart_port *port, int break_state) in atmel_break_ctl() argument
432 UART_PUT_CR(port, ATMEL_US_STTBRK); /* start break */ in atmel_break_ctl()
434 UART_PUT_CR(port, ATMEL_US_STPBRK); /* stop break */ in atmel_break_ctl()
441 atmel_buffer_rx_char(struct uart_port *port, unsigned int status, in atmel_buffer_rx_char() argument
444 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_buffer_rx_char()
465 static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status) in atmel_pdc_rxerr() argument
468 UART_PUT_CR(port, ATMEL_US_RSTSTA); in atmel_pdc_rxerr()
473 port->icount.brk++; in atmel_pdc_rxerr()
476 port->icount.parity++; in atmel_pdc_rxerr()
478 port->icount.frame++; in atmel_pdc_rxerr()
480 port->icount.overrun++; in atmel_pdc_rxerr()
486 static void atmel_rx_chars(struct uart_port *port) in atmel_rx_chars() argument
488 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_chars()
491 status = UART_GET_CSR(port); in atmel_rx_chars()
493 ch = UART_GET_CHAR(port); in atmel_rx_chars()
504 UART_PUT_CR(port, ATMEL_US_RSTSTA); in atmel_rx_chars()
509 UART_PUT_IER(port, ATMEL_US_RXBRK); in atmel_rx_chars()
518 UART_PUT_IDR(port, ATMEL_US_RXBRK); in atmel_rx_chars()
524 atmel_buffer_rx_char(port, status, ch); in atmel_rx_chars()
525 status = UART_GET_CSR(port); in atmel_rx_chars()
535 static void atmel_tx_chars(struct uart_port *port) in atmel_tx_chars() argument
537 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_chars()
538 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_chars()
540 if (port->x_char && UART_GET_CSR(port) & atmel_port->tx_done_mask) { in atmel_tx_chars()
541 UART_PUT_CHAR(port, port->x_char); in atmel_tx_chars()
542 port->icount.tx++; in atmel_tx_chars()
543 port->x_char = 0; in atmel_tx_chars()
545 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) in atmel_tx_chars()
548 while (UART_GET_CSR(port) & atmel_port->tx_done_mask) { in atmel_tx_chars()
549 UART_PUT_CHAR(port, xmit->buf[xmit->tail]); in atmel_tx_chars()
551 port->icount.tx++; in atmel_tx_chars()
557 uart_write_wakeup(port); in atmel_tx_chars()
561 UART_PUT_IER(port, atmel_port->tx_done_mask); in atmel_tx_chars()
568 atmel_handle_receive(struct uart_port *port, unsigned int pending) in atmel_handle_receive() argument
570 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_receive()
572 if (atmel_use_dma_rx(port)) { in atmel_handle_receive()
581 UART_PUT_IDR(port, (ATMEL_US_ENDRX in atmel_handle_receive()
588 atmel_pdc_rxerr(port, pending); in atmel_handle_receive()
593 atmel_rx_chars(port); in atmel_handle_receive()
599 UART_PUT_CR(port, ATMEL_US_RSTSTA); in atmel_handle_receive()
600 UART_PUT_IDR(port, ATMEL_US_RXBRK); in atmel_handle_receive()
609 atmel_handle_transmit(struct uart_port *port, unsigned int pending) in atmel_handle_transmit() argument
611 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_transmit()
615 UART_PUT_IDR(port, atmel_port->tx_done_mask); in atmel_handle_transmit()
624 atmel_handle_status(struct uart_port *port, unsigned int pending, in atmel_handle_status() argument
627 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_status()
641 struct uart_port *port = dev_id; in atmel_interrupt() local
645 status = UART_GET_CSR(port); in atmel_interrupt()
646 pending = status & UART_GET_IMR(port); in atmel_interrupt()
650 atmel_handle_receive(port, pending); in atmel_interrupt()
651 atmel_handle_status(port, pending, status); in atmel_interrupt()
652 atmel_handle_transmit(port, pending); in atmel_interrupt()
661 static void atmel_tx_dma(struct uart_port *port) in atmel_tx_dma() argument
663 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_dma()
664 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_dma()
669 if (UART_GET_TCR(port)) in atmel_tx_dma()
675 port->icount.tx += pdc->ofs; in atmel_tx_dma()
681 UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); in atmel_tx_dma()
683 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_dma()
684 dma_sync_single_for_device(port->dev, in atmel_tx_dma()
692 UART_PUT_TPR(port, pdc->dma_addr + xmit->tail); in atmel_tx_dma()
693 UART_PUT_TCR(port, count); in atmel_tx_dma()
695 UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); in atmel_tx_dma()
697 UART_PUT_IER(port, atmel_port->tx_done_mask); in atmel_tx_dma()
702 atmel_start_rx(port); in atmel_tx_dma()
707 uart_write_wakeup(port); in atmel_tx_dma()
710 static void atmel_rx_from_ring(struct uart_port *port) in atmel_rx_from_ring() argument
712 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_ring()
727 port->icount.rx++; in atmel_rx_from_ring()
741 port->icount.brk++; in atmel_rx_from_ring()
742 if (uart_handle_break(port)) in atmel_rx_from_ring()
746 port->icount.parity++; in atmel_rx_from_ring()
748 port->icount.frame++; in atmel_rx_from_ring()
750 port->icount.overrun++; in atmel_rx_from_ring()
752 status &= port->read_status_mask; in atmel_rx_from_ring()
763 if (uart_handle_sysrq_char(port, c.ch)) in atmel_rx_from_ring()
766 uart_insert_char(port, status, ATMEL_US_OVRE, c.ch, flg); in atmel_rx_from_ring()
773 spin_unlock(&port->lock); in atmel_rx_from_ring()
774 tty_flip_buffer_push(port->state->port.tty); in atmel_rx_from_ring()
775 spin_lock(&port->lock); in atmel_rx_from_ring()
778 static void atmel_rx_from_dma(struct uart_port *port) in atmel_rx_from_dma() argument
780 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_dma()
781 struct tty_struct *tty = port->state->port.tty; in atmel_rx_from_dma()
790 UART_PUT_CR(port, ATMEL_US_STTTO); in atmel_rx_from_dma()
793 head = UART_GET_RPR(port) - pdc->dma_addr; in atmel_rx_from_dma()
809 dma_sync_single_for_cpu(port->dev, pdc->dma_addr, in atmel_rx_from_dma()
822 dma_sync_single_for_device(port->dev, pdc->dma_addr, in atmel_rx_from_dma()
825 port->icount.rx += count; in atmel_rx_from_dma()
835 UART_PUT_RNPR(port, pdc->dma_addr); in atmel_rx_from_dma()
836 UART_PUT_RNCR(port, pdc->dma_size); in atmel_rx_from_dma()
847 spin_unlock(&port->lock); in atmel_rx_from_dma()
849 spin_lock(&port->lock); in atmel_rx_from_dma()
851 UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
859 struct uart_port *port = (struct uart_port *)data; in atmel_tasklet_func() local
860 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tasklet_func()
865 spin_lock(&port->lock); in atmel_tasklet_func()
867 if (atmel_use_dma_tx(port)) in atmel_tasklet_func()
868 atmel_tx_dma(port); in atmel_tasklet_func()
870 atmel_tx_chars(port); in atmel_tasklet_func()
879 port->icount.rng++; in atmel_tasklet_func()
881 port->icount.dsr++; in atmel_tasklet_func()
883 uart_handle_dcd_change(port, !(status & ATMEL_US_DCD)); in atmel_tasklet_func()
885 uart_handle_cts_change(port, !(status & ATMEL_US_CTS)); in atmel_tasklet_func()
887 wake_up_interruptible(&port->state->port.delta_msr_wait); in atmel_tasklet_func()
892 if (atmel_use_dma_rx(port)) in atmel_tasklet_func()
893 atmel_rx_from_dma(port); in atmel_tasklet_func()
895 atmel_rx_from_ring(port); in atmel_tasklet_func()
897 spin_unlock(&port->lock); in atmel_tasklet_func()
901 * Perform initialization and enable port for reception
903 static int atmel_startup(struct uart_port *port) in atmel_startup() argument
905 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_startup()
906 struct tty_struct *tty = port->state->port.tty; in atmel_startup()
914 UART_PUT_IDR(port, -1); in atmel_startup()
919 retval = request_irq(port->irq, atmel_interrupt, IRQF_SHARED, in atmel_startup()
920 tty ? tty->name : "atmel_serial", port); in atmel_startup()
929 if (atmel_use_dma_rx(port)) { in atmel_startup()
938 dma_unmap_single(port->dev, in atmel_startup()
944 free_irq(port->irq, port); in atmel_startup()
947 pdc->dma_addr = dma_map_single(port->dev, in atmel_startup()
957 UART_PUT_RPR(port, atmel_port->pdc_rx[0].dma_addr); in atmel_startup()
958 UART_PUT_RCR(port, PDC_BUFFER_SIZE); in atmel_startup()
960 UART_PUT_RNPR(port, atmel_port->pdc_rx[1].dma_addr); in atmel_startup()
961 UART_PUT_RNCR(port, PDC_BUFFER_SIZE); in atmel_startup()
963 if (atmel_use_dma_tx(port)) { in atmel_startup()
965 struct circ_buf *xmit = &port->state->xmit; in atmel_startup()
968 pdc->dma_addr = dma_map_single(port->dev, in atmel_startup()
981 retval = atmel_open_hook(port); in atmel_startup()
983 free_irq(port->irq, port); in atmel_startup()
989 atmel_port->irq_status_prev = UART_GET_CSR(port); in atmel_startup()
993 * Finally, enable the serial port in atmel_startup()
995 UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_startup()
997 UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_startup()
999 if (atmel_use_dma_rx(port)) { in atmel_startup()
1001 UART_PUT_RTOR(port, PDC_RX_TIMEOUT); in atmel_startup()
1002 UART_PUT_CR(port, ATMEL_US_STTTO); in atmel_startup()
1004 UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT); in atmel_startup()
1006 UART_PUT_PTCR(port, ATMEL_PDC_RXTEN); in atmel_startup()
1009 UART_PUT_IER(port, ATMEL_US_RXRDY); in atmel_startup()
1016 * Disable the port
1018 static void atmel_shutdown(struct uart_port *port) in atmel_shutdown() argument
1020 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_shutdown()
1024 atmel_stop_rx(port); in atmel_shutdown()
1025 atmel_stop_tx(port); in atmel_shutdown()
1030 if (atmel_use_dma_rx(port)) { in atmel_shutdown()
1036 dma_unmap_single(port->dev, in atmel_shutdown()
1043 if (atmel_use_dma_tx(port)) { in atmel_shutdown()
1046 dma_unmap_single(port->dev, in atmel_shutdown()
1053 * Disable all interrupts, port and break condition. in atmel_shutdown()
1055 UART_PUT_CR(port, ATMEL_US_RSTSTA); in atmel_shutdown()
1056 UART_PUT_IDR(port, -1); in atmel_shutdown()
1061 free_irq(port->irq, port); in atmel_shutdown()
1068 atmel_close_hook(port); in atmel_shutdown()
1075 static void atmel_flush_buffer(struct uart_port *port) in atmel_flush_buffer() argument
1077 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_flush_buffer()
1079 if (atmel_use_dma_tx(port)) { in atmel_flush_buffer()
1080 UART_PUT_TCR(port, 0); in atmel_flush_buffer()
1088 static void atmel_serial_pm(struct uart_port *port, unsigned int state, in atmel_serial_pm() argument
1091 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_pm()
1096 * Enable the peripheral clock for this serial port. in atmel_serial_pm()
1102 UART_PUT_IER(port, atmel_port->backup_imr); in atmel_serial_pm()
1106 atmel_port->backup_imr = UART_GET_IMR(port); in atmel_serial_pm()
1107 UART_PUT_IDR(port, -1); in atmel_serial_pm()
1110 * Disable the peripheral clock for this serial port. in atmel_serial_pm()
1121 * Change the port parameters
1123 static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, in atmel_set_termios() argument
1128 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_termios()
1131 mode = UART_GET_MR(port) & ~(ATMEL_US_USCLKS | ATMEL_US_CHRL in atmel_set_termios()
1135 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); in atmel_set_termios()
1136 quot = uart_get_divisor(port, baud); in atmel_set_termios()
1184 spin_lock_irqsave(&port->lock, flags); in atmel_set_termios()
1186 port->read_status_mask = ATMEL_US_OVRE; in atmel_set_termios()
1188 port->read_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
1190 port->read_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
1192 if (atmel_use_dma_rx(port)) in atmel_set_termios()
1194 UART_PUT_IER(port, port->read_status_mask); in atmel_set_termios()
1199 port->ignore_status_mask = 0; in atmel_set_termios()
1201 port->ignore_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
1203 port->ignore_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
1209 port->ignore_status_mask |= ATMEL_US_OVRE; in atmel_set_termios()
1213 /* update the per-port timeout */ in atmel_set_termios()
1214 uart_update_timeout(port, termios->c_cflag, baud); in atmel_set_termios()
1221 imr = UART_GET_IMR(port); in atmel_set_termios()
1222 UART_PUT_IDR(port, -1); in atmel_set_termios()
1225 UART_PUT_CR(port, ATMEL_US_TXDIS | ATMEL_US_RXDIS); in atmel_set_termios()
1231 dev_dbg(port->dev, "Setting UART to RS485\n"); in atmel_set_termios()
1233 UART_PUT_TTGR(port, in atmel_set_termios()
1237 dev_dbg(port->dev, "Setting UART to RS232\n"); in atmel_set_termios()
1241 UART_PUT_MR(port, mode); in atmel_set_termios()
1244 UART_PUT_BRGR(port, quot); in atmel_set_termios()
1245 UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_set_termios()
1246 UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_set_termios()
1249 UART_PUT_IER(port, imr); in atmel_set_termios()
1252 if (UART_ENABLE_MS(port, termios->c_cflag)) in atmel_set_termios()
1253 port->ops->enable_ms(port); in atmel_set_termios()
1255 spin_unlock_irqrestore(&port->lock, flags); in atmel_set_termios()
1258 static void atmel_set_ldisc(struct uart_port *port, int new) in atmel_set_ldisc() argument
1261 port->flags |= UPF_HARDPPS_CD; in atmel_set_ldisc()
1262 atmel_enable_ms(port); in atmel_set_ldisc()
1264 port->flags &= ~UPF_HARDPPS_CD; in atmel_set_ldisc()
1269 * Return string describing the specified port
1271 static const char *atmel_type(struct uart_port *port) in atmel_type() argument
1273 return (port->type == PORT_ATMEL) ? "ATMEL_SERIAL" : NULL; in atmel_type()
1277 * Release the memory region(s) being used by 'port'.
1279 static void atmel_release_port(struct uart_port *port) in atmel_release_port() argument
1281 struct platform_device *pdev = to_platform_device(port->dev); in atmel_release_port()
1284 release_mem_region(port->mapbase, size); in atmel_release_port()
1286 if (port->flags & UPF_IOREMAP) { in atmel_release_port()
1287 iounmap(port->membase); in atmel_release_port()
1288 port->membase = NULL; in atmel_release_port()
1293 * Request the memory region(s) being used by 'port'.
1295 static int atmel_request_port(struct uart_port *port) in atmel_request_port() argument
1297 struct platform_device *pdev = to_platform_device(port->dev); in atmel_request_port()
1300 if (!request_mem_region(port->mapbase, size, "atmel_serial")) in atmel_request_port()
1303 if (port->flags & UPF_IOREMAP) { in atmel_request_port()
1304 port->membase = ioremap(port->mapbase, size); in atmel_request_port()
1305 if (port->membase == NULL) { in atmel_request_port()
1306 release_mem_region(port->mapbase, size); in atmel_request_port()
1315 * Configure/autoconfigure the port.
1317 static void atmel_config_port(struct uart_port *port, int flags) in atmel_config_port() argument
1320 port->type = PORT_ATMEL; in atmel_config_port()
1321 atmel_request_port(port); in atmel_config_port()
1328 static int atmel_verify_port(struct uart_port *port, struct serial_struct *ser) in atmel_verify_port() argument
1333 if (port->irq != ser->irq) in atmel_verify_port()
1337 if (port->uartclk / 16 != ser->baud_base) in atmel_verify_port()
1339 if ((void *)port->mapbase != ser->iomem_base) in atmel_verify_port()
1341 if (port->iobase != ser->port) in atmel_verify_port()
1349 static int atmel_poll_get_char(struct uart_port *port) in atmel_poll_get_char() argument
1351 while (!(UART_GET_CSR(port) & ATMEL_US_RXRDY)) in atmel_poll_get_char()
1354 return UART_GET_CHAR(port); in atmel_poll_get_char()
1357 static void atmel_poll_put_char(struct uart_port *port, unsigned char ch) in atmel_poll_put_char() argument
1359 while (!(UART_GET_CSR(port) & ATMEL_US_TXRDY)) in atmel_poll_put_char()
1362 UART_PUT_CHAR(port, ch); in atmel_poll_put_char()
1367 atmel_ioctl(struct uart_port *port, unsigned int cmd, unsigned long arg) in atmel_ioctl() argument
1377 atmel_config_rs485(port, &rs485conf); in atmel_ioctl()
1382 &(to_atmel_uart_port(port)->rs485), in atmel_ioctl()
1455 * Configure the port from the platform device resource info.
1460 struct uart_port *port = &atmel_port->uart; in atmel_init_port() local
1471 port->iotype = UPIO_MEM; in atmel_init_port()
1472 port->flags = UPF_BOOT_AUTOCONF; in atmel_init_port()
1473 port->ops = &atmel_pops; in atmel_init_port()
1474 port->fifosize = 1; in atmel_init_port()
1475 port->dev = &pdev->dev; in atmel_init_port()
1476 port->mapbase = pdev->resource[0].start; in atmel_init_port()
1477 port->irq = pdev->resource[1].start; in atmel_init_port()
1480 (unsigned long)port); in atmel_init_port()
1486 port->membase = pdata->regs; in atmel_init_port()
1488 port->flags |= UPF_IOREMAP; in atmel_init_port()
1489 port->membase = NULL; in atmel_init_port()
1496 port->uartclk = clk_get_rate(atmel_port->clk); in atmel_init_port()
1504 else if (atmel_use_dma_tx(port)) { in atmel_init_port()
1505 port->fifosize = PDC_BUFFER_SIZE; in atmel_init_port()
1530 static void atmel_console_putchar(struct uart_port *port, int ch) in atmel_console_putchar() argument
1532 while (!(UART_GET_CSR(port) & ATMEL_US_TXRDY)) in atmel_console_putchar()
1534 UART_PUT_CHAR(port, ch); in atmel_console_putchar()
1542 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_write() local
1543 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_console_write()
1550 imr = UART_GET_IMR(port); in atmel_console_write()
1551 UART_PUT_IDR(port, ATMEL_US_RXRDY | atmel_port->tx_done_mask); in atmel_console_write()
1554 pdc_tx = UART_GET_PTSR(port) & ATMEL_PDC_TXTEN; in atmel_console_write()
1555 UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); in atmel_console_write()
1557 uart_console_write(port, s, count, atmel_console_putchar); in atmel_console_write()
1564 status = UART_GET_CSR(port); in atmel_console_write()
1569 UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); in atmel_console_write()
1572 UART_PUT_IER(port, imr); in atmel_console_write()
1576 * If the port was already initialised (eg, by a boot loader),
1579 static void __init atmel_console_get_options(struct uart_port *port, int *baud, in atmel_console_get_options() argument
1585 * If the baud rate generator isn't running, the port wasn't in atmel_console_get_options()
1588 quot = UART_GET_BRGR(port) & ATMEL_US_CD; in atmel_console_get_options()
1592 mr = UART_GET_MR(port) & ATMEL_US_CHRL; in atmel_console_get_options()
1598 mr = UART_GET_MR(port) & ATMEL_US_PAR; in atmel_console_get_options()
1610 *baud = port->uartclk / (16 * (quot - 1)); in atmel_console_get_options()
1615 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_setup() local
1621 if (port->membase == NULL) { in atmel_console_setup()
1622 /* Port not initialized yet - delay setup */ in atmel_console_setup()
1628 UART_PUT_IDR(port, -1); in atmel_console_setup()
1629 UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_console_setup()
1630 UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_console_setup()
1635 atmel_console_get_options(port, &baud, &parity, &bits); in atmel_console_setup()
1637 return uart_set_options(port, co, baud, parity, bits, flow); in atmel_console_setup()
1663 struct atmel_uart_port *port = &atmel_ports[id]; in atmel_console_init() local
1665 port->backup_imr = 0; in atmel_console_init()
1666 port->uart.line = id; in atmel_console_init()
1669 atmel_init_port(port, atmel_default_console_device); in atmel_console_init()
1692 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
1694 return port->cons && port->cons->index == port->line; in atmel_is_console_port()
1700 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
1729 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_suspend() local
1730 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_suspend()
1732 if (atmel_is_console_port(port) && console_suspend_enabled) { in atmel_serial_suspend()
1734 while (!(UART_GET_CSR(port) & ATMEL_US_TXEMPTY)) in atmel_serial_suspend()
1743 uart_suspend_port(&atmel_uart, port); in atmel_serial_suspend()
1750 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_resume() local
1751 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_resume()
1753 uart_resume_port(&atmel_uart, port); in atmel_serial_resume()
1765 struct atmel_uart_port *port; in atmel_serial_probe() local
1780 /* port id not found in platform data nor device-tree aliases: in atmel_serial_probe()
1791 /* port already in use */ in atmel_serial_probe()
1796 port = &atmel_ports[ret]; in atmel_serial_probe()
1797 port->backup_imr = 0; in atmel_serial_probe()
1798 port->uart.line = ret; in atmel_serial_probe()
1800 atmel_init_port(port, pdev); in atmel_serial_probe()
1802 if (!atmel_use_dma_rx(&port->uart)) { in atmel_serial_probe()
1808 port->rx_ring.buf = data; in atmel_serial_probe()
1811 ret = uart_add_one_port(&atmel_uart, &port->uart); in atmel_serial_probe()
1816 if (atmel_is_console_port(&port->uart) in atmel_serial_probe()
1822 clk_disable(port->clk); in atmel_serial_probe()
1827 platform_set_drvdata(pdev, port); in atmel_serial_probe()
1829 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_serial_probe()
1830 UART_PUT_MR(&port->uart, ATMEL_US_USMODE_NORMAL); in atmel_serial_probe()
1831 UART_PUT_CR(&port->uart, ATMEL_US_RTSEN); in atmel_serial_probe()
1837 kfree(port->rx_ring.buf); in atmel_serial_probe()
1838 port->rx_ring.buf = NULL; in atmel_serial_probe()
1840 if (!atmel_is_console_port(&port->uart)) { in atmel_serial_probe()
1841 clk_put(port->clk); in atmel_serial_probe()
1842 port->clk = NULL; in atmel_serial_probe()
1850 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_remove() local
1851 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_remove()
1857 ret = uart_remove_one_port(&atmel_uart, port); in atmel_serial_remove()
1862 /* "port" is allocated statically, so we shouldn't free it */ in atmel_serial_remove()
1864 clear_bit(port->line, &atmel_ports_in_use); in atmel_serial_remove()
1908 MODULE_DESCRIPTION("Atmel AT91 / AT32 serial port driver");