Lines Matching refs:port
76 static void atmel_start_rx(struct uart_port *port);
77 static void atmel_stop_rx(struct uart_port *port);
172 int (*prepare_rx)(struct uart_port *port);
173 int (*prepare_tx)(struct uart_port *port);
174 void (*schedule_rx)(struct uart_port *port);
175 void (*schedule_tx)(struct uart_port *port);
176 void (*release_rx)(struct uart_port *port);
177 void (*release_tx)(struct uart_port *port);
203 static inline u32 atmel_uart_readl(struct uart_port *port, u32 reg) in atmel_uart_readl() argument
205 return __raw_readl(port->membase + reg); in atmel_uart_readl()
208 static inline void atmel_uart_writel(struct uart_port *port, u32 reg, u32 value) in atmel_uart_writel() argument
210 __raw_writel(value, port->membase + reg); in atmel_uart_writel()
216 static inline u8 atmel_uart_read_char(struct uart_port *port) in atmel_uart_read_char() argument
218 return __raw_readl(port->membase + ATMEL_US_RHR); in atmel_uart_read_char()
221 static inline void atmel_uart_write_char(struct uart_port *port, u8 value) in atmel_uart_write_char() argument
223 __raw_writel(value, port->membase + ATMEL_US_THR); in atmel_uart_write_char()
228 static inline u8 atmel_uart_read_char(struct uart_port *port) in atmel_uart_read_char() argument
230 return __raw_readb(port->membase + ATMEL_US_RHR); in atmel_uart_read_char()
233 static inline void atmel_uart_write_char(struct uart_port *port, u8 value) in atmel_uart_write_char() argument
235 __raw_writeb(value, port->membase + ATMEL_US_THR); in atmel_uart_write_char()
241 static bool atmel_use_pdc_rx(struct uart_port *port) in atmel_use_pdc_rx() argument
243 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_rx()
248 static bool atmel_use_pdc_tx(struct uart_port *port) in atmel_use_pdc_tx() argument
250 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_tx()
255 static bool atmel_use_pdc_rx(struct uart_port *port) in atmel_use_pdc_rx() argument
260 static bool atmel_use_pdc_tx(struct uart_port *port) in atmel_use_pdc_tx() argument
266 static bool atmel_use_dma_tx(struct uart_port *port) in atmel_use_dma_tx() argument
268 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_tx()
273 static bool atmel_use_dma_rx(struct uart_port *port) in atmel_use_dma_rx() argument
275 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_rx()
280 static bool atmel_use_fifo(struct uart_port *port) in atmel_use_fifo() argument
282 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_fifo()
287 static unsigned int atmel_get_lines_status(struct uart_port *port) in atmel_get_lines_status() argument
289 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_lines_status()
292 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_get_lines_status()
332 static int atmel_config_rs485(struct uart_port *port, in atmel_config_rs485() argument
335 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_config_rs485()
339 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_config_rs485()
341 mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_config_rs485()
346 port->rs485 = *rs485conf; in atmel_config_rs485()
349 dev_dbg(port->dev, "Setting UART to RS485\n"); in atmel_config_rs485()
351 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_config_rs485()
355 dev_dbg(port->dev, "Setting UART to RS232\n"); in atmel_config_rs485()
356 if (atmel_use_pdc_tx(port)) in atmel_config_rs485()
362 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_config_rs485()
365 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_config_rs485()
373 static u_int atmel_tx_empty(struct uart_port *port) in atmel_tx_empty() argument
375 return (atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXEMPTY) ? in atmel_tx_empty()
383 static void atmel_set_mctrl(struct uart_port *port, u_int mctrl) in atmel_set_mctrl() argument
386 unsigned int mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_set_mctrl()
388 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_mctrl()
391 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_set_mctrl()
392 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_set_mctrl()
393 port->rs485.delay_rts_after_send); in atmel_set_mctrl()
423 atmel_uart_writel(port, ATMEL_US_CR, control); in atmel_set_mctrl()
434 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_set_mctrl()
440 static u_int atmel_get_mctrl(struct uart_port *port) in atmel_get_mctrl() argument
442 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_mctrl()
445 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_get_mctrl()
465 static void atmel_stop_tx(struct uart_port *port) in atmel_stop_tx() argument
467 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_stop_tx()
469 if (atmel_use_pdc_tx(port)) { in atmel_stop_tx()
471 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_stop_tx()
474 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_stop_tx()
476 if ((port->rs485.flags & SER_RS485_ENABLED) && in atmel_stop_tx()
477 !(port->rs485.flags & SER_RS485_RX_DURING_TX)) in atmel_stop_tx()
478 atmel_start_rx(port); in atmel_stop_tx()
484 static void atmel_start_tx(struct uart_port *port) in atmel_start_tx() argument
486 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_start_tx()
488 if (atmel_use_pdc_tx(port)) { in atmel_start_tx()
489 if (atmel_uart_readl(port, ATMEL_PDC_PTSR) & ATMEL_PDC_TXTEN) in atmel_start_tx()
494 if ((port->rs485.flags & SER_RS485_ENABLED) && in atmel_start_tx()
495 !(port->rs485.flags & SER_RS485_RX_DURING_TX)) in atmel_start_tx()
496 atmel_stop_rx(port); in atmel_start_tx()
499 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_start_tx()
502 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_start_tx()
508 static void atmel_start_rx(struct uart_port *port) in atmel_start_rx() argument
511 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_start_rx()
513 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RXEN); in atmel_start_rx()
515 if (atmel_use_pdc_rx(port)) { in atmel_start_rx()
517 atmel_uart_writel(port, ATMEL_US_IER, in atmel_start_rx()
519 port->read_status_mask); in atmel_start_rx()
520 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN); in atmel_start_rx()
522 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_RXRDY); in atmel_start_rx()
529 static void atmel_stop_rx(struct uart_port *port) in atmel_stop_rx() argument
531 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RXDIS); in atmel_stop_rx()
533 if (atmel_use_pdc_rx(port)) { in atmel_stop_rx()
535 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS); in atmel_stop_rx()
536 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_stop_rx()
538 port->read_status_mask); in atmel_stop_rx()
540 atmel_uart_writel(port, ATMEL_US_IDR, ATMEL_US_RXRDY); in atmel_stop_rx()
547 static void atmel_enable_ms(struct uart_port *port) in atmel_enable_ms() argument
549 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_enable_ms()
580 atmel_uart_writel(port, ATMEL_US_IER, ier); in atmel_enable_ms()
586 static void atmel_disable_ms(struct uart_port *port) in atmel_disable_ms() argument
588 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_disable_ms()
619 atmel_uart_writel(port, ATMEL_US_IDR, idr); in atmel_disable_ms()
625 static void atmel_break_ctl(struct uart_port *port, int break_state) in atmel_break_ctl() argument
629 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTBRK); in atmel_break_ctl()
632 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STPBRK); in atmel_break_ctl()
639 atmel_buffer_rx_char(struct uart_port *port, unsigned int status, in atmel_buffer_rx_char() argument
642 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_buffer_rx_char()
663 static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status) in atmel_pdc_rxerr() argument
666 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_pdc_rxerr()
671 port->icount.brk++; in atmel_pdc_rxerr()
674 port->icount.parity++; in atmel_pdc_rxerr()
676 port->icount.frame++; in atmel_pdc_rxerr()
678 port->icount.overrun++; in atmel_pdc_rxerr()
684 static void atmel_rx_chars(struct uart_port *port) in atmel_rx_chars() argument
686 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_chars()
689 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_rx_chars()
691 ch = atmel_uart_read_char(port); in atmel_rx_chars()
702 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_rx_chars()
707 atmel_uart_writel(port, ATMEL_US_IER, in atmel_rx_chars()
717 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_rx_chars()
724 atmel_buffer_rx_char(port, status, ch); in atmel_rx_chars()
725 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_rx_chars()
735 static void atmel_tx_chars(struct uart_port *port) in atmel_tx_chars() argument
737 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_chars()
738 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_chars()
740 if (port->x_char && in atmel_tx_chars()
741 (atmel_uart_readl(port, ATMEL_US_CSR) & atmel_port->tx_done_mask)) { in atmel_tx_chars()
742 atmel_uart_write_char(port, port->x_char); in atmel_tx_chars()
743 port->icount.tx++; in atmel_tx_chars()
744 port->x_char = 0; in atmel_tx_chars()
746 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) in atmel_tx_chars()
749 while (atmel_uart_readl(port, ATMEL_US_CSR) & in atmel_tx_chars()
751 atmel_uart_write_char(port, xmit->buf[xmit->tail]); in atmel_tx_chars()
753 port->icount.tx++; in atmel_tx_chars()
759 uart_write_wakeup(port); in atmel_tx_chars()
763 atmel_uart_writel(port, ATMEL_US_IER, in atmel_tx_chars()
770 struct uart_port *port = &atmel_port->uart; in atmel_complete_tx_dma() local
771 struct circ_buf *xmit = &port->state->xmit; in atmel_complete_tx_dma()
775 spin_lock_irqsave(&port->lock, flags); in atmel_complete_tx_dma()
782 port->icount.tx += atmel_port->tx_len; in atmel_complete_tx_dma()
791 uart_write_wakeup(port); in atmel_complete_tx_dma()
801 spin_unlock_irqrestore(&port->lock, flags); in atmel_complete_tx_dma()
804 static void atmel_release_tx_dma(struct uart_port *port) in atmel_release_tx_dma() argument
806 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_dma()
812 dma_unmap_sg(port->dev, &atmel_port->sg_tx, 1, in atmel_release_tx_dma()
824 static void atmel_tx_dma(struct uart_port *port) in atmel_tx_dma() argument
826 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_dma()
827 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_dma()
838 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_dma()
892 dev_err(port->dev, "Failed to send via dma!\n"); in atmel_tx_dma()
896 dma_sync_sg_for_device(port->dev, sg_tx, 1, DMA_TO_DEVICE); in atmel_tx_dma()
904 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_tx_dma()
906 atmel_start_rx(port); in atmel_tx_dma()
911 uart_write_wakeup(port); in atmel_tx_dma()
914 static int atmel_prepare_tx_dma(struct uart_port *port) in atmel_prepare_tx_dma() argument
916 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_dma()
924 atmel_port->chan_tx = dma_request_slave_channel(port->dev, "tx"); in atmel_prepare_tx_dma()
927 dev_info(port->dev, "using %s for tx DMA transfers\n", in atmel_prepare_tx_dma()
933 BUG_ON(!PAGE_ALIGNED(port->state->xmit.buf)); in atmel_prepare_tx_dma()
935 virt_to_page(port->state->xmit.buf), in atmel_prepare_tx_dma()
937 (unsigned long)port->state->xmit.buf & ~PAGE_MASK); in atmel_prepare_tx_dma()
938 nent = dma_map_sg(port->dev, in atmel_prepare_tx_dma()
944 dev_dbg(port->dev, "need to release resource of dma\n"); in atmel_prepare_tx_dma()
947 dev_dbg(port->dev, "%s: mapped %d@%p to %pad\n", __func__, in atmel_prepare_tx_dma()
949 port->state->xmit.buf, in atmel_prepare_tx_dma()
959 config.dst_addr = port->mapbase + ATMEL_US_THR; in atmel_prepare_tx_dma()
965 dev_err(port->dev, "DMA tx slave configuration failed\n"); in atmel_prepare_tx_dma()
972 dev_err(port->dev, "TX channel not available, switch to pio\n"); in atmel_prepare_tx_dma()
975 atmel_release_tx_dma(port); in atmel_prepare_tx_dma()
981 struct uart_port *port = arg; in atmel_complete_rx_dma() local
982 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_complete_rx_dma()
987 static void atmel_release_rx_dma(struct uart_port *port) in atmel_release_rx_dma() argument
989 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_dma()
995 dma_unmap_sg(port->dev, &atmel_port->sg_rx, 1, in atmel_release_rx_dma()
1004 static void atmel_rx_from_dma(struct uart_port *port) in atmel_rx_from_dma() argument
1006 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_dma()
1007 struct tty_port *tport = &port->state->port; in atmel_rx_from_dma()
1016 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_rx_from_dma()
1022 dev_dbg(port->dev, "Get residue error, restart tasklet\n"); in atmel_rx_from_dma()
1023 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
1029 dma_sync_sg_for_cpu(port->dev, in atmel_rx_from_dma()
1060 port->icount.rx += count; in atmel_rx_from_dma()
1072 port->icount.rx += count; in atmel_rx_from_dma()
1076 dma_sync_sg_for_device(port->dev, in atmel_rx_from_dma()
1085 spin_unlock(&port->lock); in atmel_rx_from_dma()
1087 spin_lock(&port->lock); in atmel_rx_from_dma()
1089 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
1092 static int atmel_prepare_rx_dma(struct uart_port *port) in atmel_prepare_rx_dma() argument
1094 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_dma()
1106 atmel_port->chan_rx = dma_request_slave_channel(port->dev, "rx"); in atmel_prepare_rx_dma()
1109 dev_info(port->dev, "using %s for rx DMA transfers\n", in atmel_prepare_rx_dma()
1120 nent = dma_map_sg(port->dev, in atmel_prepare_rx_dma()
1126 dev_dbg(port->dev, "need to release resource of dma\n"); in atmel_prepare_rx_dma()
1129 dev_dbg(port->dev, "%s: mapped %d@%p to %pad\n", __func__, in atmel_prepare_rx_dma()
1139 config.src_addr = port->mapbase + ATMEL_US_RHR; in atmel_prepare_rx_dma()
1145 dev_err(port->dev, "DMA rx slave configuration failed\n"); in atmel_prepare_rx_dma()
1159 desc->callback_param = port; in atmel_prepare_rx_dma()
1166 dev_err(port->dev, "RX channel not available, switch to pio\n"); in atmel_prepare_rx_dma()
1169 atmel_release_rx_dma(port); in atmel_prepare_rx_dma()
1175 struct uart_port *port = (void *)data; in atmel_uart_timer_callback() local
1176 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_uart_timer_callback()
1179 mod_timer(&atmel_port->uart_timer, jiffies + uart_poll_timeout(port)); in atmel_uart_timer_callback()
1186 atmel_handle_receive(struct uart_port *port, unsigned int pending) in atmel_handle_receive() argument
1188 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_receive()
1190 if (atmel_use_pdc_rx(port)) { in atmel_handle_receive()
1199 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_receive()
1206 atmel_pdc_rxerr(port, pending); in atmel_handle_receive()
1209 if (atmel_use_dma_rx(port)) { in atmel_handle_receive()
1211 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_receive()
1219 atmel_rx_chars(port); in atmel_handle_receive()
1225 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_handle_receive()
1226 atmel_uart_writel(port, ATMEL_US_IDR, ATMEL_US_RXBRK); in atmel_handle_receive()
1235 atmel_handle_transmit(struct uart_port *port, unsigned int pending) in atmel_handle_transmit() argument
1237 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_transmit()
1241 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_transmit()
1251 atmel_handle_status(struct uart_port *port, unsigned int pending, in atmel_handle_status() argument
1254 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_status()
1271 struct uart_port *port = dev_id; in atmel_interrupt() local
1272 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_interrupt()
1279 status = atmel_get_lines_status(port); in atmel_interrupt()
1280 mask = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_interrupt()
1306 atmel_uart_writel(port, ATMEL_US_IDR, mask); in atmel_interrupt()
1311 atmel_handle_receive(port, pending); in atmel_interrupt()
1312 atmel_handle_status(port, pending, status); in atmel_interrupt()
1313 atmel_handle_transmit(port, pending); in atmel_interrupt()
1321 static void atmel_release_tx_pdc(struct uart_port *port) in atmel_release_tx_pdc() argument
1323 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_pdc()
1326 dma_unmap_single(port->dev, in atmel_release_tx_pdc()
1335 static void atmel_tx_pdc(struct uart_port *port) in atmel_tx_pdc() argument
1337 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_pdc()
1338 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_pdc()
1343 if (atmel_uart_readl(port, ATMEL_PDC_TCR)) in atmel_tx_pdc()
1349 port->icount.tx += pdc->ofs; in atmel_tx_pdc()
1355 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_tx_pdc()
1357 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_pdc()
1358 dma_sync_single_for_device(port->dev, in atmel_tx_pdc()
1366 atmel_uart_writel(port, ATMEL_PDC_TPR, in atmel_tx_pdc()
1368 atmel_uart_writel(port, ATMEL_PDC_TCR, count); in atmel_tx_pdc()
1370 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_tx_pdc()
1372 atmel_uart_writel(port, ATMEL_US_IER, in atmel_tx_pdc()
1375 if ((port->rs485.flags & SER_RS485_ENABLED) && in atmel_tx_pdc()
1376 !(port->rs485.flags & SER_RS485_RX_DURING_TX)) { in atmel_tx_pdc()
1378 atmel_start_rx(port); in atmel_tx_pdc()
1383 uart_write_wakeup(port); in atmel_tx_pdc()
1386 static int atmel_prepare_tx_pdc(struct uart_port *port) in atmel_prepare_tx_pdc() argument
1388 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_pdc()
1390 struct circ_buf *xmit = &port->state->xmit; in atmel_prepare_tx_pdc()
1393 pdc->dma_addr = dma_map_single(port->dev, in atmel_prepare_tx_pdc()
1403 static void atmel_rx_from_ring(struct uart_port *port) in atmel_rx_from_ring() argument
1405 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_ring()
1420 port->icount.rx++; in atmel_rx_from_ring()
1434 port->icount.brk++; in atmel_rx_from_ring()
1435 if (uart_handle_break(port)) in atmel_rx_from_ring()
1439 port->icount.parity++; in atmel_rx_from_ring()
1441 port->icount.frame++; in atmel_rx_from_ring()
1443 port->icount.overrun++; in atmel_rx_from_ring()
1445 status &= port->read_status_mask; in atmel_rx_from_ring()
1456 if (uart_handle_sysrq_char(port, c.ch)) in atmel_rx_from_ring()
1459 uart_insert_char(port, status, ATMEL_US_OVRE, c.ch, flg); in atmel_rx_from_ring()
1466 spin_unlock(&port->lock); in atmel_rx_from_ring()
1467 tty_flip_buffer_push(&port->state->port); in atmel_rx_from_ring()
1468 spin_lock(&port->lock); in atmel_rx_from_ring()
1471 static void atmel_release_rx_pdc(struct uart_port *port) in atmel_release_rx_pdc() argument
1473 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_pdc()
1479 dma_unmap_single(port->dev, in atmel_release_rx_pdc()
1487 static void atmel_rx_from_pdc(struct uart_port *port) in atmel_rx_from_pdc() argument
1489 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_pdc()
1490 struct tty_port *tport = &port->state->port; in atmel_rx_from_pdc()
1499 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_rx_from_pdc()
1502 head = atmel_uart_readl(port, ATMEL_PDC_RPR) - pdc->dma_addr; in atmel_rx_from_pdc()
1518 dma_sync_single_for_cpu(port->dev, pdc->dma_addr, in atmel_rx_from_pdc()
1532 dma_sync_single_for_device(port->dev, pdc->dma_addr, in atmel_rx_from_pdc()
1535 port->icount.rx += count; in atmel_rx_from_pdc()
1545 atmel_uart_writel(port, ATMEL_PDC_RNPR, pdc->dma_addr); in atmel_rx_from_pdc()
1546 atmel_uart_writel(port, ATMEL_PDC_RNCR, pdc->dma_size); in atmel_rx_from_pdc()
1557 spin_unlock(&port->lock); in atmel_rx_from_pdc()
1559 spin_lock(&port->lock); in atmel_rx_from_pdc()
1561 atmel_uart_writel(port, ATMEL_US_IER, in atmel_rx_from_pdc()
1565 static int atmel_prepare_rx_pdc(struct uart_port *port) in atmel_prepare_rx_pdc() argument
1567 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_pdc()
1576 dma_unmap_single(port->dev, in atmel_prepare_rx_pdc()
1585 pdc->dma_addr = dma_map_single(port->dev, in atmel_prepare_rx_pdc()
1595 atmel_uart_writel(port, ATMEL_PDC_RPR, atmel_port->pdc_rx[0].dma_addr); in atmel_prepare_rx_pdc()
1596 atmel_uart_writel(port, ATMEL_PDC_RCR, PDC_BUFFER_SIZE); in atmel_prepare_rx_pdc()
1598 atmel_uart_writel(port, ATMEL_PDC_RNPR, in atmel_prepare_rx_pdc()
1600 atmel_uart_writel(port, ATMEL_PDC_RNCR, PDC_BUFFER_SIZE); in atmel_prepare_rx_pdc()
1610 struct uart_port *port = (struct uart_port *)data; in atmel_tasklet_func() local
1611 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tasklet_func()
1616 spin_lock(&port->lock); in atmel_tasklet_func()
1618 atmel_port->schedule_tx(port); in atmel_tasklet_func()
1624 port->icount.rng++; in atmel_tasklet_func()
1626 port->icount.dsr++; in atmel_tasklet_func()
1628 uart_handle_dcd_change(port, !(status & ATMEL_US_DCD)); in atmel_tasklet_func()
1630 uart_handle_cts_change(port, !(status & ATMEL_US_CTS)); in atmel_tasklet_func()
1632 wake_up_interruptible(&port->state->port.delta_msr_wait); in atmel_tasklet_func()
1637 atmel_port->schedule_rx(port); in atmel_tasklet_func()
1639 spin_unlock(&port->lock); in atmel_tasklet_func()
1685 static void atmel_init_rs485(struct uart_port *port, in atmel_init_rs485() argument
1692 struct serial_rs485 *rs485conf = &port->rs485; in atmel_init_rs485()
1709 port->rs485 = pdata->rs485; in atmel_init_rs485()
1714 static void atmel_set_ops(struct uart_port *port) in atmel_set_ops() argument
1716 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_ops()
1718 if (atmel_use_dma_rx(port)) { in atmel_set_ops()
1722 } else if (atmel_use_pdc_rx(port)) { in atmel_set_ops()
1732 if (atmel_use_dma_tx(port)) { in atmel_set_ops()
1736 } else if (atmel_use_pdc_tx(port)) { in atmel_set_ops()
1750 static void atmel_get_ip_name(struct uart_port *port) in atmel_get_ip_name() argument
1752 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_ip_name()
1753 int name = atmel_uart_readl(port, ATMEL_US_NAME); in atmel_get_ip_name()
1763 dev_dbg(port->dev, "This is usart\n"); in atmel_get_ip_name()
1766 dev_dbg(port->dev, "This is uart\n"); in atmel_get_ip_name()
1770 version = atmel_uart_readl(port, ATMEL_US_VERSION); in atmel_get_ip_name()
1774 dev_dbg(port->dev, "This version is usart\n"); in atmel_get_ip_name()
1779 dev_dbg(port->dev, "This version is uart\n"); in atmel_get_ip_name()
1783 dev_err(port->dev, "Not supported ip name nor version, set to uart\n"); in atmel_get_ip_name()
1788 static void atmel_free_gpio_irq(struct uart_port *port) in atmel_free_gpio_irq() argument
1790 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_free_gpio_irq()
1795 free_irq(atmel_port->gpio_irq[i], port); in atmel_free_gpio_irq()
1798 static int atmel_request_gpio_irq(struct uart_port *port) in atmel_request_gpio_irq() argument
1800 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_request_gpio_irq()
1811 "atmel_serial", port); in atmel_request_gpio_irq()
1813 dev_err(port->dev, "atmel_startup - Can't get %d irq\n", in atmel_request_gpio_irq()
1822 free_irq(irq[i], port); in atmel_request_gpio_irq()
1830 static int atmel_startup(struct uart_port *port) in atmel_startup() argument
1832 struct platform_device *pdev = to_platform_device(port->dev); in atmel_startup()
1833 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_startup()
1834 struct tty_struct *tty = port->state->port.tty; in atmel_startup()
1842 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_startup()
1848 retval = request_irq(port->irq, atmel_interrupt, in atmel_startup()
1850 tty ? tty->name : "atmel_serial", port); in atmel_startup()
1852 dev_err(port->dev, "atmel_startup - Can't get irq\n"); in atmel_startup()
1859 retval = atmel_request_gpio_irq(port); in atmel_startup()
1869 atmel_set_ops(port); in atmel_startup()
1872 retval = atmel_port->prepare_rx(port); in atmel_startup()
1874 atmel_set_ops(port); in atmel_startup()
1878 retval = atmel_port->prepare_tx(port); in atmel_startup()
1880 atmel_set_ops(port); in atmel_startup()
1891 atmel_uart_writel(port, ATMEL_US_CR, in atmel_startup()
1896 if (atmel_use_dma_tx(port)) in atmel_startup()
1906 atmel_uart_writel(port, ATMEL_US_FMR, fmr); in atmel_startup()
1910 atmel_port->irq_status_prev = atmel_get_lines_status(port); in atmel_startup()
1916 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_startup()
1918 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_startup()
1922 (unsigned long)port); in atmel_startup()
1924 if (atmel_use_pdc_rx(port)) { in atmel_startup()
1928 jiffies + uart_poll_timeout(port)); in atmel_startup()
1931 atmel_uart_writel(port, ATMEL_US_RTOR, PDC_RX_TIMEOUT); in atmel_startup()
1932 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_startup()
1934 atmel_uart_writel(port, ATMEL_US_IER, in atmel_startup()
1938 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN); in atmel_startup()
1939 } else if (atmel_use_dma_rx(port)) { in atmel_startup()
1943 jiffies + uart_poll_timeout(port)); in atmel_startup()
1946 atmel_uart_writel(port, ATMEL_US_RTOR, PDC_RX_TIMEOUT); in atmel_startup()
1947 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_startup()
1949 atmel_uart_writel(port, ATMEL_US_IER, in atmel_startup()
1954 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_RXRDY); in atmel_startup()
1960 free_irq(port->irq, port); in atmel_startup()
1969 static void atmel_flush_buffer(struct uart_port *port) in atmel_flush_buffer() argument
1971 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_flush_buffer()
1973 if (atmel_use_pdc_tx(port)) { in atmel_flush_buffer()
1974 atmel_uart_writel(port, ATMEL_PDC_TCR, 0); in atmel_flush_buffer()
1982 static void atmel_shutdown(struct uart_port *port) in atmel_shutdown() argument
1984 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_shutdown()
2003 atmel_stop_rx(port); in atmel_shutdown()
2004 atmel_stop_tx(port); in atmel_shutdown()
2006 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_shutdown()
2007 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_shutdown()
2014 atmel_port->release_rx(port); in atmel_shutdown()
2016 atmel_port->release_tx(port); in atmel_shutdown()
2027 free_irq(port->irq, port); in atmel_shutdown()
2028 atmel_free_gpio_irq(port); in atmel_shutdown()
2032 atmel_flush_buffer(port); in atmel_shutdown()
2038 static void atmel_serial_pm(struct uart_port *port, unsigned int state, in atmel_serial_pm() argument
2041 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_pm()
2052 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->backup_imr); in atmel_serial_pm()
2056 atmel_port->backup_imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_serial_pm()
2057 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_serial_pm()
2066 dev_err(port->dev, "atmel_serial: unknown pm %d\n", state); in atmel_serial_pm()
2073 static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, in atmel_set_termios() argument
2080 mode = old_mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_set_termios()
2086 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); in atmel_set_termios()
2087 quot = uart_get_divisor(port, baud); in atmel_set_termios()
2129 spin_lock_irqsave(&port->lock, flags); in atmel_set_termios()
2131 port->read_status_mask = ATMEL_US_OVRE; in atmel_set_termios()
2133 port->read_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
2135 port->read_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
2137 if (atmel_use_pdc_rx(port)) in atmel_set_termios()
2139 atmel_uart_writel(port, ATMEL_US_IER, port->read_status_mask); in atmel_set_termios()
2144 port->ignore_status_mask = 0; in atmel_set_termios()
2146 port->ignore_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
2148 port->ignore_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
2154 port->ignore_status_mask |= ATMEL_US_OVRE; in atmel_set_termios()
2159 uart_update_timeout(port, termios->c_cflag, baud); in atmel_set_termios()
2166 imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_set_termios()
2167 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_set_termios()
2170 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS | ATMEL_US_RXDIS); in atmel_set_termios()
2173 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_set_termios()
2174 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_set_termios()
2175 port->rs485.delay_rts_after_send); in atmel_set_termios()
2179 if (atmel_use_dma_rx(port) && !atmel_use_fifo(port)) { in atmel_set_termios()
2180 dev_info(port->dev, "not enabling hardware flow control because DMA is used"); in atmel_set_termios()
2191 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_set_termios()
2208 atmel_uart_writel(port, ATMEL_US_CR, rts_state); in atmel_set_termios()
2212 atmel_uart_writel(port, ATMEL_US_BRGR, quot); in atmel_set_termios()
2213 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_set_termios()
2214 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_set_termios()
2217 atmel_uart_writel(port, ATMEL_US_IER, imr); in atmel_set_termios()
2220 if (UART_ENABLE_MS(port, termios->c_cflag)) in atmel_set_termios()
2221 atmel_enable_ms(port); in atmel_set_termios()
2223 atmel_disable_ms(port); in atmel_set_termios()
2225 spin_unlock_irqrestore(&port->lock, flags); in atmel_set_termios()
2228 static void atmel_set_ldisc(struct uart_port *port, struct ktermios *termios) in atmel_set_ldisc() argument
2231 port->flags |= UPF_HARDPPS_CD; in atmel_set_ldisc()
2232 spin_lock_irq(&port->lock); in atmel_set_ldisc()
2233 atmel_enable_ms(port); in atmel_set_ldisc()
2234 spin_unlock_irq(&port->lock); in atmel_set_ldisc()
2236 port->flags &= ~UPF_HARDPPS_CD; in atmel_set_ldisc()
2237 if (!UART_ENABLE_MS(port, termios->c_cflag)) { in atmel_set_ldisc()
2238 spin_lock_irq(&port->lock); in atmel_set_ldisc()
2239 atmel_disable_ms(port); in atmel_set_ldisc()
2240 spin_unlock_irq(&port->lock); in atmel_set_ldisc()
2248 static const char *atmel_type(struct uart_port *port) in atmel_type() argument
2250 return (port->type == PORT_ATMEL) ? "ATMEL_SERIAL" : NULL; in atmel_type()
2256 static void atmel_release_port(struct uart_port *port) in atmel_release_port() argument
2258 struct platform_device *pdev = to_platform_device(port->dev); in atmel_release_port()
2261 release_mem_region(port->mapbase, size); in atmel_release_port()
2263 if (port->flags & UPF_IOREMAP) { in atmel_release_port()
2264 iounmap(port->membase); in atmel_release_port()
2265 port->membase = NULL; in atmel_release_port()
2272 static int atmel_request_port(struct uart_port *port) in atmel_request_port() argument
2274 struct platform_device *pdev = to_platform_device(port->dev); in atmel_request_port()
2277 if (!request_mem_region(port->mapbase, size, "atmel_serial")) in atmel_request_port()
2280 if (port->flags & UPF_IOREMAP) { in atmel_request_port()
2281 port->membase = ioremap(port->mapbase, size); in atmel_request_port()
2282 if (port->membase == NULL) { in atmel_request_port()
2283 release_mem_region(port->mapbase, size); in atmel_request_port()
2294 static void atmel_config_port(struct uart_port *port, int flags) in atmel_config_port() argument
2297 port->type = PORT_ATMEL; in atmel_config_port()
2298 atmel_request_port(port); in atmel_config_port()
2305 static int atmel_verify_port(struct uart_port *port, struct serial_struct *ser) in atmel_verify_port() argument
2310 if (port->irq != ser->irq) in atmel_verify_port()
2314 if (port->uartclk / 16 != ser->baud_base) in atmel_verify_port()
2316 if (port->mapbase != (unsigned long)ser->iomem_base) in atmel_verify_port()
2318 if (port->iobase != ser->port) in atmel_verify_port()
2326 static int atmel_poll_get_char(struct uart_port *port) in atmel_poll_get_char() argument
2328 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_RXRDY)) in atmel_poll_get_char()
2331 return atmel_uart_read_char(port); in atmel_poll_get_char()
2334 static void atmel_poll_put_char(struct uart_port *port, unsigned char ch) in atmel_poll_put_char() argument
2336 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXRDY)) in atmel_poll_put_char()
2339 atmel_uart_write_char(port, ch); in atmel_poll_put_char()
2376 struct uart_port *port = &atmel_port->uart; in atmel_init_port() local
2380 atmel_set_ops(port); in atmel_init_port()
2382 atmel_init_rs485(port, pdev); in atmel_init_port()
2384 port->iotype = UPIO_MEM; in atmel_init_port()
2385 port->flags = UPF_BOOT_AUTOCONF; in atmel_init_port()
2386 port->ops = &atmel_pops; in atmel_init_port()
2387 port->fifosize = 1; in atmel_init_port()
2388 port->dev = &pdev->dev; in atmel_init_port()
2389 port->mapbase = pdev->resource[0].start; in atmel_init_port()
2390 port->irq = pdev->resource[1].start; in atmel_init_port()
2391 port->rs485_config = atmel_config_rs485; in atmel_init_port()
2394 (unsigned long)port); in atmel_init_port()
2401 port->membase = pdata->regs; in atmel_init_port()
2403 port->flags |= UPF_IOREMAP; in atmel_init_port()
2404 port->membase = NULL; in atmel_init_port()
2421 port->uartclk = clk_get_rate(atmel_port->clk); in atmel_init_port()
2427 if (port->rs485.flags & SER_RS485_ENABLED) in atmel_init_port()
2429 else if (atmel_use_pdc_tx(port)) { in atmel_init_port()
2430 port->fifosize = PDC_BUFFER_SIZE; in atmel_init_port()
2442 static void atmel_console_putchar(struct uart_port *port, int ch) in atmel_console_putchar() argument
2444 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXRDY)) in atmel_console_putchar()
2446 atmel_uart_write_char(port, ch); in atmel_console_putchar()
2454 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_write() local
2455 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_console_write()
2462 imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_console_write()
2463 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_console_write()
2467 pdc_tx = atmel_uart_readl(port, ATMEL_PDC_PTSR) & ATMEL_PDC_TXTEN; in atmel_console_write()
2468 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_console_write()
2470 uart_console_write(port, s, count, atmel_console_putchar); in atmel_console_write()
2477 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_console_write()
2482 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_console_write()
2485 atmel_uart_writel(port, ATMEL_US_IER, imr); in atmel_console_write()
2492 static void __init atmel_console_get_options(struct uart_port *port, int *baud, in atmel_console_get_options() argument
2501 quot = atmel_uart_readl(port, ATMEL_US_BRGR) & ATMEL_US_CD; in atmel_console_get_options()
2505 mr = atmel_uart_readl(port, ATMEL_US_MR) & ATMEL_US_CHRL; in atmel_console_get_options()
2511 mr = atmel_uart_readl(port, ATMEL_US_MR) & ATMEL_US_PAR; in atmel_console_get_options()
2523 *baud = port->uartclk / (16 * (quot - 1)); in atmel_console_get_options()
2529 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_setup() local
2535 if (port->membase == NULL) { in atmel_console_setup()
2544 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_console_setup()
2545 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_console_setup()
2546 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_console_setup()
2551 atmel_console_get_options(port, &baud, &parity, &bits); in atmel_console_setup()
2553 return uart_set_options(port, co, baud, parity, bits, flow); in atmel_console_setup()
2580 struct atmel_uart_port *port = &atmel_ports[id]; in atmel_console_init() local
2582 port->backup_imr = 0; in atmel_console_init()
2583 port->uart.line = id; in atmel_console_init()
2586 ret = atmel_init_port(port, atmel_default_console_device); in atmel_console_init()
2611 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
2613 return port->cons && port->cons->index == port->line; in atmel_is_console_port()
2619 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
2648 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_suspend() local
2649 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_suspend()
2651 if (atmel_is_console_port(port) && console_suspend_enabled) { in atmel_serial_suspend()
2653 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & in atmel_serial_suspend()
2669 uart_suspend_port(&atmel_uart, port); in atmel_serial_suspend()
2676 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_resume() local
2677 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_resume()
2682 atmel_handle_receive(port, atmel_port->pending); in atmel_serial_resume()
2683 atmel_handle_status(port, atmel_port->pending, in atmel_serial_resume()
2685 atmel_handle_transmit(port, atmel_port->pending); in atmel_serial_resume()
2691 uart_resume_port(&atmel_uart, port); in atmel_serial_resume()
2721 static void atmel_serial_probe_fifos(struct atmel_uart_port *port, in atmel_serial_probe_fifos() argument
2724 port->fifo_size = 0; in atmel_serial_probe_fifos()
2725 port->rts_low = 0; in atmel_serial_probe_fifos()
2726 port->rts_high = 0; in atmel_serial_probe_fifos()
2730 &port->fifo_size)) in atmel_serial_probe_fifos()
2733 if (!port->fifo_size) in atmel_serial_probe_fifos()
2736 if (port->fifo_size < ATMEL_MIN_FIFO_SIZE) { in atmel_serial_probe_fifos()
2737 port->fifo_size = 0; in atmel_serial_probe_fifos()
2750 port->rts_high = max_t(int, port->fifo_size >> 1, in atmel_serial_probe_fifos()
2751 port->fifo_size - ATMEL_RTS_HIGH_OFFSET); in atmel_serial_probe_fifos()
2752 port->rts_low = max_t(int, port->fifo_size >> 2, in atmel_serial_probe_fifos()
2753 port->fifo_size - ATMEL_RTS_LOW_OFFSET); in atmel_serial_probe_fifos()
2756 port->fifo_size); in atmel_serial_probe_fifos()
2758 port->rts_high); in atmel_serial_probe_fifos()
2760 port->rts_low); in atmel_serial_probe_fifos()
2765 struct atmel_uart_port *port; in atmel_serial_probe() local
2796 port = &atmel_ports[ret]; in atmel_serial_probe()
2797 port->backup_imr = 0; in atmel_serial_probe()
2798 port->uart.line = ret; in atmel_serial_probe()
2799 atmel_serial_probe_fifos(port, pdev); in atmel_serial_probe()
2801 spin_lock_init(&port->lock_suspended); in atmel_serial_probe()
2803 ret = atmel_init_gpios(port, &pdev->dev); in atmel_serial_probe()
2809 ret = atmel_init_port(port, pdev); in atmel_serial_probe()
2813 if (!atmel_use_pdc_rx(&port->uart)) { in atmel_serial_probe()
2819 port->rx_ring.buf = data; in atmel_serial_probe()
2822 rs485_enabled = port->uart.rs485.flags & SER_RS485_ENABLED; in atmel_serial_probe()
2824 ret = uart_add_one_port(&atmel_uart, &port->uart); in atmel_serial_probe()
2829 if (atmel_is_console_port(&port->uart) in atmel_serial_probe()
2835 clk_disable_unprepare(port->clk); in atmel_serial_probe()
2840 platform_set_drvdata(pdev, port); in atmel_serial_probe()
2846 clk_prepare_enable(port->clk); in atmel_serial_probe()
2849 atmel_uart_writel(&port->uart, ATMEL_US_MR, in atmel_serial_probe()
2851 atmel_uart_writel(&port->uart, ATMEL_US_CR, ATMEL_US_RTSEN); in atmel_serial_probe()
2857 atmel_get_ip_name(&port->uart); in atmel_serial_probe()
2863 clk_disable_unprepare(port->clk); in atmel_serial_probe()
2868 kfree(port->rx_ring.buf); in atmel_serial_probe()
2869 port->rx_ring.buf = NULL; in atmel_serial_probe()
2871 if (!atmel_is_console_port(&port->uart)) { in atmel_serial_probe()
2872 clk_put(port->clk); in atmel_serial_probe()
2873 port->clk = NULL; in atmel_serial_probe()
2876 clear_bit(port->uart.line, atmel_ports_in_use); in atmel_serial_probe()
2883 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_remove() local
2884 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_remove()
2891 ret = uart_remove_one_port(&atmel_uart, port); in atmel_serial_remove()
2897 clear_bit(port->line, atmel_ports_in_use); in atmel_serial_remove()