Lines Matching refs:port
76 static void atmel_start_rx(struct uart_port *port);
77 static void atmel_stop_rx(struct uart_port *port);
174 int (*prepare_rx)(struct uart_port *port);
175 int (*prepare_tx)(struct uart_port *port);
176 void (*schedule_rx)(struct uart_port *port);
177 void (*schedule_tx)(struct uart_port *port);
178 void (*release_rx)(struct uart_port *port);
179 void (*release_tx)(struct uart_port *port);
205 static inline u32 atmel_uart_readl(struct uart_port *port, u32 reg) in atmel_uart_readl() argument
207 return __raw_readl(port->membase + reg); in atmel_uart_readl()
210 static inline void atmel_uart_writel(struct uart_port *port, u32 reg, u32 value) in atmel_uart_writel() argument
212 __raw_writel(value, port->membase + reg); in atmel_uart_writel()
218 static inline u8 atmel_uart_read_char(struct uart_port *port) in atmel_uart_read_char() argument
220 return __raw_readl(port->membase + ATMEL_US_RHR); in atmel_uart_read_char()
223 static inline void atmel_uart_write_char(struct uart_port *port, u8 value) in atmel_uart_write_char() argument
225 __raw_writel(value, port->membase + ATMEL_US_THR); in atmel_uart_write_char()
230 static inline u8 atmel_uart_read_char(struct uart_port *port) in atmel_uart_read_char() argument
232 return __raw_readb(port->membase + ATMEL_US_RHR); in atmel_uart_read_char()
235 static inline void atmel_uart_write_char(struct uart_port *port, u8 value) in atmel_uart_write_char() argument
237 __raw_writeb(value, port->membase + ATMEL_US_THR); in atmel_uart_write_char()
242 static inline int atmel_uart_is_half_duplex(struct uart_port *port) in atmel_uart_is_half_duplex() argument
244 return (port->rs485.flags & SER_RS485_ENABLED) && in atmel_uart_is_half_duplex()
245 !(port->rs485.flags & SER_RS485_RX_DURING_TX); in atmel_uart_is_half_duplex()
249 static bool atmel_use_pdc_rx(struct uart_port *port) in atmel_use_pdc_rx() argument
251 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_rx()
256 static bool atmel_use_pdc_tx(struct uart_port *port) in atmel_use_pdc_tx() argument
258 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_tx()
263 static bool atmel_use_pdc_rx(struct uart_port *port) in atmel_use_pdc_rx() argument
268 static bool atmel_use_pdc_tx(struct uart_port *port) in atmel_use_pdc_tx() argument
274 static bool atmel_use_dma_tx(struct uart_port *port) in atmel_use_dma_tx() argument
276 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_tx()
281 static bool atmel_use_dma_rx(struct uart_port *port) in atmel_use_dma_rx() argument
283 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_rx()
288 static bool atmel_use_fifo(struct uart_port *port) in atmel_use_fifo() argument
290 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_fifo()
295 static unsigned int atmel_get_lines_status(struct uart_port *port) in atmel_get_lines_status() argument
297 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_lines_status()
300 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_get_lines_status()
340 static int atmel_config_rs485(struct uart_port *port, in atmel_config_rs485() argument
343 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_config_rs485()
347 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_config_rs485()
349 mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_config_rs485()
354 port->rs485 = *rs485conf; in atmel_config_rs485()
357 dev_dbg(port->dev, "Setting UART to RS485\n"); in atmel_config_rs485()
359 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_config_rs485()
363 dev_dbg(port->dev, "Setting UART to RS232\n"); in atmel_config_rs485()
364 if (atmel_use_pdc_tx(port)) in atmel_config_rs485()
370 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_config_rs485()
373 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_config_rs485()
381 static u_int atmel_tx_empty(struct uart_port *port) in atmel_tx_empty() argument
383 return (atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXEMPTY) ? in atmel_tx_empty()
391 static void atmel_set_mctrl(struct uart_port *port, u_int mctrl) in atmel_set_mctrl() argument
394 unsigned int mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_set_mctrl()
396 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_mctrl()
399 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_set_mctrl()
400 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_set_mctrl()
401 port->rs485.delay_rts_after_send); in atmel_set_mctrl()
431 atmel_uart_writel(port, ATMEL_US_CR, control); in atmel_set_mctrl()
442 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_set_mctrl()
448 static u_int atmel_get_mctrl(struct uart_port *port) in atmel_get_mctrl() argument
450 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_mctrl()
453 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_get_mctrl()
473 static void atmel_stop_tx(struct uart_port *port) in atmel_stop_tx() argument
475 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_stop_tx()
477 if (atmel_use_pdc_tx(port)) { in atmel_stop_tx()
479 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_stop_tx()
487 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS); in atmel_stop_tx()
490 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_stop_tx()
492 if (atmel_uart_is_half_duplex(port)) in atmel_stop_tx()
493 atmel_start_rx(port); in atmel_stop_tx()
500 static void atmel_start_tx(struct uart_port *port) in atmel_start_tx() argument
502 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_start_tx()
504 if (atmel_use_pdc_tx(port) && (atmel_uart_readl(port, ATMEL_PDC_PTSR) in atmel_start_tx()
510 if (atmel_use_pdc_tx(port) || atmel_use_dma_tx(port)) in atmel_start_tx()
511 if (atmel_uart_is_half_duplex(port)) in atmel_start_tx()
512 atmel_stop_rx(port); in atmel_start_tx()
514 if (atmel_use_pdc_tx(port)) in atmel_start_tx()
516 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_start_tx()
519 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_start_tx()
522 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN); in atmel_start_tx()
528 static void atmel_start_rx(struct uart_port *port) in atmel_start_rx() argument
531 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_start_rx()
533 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RXEN); in atmel_start_rx()
535 if (atmel_use_pdc_rx(port)) { in atmel_start_rx()
537 atmel_uart_writel(port, ATMEL_US_IER, in atmel_start_rx()
539 port->read_status_mask); in atmel_start_rx()
540 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN); in atmel_start_rx()
542 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_RXRDY); in atmel_start_rx()
549 static void atmel_stop_rx(struct uart_port *port) in atmel_stop_rx() argument
551 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RXDIS); in atmel_stop_rx()
553 if (atmel_use_pdc_rx(port)) { in atmel_stop_rx()
555 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS); in atmel_stop_rx()
556 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_stop_rx()
558 port->read_status_mask); in atmel_stop_rx()
560 atmel_uart_writel(port, ATMEL_US_IDR, ATMEL_US_RXRDY); in atmel_stop_rx()
567 static void atmel_enable_ms(struct uart_port *port) in atmel_enable_ms() argument
569 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_enable_ms()
600 atmel_uart_writel(port, ATMEL_US_IER, ier); in atmel_enable_ms()
606 static void atmel_disable_ms(struct uart_port *port) in atmel_disable_ms() argument
608 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_disable_ms()
639 atmel_uart_writel(port, ATMEL_US_IDR, idr); in atmel_disable_ms()
645 static void atmel_break_ctl(struct uart_port *port, int break_state) in atmel_break_ctl() argument
649 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTBRK); in atmel_break_ctl()
652 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STPBRK); in atmel_break_ctl()
659 atmel_buffer_rx_char(struct uart_port *port, unsigned int status, in atmel_buffer_rx_char() argument
662 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_buffer_rx_char()
683 static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status) in atmel_pdc_rxerr() argument
686 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_pdc_rxerr()
691 port->icount.brk++; in atmel_pdc_rxerr()
694 port->icount.parity++; in atmel_pdc_rxerr()
696 port->icount.frame++; in atmel_pdc_rxerr()
698 port->icount.overrun++; in atmel_pdc_rxerr()
704 static void atmel_rx_chars(struct uart_port *port) in atmel_rx_chars() argument
706 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_chars()
709 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_rx_chars()
711 ch = atmel_uart_read_char(port); in atmel_rx_chars()
722 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_rx_chars()
727 atmel_uart_writel(port, ATMEL_US_IER, in atmel_rx_chars()
737 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_rx_chars()
744 atmel_buffer_rx_char(port, status, ch); in atmel_rx_chars()
745 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_rx_chars()
755 static void atmel_tx_chars(struct uart_port *port) in atmel_tx_chars() argument
757 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_chars()
758 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_chars()
760 if (port->x_char && in atmel_tx_chars()
761 (atmel_uart_readl(port, ATMEL_US_CSR) & atmel_port->tx_done_mask)) { in atmel_tx_chars()
762 atmel_uart_write_char(port, port->x_char); in atmel_tx_chars()
763 port->icount.tx++; in atmel_tx_chars()
764 port->x_char = 0; in atmel_tx_chars()
766 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) in atmel_tx_chars()
769 while (atmel_uart_readl(port, ATMEL_US_CSR) & in atmel_tx_chars()
771 atmel_uart_write_char(port, xmit->buf[xmit->tail]); in atmel_tx_chars()
773 port->icount.tx++; in atmel_tx_chars()
779 uart_write_wakeup(port); in atmel_tx_chars()
783 atmel_uart_writel(port, ATMEL_US_IER, in atmel_tx_chars()
790 struct uart_port *port = &atmel_port->uart; in atmel_complete_tx_dma() local
791 struct circ_buf *xmit = &port->state->xmit; in atmel_complete_tx_dma()
795 spin_lock_irqsave(&port->lock, flags); in atmel_complete_tx_dma()
802 port->icount.tx += atmel_port->tx_len; in atmel_complete_tx_dma()
811 uart_write_wakeup(port); in atmel_complete_tx_dma()
820 else if (atmel_uart_is_half_duplex(port)) { in atmel_complete_tx_dma()
826 atmel_uart_writel(port, ATMEL_US_IER, in atmel_complete_tx_dma()
830 spin_unlock_irqrestore(&port->lock, flags); in atmel_complete_tx_dma()
833 static void atmel_release_tx_dma(struct uart_port *port) in atmel_release_tx_dma() argument
835 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_dma()
841 dma_unmap_sg(port->dev, &atmel_port->sg_tx, 1, in atmel_release_tx_dma()
853 static void atmel_tx_dma(struct uart_port *port) in atmel_tx_dma() argument
855 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_dma()
856 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_dma()
867 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_dma()
921 dev_err(port->dev, "Failed to send via dma!\n"); in atmel_tx_dma()
925 dma_sync_sg_for_device(port->dev, sg_tx, 1, DMA_TO_DEVICE); in atmel_tx_dma()
932 dev_err(port->dev, "dma_submit_error %d\n", in atmel_tx_dma()
941 uart_write_wakeup(port); in atmel_tx_dma()
944 static int atmel_prepare_tx_dma(struct uart_port *port) in atmel_prepare_tx_dma() argument
946 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_dma()
954 atmel_port->chan_tx = dma_request_slave_channel(port->dev, "tx"); in atmel_prepare_tx_dma()
957 dev_info(port->dev, "using %s for tx DMA transfers\n", in atmel_prepare_tx_dma()
963 BUG_ON(!PAGE_ALIGNED(port->state->xmit.buf)); in atmel_prepare_tx_dma()
965 virt_to_page(port->state->xmit.buf), in atmel_prepare_tx_dma()
967 (unsigned long)port->state->xmit.buf & ~PAGE_MASK); in atmel_prepare_tx_dma()
968 nent = dma_map_sg(port->dev, in atmel_prepare_tx_dma()
974 dev_dbg(port->dev, "need to release resource of dma\n"); in atmel_prepare_tx_dma()
977 dev_dbg(port->dev, "%s: mapped %d@%p to %pad\n", __func__, in atmel_prepare_tx_dma()
979 port->state->xmit.buf, in atmel_prepare_tx_dma()
989 config.dst_addr = port->mapbase + ATMEL_US_THR; in atmel_prepare_tx_dma()
995 dev_err(port->dev, "DMA tx slave configuration failed\n"); in atmel_prepare_tx_dma()
1002 dev_err(port->dev, "TX channel not available, switch to pio\n"); in atmel_prepare_tx_dma()
1005 atmel_release_tx_dma(port); in atmel_prepare_tx_dma()
1011 struct uart_port *port = arg; in atmel_complete_rx_dma() local
1012 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_complete_rx_dma()
1017 static void atmel_release_rx_dma(struct uart_port *port) in atmel_release_rx_dma() argument
1019 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_dma()
1025 dma_unmap_sg(port->dev, &atmel_port->sg_rx, 1, in atmel_release_rx_dma()
1034 static void atmel_rx_from_dma(struct uart_port *port) in atmel_rx_from_dma() argument
1036 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_dma()
1037 struct tty_port *tport = &port->state->port; in atmel_rx_from_dma()
1046 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_rx_from_dma()
1052 dev_dbg(port->dev, "Get residue error, restart tasklet\n"); in atmel_rx_from_dma()
1053 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
1059 dma_sync_sg_for_cpu(port->dev, in atmel_rx_from_dma()
1090 port->icount.rx += count; in atmel_rx_from_dma()
1102 port->icount.rx += count; in atmel_rx_from_dma()
1106 dma_sync_sg_for_device(port->dev, in atmel_rx_from_dma()
1115 spin_unlock(&port->lock); in atmel_rx_from_dma()
1117 spin_lock(&port->lock); in atmel_rx_from_dma()
1119 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
1122 static int atmel_prepare_rx_dma(struct uart_port *port) in atmel_prepare_rx_dma() argument
1124 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_dma()
1136 atmel_port->chan_rx = dma_request_slave_channel(port->dev, "rx"); in atmel_prepare_rx_dma()
1139 dev_info(port->dev, "using %s for rx DMA transfers\n", in atmel_prepare_rx_dma()
1150 nent = dma_map_sg(port->dev, in atmel_prepare_rx_dma()
1156 dev_dbg(port->dev, "need to release resource of dma\n"); in atmel_prepare_rx_dma()
1159 dev_dbg(port->dev, "%s: mapped %d@%p to %pad\n", __func__, in atmel_prepare_rx_dma()
1169 config.src_addr = port->mapbase + ATMEL_US_RHR; in atmel_prepare_rx_dma()
1175 dev_err(port->dev, "DMA rx slave configuration failed\n"); in atmel_prepare_rx_dma()
1189 dev_err(port->dev, "Preparing DMA cyclic failed\n"); in atmel_prepare_rx_dma()
1193 desc->callback_param = port; in atmel_prepare_rx_dma()
1197 dev_err(port->dev, "dma_submit_error %d\n", in atmel_prepare_rx_dma()
1207 dev_err(port->dev, "RX channel not available, switch to pio\n"); in atmel_prepare_rx_dma()
1210 atmel_release_rx_dma(port); in atmel_prepare_rx_dma()
1216 struct uart_port *port = (void *)data; in atmel_uart_timer_callback() local
1217 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_uart_timer_callback()
1220 mod_timer(&atmel_port->uart_timer, jiffies + uart_poll_timeout(port)); in atmel_uart_timer_callback()
1227 atmel_handle_receive(struct uart_port *port, unsigned int pending) in atmel_handle_receive() argument
1229 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_receive()
1231 if (atmel_use_pdc_rx(port)) { in atmel_handle_receive()
1240 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_receive()
1247 atmel_pdc_rxerr(port, pending); in atmel_handle_receive()
1250 if (atmel_use_dma_rx(port)) { in atmel_handle_receive()
1252 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_receive()
1260 atmel_rx_chars(port); in atmel_handle_receive()
1266 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_handle_receive()
1267 atmel_uart_writel(port, ATMEL_US_IDR, ATMEL_US_RXBRK); in atmel_handle_receive()
1276 atmel_handle_transmit(struct uart_port *port, unsigned int pending) in atmel_handle_transmit() argument
1278 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_transmit()
1281 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_transmit()
1286 if (!(atmel_uart_readl(port, ATMEL_US_CSR) in atmel_handle_transmit()
1288 dev_warn(port->dev, "Should start RX, but TX fifo is not empty\n"); in atmel_handle_transmit()
1291 atmel_start_rx(port); in atmel_handle_transmit()
1302 atmel_handle_status(struct uart_port *port, unsigned int pending, in atmel_handle_status() argument
1305 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_status()
1322 struct uart_port *port = dev_id; in atmel_interrupt() local
1323 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_interrupt()
1330 status = atmel_get_lines_status(port); in atmel_interrupt()
1331 mask = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_interrupt()
1357 atmel_uart_writel(port, ATMEL_US_IDR, mask); in atmel_interrupt()
1362 atmel_handle_receive(port, pending); in atmel_interrupt()
1363 atmel_handle_status(port, pending, status); in atmel_interrupt()
1364 atmel_handle_transmit(port, pending); in atmel_interrupt()
1372 static void atmel_release_tx_pdc(struct uart_port *port) in atmel_release_tx_pdc() argument
1374 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_pdc()
1377 dma_unmap_single(port->dev, in atmel_release_tx_pdc()
1386 static void atmel_tx_pdc(struct uart_port *port) in atmel_tx_pdc() argument
1388 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_pdc()
1389 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_pdc()
1394 if (atmel_uart_readl(port, ATMEL_PDC_TCR)) in atmel_tx_pdc()
1400 port->icount.tx += pdc->ofs; in atmel_tx_pdc()
1406 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_tx_pdc()
1408 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_pdc()
1409 dma_sync_single_for_device(port->dev, in atmel_tx_pdc()
1417 atmel_uart_writel(port, ATMEL_PDC_TPR, in atmel_tx_pdc()
1419 atmel_uart_writel(port, ATMEL_PDC_TCR, count); in atmel_tx_pdc()
1421 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_tx_pdc()
1423 atmel_uart_writel(port, ATMEL_US_IER, in atmel_tx_pdc()
1426 if (atmel_uart_is_half_duplex(port)) { in atmel_tx_pdc()
1428 atmel_start_rx(port); in atmel_tx_pdc()
1433 uart_write_wakeup(port); in atmel_tx_pdc()
1436 static int atmel_prepare_tx_pdc(struct uart_port *port) in atmel_prepare_tx_pdc() argument
1438 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_pdc()
1440 struct circ_buf *xmit = &port->state->xmit; in atmel_prepare_tx_pdc()
1443 pdc->dma_addr = dma_map_single(port->dev, in atmel_prepare_tx_pdc()
1453 static void atmel_rx_from_ring(struct uart_port *port) in atmel_rx_from_ring() argument
1455 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_ring()
1470 port->icount.rx++; in atmel_rx_from_ring()
1484 port->icount.brk++; in atmel_rx_from_ring()
1485 if (uart_handle_break(port)) in atmel_rx_from_ring()
1489 port->icount.parity++; in atmel_rx_from_ring()
1491 port->icount.frame++; in atmel_rx_from_ring()
1493 port->icount.overrun++; in atmel_rx_from_ring()
1495 status &= port->read_status_mask; in atmel_rx_from_ring()
1506 if (uart_handle_sysrq_char(port, c.ch)) in atmel_rx_from_ring()
1509 uart_insert_char(port, status, ATMEL_US_OVRE, c.ch, flg); in atmel_rx_from_ring()
1516 spin_unlock(&port->lock); in atmel_rx_from_ring()
1517 tty_flip_buffer_push(&port->state->port); in atmel_rx_from_ring()
1518 spin_lock(&port->lock); in atmel_rx_from_ring()
1521 static void atmel_release_rx_pdc(struct uart_port *port) in atmel_release_rx_pdc() argument
1523 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_pdc()
1529 dma_unmap_single(port->dev, in atmel_release_rx_pdc()
1537 static void atmel_rx_from_pdc(struct uart_port *port) in atmel_rx_from_pdc() argument
1539 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_pdc()
1540 struct tty_port *tport = &port->state->port; in atmel_rx_from_pdc()
1549 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_rx_from_pdc()
1552 head = atmel_uart_readl(port, ATMEL_PDC_RPR) - pdc->dma_addr; in atmel_rx_from_pdc()
1568 dma_sync_single_for_cpu(port->dev, pdc->dma_addr, in atmel_rx_from_pdc()
1582 dma_sync_single_for_device(port->dev, pdc->dma_addr, in atmel_rx_from_pdc()
1585 port->icount.rx += count; in atmel_rx_from_pdc()
1595 atmel_uart_writel(port, ATMEL_PDC_RNPR, pdc->dma_addr); in atmel_rx_from_pdc()
1596 atmel_uart_writel(port, ATMEL_PDC_RNCR, pdc->dma_size); in atmel_rx_from_pdc()
1607 spin_unlock(&port->lock); in atmel_rx_from_pdc()
1609 spin_lock(&port->lock); in atmel_rx_from_pdc()
1611 atmel_uart_writel(port, ATMEL_US_IER, in atmel_rx_from_pdc()
1615 static int atmel_prepare_rx_pdc(struct uart_port *port) in atmel_prepare_rx_pdc() argument
1617 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_pdc()
1626 dma_unmap_single(port->dev, in atmel_prepare_rx_pdc()
1635 pdc->dma_addr = dma_map_single(port->dev, in atmel_prepare_rx_pdc()
1645 atmel_uart_writel(port, ATMEL_PDC_RPR, atmel_port->pdc_rx[0].dma_addr); in atmel_prepare_rx_pdc()
1646 atmel_uart_writel(port, ATMEL_PDC_RCR, PDC_BUFFER_SIZE); in atmel_prepare_rx_pdc()
1648 atmel_uart_writel(port, ATMEL_PDC_RNPR, in atmel_prepare_rx_pdc()
1650 atmel_uart_writel(port, ATMEL_PDC_RNCR, PDC_BUFFER_SIZE); in atmel_prepare_rx_pdc()
1660 struct uart_port *port = (struct uart_port *)data; in atmel_tasklet_func() local
1661 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tasklet_func()
1666 spin_lock(&port->lock); in atmel_tasklet_func()
1668 atmel_port->schedule_tx(port); in atmel_tasklet_func()
1674 port->icount.rng++; in atmel_tasklet_func()
1676 port->icount.dsr++; in atmel_tasklet_func()
1678 uart_handle_dcd_change(port, !(status & ATMEL_US_DCD)); in atmel_tasklet_func()
1680 uart_handle_cts_change(port, !(status & ATMEL_US_CTS)); in atmel_tasklet_func()
1682 wake_up_interruptible(&port->state->port.delta_msr_wait); in atmel_tasklet_func()
1687 atmel_port->schedule_rx(port); in atmel_tasklet_func()
1689 spin_unlock(&port->lock); in atmel_tasklet_func()
1735 static void atmel_init_rs485(struct uart_port *port, in atmel_init_rs485() argument
1742 struct serial_rs485 *rs485conf = &port->rs485; in atmel_init_rs485()
1759 port->rs485 = pdata->rs485; in atmel_init_rs485()
1764 static void atmel_set_ops(struct uart_port *port) in atmel_set_ops() argument
1766 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_ops()
1768 if (atmel_use_dma_rx(port)) { in atmel_set_ops()
1772 } else if (atmel_use_pdc_rx(port)) { in atmel_set_ops()
1782 if (atmel_use_dma_tx(port)) { in atmel_set_ops()
1786 } else if (atmel_use_pdc_tx(port)) { in atmel_set_ops()
1800 static void atmel_get_ip_name(struct uart_port *port) in atmel_get_ip_name() argument
1802 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_ip_name()
1803 int name = atmel_uart_readl(port, ATMEL_US_NAME); in atmel_get_ip_name()
1813 dev_dbg(port->dev, "This is usart\n"); in atmel_get_ip_name()
1816 dev_dbg(port->dev, "This is uart\n"); in atmel_get_ip_name()
1820 version = atmel_uart_readl(port, ATMEL_US_VERSION); in atmel_get_ip_name()
1825 dev_dbg(port->dev, "This version is usart\n"); in atmel_get_ip_name()
1830 dev_dbg(port->dev, "This version is uart\n"); in atmel_get_ip_name()
1834 dev_err(port->dev, "Not supported ip name nor version, set to uart\n"); in atmel_get_ip_name()
1839 static void atmel_free_gpio_irq(struct uart_port *port) in atmel_free_gpio_irq() argument
1841 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_free_gpio_irq()
1846 free_irq(atmel_port->gpio_irq[i], port); in atmel_free_gpio_irq()
1849 static int atmel_request_gpio_irq(struct uart_port *port) in atmel_request_gpio_irq() argument
1851 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_request_gpio_irq()
1862 "atmel_serial", port); in atmel_request_gpio_irq()
1864 dev_err(port->dev, "atmel_startup - Can't get %d irq\n", in atmel_request_gpio_irq()
1873 free_irq(irq[i], port); in atmel_request_gpio_irq()
1881 static int atmel_startup(struct uart_port *port) in atmel_startup() argument
1883 struct platform_device *pdev = to_platform_device(port->dev); in atmel_startup()
1884 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_startup()
1885 struct tty_struct *tty = port->state->port.tty; in atmel_startup()
1893 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_startup()
1899 retval = request_irq(port->irq, atmel_interrupt, in atmel_startup()
1901 tty ? tty->name : "atmel_serial", port); in atmel_startup()
1903 dev_err(port->dev, "atmel_startup - Can't get irq\n"); in atmel_startup()
1910 retval = atmel_request_gpio_irq(port); in atmel_startup()
1920 atmel_set_ops(port); in atmel_startup()
1923 retval = atmel_port->prepare_rx(port); in atmel_startup()
1925 atmel_set_ops(port); in atmel_startup()
1929 retval = atmel_port->prepare_tx(port); in atmel_startup()
1931 atmel_set_ops(port); in atmel_startup()
1942 atmel_uart_writel(port, ATMEL_US_CR, in atmel_startup()
1947 if (atmel_use_dma_tx(port)) in atmel_startup()
1957 atmel_uart_writel(port, ATMEL_US_FMR, fmr); in atmel_startup()
1961 atmel_port->irq_status_prev = atmel_get_lines_status(port); in atmel_startup()
1967 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_startup()
1969 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_startup()
1973 (unsigned long)port); in atmel_startup()
1975 if (atmel_use_pdc_rx(port)) { in atmel_startup()
1979 jiffies + uart_poll_timeout(port)); in atmel_startup()
1982 atmel_uart_writel(port, ATMEL_US_RTOR, PDC_RX_TIMEOUT); in atmel_startup()
1983 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_startup()
1985 atmel_uart_writel(port, ATMEL_US_IER, in atmel_startup()
1989 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN); in atmel_startup()
1990 } else if (atmel_use_dma_rx(port)) { in atmel_startup()
1994 jiffies + uart_poll_timeout(port)); in atmel_startup()
1997 atmel_uart_writel(port, ATMEL_US_RTOR, PDC_RX_TIMEOUT); in atmel_startup()
1998 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_startup()
2000 atmel_uart_writel(port, ATMEL_US_IER, in atmel_startup()
2005 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_RXRDY); in atmel_startup()
2011 free_irq(port->irq, port); in atmel_startup()
2020 static void atmel_flush_buffer(struct uart_port *port) in atmel_flush_buffer() argument
2022 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_flush_buffer()
2024 if (atmel_use_pdc_tx(port)) { in atmel_flush_buffer()
2025 atmel_uart_writel(port, ATMEL_PDC_TCR, 0); in atmel_flush_buffer()
2038 static void atmel_shutdown(struct uart_port *port) in atmel_shutdown() argument
2040 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_shutdown()
2059 atmel_stop_rx(port); in atmel_shutdown()
2060 atmel_stop_tx(port); in atmel_shutdown()
2062 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_shutdown()
2063 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_shutdown()
2070 atmel_port->release_rx(port); in atmel_shutdown()
2072 atmel_port->release_tx(port); in atmel_shutdown()
2083 free_irq(port->irq, port); in atmel_shutdown()
2084 atmel_free_gpio_irq(port); in atmel_shutdown()
2088 atmel_flush_buffer(port); in atmel_shutdown()
2094 static void atmel_serial_pm(struct uart_port *port, unsigned int state, in atmel_serial_pm() argument
2097 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_pm()
2108 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->backup_imr); in atmel_serial_pm()
2112 atmel_port->backup_imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_serial_pm()
2113 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_serial_pm()
2122 dev_err(port->dev, "atmel_serial: unknown pm %d\n", state); in atmel_serial_pm()
2129 static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, in atmel_set_termios() argument
2132 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_termios()
2137 mode = old_mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_set_termios()
2143 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); in atmel_set_termios()
2144 quot = uart_get_divisor(port, baud); in atmel_set_termios()
2186 spin_lock_irqsave(&port->lock, flags); in atmel_set_termios()
2188 port->read_status_mask = ATMEL_US_OVRE; in atmel_set_termios()
2190 port->read_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
2192 port->read_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
2194 if (atmel_use_pdc_rx(port)) in atmel_set_termios()
2196 atmel_uart_writel(port, ATMEL_US_IER, port->read_status_mask); in atmel_set_termios()
2201 port->ignore_status_mask = 0; in atmel_set_termios()
2203 port->ignore_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
2205 port->ignore_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
2211 port->ignore_status_mask |= ATMEL_US_OVRE; in atmel_set_termios()
2216 uart_update_timeout(port, termios->c_cflag, baud); in atmel_set_termios()
2223 imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_set_termios()
2224 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_set_termios()
2227 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS | ATMEL_US_RXDIS); in atmel_set_termios()
2230 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_set_termios()
2231 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_set_termios()
2232 port->rs485.delay_rts_after_send); in atmel_set_termios()
2236 if (atmel_use_fifo(port) && in atmel_set_termios()
2266 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_set_termios()
2283 atmel_uart_writel(port, ATMEL_US_CR, rts_state); in atmel_set_termios()
2287 atmel_uart_writel(port, ATMEL_US_BRGR, quot); in atmel_set_termios()
2288 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_set_termios()
2289 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_set_termios()
2292 atmel_uart_writel(port, ATMEL_US_IER, imr); in atmel_set_termios()
2295 if (UART_ENABLE_MS(port, termios->c_cflag)) in atmel_set_termios()
2296 atmel_enable_ms(port); in atmel_set_termios()
2298 atmel_disable_ms(port); in atmel_set_termios()
2300 spin_unlock_irqrestore(&port->lock, flags); in atmel_set_termios()
2303 static void atmel_set_ldisc(struct uart_port *port, struct ktermios *termios) in atmel_set_ldisc() argument
2306 port->flags |= UPF_HARDPPS_CD; in atmel_set_ldisc()
2307 spin_lock_irq(&port->lock); in atmel_set_ldisc()
2308 atmel_enable_ms(port); in atmel_set_ldisc()
2309 spin_unlock_irq(&port->lock); in atmel_set_ldisc()
2311 port->flags &= ~UPF_HARDPPS_CD; in atmel_set_ldisc()
2312 if (!UART_ENABLE_MS(port, termios->c_cflag)) { in atmel_set_ldisc()
2313 spin_lock_irq(&port->lock); in atmel_set_ldisc()
2314 atmel_disable_ms(port); in atmel_set_ldisc()
2315 spin_unlock_irq(&port->lock); in atmel_set_ldisc()
2323 static const char *atmel_type(struct uart_port *port) in atmel_type() argument
2325 return (port->type == PORT_ATMEL) ? "ATMEL_SERIAL" : NULL; in atmel_type()
2331 static void atmel_release_port(struct uart_port *port) in atmel_release_port() argument
2333 struct platform_device *pdev = to_platform_device(port->dev); in atmel_release_port()
2336 release_mem_region(port->mapbase, size); in atmel_release_port()
2338 if (port->flags & UPF_IOREMAP) { in atmel_release_port()
2339 iounmap(port->membase); in atmel_release_port()
2340 port->membase = NULL; in atmel_release_port()
2347 static int atmel_request_port(struct uart_port *port) in atmel_request_port() argument
2349 struct platform_device *pdev = to_platform_device(port->dev); in atmel_request_port()
2352 if (!request_mem_region(port->mapbase, size, "atmel_serial")) in atmel_request_port()
2355 if (port->flags & UPF_IOREMAP) { in atmel_request_port()
2356 port->membase = ioremap(port->mapbase, size); in atmel_request_port()
2357 if (port->membase == NULL) { in atmel_request_port()
2358 release_mem_region(port->mapbase, size); in atmel_request_port()
2369 static void atmel_config_port(struct uart_port *port, int flags) in atmel_config_port() argument
2372 port->type = PORT_ATMEL; in atmel_config_port()
2373 atmel_request_port(port); in atmel_config_port()
2380 static int atmel_verify_port(struct uart_port *port, struct serial_struct *ser) in atmel_verify_port() argument
2385 if (port->irq != ser->irq) in atmel_verify_port()
2389 if (port->uartclk / 16 != ser->baud_base) in atmel_verify_port()
2391 if (port->mapbase != (unsigned long)ser->iomem_base) in atmel_verify_port()
2393 if (port->iobase != ser->port) in atmel_verify_port()
2401 static int atmel_poll_get_char(struct uart_port *port) in atmel_poll_get_char() argument
2403 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_RXRDY)) in atmel_poll_get_char()
2406 return atmel_uart_read_char(port); in atmel_poll_get_char()
2409 static void atmel_poll_put_char(struct uart_port *port, unsigned char ch) in atmel_poll_put_char() argument
2411 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXRDY)) in atmel_poll_put_char()
2414 atmel_uart_write_char(port, ch); in atmel_poll_put_char()
2451 struct uart_port *port = &atmel_port->uart; in atmel_init_port() local
2455 atmel_set_ops(port); in atmel_init_port()
2457 atmel_init_rs485(port, pdev); in atmel_init_port()
2459 port->iotype = UPIO_MEM; in atmel_init_port()
2460 port->flags = UPF_BOOT_AUTOCONF; in atmel_init_port()
2461 port->ops = &atmel_pops; in atmel_init_port()
2462 port->fifosize = 1; in atmel_init_port()
2463 port->dev = &pdev->dev; in atmel_init_port()
2464 port->mapbase = pdev->resource[0].start; in atmel_init_port()
2465 port->irq = pdev->resource[1].start; in atmel_init_port()
2466 port->rs485_config = atmel_config_rs485; in atmel_init_port()
2469 (unsigned long)port); in atmel_init_port()
2476 port->membase = pdata->regs; in atmel_init_port()
2478 port->flags |= UPF_IOREMAP; in atmel_init_port()
2479 port->membase = NULL; in atmel_init_port()
2496 port->uartclk = clk_get_rate(atmel_port->clk); in atmel_init_port()
2502 if (port->rs485.flags & SER_RS485_ENABLED) in atmel_init_port()
2504 else if (atmel_use_pdc_tx(port)) { in atmel_init_port()
2505 port->fifosize = PDC_BUFFER_SIZE; in atmel_init_port()
2517 static void atmel_console_putchar(struct uart_port *port, int ch) in atmel_console_putchar() argument
2519 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXRDY)) in atmel_console_putchar()
2521 atmel_uart_write_char(port, ch); in atmel_console_putchar()
2529 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_write() local
2530 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_console_write()
2537 imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_console_write()
2538 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_console_write()
2542 pdc_tx = atmel_uart_readl(port, ATMEL_PDC_PTSR) & ATMEL_PDC_TXTEN; in atmel_console_write()
2543 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_console_write()
2546 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN); in atmel_console_write()
2548 uart_console_write(port, s, count, atmel_console_putchar); in atmel_console_write()
2555 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_console_write()
2560 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_console_write()
2563 atmel_uart_writel(port, ATMEL_US_IER, imr); in atmel_console_write()
2570 static void __init atmel_console_get_options(struct uart_port *port, int *baud, in atmel_console_get_options() argument
2579 quot = atmel_uart_readl(port, ATMEL_US_BRGR) & ATMEL_US_CD; in atmel_console_get_options()
2583 mr = atmel_uart_readl(port, ATMEL_US_MR) & ATMEL_US_CHRL; in atmel_console_get_options()
2589 mr = atmel_uart_readl(port, ATMEL_US_MR) & ATMEL_US_PAR; in atmel_console_get_options()
2601 *baud = port->uartclk / (16 * (quot - 1)); in atmel_console_get_options()
2607 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_setup() local
2613 if (port->membase == NULL) { in atmel_console_setup()
2622 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_console_setup()
2623 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_console_setup()
2624 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_console_setup()
2629 atmel_console_get_options(port, &baud, &parity, &bits); in atmel_console_setup()
2631 return uart_set_options(port, co, baud, parity, bits, flow); in atmel_console_setup()
2658 struct atmel_uart_port *port = &atmel_ports[id]; in atmel_console_init() local
2660 port->backup_imr = 0; in atmel_console_init()
2661 port->uart.line = id; in atmel_console_init()
2664 ret = atmel_init_port(port, atmel_default_console_device); in atmel_console_init()
2689 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
2691 return port->cons && port->cons->index == port->line; in atmel_is_console_port()
2697 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
2726 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_suspend() local
2727 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_suspend()
2729 if (atmel_is_console_port(port) && console_suspend_enabled) { in atmel_serial_suspend()
2731 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & in atmel_serial_suspend()
2747 uart_suspend_port(&atmel_uart, port); in atmel_serial_suspend()
2754 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_resume() local
2755 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_resume()
2760 atmel_handle_receive(port, atmel_port->pending); in atmel_serial_resume()
2761 atmel_handle_status(port, atmel_port->pending, in atmel_serial_resume()
2763 atmel_handle_transmit(port, atmel_port->pending); in atmel_serial_resume()
2769 uart_resume_port(&atmel_uart, port); in atmel_serial_resume()
2799 static void atmel_serial_probe_fifos(struct atmel_uart_port *port, in atmel_serial_probe_fifos() argument
2802 port->fifo_size = 0; in atmel_serial_probe_fifos()
2803 port->rts_low = 0; in atmel_serial_probe_fifos()
2804 port->rts_high = 0; in atmel_serial_probe_fifos()
2808 &port->fifo_size)) in atmel_serial_probe_fifos()
2811 if (!port->fifo_size) in atmel_serial_probe_fifos()
2814 if (port->fifo_size < ATMEL_MIN_FIFO_SIZE) { in atmel_serial_probe_fifos()
2815 port->fifo_size = 0; in atmel_serial_probe_fifos()
2828 port->rts_high = max_t(int, port->fifo_size >> 1, in atmel_serial_probe_fifos()
2829 port->fifo_size - ATMEL_RTS_HIGH_OFFSET); in atmel_serial_probe_fifos()
2830 port->rts_low = max_t(int, port->fifo_size >> 2, in atmel_serial_probe_fifos()
2831 port->fifo_size - ATMEL_RTS_LOW_OFFSET); in atmel_serial_probe_fifos()
2834 port->fifo_size); in atmel_serial_probe_fifos()
2836 port->rts_high); in atmel_serial_probe_fifos()
2838 port->rts_low); in atmel_serial_probe_fifos()
2843 struct atmel_uart_port *port; in atmel_serial_probe() local
2874 port = &atmel_ports[ret]; in atmel_serial_probe()
2875 port->backup_imr = 0; in atmel_serial_probe()
2876 port->uart.line = ret; in atmel_serial_probe()
2877 atmel_serial_probe_fifos(port, pdev); in atmel_serial_probe()
2879 spin_lock_init(&port->lock_suspended); in atmel_serial_probe()
2881 ret = atmel_init_gpios(port, &pdev->dev); in atmel_serial_probe()
2887 ret = atmel_init_port(port, pdev); in atmel_serial_probe()
2891 if (!atmel_use_pdc_rx(&port->uart)) { in atmel_serial_probe()
2897 port->rx_ring.buf = data; in atmel_serial_probe()
2900 rs485_enabled = port->uart.rs485.flags & SER_RS485_ENABLED; in atmel_serial_probe()
2902 ret = uart_add_one_port(&atmel_uart, &port->uart); in atmel_serial_probe()
2907 if (atmel_is_console_port(&port->uart) in atmel_serial_probe()
2913 clk_disable_unprepare(port->clk); in atmel_serial_probe()
2918 platform_set_drvdata(pdev, port); in atmel_serial_probe()
2924 clk_prepare_enable(port->clk); in atmel_serial_probe()
2927 atmel_uart_writel(&port->uart, ATMEL_US_MR, in atmel_serial_probe()
2929 atmel_uart_writel(&port->uart, ATMEL_US_CR, ATMEL_US_RTSEN); in atmel_serial_probe()
2935 atmel_get_ip_name(&port->uart); in atmel_serial_probe()
2941 clk_disable_unprepare(port->clk); in atmel_serial_probe()
2946 kfree(port->rx_ring.buf); in atmel_serial_probe()
2947 port->rx_ring.buf = NULL; in atmel_serial_probe()
2949 if (!atmel_is_console_port(&port->uart)) { in atmel_serial_probe()
2950 clk_put(port->clk); in atmel_serial_probe()
2951 port->clk = NULL; in atmel_serial_probe()
2954 clear_bit(port->uart.line, atmel_ports_in_use); in atmel_serial_probe()
2961 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_remove() local
2962 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_remove()
2969 ret = uart_remove_one_port(&atmel_uart, port); in atmel_serial_remove()
2975 clear_bit(port->line, atmel_ports_in_use); in atmel_serial_remove()