Lines Matching full:port
42 /* Revisit: We should calculate this based on the actual port settings */
63 static void atmel_start_rx(struct uart_port *port);
64 static void atmel_stop_rx(struct uart_port *port);
77 /* Use device name ttyS, major 4, minor 64-68. This is the usual serial port
108 * at91: 6 USARTs and one DBGU port (SAM9260)
114 * We wrap our port structure around the generic uart_port.
132 spinlock_t lock_tx; /* port lock */
133 spinlock_t lock_rx; /* port lock */
188 int (*prepare_rx)(struct uart_port *port);
189 int (*prepare_tx)(struct uart_port *port);
190 void (*schedule_rx)(struct uart_port *port);
191 void (*schedule_tx)(struct uart_port *port);
192 void (*release_rx)(struct uart_port *port);
193 void (*release_tx)(struct uart_port *port);
216 static inline u32 atmel_uart_readl(struct uart_port *port, u32 reg) in atmel_uart_readl() argument
218 return __raw_readl(port->membase + reg); in atmel_uart_readl()
221 static inline void atmel_uart_writel(struct uart_port *port, u32 reg, u32 value) in atmel_uart_writel() argument
223 __raw_writel(value, port->membase + reg); in atmel_uart_writel()
226 static inline u8 atmel_uart_read_char(struct uart_port *port) in atmel_uart_read_char() argument
228 return __raw_readb(port->membase + ATMEL_US_RHR); in atmel_uart_read_char()
231 static inline void atmel_uart_write_char(struct uart_port *port, u8 value) in atmel_uart_write_char() argument
233 __raw_writeb(value, port->membase + ATMEL_US_THR); in atmel_uart_write_char()
236 static inline int atmel_uart_is_half_duplex(struct uart_port *port) in atmel_uart_is_half_duplex() argument
238 return ((port->rs485.flags & SER_RS485_ENABLED) && in atmel_uart_is_half_duplex()
239 !(port->rs485.flags & SER_RS485_RX_DURING_TX)) || in atmel_uart_is_half_duplex()
240 (port->iso7816.flags & SER_ISO7816_ENABLED); in atmel_uart_is_half_duplex()
244 static bool atmel_use_pdc_rx(struct uart_port *port) in atmel_use_pdc_rx() argument
246 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_rx()
251 static bool atmel_use_pdc_tx(struct uart_port *port) in atmel_use_pdc_tx() argument
253 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_tx()
258 static bool atmel_use_pdc_rx(struct uart_port *port) in atmel_use_pdc_rx() argument
263 static bool atmel_use_pdc_tx(struct uart_port *port) in atmel_use_pdc_tx() argument
269 static bool atmel_use_dma_tx(struct uart_port *port) in atmel_use_dma_tx() argument
271 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_tx()
276 static bool atmel_use_dma_rx(struct uart_port *port) in atmel_use_dma_rx() argument
278 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_rx()
283 static bool atmel_use_fifo(struct uart_port *port) in atmel_use_fifo() argument
285 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_fifo()
298 static int atmel_config_rs485(struct uart_port *port, in atmel_config_rs485() argument
301 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_config_rs485()
305 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_config_rs485()
307 mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_config_rs485()
312 port->rs485 = *rs485conf; in atmel_config_rs485()
315 dev_dbg(port->dev, "Setting UART to RS485\n"); in atmel_config_rs485()
317 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_config_rs485()
321 dev_dbg(port->dev, "Setting UART to RS232\n"); in atmel_config_rs485()
322 if (atmel_use_pdc_tx(port)) in atmel_config_rs485()
328 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_config_rs485()
331 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_config_rs485()
336 static unsigned int atmel_calc_cd(struct uart_port *port, in atmel_calc_cd() argument
339 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_calc_cd()
349 static unsigned int atmel_calc_fidi(struct uart_port *port, in atmel_calc_fidi() argument
363 static int atmel_config_iso7816(struct uart_port *port, in atmel_config_iso7816() argument
366 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_config_iso7816()
372 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_config_iso7816()
374 mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_config_iso7816()
380 dev_err(port->dev, "ISO7816: Timeguard exceeding 255\n"); in atmel_config_iso7816()
393 dev_err(port->dev, "ISO7816: Type not supported\n"); in atmel_config_iso7816()
406 cd = atmel_calc_cd(port, iso7816conf); in atmel_config_iso7816()
407 fidi = atmel_calc_fidi(port, iso7816conf); in atmel_config_iso7816()
409 dev_warn(port->dev, "ISO7816 fidi = 0, Generator generates no signal\n"); in atmel_config_iso7816()
412 dev_err(port->dev, "ISO7816 fidi = %u, value not supported\n", fidi); in atmel_config_iso7816()
418 if (!(port->iso7816.flags & SER_ISO7816_ENABLED)) { in atmel_config_iso7816()
419 /* port not yet in iso7816 mode: store configuration */ in atmel_config_iso7816()
420 atmel_port->backup_mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_config_iso7816()
421 atmel_port->backup_brgr = atmel_uart_readl(port, ATMEL_US_BRGR); in atmel_config_iso7816()
424 atmel_uart_writel(port, ATMEL_US_TTGR, iso7816conf->tg); in atmel_config_iso7816()
425 atmel_uart_writel(port, ATMEL_US_BRGR, cd); in atmel_config_iso7816()
426 atmel_uart_writel(port, ATMEL_US_FIDI, fidi); in atmel_config_iso7816()
428 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS | ATMEL_US_RXEN); in atmel_config_iso7816()
431 dev_dbg(port->dev, "Setting UART back to RS232\n"); in atmel_config_iso7816()
435 atmel_uart_writel(port, ATMEL_US_TTGR, 0); in atmel_config_iso7816()
436 atmel_uart_writel(port, ATMEL_US_BRGR, atmel_port->backup_brgr); in atmel_config_iso7816()
437 atmel_uart_writel(port, ATMEL_US_FIDI, 0x174); in atmel_config_iso7816()
439 if (atmel_use_pdc_tx(port)) in atmel_config_iso7816()
446 port->iso7816 = *iso7816conf; in atmel_config_iso7816()
448 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_config_iso7816()
452 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_config_iso7816()
460 static u_int atmel_tx_empty(struct uart_port *port) in atmel_tx_empty() argument
462 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_empty()
466 return (atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXEMPTY) ? in atmel_tx_empty()
474 static void atmel_set_mctrl(struct uart_port *port, u_int mctrl) in atmel_set_mctrl() argument
477 unsigned int mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_set_mctrl()
479 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_mctrl()
482 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_set_mctrl()
483 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_set_mctrl()
484 port->rs485.delay_rts_after_send); in atmel_set_mctrl()
514 atmel_uart_writel(port, ATMEL_US_CR, control); in atmel_set_mctrl()
525 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_set_mctrl()
531 static u_int atmel_get_mctrl(struct uart_port *port) in atmel_get_mctrl() argument
533 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_mctrl()
536 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_get_mctrl()
556 static void atmel_stop_tx(struct uart_port *port) in atmel_stop_tx() argument
558 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_stop_tx()
560 if (atmel_use_pdc_tx(port)) { in atmel_stop_tx()
562 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_stop_tx()
570 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS); in atmel_stop_tx()
574 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_stop_tx()
576 if (atmel_uart_is_half_duplex(port)) in atmel_stop_tx()
577 atmel_start_rx(port); in atmel_stop_tx()
584 static void atmel_start_tx(struct uart_port *port) in atmel_start_tx() argument
586 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_start_tx()
588 if (atmel_use_pdc_tx(port) && (atmel_uart_readl(port, ATMEL_PDC_PTSR) in atmel_start_tx()
594 if (atmel_use_pdc_tx(port) || atmel_use_dma_tx(port)) in atmel_start_tx()
595 if (atmel_uart_is_half_duplex(port)) in atmel_start_tx()
596 atmel_stop_rx(port); in atmel_start_tx()
598 if (atmel_use_pdc_tx(port)) in atmel_start_tx()
600 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_start_tx()
603 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_start_tx()
606 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN); in atmel_start_tx()
611 * start receiving - port is in process of being opened.
613 static void atmel_start_rx(struct uart_port *port) in atmel_start_rx() argument
616 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_start_rx()
618 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RXEN); in atmel_start_rx()
620 if (atmel_use_pdc_rx(port)) { in atmel_start_rx()
622 atmel_uart_writel(port, ATMEL_US_IER, in atmel_start_rx()
624 port->read_status_mask); in atmel_start_rx()
625 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN); in atmel_start_rx()
627 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_RXRDY); in atmel_start_rx()
632 * Stop receiving - port is in process of being closed.
634 static void atmel_stop_rx(struct uart_port *port) in atmel_stop_rx() argument
636 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RXDIS); in atmel_stop_rx()
638 if (atmel_use_pdc_rx(port)) { in atmel_stop_rx()
640 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS); in atmel_stop_rx()
641 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_stop_rx()
643 port->read_status_mask); in atmel_stop_rx()
645 atmel_uart_writel(port, ATMEL_US_IDR, ATMEL_US_RXRDY); in atmel_stop_rx()
652 static void atmel_enable_ms(struct uart_port *port) in atmel_enable_ms() argument
654 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_enable_ms()
677 atmel_uart_writel(port, ATMEL_US_IER, ier); in atmel_enable_ms()
685 static void atmel_disable_ms(struct uart_port *port) in atmel_disable_ms() argument
687 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_disable_ms()
712 atmel_uart_writel(port, ATMEL_US_IDR, idr); in atmel_disable_ms()
718 static void atmel_break_ctl(struct uart_port *port, int break_state) in atmel_break_ctl() argument
722 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTBRK); in atmel_break_ctl()
725 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STPBRK); in atmel_break_ctl()
732 atmel_buffer_rx_char(struct uart_port *port, unsigned int status, in atmel_buffer_rx_char() argument
735 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_buffer_rx_char()
756 static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status) in atmel_pdc_rxerr() argument
759 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_pdc_rxerr()
764 port->icount.brk++; in atmel_pdc_rxerr()
767 port->icount.parity++; in atmel_pdc_rxerr()
769 port->icount.frame++; in atmel_pdc_rxerr()
771 port->icount.overrun++; in atmel_pdc_rxerr()
777 static void atmel_rx_chars(struct uart_port *port) in atmel_rx_chars() argument
779 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_chars()
782 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_rx_chars()
784 ch = atmel_uart_read_char(port); in atmel_rx_chars()
795 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_rx_chars()
800 atmel_uart_writel(port, ATMEL_US_IER, in atmel_rx_chars()
810 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_rx_chars()
817 atmel_buffer_rx_char(port, status, ch); in atmel_rx_chars()
818 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_rx_chars()
828 static void atmel_tx_chars(struct uart_port *port) in atmel_tx_chars() argument
830 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_chars()
831 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_chars()
833 if (port->x_char && in atmel_tx_chars()
834 (atmel_uart_readl(port, ATMEL_US_CSR) & atmel_port->tx_done_mask)) { in atmel_tx_chars()
835 atmel_uart_write_char(port, port->x_char); in atmel_tx_chars()
836 port->icount.tx++; in atmel_tx_chars()
837 port->x_char = 0; in atmel_tx_chars()
839 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) in atmel_tx_chars()
842 while (atmel_uart_readl(port, ATMEL_US_CSR) & in atmel_tx_chars()
844 atmel_uart_write_char(port, xmit->buf[xmit->tail]); in atmel_tx_chars()
846 port->icount.tx++; in atmel_tx_chars()
852 uart_write_wakeup(port); in atmel_tx_chars()
856 atmel_uart_writel(port, ATMEL_US_IER, in atmel_tx_chars()
863 struct uart_port *port = &atmel_port->uart; in atmel_complete_tx_dma() local
864 struct circ_buf *xmit = &port->state->xmit; in atmel_complete_tx_dma()
868 spin_lock_irqsave(&port->lock, flags); in atmel_complete_tx_dma()
875 port->icount.tx += atmel_port->tx_len; in atmel_complete_tx_dma()
884 uart_write_wakeup(port); in atmel_complete_tx_dma()
893 else if (atmel_uart_is_half_duplex(port)) { in atmel_complete_tx_dma()
899 atmel_uart_writel(port, ATMEL_US_IER, in atmel_complete_tx_dma()
903 spin_unlock_irqrestore(&port->lock, flags); in atmel_complete_tx_dma()
906 static void atmel_release_tx_dma(struct uart_port *port) in atmel_release_tx_dma() argument
908 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_dma()
914 dma_unmap_sg(port->dev, &atmel_port->sg_tx, 1, in atmel_release_tx_dma()
926 static void atmel_tx_dma(struct uart_port *port) in atmel_tx_dma() argument
928 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_dma()
929 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_dma()
940 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_dma()
943 * Port xmit buffer is already mapped, in atmel_tx_dma()
947 * Take the port lock to get a in atmel_tx_dma()
994 dev_err(port->dev, "Failed to send via dma!\n"); in atmel_tx_dma()
998 dma_sync_sg_for_device(port->dev, sg_tx, 1, DMA_TO_DEVICE); in atmel_tx_dma()
1007 uart_write_wakeup(port); in atmel_tx_dma()
1010 static int atmel_prepare_tx_dma(struct uart_port *port) in atmel_prepare_tx_dma() argument
1012 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_dma()
1013 struct device *mfd_dev = port->dev->parent; in atmel_prepare_tx_dma()
1024 dev_info(port->dev, "using %s for tx DMA transfers\n", in atmel_prepare_tx_dma()
1030 BUG_ON(!PAGE_ALIGNED(port->state->xmit.buf)); in atmel_prepare_tx_dma()
1032 virt_to_page(port->state->xmit.buf), in atmel_prepare_tx_dma()
1034 offset_in_page(port->state->xmit.buf)); in atmel_prepare_tx_dma()
1035 nent = dma_map_sg(port->dev, in atmel_prepare_tx_dma()
1041 dev_dbg(port->dev, "need to release resource of dma\n"); in atmel_prepare_tx_dma()
1044 dev_dbg(port->dev, "%s: mapped %d@%p to %pad\n", __func__, in atmel_prepare_tx_dma()
1046 port->state->xmit.buf, in atmel_prepare_tx_dma()
1056 config.dst_addr = port->mapbase + ATMEL_US_THR; in atmel_prepare_tx_dma()
1062 dev_err(port->dev, "DMA tx slave configuration failed\n"); in atmel_prepare_tx_dma()
1069 dev_err(port->dev, "TX channel not available, switch to pio\n"); in atmel_prepare_tx_dma()
1072 atmel_release_tx_dma(port); in atmel_prepare_tx_dma()
1078 struct uart_port *port = arg; in atmel_complete_rx_dma() local
1079 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_complete_rx_dma()
1084 static void atmel_release_rx_dma(struct uart_port *port) in atmel_release_rx_dma() argument
1086 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_dma()
1092 dma_unmap_sg(port->dev, &atmel_port->sg_rx, 1, in atmel_release_rx_dma()
1101 static void atmel_rx_from_dma(struct uart_port *port) in atmel_rx_from_dma() argument
1103 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_dma()
1104 struct tty_port *tport = &port->state->port; in atmel_rx_from_dma()
1113 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_rx_from_dma()
1119 dev_dbg(port->dev, "Get residue error, restart tasklet\n"); in atmel_rx_from_dma()
1120 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
1126 dma_sync_sg_for_cpu(port->dev, in atmel_rx_from_dma()
1157 port->icount.rx += count; in atmel_rx_from_dma()
1169 port->icount.rx += count; in atmel_rx_from_dma()
1173 dma_sync_sg_for_device(port->dev, in atmel_rx_from_dma()
1182 spin_unlock(&port->lock); in atmel_rx_from_dma()
1184 spin_lock(&port->lock); in atmel_rx_from_dma()
1186 atmel_uart_writel(port, ATMEL_US_IER, ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
1189 static int atmel_prepare_rx_dma(struct uart_port *port) in atmel_prepare_rx_dma() argument
1191 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_dma()
1192 struct device *mfd_dev = port->dev->parent; in atmel_prepare_rx_dma()
1207 dev_info(port->dev, "using %s for rx DMA transfers\n", in atmel_prepare_rx_dma()
1218 nent = dma_map_sg(port->dev, in atmel_prepare_rx_dma()
1224 dev_dbg(port->dev, "need to release resource of dma\n"); in atmel_prepare_rx_dma()
1227 dev_dbg(port->dev, "%s: mapped %d@%p to %pad\n", __func__, in atmel_prepare_rx_dma()
1237 config.src_addr = port->mapbase + ATMEL_US_RHR; in atmel_prepare_rx_dma()
1243 dev_err(port->dev, "DMA rx slave configuration failed\n"); in atmel_prepare_rx_dma()
1257 dev_err(port->dev, "Preparing DMA cyclic failed\n"); in atmel_prepare_rx_dma()
1261 desc->callback_param = port; in atmel_prepare_rx_dma()
1268 dev_err(port->dev, "RX channel not available, switch to pio\n"); in atmel_prepare_rx_dma()
1271 atmel_release_rx_dma(port); in atmel_prepare_rx_dma()
1279 struct uart_port *port = &atmel_port->uart; in atmel_uart_timer_callback() local
1284 jiffies + uart_poll_timeout(port)); in atmel_uart_timer_callback()
1292 atmel_handle_receive(struct uart_port *port, unsigned int pending) in atmel_handle_receive() argument
1294 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_receive()
1296 if (atmel_use_pdc_rx(port)) { in atmel_handle_receive()
1305 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_receive()
1313 atmel_pdc_rxerr(port, pending); in atmel_handle_receive()
1316 if (atmel_use_dma_rx(port)) { in atmel_handle_receive()
1318 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_receive()
1327 atmel_rx_chars(port); in atmel_handle_receive()
1333 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_handle_receive()
1334 atmel_uart_writel(port, ATMEL_US_IDR, ATMEL_US_RXBRK); in atmel_handle_receive()
1343 atmel_handle_transmit(struct uart_port *port, unsigned int pending) in atmel_handle_transmit() argument
1345 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_transmit()
1348 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_handle_transmit()
1353 if (!(atmel_uart_readl(port, ATMEL_US_CSR) in atmel_handle_transmit()
1355 dev_warn(port->dev, "Should start RX, but TX fifo is not empty\n"); in atmel_handle_transmit()
1358 atmel_start_rx(port); in atmel_handle_transmit()
1369 atmel_handle_status(struct uart_port *port, unsigned int pending, in atmel_handle_status() argument
1372 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_status()
1384 port->icount.rng++; in atmel_handle_status()
1386 port->icount.dsr++; in atmel_handle_status()
1388 uart_handle_dcd_change(port, !(status & ATMEL_US_DCD)); in atmel_handle_status()
1390 uart_handle_cts_change(port, !(status & ATMEL_US_CTS)); in atmel_handle_status()
1392 wake_up_interruptible(&port->state->port.delta_msr_wait); in atmel_handle_status()
1397 dev_dbg(port->dev, "ISO7816 ERROR (0x%08x)\n", pending); in atmel_handle_status()
1405 struct uart_port *port = dev_id; in atmel_interrupt() local
1406 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_interrupt()
1412 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_interrupt()
1413 mask = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_interrupt()
1421 atmel_uart_writel(port, ATMEL_US_IDR, mask); in atmel_interrupt()
1426 atmel_handle_receive(port, pending); in atmel_interrupt()
1427 atmel_handle_status(port, pending, status); in atmel_interrupt()
1428 atmel_handle_transmit(port, pending); in atmel_interrupt()
1436 static void atmel_release_tx_pdc(struct uart_port *port) in atmel_release_tx_pdc() argument
1438 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_pdc()
1441 dma_unmap_single(port->dev, in atmel_release_tx_pdc()
1450 static void atmel_tx_pdc(struct uart_port *port) in atmel_tx_pdc() argument
1452 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_pdc()
1453 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_pdc()
1458 if (atmel_uart_readl(port, ATMEL_PDC_TCR)) in atmel_tx_pdc()
1464 port->icount.tx += pdc->ofs; in atmel_tx_pdc()
1470 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_tx_pdc()
1472 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_pdc()
1473 dma_sync_single_for_device(port->dev, in atmel_tx_pdc()
1481 atmel_uart_writel(port, ATMEL_PDC_TPR, in atmel_tx_pdc()
1483 atmel_uart_writel(port, ATMEL_PDC_TCR, count); in atmel_tx_pdc()
1485 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_tx_pdc()
1487 atmel_uart_writel(port, ATMEL_US_IER, in atmel_tx_pdc()
1490 if (atmel_uart_is_half_duplex(port)) { in atmel_tx_pdc()
1492 atmel_start_rx(port); in atmel_tx_pdc()
1497 uart_write_wakeup(port); in atmel_tx_pdc()
1500 static int atmel_prepare_tx_pdc(struct uart_port *port) in atmel_prepare_tx_pdc() argument
1502 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_pdc()
1504 struct circ_buf *xmit = &port->state->xmit; in atmel_prepare_tx_pdc()
1507 pdc->dma_addr = dma_map_single(port->dev, in atmel_prepare_tx_pdc()
1517 static void atmel_rx_from_ring(struct uart_port *port) in atmel_rx_from_ring() argument
1519 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_ring()
1534 port->icount.rx++; in atmel_rx_from_ring()
1548 port->icount.brk++; in atmel_rx_from_ring()
1549 if (uart_handle_break(port)) in atmel_rx_from_ring()
1553 port->icount.parity++; in atmel_rx_from_ring()
1555 port->icount.frame++; in atmel_rx_from_ring()
1557 port->icount.overrun++; in atmel_rx_from_ring()
1559 status &= port->read_status_mask; in atmel_rx_from_ring()
1570 if (uart_handle_sysrq_char(port, c.ch)) in atmel_rx_from_ring()
1573 uart_insert_char(port, status, ATMEL_US_OVRE, c.ch, flg); in atmel_rx_from_ring()
1580 spin_unlock(&port->lock); in atmel_rx_from_ring()
1581 tty_flip_buffer_push(&port->state->port); in atmel_rx_from_ring()
1582 spin_lock(&port->lock); in atmel_rx_from_ring()
1585 static void atmel_release_rx_pdc(struct uart_port *port) in atmel_release_rx_pdc() argument
1587 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_pdc()
1593 dma_unmap_single(port->dev, in atmel_release_rx_pdc()
1601 static void atmel_rx_from_pdc(struct uart_port *port) in atmel_rx_from_pdc() argument
1603 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_pdc()
1604 struct tty_port *tport = &port->state->port; in atmel_rx_from_pdc()
1613 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_rx_from_pdc()
1616 head = atmel_uart_readl(port, ATMEL_PDC_RPR) - pdc->dma_addr; in atmel_rx_from_pdc()
1632 dma_sync_single_for_cpu(port->dev, pdc->dma_addr, in atmel_rx_from_pdc()
1646 dma_sync_single_for_device(port->dev, pdc->dma_addr, in atmel_rx_from_pdc()
1649 port->icount.rx += count; in atmel_rx_from_pdc()
1659 atmel_uart_writel(port, ATMEL_PDC_RNPR, pdc->dma_addr); in atmel_rx_from_pdc()
1660 atmel_uart_writel(port, ATMEL_PDC_RNCR, pdc->dma_size); in atmel_rx_from_pdc()
1671 spin_unlock(&port->lock); in atmel_rx_from_pdc()
1673 spin_lock(&port->lock); in atmel_rx_from_pdc()
1675 atmel_uart_writel(port, ATMEL_US_IER, in atmel_rx_from_pdc()
1679 static int atmel_prepare_rx_pdc(struct uart_port *port) in atmel_prepare_rx_pdc() argument
1681 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_pdc()
1690 dma_unmap_single(port->dev, in atmel_prepare_rx_pdc()
1699 pdc->dma_addr = dma_map_single(port->dev, in atmel_prepare_rx_pdc()
1709 atmel_uart_writel(port, ATMEL_PDC_RPR, atmel_port->pdc_rx[0].dma_addr); in atmel_prepare_rx_pdc()
1710 atmel_uart_writel(port, ATMEL_PDC_RCR, PDC_BUFFER_SIZE); in atmel_prepare_rx_pdc()
1712 atmel_uart_writel(port, ATMEL_PDC_RNPR, in atmel_prepare_rx_pdc()
1714 atmel_uart_writel(port, ATMEL_PDC_RNCR, PDC_BUFFER_SIZE); in atmel_prepare_rx_pdc()
1724 struct uart_port *port = (struct uart_port *)data; in atmel_tasklet_rx_func() local
1725 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tasklet_rx_func()
1728 spin_lock(&port->lock); in atmel_tasklet_rx_func()
1729 atmel_port->schedule_rx(port); in atmel_tasklet_rx_func()
1730 spin_unlock(&port->lock); in atmel_tasklet_rx_func()
1735 struct uart_port *port = (struct uart_port *)data; in atmel_tasklet_tx_func() local
1736 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tasklet_tx_func()
1739 spin_lock(&port->lock); in atmel_tasklet_tx_func()
1740 atmel_port->schedule_tx(port); in atmel_tasklet_tx_func()
1741 spin_unlock(&port->lock); in atmel_tasklet_tx_func()
1777 static void atmel_set_ops(struct uart_port *port) in atmel_set_ops() argument
1779 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_ops()
1781 if (atmel_use_dma_rx(port)) { in atmel_set_ops()
1785 } else if (atmel_use_pdc_rx(port)) { in atmel_set_ops()
1795 if (atmel_use_dma_tx(port)) { in atmel_set_ops()
1799 } else if (atmel_use_pdc_tx(port)) { in atmel_set_ops()
1813 static void atmel_get_ip_name(struct uart_port *port) in atmel_get_ip_name() argument
1815 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_ip_name()
1816 int name = atmel_uart_readl(port, ATMEL_US_NAME); in atmel_get_ip_name()
1834 dev_dbg(port->dev, "Uart with hw timer"); in atmel_get_ip_name()
1838 dev_dbg(port->dev, "Usart\n"); in atmel_get_ip_name()
1842 version = atmel_uart_readl(port, ATMEL_US_VERSION); in atmel_get_ip_name()
1859 dev_dbg(port->dev, "Dbgu or uart without hw timer\n"); in atmel_get_ip_name()
1862 version = atmel_uart_readl(port, ATMEL_US_VERSION); in atmel_get_ip_name()
1867 dev_dbg(port->dev, "This version is usart\n"); in atmel_get_ip_name()
1874 dev_dbg(port->dev, "This version is uart\n"); in atmel_get_ip_name()
1877 dev_err(port->dev, "Not supported ip name nor version, set to uart\n"); in atmel_get_ip_name()
1883 * Perform initialization and enable port for reception
1885 static int atmel_startup(struct uart_port *port) in atmel_startup() argument
1887 struct platform_device *pdev = to_platform_device(port->dev); in atmel_startup()
1888 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_startup()
1896 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_startup()
1902 retval = request_irq(port->irq, atmel_interrupt, in atmel_startup()
1904 dev_name(&pdev->dev), port); in atmel_startup()
1906 dev_err(port->dev, "atmel_startup - Can't get irq\n"); in atmel_startup()
1912 (unsigned long)port); in atmel_startup()
1914 (unsigned long)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_uart_readl(port, ATMEL_US_CSR); in atmel_startup()
1964 * Finally, enable the serial port in atmel_startup()
1966 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_startup()
1968 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_startup()
1973 if (atmel_use_pdc_rx(port)) { in atmel_startup()
1977 jiffies + uart_poll_timeout(port)); in atmel_startup()
1980 atmel_uart_writel(port, atmel_port->rtor, in atmel_startup()
1982 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); in atmel_startup()
1984 atmel_uart_writel(port, ATMEL_US_IER, in atmel_startup()
1988 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN); in atmel_startup()
1989 } else if (atmel_use_dma_rx(port)) { in atmel_startup()
1993 jiffies + uart_poll_timeout(port)); in atmel_startup()
1996 atmel_uart_writel(port, atmel_port->rtor, 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()
2015 static void atmel_flush_buffer(struct uart_port *port) in atmel_flush_buffer() argument
2017 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_flush_buffer()
2019 if (atmel_use_pdc_tx(port)) { in atmel_flush_buffer()
2020 atmel_uart_writel(port, ATMEL_PDC_TCR, 0); in atmel_flush_buffer()
2031 * Disable the port
2033 static void atmel_shutdown(struct uart_port *port) in atmel_shutdown() argument
2035 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_shutdown()
2038 atmel_disable_ms(port); in atmel_shutdown()
2041 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_shutdown()
2053 synchronize_irq(port->irq); in atmel_shutdown()
2064 * disable port and break condition. in atmel_shutdown()
2066 atmel_stop_rx(port); in atmel_shutdown()
2067 atmel_stop_tx(port); in atmel_shutdown()
2069 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA); in atmel_shutdown()
2075 atmel_port->release_rx(port); in atmel_shutdown()
2077 atmel_port->release_tx(port); in atmel_shutdown()
2088 free_irq(port->irq, port); in atmel_shutdown()
2090 atmel_flush_buffer(port); in atmel_shutdown()
2096 static void atmel_serial_pm(struct uart_port *port, unsigned int state, in atmel_serial_pm() argument
2099 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_pm()
2104 * Enable the peripheral clock for this serial port. in atmel_serial_pm()
2110 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->backup_imr); in atmel_serial_pm()
2114 atmel_port->backup_imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_serial_pm()
2115 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_serial_pm()
2118 * Disable the peripheral clock for this serial port. in atmel_serial_pm()
2124 dev_err(port->dev, "atmel_serial: unknown pm %d\n", state); in atmel_serial_pm()
2129 * Change the port parameters
2131 static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, in atmel_set_termios() argument
2134 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_termios()
2139 mode = old_mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_set_termios()
2145 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); in atmel_set_termios()
2182 spin_lock_irqsave(&port->lock, flags); in atmel_set_termios()
2184 port->read_status_mask = ATMEL_US_OVRE; in atmel_set_termios()
2186 port->read_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
2188 port->read_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
2190 if (atmel_use_pdc_rx(port)) in atmel_set_termios()
2192 atmel_uart_writel(port, ATMEL_US_IER, port->read_status_mask); in atmel_set_termios()
2197 port->ignore_status_mask = 0; in atmel_set_termios()
2199 port->ignore_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
2201 port->ignore_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
2207 port->ignore_status_mask |= ATMEL_US_OVRE; in atmel_set_termios()
2211 /* update the per-port timeout */ in atmel_set_termios()
2212 uart_update_timeout(port, termios->c_cflag, baud); in atmel_set_termios()
2219 imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_set_termios()
2220 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_set_termios()
2223 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS | ATMEL_US_RXDIS); in atmel_set_termios()
2227 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_set_termios()
2228 atmel_uart_writel(port, ATMEL_US_TTGR, in atmel_set_termios()
2229 port->rs485.delay_rts_after_send); in atmel_set_termios()
2231 } else if (port->iso7816.flags & SER_ISO7816_ENABLED) { in atmel_set_termios()
2232 atmel_uart_writel(port, ATMEL_US_TTGR, port->iso7816.tg); in atmel_set_termios()
2237 if ((port->iso7816.flags & SER_ISO7816_T_PARAM) in atmel_set_termios()
2244 if (atmel_use_fifo(port) && in atmel_set_termios()
2274 atmel_uart_writel(port, ATMEL_US_MR, mode); in atmel_set_termios()
2291 atmel_uart_writel(port, ATMEL_US_CR, rts_state); in atmel_set_termios()
2305 div = DIV_ROUND_CLOSEST(port->uartclk, baud * 2); in atmel_set_termios()
2309 cd = uart_get_divisor(port, baud); in atmel_set_termios()
2318 if (!(port->iso7816.flags & SER_ISO7816_ENABLED)) in atmel_set_termios()
2319 atmel_uart_writel(port, ATMEL_US_BRGR, quot); in atmel_set_termios()
2320 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_set_termios()
2321 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_set_termios()
2325 atmel_uart_writel(port, ATMEL_US_IER, imr); in atmel_set_termios()
2328 if (UART_ENABLE_MS(port, termios->c_cflag)) in atmel_set_termios()
2329 atmel_enable_ms(port); in atmel_set_termios()
2331 atmel_disable_ms(port); in atmel_set_termios()
2333 spin_unlock_irqrestore(&port->lock, flags); in atmel_set_termios()
2336 static void atmel_set_ldisc(struct uart_port *port, struct ktermios *termios) in atmel_set_ldisc() argument
2339 port->flags |= UPF_HARDPPS_CD; in atmel_set_ldisc()
2340 spin_lock_irq(&port->lock); in atmel_set_ldisc()
2341 atmel_enable_ms(port); in atmel_set_ldisc()
2342 spin_unlock_irq(&port->lock); in atmel_set_ldisc()
2344 port->flags &= ~UPF_HARDPPS_CD; in atmel_set_ldisc()
2345 if (!UART_ENABLE_MS(port, termios->c_cflag)) { in atmel_set_ldisc()
2346 spin_lock_irq(&port->lock); in atmel_set_ldisc()
2347 atmel_disable_ms(port); in atmel_set_ldisc()
2348 spin_unlock_irq(&port->lock); in atmel_set_ldisc()
2354 * Return string describing the specified port
2356 static const char *atmel_type(struct uart_port *port) in atmel_type() argument
2358 return (port->type == PORT_ATMEL) ? "ATMEL_SERIAL" : NULL; in atmel_type()
2362 * Release the memory region(s) being used by 'port'.
2364 static void atmel_release_port(struct uart_port *port) in atmel_release_port() argument
2366 struct platform_device *mpdev = to_platform_device(port->dev->parent); in atmel_release_port()
2369 release_mem_region(port->mapbase, size); in atmel_release_port()
2371 if (port->flags & UPF_IOREMAP) { in atmel_release_port()
2372 iounmap(port->membase); in atmel_release_port()
2373 port->membase = NULL; in atmel_release_port()
2378 * Request the memory region(s) being used by 'port'.
2380 static int atmel_request_port(struct uart_port *port) in atmel_request_port() argument
2382 struct platform_device *mpdev = to_platform_device(port->dev->parent); in atmel_request_port()
2385 if (!request_mem_region(port->mapbase, size, "atmel_serial")) in atmel_request_port()
2388 if (port->flags & UPF_IOREMAP) { in atmel_request_port()
2389 port->membase = ioremap(port->mapbase, size); in atmel_request_port()
2390 if (port->membase == NULL) { in atmel_request_port()
2391 release_mem_region(port->mapbase, size); in atmel_request_port()
2400 * Configure/autoconfigure the port.
2402 static void atmel_config_port(struct uart_port *port, int flags) in atmel_config_port() argument
2405 port->type = PORT_ATMEL; in atmel_config_port()
2406 atmel_request_port(port); in atmel_config_port()
2413 static int atmel_verify_port(struct uart_port *port, struct serial_struct *ser) in atmel_verify_port() argument
2418 if (port->irq != ser->irq) in atmel_verify_port()
2422 if (port->uartclk / 16 != ser->baud_base) in atmel_verify_port()
2424 if (port->mapbase != (unsigned long)ser->iomem_base) in atmel_verify_port()
2426 if (port->iobase != ser->port) in atmel_verify_port()
2434 static int atmel_poll_get_char(struct uart_port *port) in atmel_poll_get_char() argument
2436 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_RXRDY)) in atmel_poll_get_char()
2439 return atmel_uart_read_char(port); in atmel_poll_get_char()
2442 static void atmel_poll_put_char(struct uart_port *port, unsigned char ch) in atmel_poll_put_char() argument
2444 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXRDY)) in atmel_poll_put_char()
2447 atmel_uart_write_char(port, ch); in atmel_poll_put_char()
2478 * Configure the port from the platform device resource info.
2484 struct uart_port *port = &atmel_port->uart; in atmel_init_port() local
2488 atmel_set_ops(port); in atmel_init_port()
2490 uart_get_rs485_mode(&mpdev->dev, &port->rs485); in atmel_init_port()
2492 port->iotype = UPIO_MEM; in atmel_init_port()
2493 port->flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP; in atmel_init_port()
2494 port->ops = &atmel_pops; in atmel_init_port()
2495 port->fifosize = 1; in atmel_init_port()
2496 port->dev = &pdev->dev; in atmel_init_port()
2497 port->mapbase = mpdev->resource[0].start; in atmel_init_port()
2498 port->irq = mpdev->resource[1].start; in atmel_init_port()
2499 port->rs485_config = atmel_config_rs485; in atmel_init_port()
2500 port->iso7816_config = atmel_config_iso7816; in atmel_init_port()
2501 port->membase = NULL; in atmel_init_port()
2519 port->uartclk = clk_get_rate(atmel_port->clk); in atmel_init_port()
2528 if (port->rs485.flags & SER_RS485_ENABLED || in atmel_init_port()
2529 port->iso7816.flags & SER_ISO7816_ENABLED) in atmel_init_port()
2531 else if (atmel_use_pdc_tx(port)) { in atmel_init_port()
2532 port->fifosize = PDC_BUFFER_SIZE; in atmel_init_port()
2542 static void atmel_console_putchar(struct uart_port *port, int ch) in atmel_console_putchar() argument
2544 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXRDY)) in atmel_console_putchar()
2546 atmel_uart_write_char(port, ch); in atmel_console_putchar()
2554 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_write() local
2555 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_console_write()
2562 imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_console_write()
2563 atmel_uart_writel(port, ATMEL_US_IDR, in atmel_console_write()
2567 pdc_tx = atmel_uart_readl(port, ATMEL_PDC_PTSR) & ATMEL_PDC_TXTEN; in atmel_console_write()
2568 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS); in atmel_console_write()
2571 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN); in atmel_console_write()
2574 uart_console_write(port, s, count, atmel_console_putchar); in atmel_console_write()
2581 status = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_console_write()
2586 atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN); in atmel_console_write()
2589 atmel_uart_writel(port, ATMEL_US_IER, imr); in atmel_console_write()
2593 * If the port was already initialised (eg, by a boot loader),
2596 static void __init atmel_console_get_options(struct uart_port *port, int *baud, in atmel_console_get_options() argument
2602 * If the baud rate generator isn't running, the port wasn't in atmel_console_get_options()
2605 quot = atmel_uart_readl(port, ATMEL_US_BRGR) & ATMEL_US_CD; in atmel_console_get_options()
2609 mr = atmel_uart_readl(port, ATMEL_US_MR) & ATMEL_US_CHRL; in atmel_console_get_options()
2615 mr = atmel_uart_readl(port, ATMEL_US_MR) & ATMEL_US_PAR; in atmel_console_get_options()
2627 *baud = port->uartclk / (16 * (quot - 1)); in atmel_console_get_options()
2633 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_setup() local
2634 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_console_setup()
2640 if (port->membase == NULL) { in atmel_console_setup()
2641 /* Port not initialized yet - delay setup */ in atmel_console_setup()
2649 atmel_uart_writel(port, ATMEL_US_IDR, -1); in atmel_console_setup()
2650 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_console_setup()
2651 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_console_setup()
2657 atmel_console_get_options(port, &baud, &parity, &bits); in atmel_console_setup()
2659 return uart_set_options(port, co, baud, parity, bits, flow); in atmel_console_setup()
2676 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
2678 return port->cons && port->cons->index == port->line; in atmel_is_console_port()
2684 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
2713 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_suspend() local
2714 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_suspend()
2716 if (atmel_is_console_port(port) && console_suspend_enabled) { in atmel_serial_suspend()
2718 while (!(atmel_uart_readl(port, ATMEL_US_CSR) & in atmel_serial_suspend()
2723 if (atmel_is_console_port(port) && !console_suspend_enabled) { in atmel_serial_suspend()
2727 atmel_port->cache.mr = atmel_uart_readl(port, ATMEL_US_MR); in atmel_serial_suspend()
2728 atmel_port->cache.imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_serial_suspend()
2729 atmel_port->cache.brgr = atmel_uart_readl(port, ATMEL_US_BRGR); in atmel_serial_suspend()
2730 atmel_port->cache.rtor = atmel_uart_readl(port, in atmel_serial_suspend()
2732 atmel_port->cache.ttgr = atmel_uart_readl(port, ATMEL_US_TTGR); in atmel_serial_suspend()
2733 atmel_port->cache.fmr = atmel_uart_readl(port, ATMEL_US_FMR); in atmel_serial_suspend()
2734 atmel_port->cache.fimr = atmel_uart_readl(port, ATMEL_US_FIMR); in atmel_serial_suspend()
2748 uart_suspend_port(&atmel_uart, port); in atmel_serial_suspend()
2755 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_resume() local
2756 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_resume()
2759 if (atmel_is_console_port(port) && !console_suspend_enabled) { in atmel_serial_resume()
2760 atmel_uart_writel(port, ATMEL_US_MR, atmel_port->cache.mr); in atmel_serial_resume()
2761 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->cache.imr); in atmel_serial_resume()
2762 atmel_uart_writel(port, ATMEL_US_BRGR, atmel_port->cache.brgr); in atmel_serial_resume()
2763 atmel_uart_writel(port, atmel_port->rtor, in atmel_serial_resume()
2765 atmel_uart_writel(port, ATMEL_US_TTGR, atmel_port->cache.ttgr); in atmel_serial_resume()
2768 atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_FIFOEN | in atmel_serial_resume()
2770 atmel_uart_writel(port, ATMEL_US_FMR, in atmel_serial_resume()
2772 atmel_uart_writel(port, ATMEL_US_FIER, in atmel_serial_resume()
2775 atmel_start_rx(port); in atmel_serial_resume()
2780 atmel_handle_receive(port, atmel_port->pending); in atmel_serial_resume()
2781 atmel_handle_status(port, atmel_port->pending, in atmel_serial_resume()
2783 atmel_handle_transmit(port, atmel_port->pending); in atmel_serial_resume()
2789 uart_resume_port(&atmel_uart, port); in atmel_serial_resume()
2862 /* port id not found in platform data nor device-tree aliases: in atmel_serial_probe()
2872 /* port already in use */ in atmel_serial_probe()
2939 * Get port name of usart or uart in atmel_serial_probe()
2944 * The peripheral clock can now safely be disabled till the port in atmel_serial_probe()
2972 * port in the normal case.
2976 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_remove() local
2977 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_remove()
2985 ret = uart_remove_one_port(&atmel_uart, port); in atmel_serial_remove()
2989 /* "port" is allocated statically, so we shouldn't free it */ in atmel_serial_remove()
2991 clear_bit(port->line, atmel_ports_in_use); in atmel_serial_remove()