Lines Matching refs:atmel_port
235 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_rx() local
237 return atmel_port->use_pdc_rx; in atmel_use_pdc_rx()
242 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_tx() local
244 return atmel_port->use_pdc_tx; in atmel_use_pdc_tx()
260 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_tx() local
262 return atmel_port->use_dma_tx; in atmel_use_dma_tx()
267 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_rx() local
269 return atmel_port->use_dma_rx; in atmel_use_dma_rx()
274 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_fifo() local
276 return atmel_port->fifo_size; in atmel_use_fifo()
279 static void atmel_tasklet_schedule(struct atmel_uart_port *atmel_port, in atmel_tasklet_schedule() argument
282 if (!atomic_read(&atmel_port->tasklet_shutdown)) in atmel_tasklet_schedule()
290 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_config_rs485() local
294 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_config_rs485()
301 atmel_port->tx_done_mask = ATMEL_US_TXRDY; in atmel_config_rs485()
303 atmel_port->tx_done_mask = ATMEL_US_TXEMPTY; in atmel_config_rs485()
312 atmel_port->tx_done_mask = ATMEL_US_ENDTX | in atmel_config_rs485()
315 atmel_port->tx_done_mask = ATMEL_US_TXRDY; in atmel_config_rs485()
320 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_config_rs485()
328 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_calc_cd() local
332 mck_rate = (u64)clk_get_rate(atmel_port->clk); in atmel_calc_cd()
355 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_config_iso7816() local
361 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_config_iso7816()
399 } else if (fidi < atmel_port->fidi_min in atmel_config_iso7816()
400 || fidi > atmel_port->fidi_max) { in atmel_config_iso7816()
409 atmel_port->backup_mode = atmel_uart_readl(port, ATMEL_US_MR); in atmel_config_iso7816()
410 atmel_port->backup_brgr = atmel_uart_readl(port, ATMEL_US_BRGR); in atmel_config_iso7816()
418 atmel_port->tx_done_mask = ATMEL_US_TXEMPTY | ATMEL_US_NACK | ATMEL_US_ITERATION; in atmel_config_iso7816()
422 mode = atmel_port->backup_mode; in atmel_config_iso7816()
425 atmel_uart_writel(port, ATMEL_US_BRGR, atmel_port->backup_brgr); in atmel_config_iso7816()
429 atmel_port->tx_done_mask = ATMEL_US_ENDTX | in atmel_config_iso7816()
432 atmel_port->tx_done_mask = ATMEL_US_TXRDY; in atmel_config_iso7816()
441 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_config_iso7816()
451 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_empty() local
453 if (atmel_port->tx_stopped) in atmel_tx_empty()
468 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_mctrl() local
505 mctrl_gpio_set(atmel_port->gpios, mctrl); in atmel_set_mctrl()
522 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_mctrl() local
539 return mctrl_gpio_get(atmel_port->gpios, &ret); in atmel_get_mctrl()
547 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_stop_tx() local
560 atmel_port->tx_stopped = true; in atmel_stop_tx()
563 atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); in atmel_stop_tx()
566 if (!atomic_read(&atmel_port->tasklet_shutdown)) in atmel_stop_tx()
576 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_start_tx() local
593 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask); in atmel_start_tx()
597 atmel_port->tx_stopped = false; in atmel_start_tx()
644 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_enable_ms() local
650 if (atmel_port->ms_irq_enabled) in atmel_enable_ms()
653 atmel_port->ms_irq_enabled = true; in atmel_enable_ms()
655 if (!mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_CTS)) in atmel_enable_ms()
658 if (!mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_DSR)) in atmel_enable_ms()
661 if (!mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_RI)) in atmel_enable_ms()
664 if (!mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_DCD)) in atmel_enable_ms()
669 mctrl_gpio_enable_ms(atmel_port->gpios); in atmel_enable_ms()
677 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_disable_ms() local
683 if (!atmel_port->ms_irq_enabled) in atmel_disable_ms()
686 atmel_port->ms_irq_enabled = false; in atmel_disable_ms()
688 mctrl_gpio_disable_ms(atmel_port->gpios); in atmel_disable_ms()
690 if (!mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_CTS)) in atmel_disable_ms()
693 if (!mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_DSR)) in atmel_disable_ms()
696 if (!mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_RI)) in atmel_disable_ms()
699 if (!mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_DCD)) in atmel_disable_ms()
725 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_buffer_rx_char() local
726 struct circ_buf *ring = &atmel_port->rx_ring; in atmel_buffer_rx_char()
769 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_chars() local
782 || atmel_port->break_active)) { in atmel_rx_chars()
788 && !atmel_port->break_active) { in atmel_rx_chars()
789 atmel_port->break_active = 1; in atmel_rx_chars()
803 atmel_port->break_active = 0; in atmel_rx_chars()
811 atmel_tasklet_schedule(atmel_port, &atmel_port->tasklet_rx); in atmel_rx_chars()
821 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_chars() local
848 atmel_port->tx_done_mask |= ATMEL_US_TXRDY; in atmel_tx_chars()
852 atmel_port->tx_done_mask); in atmel_tx_chars()
855 atmel_port->tx_done_mask &= ~ATMEL_US_TXRDY; in atmel_tx_chars()
861 struct atmel_uart_port *atmel_port = arg; in atmel_complete_tx_dma() local
862 struct uart_port *port = &atmel_port->uart; in atmel_complete_tx_dma()
864 struct dma_chan *chan = atmel_port->chan_tx; in atmel_complete_tx_dma()
871 xmit->tail += atmel_port->tx_len; in atmel_complete_tx_dma()
874 port->icount.tx += atmel_port->tx_len; in atmel_complete_tx_dma()
876 spin_lock_irq(&atmel_port->lock_tx); in atmel_complete_tx_dma()
877 async_tx_ack(atmel_port->desc_tx); in atmel_complete_tx_dma()
878 atmel_port->cookie_tx = -EINVAL; in atmel_complete_tx_dma()
879 atmel_port->desc_tx = NULL; in atmel_complete_tx_dma()
880 spin_unlock_irq(&atmel_port->lock_tx); in atmel_complete_tx_dma()
891 atmel_tasklet_schedule(atmel_port, &atmel_port->tasklet_tx); in atmel_complete_tx_dma()
897 atmel_port->hd_start_rx = true; in atmel_complete_tx_dma()
899 atmel_port->tx_done_mask); in atmel_complete_tx_dma()
907 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_dma() local
908 struct dma_chan *chan = atmel_port->chan_tx; in atmel_release_tx_dma()
913 dma_unmap_sg(port->dev, &atmel_port->sg_tx, 1, in atmel_release_tx_dma()
917 atmel_port->desc_tx = NULL; in atmel_release_tx_dma()
918 atmel_port->chan_tx = NULL; in atmel_release_tx_dma()
919 atmel_port->cookie_tx = -EINVAL; in atmel_release_tx_dma()
927 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_dma() local
929 struct dma_chan *chan = atmel_port->chan_tx; in atmel_tx_dma()
931 struct scatterlist sgl[2], *sg, *sg_tx = &atmel_port->sg_tx; in atmel_tx_dma()
936 if (atmel_port->desc_tx != NULL) in atmel_tx_dma()
953 if (atmel_port->fifo_size) { in atmel_tx_dma()
984 atmel_port->tx_len = tx_len; in atmel_tx_dma()
999 atmel_port->desc_tx = desc; in atmel_tx_dma()
1001 desc->callback_param = atmel_port; in atmel_tx_dma()
1002 atmel_port->cookie_tx = dmaengine_submit(desc); in atmel_tx_dma()
1003 if (dma_submit_error(atmel_port->cookie_tx)) { in atmel_tx_dma()
1005 atmel_port->cookie_tx); in atmel_tx_dma()
1018 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_dma() local
1027 atmel_port->chan_tx = dma_request_slave_channel(mfd_dev, "tx"); in atmel_prepare_tx_dma()
1028 if (atmel_port->chan_tx == NULL) in atmel_prepare_tx_dma()
1031 dma_chan_name(atmel_port->chan_tx)); in atmel_prepare_tx_dma()
1033 spin_lock_init(&atmel_port->lock_tx); in atmel_prepare_tx_dma()
1034 sg_init_table(&atmel_port->sg_tx, 1); in atmel_prepare_tx_dma()
1037 sg_set_page(&atmel_port->sg_tx, in atmel_prepare_tx_dma()
1042 &atmel_port->sg_tx, in atmel_prepare_tx_dma()
1051 sg_dma_len(&atmel_port->sg_tx), in atmel_prepare_tx_dma()
1053 &sg_dma_address(&atmel_port->sg_tx)); in atmel_prepare_tx_dma()
1059 config.dst_addr_width = (atmel_port->fifo_size) ? in atmel_prepare_tx_dma()
1065 ret = dmaengine_slave_config(atmel_port->chan_tx, in atmel_prepare_tx_dma()
1076 atmel_port->use_dma_tx = false; in atmel_prepare_tx_dma()
1077 if (atmel_port->chan_tx) in atmel_prepare_tx_dma()
1085 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_complete_rx_dma() local
1087 atmel_tasklet_schedule(atmel_port, &atmel_port->tasklet_rx); in atmel_complete_rx_dma()
1092 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_dma() local
1093 struct dma_chan *chan = atmel_port->chan_rx; in atmel_release_rx_dma()
1098 dma_unmap_sg(port->dev, &atmel_port->sg_rx, 1, in atmel_release_rx_dma()
1102 atmel_port->desc_rx = NULL; in atmel_release_rx_dma()
1103 atmel_port->chan_rx = NULL; in atmel_release_rx_dma()
1104 atmel_port->cookie_rx = -EINVAL; in atmel_release_rx_dma()
1109 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_dma() local
1111 struct circ_buf *ring = &atmel_port->rx_ring; in atmel_rx_from_dma()
1112 struct dma_chan *chan = atmel_port->chan_rx; in atmel_rx_from_dma()
1121 atmel_port->cookie_rx, in atmel_rx_from_dma()
1127 atmel_tasklet_schedule(atmel_port, &atmel_port->tasklet_rx); in atmel_rx_from_dma()
1133 &atmel_port->sg_rx, in atmel_rx_from_dma()
1144 ring->head = sg_dma_len(&atmel_port->sg_rx) - state.residue; in atmel_rx_from_dma()
1145 BUG_ON(ring->head > sg_dma_len(&atmel_port->sg_rx)); in atmel_rx_from_dma()
1159 count = sg_dma_len(&atmel_port->sg_rx) - ring->tail; in atmel_rx_from_dma()
1172 if (ring->head >= sg_dma_len(&atmel_port->sg_rx)) in atmel_rx_from_dma()
1180 &atmel_port->sg_rx, in atmel_rx_from_dma()
1197 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_dma() local
1205 ring = &atmel_port->rx_ring; in atmel_prepare_rx_dma()
1210 atmel_port->chan_rx = dma_request_slave_channel(mfd_dev, "rx"); in atmel_prepare_rx_dma()
1211 if (atmel_port->chan_rx == NULL) in atmel_prepare_rx_dma()
1214 dma_chan_name(atmel_port->chan_rx)); in atmel_prepare_rx_dma()
1216 spin_lock_init(&atmel_port->lock_rx); in atmel_prepare_rx_dma()
1217 sg_init_table(&atmel_port->sg_rx, 1); in atmel_prepare_rx_dma()
1220 sg_set_page(&atmel_port->sg_rx, in atmel_prepare_rx_dma()
1225 &atmel_port->sg_rx, in atmel_prepare_rx_dma()
1234 sg_dma_len(&atmel_port->sg_rx), in atmel_prepare_rx_dma()
1236 &sg_dma_address(&atmel_port->sg_rx)); in atmel_prepare_rx_dma()
1246 ret = dmaengine_slave_config(atmel_port->chan_rx, in atmel_prepare_rx_dma()
1256 desc = dmaengine_prep_dma_cyclic(atmel_port->chan_rx, in atmel_prepare_rx_dma()
1257 sg_dma_address(&atmel_port->sg_rx), in atmel_prepare_rx_dma()
1258 sg_dma_len(&atmel_port->sg_rx), in atmel_prepare_rx_dma()
1259 sg_dma_len(&atmel_port->sg_rx)/2, in atmel_prepare_rx_dma()
1268 atmel_port->desc_rx = desc; in atmel_prepare_rx_dma()
1269 atmel_port->cookie_rx = dmaengine_submit(desc); in atmel_prepare_rx_dma()
1270 if (dma_submit_error(atmel_port->cookie_rx)) { in atmel_prepare_rx_dma()
1272 atmel_port->cookie_rx); in atmel_prepare_rx_dma()
1276 dma_async_issue_pending(atmel_port->chan_rx); in atmel_prepare_rx_dma()
1282 atmel_port->use_dma_rx = false; in atmel_prepare_rx_dma()
1283 if (atmel_port->chan_rx) in atmel_prepare_rx_dma()
1290 struct atmel_uart_port *atmel_port = from_timer(atmel_port, t, in atmel_uart_timer_callback() local
1292 struct uart_port *port = &atmel_port->uart; in atmel_uart_timer_callback()
1294 if (!atomic_read(&atmel_port->tasklet_shutdown)) { in atmel_uart_timer_callback()
1295 tasklet_schedule(&atmel_port->tasklet_rx); in atmel_uart_timer_callback()
1296 mod_timer(&atmel_port->uart_timer, in atmel_uart_timer_callback()
1307 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_receive() local
1320 atmel_tasklet_schedule(atmel_port, in atmel_handle_receive()
1321 &atmel_port->tasklet_rx); in atmel_handle_receive()
1333 atmel_tasklet_schedule(atmel_port, in atmel_handle_receive()
1334 &atmel_port->tasklet_rx); in atmel_handle_receive()
1348 atmel_port->break_active = 0; in atmel_handle_receive()
1358 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_transmit() local
1360 if (pending & atmel_port->tx_done_mask) { in atmel_handle_transmit()
1362 atmel_port->tx_done_mask); in atmel_handle_transmit()
1365 if (atmel_port->hd_start_rx) { in atmel_handle_transmit()
1370 atmel_port->hd_start_rx = false; in atmel_handle_transmit()
1374 atmel_tasklet_schedule(atmel_port, &atmel_port->tasklet_tx); in atmel_handle_transmit()
1385 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_status() local
1390 status_change = status ^ atmel_port->irq_status_prev; in atmel_handle_status()
1391 atmel_port->irq_status_prev = status; in atmel_handle_status()
1419 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_interrupt() local
1422 spin_lock(&atmel_port->lock_suspended); in atmel_interrupt()
1431 if (atmel_port->suspended) { in atmel_interrupt()
1432 atmel_port->pending |= pending; in atmel_interrupt()
1433 atmel_port->pending_status = status; in atmel_interrupt()
1444 spin_unlock(&atmel_port->lock_suspended); in atmel_interrupt()
1451 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_pdc() local
1452 struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx; in atmel_release_tx_pdc()
1465 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_pdc() local
1467 struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx; in atmel_tx_pdc()
1501 atmel_port->tx_done_mask); in atmel_tx_pdc()
1515 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_pdc() local
1516 struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx; in atmel_prepare_tx_pdc()
1532 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_ring() local
1533 struct circ_buf *ring = &atmel_port->rx_ring; in atmel_rx_from_ring()
1600 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_pdc() local
1604 struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i]; in atmel_release_rx_pdc()
1616 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_pdc() local
1619 int rx_idx = atmel_port->pdc_rx_idx; in atmel_rx_from_pdc()
1628 pdc = &atmel_port->pdc_rx[rx_idx]; in atmel_rx_from_pdc()
1676 atmel_port->pdc_rx_idx = rx_idx; in atmel_rx_from_pdc()
1694 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_pdc() local
1698 struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i]; in atmel_prepare_rx_pdc()
1704 atmel_port->pdc_rx[0].dma_addr, in atmel_prepare_rx_pdc()
1707 kfree(atmel_port->pdc_rx[0].buf); in atmel_prepare_rx_pdc()
1709 atmel_port->use_pdc_rx = false; in atmel_prepare_rx_pdc()
1720 atmel_port->pdc_rx_idx = 0; in atmel_prepare_rx_pdc()
1722 atmel_uart_writel(port, ATMEL_PDC_RPR, atmel_port->pdc_rx[0].dma_addr); in atmel_prepare_rx_pdc()
1726 atmel_port->pdc_rx[1].dma_addr); in atmel_prepare_rx_pdc()
1737 struct atmel_uart_port *atmel_port = from_tasklet(atmel_port, t, in atmel_tasklet_rx_func() local
1739 struct uart_port *port = &atmel_port->uart; in atmel_tasklet_rx_func()
1743 atmel_port->schedule_rx(port); in atmel_tasklet_rx_func()
1749 struct atmel_uart_port *atmel_port = from_tasklet(atmel_port, t, in atmel_tasklet_tx_func() local
1751 struct uart_port *port = &atmel_port->uart; in atmel_tasklet_tx_func()
1755 atmel_port->schedule_tx(port); in atmel_tasklet_tx_func()
1759 static void atmel_init_property(struct atmel_uart_port *atmel_port, in atmel_init_property() argument
1767 atmel_port->use_dma_rx = true; in atmel_init_property()
1768 atmel_port->use_pdc_rx = false; in atmel_init_property()
1770 atmel_port->use_dma_rx = false; in atmel_init_property()
1771 atmel_port->use_pdc_rx = true; in atmel_init_property()
1774 atmel_port->use_dma_rx = false; in atmel_init_property()
1775 atmel_port->use_pdc_rx = false; in atmel_init_property()
1780 atmel_port->use_dma_tx = true; in atmel_init_property()
1781 atmel_port->use_pdc_tx = false; in atmel_init_property()
1783 atmel_port->use_dma_tx = false; in atmel_init_property()
1784 atmel_port->use_pdc_tx = true; in atmel_init_property()
1787 atmel_port->use_dma_tx = false; in atmel_init_property()
1788 atmel_port->use_pdc_tx = false; in atmel_init_property()
1794 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_ops() local
1797 atmel_port->prepare_rx = &atmel_prepare_rx_dma; in atmel_set_ops()
1798 atmel_port->schedule_rx = &atmel_rx_from_dma; in atmel_set_ops()
1799 atmel_port->release_rx = &atmel_release_rx_dma; in atmel_set_ops()
1801 atmel_port->prepare_rx = &atmel_prepare_rx_pdc; in atmel_set_ops()
1802 atmel_port->schedule_rx = &atmel_rx_from_pdc; in atmel_set_ops()
1803 atmel_port->release_rx = &atmel_release_rx_pdc; in atmel_set_ops()
1805 atmel_port->prepare_rx = NULL; in atmel_set_ops()
1806 atmel_port->schedule_rx = &atmel_rx_from_ring; in atmel_set_ops()
1807 atmel_port->release_rx = NULL; in atmel_set_ops()
1811 atmel_port->prepare_tx = &atmel_prepare_tx_dma; in atmel_set_ops()
1812 atmel_port->schedule_tx = &atmel_tx_dma; in atmel_set_ops()
1813 atmel_port->release_tx = &atmel_release_tx_dma; in atmel_set_ops()
1815 atmel_port->prepare_tx = &atmel_prepare_tx_pdc; in atmel_set_ops()
1816 atmel_port->schedule_tx = &atmel_tx_pdc; in atmel_set_ops()
1817 atmel_port->release_tx = &atmel_release_tx_pdc; in atmel_set_ops()
1819 atmel_port->prepare_tx = NULL; in atmel_set_ops()
1820 atmel_port->schedule_tx = &atmel_tx_chars; in atmel_set_ops()
1821 atmel_port->release_tx = NULL; in atmel_set_ops()
1830 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_ip_name() local
1845 atmel_port->has_frac_baudrate = false; in atmel_get_ip_name()
1846 atmel_port->has_hw_timer = false; in atmel_get_ip_name()
1850 atmel_port->has_hw_timer = true; in atmel_get_ip_name()
1851 atmel_port->rtor = ATMEL_UA_RTOR; in atmel_get_ip_name()
1854 atmel_port->has_frac_baudrate = true; in atmel_get_ip_name()
1855 atmel_port->has_hw_timer = true; in atmel_get_ip_name()
1856 atmel_port->rtor = ATMEL_US_RTOR; in atmel_get_ip_name()
1862 atmel_port->fidi_min = 3; in atmel_get_ip_name()
1863 atmel_port->fidi_max = 65535; in atmel_get_ip_name()
1866 atmel_port->fidi_min = 3; in atmel_get_ip_name()
1867 atmel_port->fidi_max = 2047; in atmel_get_ip_name()
1870 atmel_port->fidi_min = 1; in atmel_get_ip_name()
1871 atmel_port->fidi_max = 2047; in atmel_get_ip_name()
1883 atmel_port->has_frac_baudrate = true; in atmel_get_ip_name()
1884 atmel_port->has_hw_timer = true; in atmel_get_ip_name()
1885 atmel_port->rtor = ATMEL_US_RTOR; in atmel_get_ip_name()
1903 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_startup() local
1912 atmel_port->ms_irq_enabled = false; in atmel_startup()
1925 atomic_set(&atmel_port->tasklet_shutdown, 0); in atmel_startup()
1926 tasklet_setup(&atmel_port->tasklet_rx, atmel_tasklet_rx_func); in atmel_startup()
1927 tasklet_setup(&atmel_port->tasklet_tx, atmel_tasklet_tx_func); in atmel_startup()
1932 atmel_init_property(atmel_port, pdev); in atmel_startup()
1935 if (atmel_port->prepare_rx) { in atmel_startup()
1936 retval = atmel_port->prepare_rx(port); in atmel_startup()
1941 if (atmel_port->prepare_tx) { in atmel_startup()
1942 retval = atmel_port->prepare_tx(port); in atmel_startup()
1950 if (atmel_port->fifo_size) { in atmel_startup()
1964 if (atmel_port->rts_high && in atmel_startup()
1965 atmel_port->rts_low) in atmel_startup()
1967 ATMEL_US_RXFTHRES(atmel_port->rts_high) | in atmel_startup()
1968 ATMEL_US_RXFTHRES2(atmel_port->rts_low); in atmel_startup()
1974 atmel_port->irq_status_prev = atmel_uart_readl(port, ATMEL_US_CSR); in atmel_startup()
1982 atmel_port->tx_stopped = false; in atmel_startup()
1984 timer_setup(&atmel_port->uart_timer, atmel_uart_timer_callback, 0); in atmel_startup()
1988 if (!atmel_port->has_hw_timer) { in atmel_startup()
1989 mod_timer(&atmel_port->uart_timer, in atmel_startup()
1993 atmel_uart_writel(port, atmel_port->rtor, in atmel_startup()
2004 if (!atmel_port->has_hw_timer) { in atmel_startup()
2005 mod_timer(&atmel_port->uart_timer, in atmel_startup()
2009 atmel_uart_writel(port, atmel_port->rtor, in atmel_startup()
2030 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_flush_buffer() local
2034 atmel_port->pdc_tx.ofs = 0; in atmel_flush_buffer()
2040 atmel_port->tx_len = 0; in atmel_flush_buffer()
2048 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_shutdown() local
2057 atomic_inc(&atmel_port->tasklet_shutdown); in atmel_shutdown()
2063 del_timer_sync(&atmel_port->uart_timer); in atmel_shutdown()
2072 tasklet_kill(&atmel_port->tasklet_rx); in atmel_shutdown()
2073 tasklet_kill(&atmel_port->tasklet_tx); in atmel_shutdown()
2087 if (atmel_port->release_rx) in atmel_shutdown()
2088 atmel_port->release_rx(port); in atmel_shutdown()
2089 if (atmel_port->release_tx) in atmel_shutdown()
2090 atmel_port->release_tx(port); in atmel_shutdown()
2095 atmel_port->rx_ring.head = 0; in atmel_shutdown()
2096 atmel_port->rx_ring.tail = 0; in atmel_shutdown()
2112 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_pm() local
2120 clk_prepare_enable(atmel_port->clk); in atmel_serial_pm()
2123 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->backup_imr); in atmel_serial_pm()
2127 atmel_port->backup_imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_serial_pm()
2134 clk_disable_unprepare(atmel_port->clk); in atmel_serial_pm()
2147 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_termios() local
2237 atmel_port->tx_stopped = true; in atmel_set_termios()
2258 !mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_CTS)) { in atmel_set_termios()
2296 if (atmel_port->has_frac_baudrate) { in atmel_set_termios()
2336 atmel_port->tx_stopped = false; in atmel_set_termios()
2494 static int atmel_init_port(struct atmel_uart_port *atmel_port, in atmel_init_port() argument
2498 struct uart_port *port = &atmel_port->uart; in atmel_init_port()
2501 atmel_init_property(atmel_port, pdev); in atmel_init_port()
2515 memset(&atmel_port->rx_ring, 0, sizeof(atmel_port->rx_ring)); in atmel_init_port()
2522 if (!atmel_port->clk) { in atmel_init_port()
2523 atmel_port->clk = clk_get(&mpdev->dev, "usart"); in atmel_init_port()
2524 if (IS_ERR(atmel_port->clk)) { in atmel_init_port()
2525 ret = PTR_ERR(atmel_port->clk); in atmel_init_port()
2526 atmel_port->clk = NULL; in atmel_init_port()
2529 ret = clk_prepare_enable(atmel_port->clk); in atmel_init_port()
2531 clk_put(atmel_port->clk); in atmel_init_port()
2532 atmel_port->clk = NULL; in atmel_init_port()
2535 port->uartclk = clk_get_rate(atmel_port->clk); in atmel_init_port()
2536 clk_disable_unprepare(atmel_port->clk); in atmel_init_port()
2545 atmel_port->tx_done_mask = ATMEL_US_TXEMPTY; in atmel_init_port()
2548 atmel_port->tx_done_mask = ATMEL_US_ENDTX | ATMEL_US_TXBUFE; in atmel_init_port()
2550 atmel_port->tx_done_mask = ATMEL_US_TXRDY; in atmel_init_port()
2570 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_console_write() local
2579 ATMEL_US_RXRDY | atmel_port->tx_done_mask); in atmel_console_write()
2587 atmel_port->tx_stopped = false; in atmel_console_write()
2649 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_console_setup() local
2667 atmel_port->tx_stopped = false; in atmel_console_setup()
2719 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_suspend() local
2732 atmel_port->cache.mr = atmel_uart_readl(port, ATMEL_US_MR); in atmel_serial_suspend()
2733 atmel_port->cache.imr = atmel_uart_readl(port, ATMEL_US_IMR); in atmel_serial_suspend()
2734 atmel_port->cache.brgr = atmel_uart_readl(port, ATMEL_US_BRGR); in atmel_serial_suspend()
2735 atmel_port->cache.rtor = atmel_uart_readl(port, in atmel_serial_suspend()
2736 atmel_port->rtor); in atmel_serial_suspend()
2737 atmel_port->cache.ttgr = atmel_uart_readl(port, ATMEL_US_TTGR); in atmel_serial_suspend()
2738 atmel_port->cache.fmr = atmel_uart_readl(port, ATMEL_US_FMR); in atmel_serial_suspend()
2739 atmel_port->cache.fimr = atmel_uart_readl(port, ATMEL_US_FIMR); in atmel_serial_suspend()
2743 atmel_port->may_wakeup = device_may_wakeup(&pdev->dev); in atmel_serial_suspend()
2747 spin_lock_irqsave(&atmel_port->lock_suspended, flags); in atmel_serial_suspend()
2748 atmel_port->suspended = true; in atmel_serial_suspend()
2749 spin_unlock_irqrestore(&atmel_port->lock_suspended, flags); in atmel_serial_suspend()
2761 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_resume() local
2765 atmel_uart_writel(port, ATMEL_US_MR, atmel_port->cache.mr); in atmel_serial_resume()
2766 atmel_uart_writel(port, ATMEL_US_IER, atmel_port->cache.imr); in atmel_serial_resume()
2767 atmel_uart_writel(port, ATMEL_US_BRGR, atmel_port->cache.brgr); in atmel_serial_resume()
2768 atmel_uart_writel(port, atmel_port->rtor, in atmel_serial_resume()
2769 atmel_port->cache.rtor); in atmel_serial_resume()
2770 atmel_uart_writel(port, ATMEL_US_TTGR, atmel_port->cache.ttgr); in atmel_serial_resume()
2772 if (atmel_port->fifo_size) { in atmel_serial_resume()
2776 atmel_port->cache.fmr); in atmel_serial_resume()
2778 atmel_port->cache.fimr); in atmel_serial_resume()
2783 spin_lock_irqsave(&atmel_port->lock_suspended, flags); in atmel_serial_resume()
2784 if (atmel_port->pending) { in atmel_serial_resume()
2785 atmel_handle_receive(port, atmel_port->pending); in atmel_serial_resume()
2786 atmel_handle_status(port, atmel_port->pending, in atmel_serial_resume()
2787 atmel_port->pending_status); in atmel_serial_resume()
2788 atmel_handle_transmit(port, atmel_port->pending); in atmel_serial_resume()
2789 atmel_port->pending = 0; in atmel_serial_resume()
2791 atmel_port->suspended = false; in atmel_serial_resume()
2792 spin_unlock_irqrestore(&atmel_port->lock_suspended, flags); in atmel_serial_resume()
2795 device_set_wakeup_enable(&pdev->dev, atmel_port->may_wakeup); in atmel_serial_resume()
2804 static void atmel_serial_probe_fifos(struct atmel_uart_port *atmel_port, in atmel_serial_probe_fifos() argument
2807 atmel_port->fifo_size = 0; in atmel_serial_probe_fifos()
2808 atmel_port->rts_low = 0; in atmel_serial_probe_fifos()
2809 atmel_port->rts_high = 0; in atmel_serial_probe_fifos()
2813 &atmel_port->fifo_size)) in atmel_serial_probe_fifos()
2816 if (!atmel_port->fifo_size) in atmel_serial_probe_fifos()
2819 if (atmel_port->fifo_size < ATMEL_MIN_FIFO_SIZE) { in atmel_serial_probe_fifos()
2820 atmel_port->fifo_size = 0; in atmel_serial_probe_fifos()
2833 atmel_port->rts_high = max_t(int, atmel_port->fifo_size >> 1, in atmel_serial_probe_fifos()
2834 atmel_port->fifo_size - ATMEL_RTS_HIGH_OFFSET); in atmel_serial_probe_fifos()
2835 atmel_port->rts_low = max_t(int, atmel_port->fifo_size >> 2, in atmel_serial_probe_fifos()
2836 atmel_port->fifo_size - ATMEL_RTS_LOW_OFFSET); in atmel_serial_probe_fifos()
2839 atmel_port->fifo_size); in atmel_serial_probe_fifos()
2841 atmel_port->rts_high); in atmel_serial_probe_fifos()
2843 atmel_port->rts_low); in atmel_serial_probe_fifos()
2848 struct atmel_uart_port *atmel_port; in atmel_serial_probe() local
2882 atmel_port = &atmel_ports[ret]; in atmel_serial_probe()
2883 atmel_port->backup_imr = 0; in atmel_serial_probe()
2884 atmel_port->uart.line = ret; in atmel_serial_probe()
2885 atmel_port->uart.has_sysrq = IS_ENABLED(CONFIG_SERIAL_ATMEL_CONSOLE); in atmel_serial_probe()
2886 atmel_serial_probe_fifos(atmel_port, pdev); in atmel_serial_probe()
2888 atomic_set(&atmel_port->tasklet_shutdown, 0); in atmel_serial_probe()
2889 spin_lock_init(&atmel_port->lock_suspended); in atmel_serial_probe()
2891 ret = atmel_init_port(atmel_port, pdev); in atmel_serial_probe()
2895 atmel_port->gpios = mctrl_gpio_init(&atmel_port->uart, 0); in atmel_serial_probe()
2896 if (IS_ERR(atmel_port->gpios)) { in atmel_serial_probe()
2897 ret = PTR_ERR(atmel_port->gpios); in atmel_serial_probe()
2901 if (!atmel_use_pdc_rx(&atmel_port->uart)) { in atmel_serial_probe()
2908 atmel_port->rx_ring.buf = data; in atmel_serial_probe()
2911 rs485_enabled = atmel_port->uart.rs485.flags & SER_RS485_ENABLED; in atmel_serial_probe()
2913 ret = uart_add_one_port(&atmel_uart, &atmel_port->uart); in atmel_serial_probe()
2918 if (uart_console(&atmel_port->uart) in atmel_serial_probe()
2924 clk_disable_unprepare(atmel_port->clk); in atmel_serial_probe()
2929 platform_set_drvdata(pdev, atmel_port); in atmel_serial_probe()
2935 clk_prepare_enable(atmel_port->clk); in atmel_serial_probe()
2938 atmel_uart_writel(&atmel_port->uart, ATMEL_US_MR, in atmel_serial_probe()
2940 atmel_uart_writel(&atmel_port->uart, ATMEL_US_CR, in atmel_serial_probe()
2947 atmel_get_ip_name(&atmel_port->uart); in atmel_serial_probe()
2953 clk_disable_unprepare(atmel_port->clk); in atmel_serial_probe()
2958 kfree(atmel_port->rx_ring.buf); in atmel_serial_probe()
2959 atmel_port->rx_ring.buf = NULL; in atmel_serial_probe()
2961 if (!uart_console(&atmel_port->uart)) { in atmel_serial_probe()
2962 clk_put(atmel_port->clk); in atmel_serial_probe()
2963 atmel_port->clk = NULL; in atmel_serial_probe()
2966 clear_bit(atmel_port->uart.line, atmel_ports_in_use); in atmel_serial_probe()
2983 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_remove() local
2986 tasklet_kill(&atmel_port->tasklet_rx); in atmel_serial_remove()
2987 tasklet_kill(&atmel_port->tasklet_tx); in atmel_serial_remove()
2993 kfree(atmel_port->rx_ring.buf); in atmel_serial_remove()
2999 clk_put(atmel_port->clk); in atmel_serial_remove()
3000 atmel_port->clk = NULL; in atmel_serial_remove()