Lines Matching refs:sirfport

33 sirfsoc_uart_pio_tx_chars(struct sirfsoc_uart_port *sirfport, int count);
70 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_tx_empty() local
71 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_tx_empty()
72 struct sirfsoc_fifo_status *ufifo_st = &sirfport->uart_reg->fifo_status; in sirfsoc_uart_tx_empty()
79 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_get_mctrl() local
80 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_get_mctrl()
81 if (!sirfport->hw_flow_ctrl || !sirfport->ms_enabled) in sirfsoc_uart_get_mctrl()
83 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_get_mctrl()
90 if (!gpio_get_value(sirfport->cts_gpio)) in sirfsoc_uart_get_mctrl()
103 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_set_mctrl() local
104 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_set_mctrl()
110 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) in sirfsoc_uart_set_mctrl()
119 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) in sirfsoc_uart_set_mctrl()
129 if (!sirfport->hw_flow_ctrl || !sirfport->ms_enabled) in sirfsoc_uart_set_mctrl()
131 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_set_mctrl()
137 gpio_set_value(sirfport->rts_gpio, 1); in sirfsoc_uart_set_mctrl()
139 gpio_set_value(sirfport->rts_gpio, 0); in sirfsoc_uart_set_mctrl()
145 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_stop_tx() local
146 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_stop_tx()
147 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_stop_tx()
149 if (sirfport->tx_dma_chan) { in sirfsoc_uart_stop_tx()
150 if (sirfport->tx_dma_state == TX_DMA_RUNNING) { in sirfsoc_uart_stop_tx()
151 dmaengine_pause(sirfport->tx_dma_chan); in sirfsoc_uart_stop_tx()
152 sirfport->tx_dma_state = TX_DMA_PAUSE; in sirfsoc_uart_stop_tx()
154 if (!sirfport->is_atlas7) in sirfsoc_uart_stop_tx()
163 if (sirfport->uart_reg->uart_type == SIRF_USP_UART) in sirfsoc_uart_stop_tx()
166 if (!sirfport->is_atlas7) in sirfsoc_uart_stop_tx()
176 static void sirfsoc_uart_tx_with_dma(struct sirfsoc_uart_port *sirfport) in sirfsoc_uart_tx_with_dma() argument
178 struct uart_port *port = &sirfport->port; in sirfsoc_uart_tx_with_dma()
179 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_tx_with_dma()
180 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_tx_with_dma()
191 if (sirfport->tx_dma_state == TX_DMA_PAUSE) { in sirfsoc_uart_tx_with_dma()
192 dmaengine_resume(sirfport->tx_dma_chan); in sirfsoc_uart_tx_with_dma()
195 if (sirfport->tx_dma_state == TX_DMA_RUNNING) in sirfsoc_uart_tx_with_dma()
197 if (!sirfport->is_atlas7) in sirfsoc_uart_tx_with_dma()
218 pio_tx_size = sirfsoc_uart_pio_tx_chars(sirfport, in sirfsoc_uart_tx_with_dma()
223 sirfsoc_uart_pio_tx_chars(sirfport, tran_size); in sirfsoc_uart_tx_with_dma()
224 if (!sirfport->is_atlas7) in sirfsoc_uart_tx_with_dma()
241 sirfport->tx_dma_addr = dma_map_single(port->dev, in sirfsoc_uart_tx_with_dma()
244 sirfport->tx_dma_desc = dmaengine_prep_slave_single( in sirfsoc_uart_tx_with_dma()
245 sirfport->tx_dma_chan, sirfport->tx_dma_addr, in sirfsoc_uart_tx_with_dma()
247 if (!sirfport->tx_dma_desc) { in sirfsoc_uart_tx_with_dma()
251 sirfport->tx_dma_desc->callback = in sirfsoc_uart_tx_with_dma()
253 sirfport->tx_dma_desc->callback_param = (void *)sirfport; in sirfsoc_uart_tx_with_dma()
254 sirfport->transfer_size = tran_size; in sirfsoc_uart_tx_with_dma()
256 dmaengine_submit(sirfport->tx_dma_desc); in sirfsoc_uart_tx_with_dma()
257 dma_async_issue_pending(sirfport->tx_dma_chan); in sirfsoc_uart_tx_with_dma()
258 sirfport->tx_dma_state = TX_DMA_RUNNING; in sirfsoc_uart_tx_with_dma()
264 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_start_tx() local
265 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_start_tx()
266 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_start_tx()
267 if (sirfport->tx_dma_chan) in sirfsoc_uart_start_tx()
268 sirfsoc_uart_tx_with_dma(sirfport); in sirfsoc_uart_start_tx()
270 if (sirfport->uart_reg->uart_type == SIRF_USP_UART) in sirfsoc_uart_start_tx()
274 sirfsoc_uart_pio_tx_chars(sirfport, port->fifosize); in sirfsoc_uart_start_tx()
276 if (!sirfport->is_atlas7) in sirfsoc_uart_start_tx()
288 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_stop_rx() local
289 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_stop_rx()
290 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_stop_rx()
293 if (sirfport->rx_dma_chan) { in sirfsoc_uart_stop_rx()
294 if (!sirfport->is_atlas7) in sirfsoc_uart_stop_rx()
298 sirfport->uart_reg->uart_type) | in sirfsoc_uart_stop_rx()
303 sirfport->uart_reg->uart_type)| in sirfsoc_uart_stop_rx()
305 dmaengine_terminate_all(sirfport->rx_dma_chan); in sirfsoc_uart_stop_rx()
307 if (!sirfport->is_atlas7) in sirfsoc_uart_stop_rx()
311 sirfport->uart_reg->uart_type))); in sirfsoc_uart_stop_rx()
315 sirfport->uart_reg->uart_type)); in sirfsoc_uart_stop_rx()
321 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_disable_ms() local
322 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_disable_ms()
323 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_disable_ms()
325 if (!sirfport->hw_flow_ctrl) in sirfsoc_uart_disable_ms()
327 sirfport->ms_enabled = false; in sirfsoc_uart_disable_ms()
328 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_disable_ms()
331 if (!sirfport->is_atlas7) in sirfsoc_uart_disable_ms()
339 disable_irq(gpio_to_irq(sirfport->cts_gpio)); in sirfsoc_uart_disable_ms()
344 struct sirfsoc_uart_port *sirfport = (struct sirfsoc_uart_port *)dev_id; in sirfsoc_uart_usp_cts_handler() local
345 struct uart_port *port = &sirfport->port; in sirfsoc_uart_usp_cts_handler()
347 if (gpio_is_valid(sirfport->cts_gpio) && sirfport->ms_enabled) in sirfsoc_uart_usp_cts_handler()
349 !gpio_get_value(sirfport->cts_gpio)); in sirfsoc_uart_usp_cts_handler()
356 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_enable_ms() local
357 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_enable_ms()
358 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_enable_ms()
360 if (!sirfport->hw_flow_ctrl) in sirfsoc_uart_enable_ms()
362 sirfport->ms_enabled = true; in sirfsoc_uart_enable_ms()
363 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_enable_ms()
368 if (!sirfport->is_atlas7) in sirfsoc_uart_enable_ms()
376 enable_irq(gpio_to_irq(sirfport->cts_gpio)); in sirfsoc_uart_enable_ms()
381 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_break_ctl() local
382 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_break_ctl()
383 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_break_ctl()
396 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_pio_rx_chars() local
397 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_pio_rx_chars()
398 struct sirfsoc_fifo_status *ufifo_st = &sirfport->uart_reg->fifo_status; in sirfsoc_uart_pio_rx_chars()
422 sirfsoc_uart_pio_tx_chars(struct sirfsoc_uart_port *sirfport, int count) in sirfsoc_uart_pio_tx_chars() argument
424 struct uart_port *port = &sirfport->port; in sirfsoc_uart_pio_tx_chars()
425 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_pio_tx_chars()
426 struct sirfsoc_fifo_status *ufifo_st = &sirfport->uart_reg->fifo_status; in sirfsoc_uart_pio_tx_chars()
446 struct sirfsoc_uart_port *sirfport = (struct sirfsoc_uart_port *)param; in sirfsoc_uart_tx_dma_complete_callback() local
447 struct uart_port *port = &sirfport->port; in sirfsoc_uart_tx_dma_complete_callback()
452 xmit->tail = (xmit->tail + sirfport->transfer_size) & in sirfsoc_uart_tx_dma_complete_callback()
454 port->icount.tx += sirfport->transfer_size; in sirfsoc_uart_tx_dma_complete_callback()
457 if (sirfport->tx_dma_addr) in sirfsoc_uart_tx_dma_complete_callback()
458 dma_unmap_single(port->dev, sirfport->tx_dma_addr, in sirfsoc_uart_tx_dma_complete_callback()
459 sirfport->transfer_size, DMA_TO_DEVICE); in sirfsoc_uart_tx_dma_complete_callback()
460 sirfport->tx_dma_state = TX_DMA_IDLE; in sirfsoc_uart_tx_dma_complete_callback()
461 sirfsoc_uart_tx_with_dma(sirfport); in sirfsoc_uart_tx_dma_complete_callback()
470 struct sirfsoc_uart_port *sirfport = (struct sirfsoc_uart_port *)dev_id; in sirfsoc_uart_isr() local
471 struct uart_port *port = &sirfport->port; in sirfsoc_uart_isr()
472 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_isr()
473 struct sirfsoc_fifo_status *ufifo_st = &sirfport->uart_reg->fifo_status; in sirfsoc_uart_isr()
474 struct sirfsoc_int_status *uint_st = &sirfport->uart_reg->uart_int_st; in sirfsoc_uart_isr()
475 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_isr()
483 sirfport->uart_reg->uart_type)))) { in sirfsoc_uart_isr()
509 if ((sirfport->uart_reg->uart_type == SIRF_REAL_UART) && in sirfsoc_uart_isr()
511 !sirfport->tx_dma_state) { in sirfsoc_uart_isr()
521 if (!sirfport->rx_dma_chan && in sirfsoc_uart_isr()
534 if (!sirfport->is_atlas7) { in sirfsoc_uart_isr()
549 if (!sirfport->is_atlas7) { in sirfsoc_uart_isr()
571 if (sirfport->tx_dma_chan) in sirfsoc_uart_isr()
572 sirfsoc_uart_tx_with_dma(sirfport); in sirfsoc_uart_isr()
578 sirfsoc_uart_pio_tx_chars(sirfport, in sirfsoc_uart_isr()
599 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_start_next_rx_dma() local
600 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_start_next_rx_dma()
601 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_start_next_rx_dma()
605 sirfport->rx_dma_items.xmit.tail = in sirfsoc_uart_start_next_rx_dma()
606 sirfport->rx_dma_items.xmit.head = 0; in sirfsoc_uart_start_next_rx_dma()
607 sirfport->rx_dma_items.desc = in sirfsoc_uart_start_next_rx_dma()
608 dmaengine_prep_dma_cyclic(sirfport->rx_dma_chan, in sirfsoc_uart_start_next_rx_dma()
609 sirfport->rx_dma_items.dma_addr, SIRFSOC_RX_DMA_BUF_SIZE, in sirfsoc_uart_start_next_rx_dma()
612 if (IS_ERR_OR_NULL(sirfport->rx_dma_items.desc)) { in sirfsoc_uart_start_next_rx_dma()
616 sirfport->rx_dma_items.desc->callback = in sirfsoc_uart_start_next_rx_dma()
618 sirfport->rx_dma_items.desc->callback_param = sirfport; in sirfsoc_uart_start_next_rx_dma()
619 sirfport->rx_dma_items.cookie = in sirfsoc_uart_start_next_rx_dma()
620 dmaengine_submit(sirfport->rx_dma_items.desc); in sirfsoc_uart_start_next_rx_dma()
621 dma_async_issue_pending(sirfport->rx_dma_chan); in sirfsoc_uart_start_next_rx_dma()
622 if (!sirfport->is_atlas7) in sirfsoc_uart_start_next_rx_dma()
626 sirfport->uart_reg->uart_type)); in sirfsoc_uart_start_next_rx_dma()
630 sirfport->uart_reg->uart_type)); in sirfsoc_uart_start_next_rx_dma()
698 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_set_termios() local
699 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_set_termios()
700 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_set_termios()
742 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_set_termios()
752 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_set_termios()
789 if (!sirfport->ms_enabled) in sirfsoc_uart_set_termios()
792 if (sirfport->ms_enabled) in sirfsoc_uart_set_termios()
802 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_set_termios()
828 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART) { in sirfsoc_uart_set_termios()
856 if (sirfport->tx_dma_chan) in sirfsoc_uart_set_termios()
860 if (sirfport->rx_dma_chan) in sirfsoc_uart_set_termios()
868 sirfport->rx_period_time = 20000000; in sirfsoc_uart_set_termios()
888 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_pm() local
890 clk_prepare_enable(sirfport->clk); in sirfsoc_uart_pm()
892 clk_disable_unprepare(sirfport->clk); in sirfsoc_uart_pm()
897 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_startup() local
898 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_startup()
899 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en; in sirfsoc_uart_startup()
907 sirfport); in sirfsoc_uart_startup()
926 if (sirfport->uart_reg->uart_type == SIRF_USP_UART) in sirfsoc_uart_startup()
935 if (sirfport->rx_dma_chan) in sirfsoc_uart_startup()
940 if (sirfport->tx_dma_chan) { in sirfsoc_uart_startup()
941 sirfport->tx_dma_state = TX_DMA_IDLE; in sirfsoc_uart_startup()
947 sirfport->ms_enabled = false; in sirfsoc_uart_startup()
948 if (sirfport->uart_reg->uart_type == SIRF_USP_UART && in sirfsoc_uart_startup()
949 sirfport->hw_flow_ctrl) { in sirfsoc_uart_startup()
950 irq_modify_status(gpio_to_irq(sirfport->cts_gpio), in sirfsoc_uart_startup()
952 ret = request_irq(gpio_to_irq(sirfport->cts_gpio), in sirfsoc_uart_startup()
954 IRQF_TRIGGER_RISING, "usp_cts_irq", sirfport); in sirfsoc_uart_startup()
960 if (sirfport->uart_reg->uart_type == SIRF_REAL_UART && in sirfsoc_uart_startup()
961 sirfport->rx_dma_chan) in sirfsoc_uart_startup()
964 if (sirfport->uart_reg->uart_type == SIRF_USP_UART && in sirfsoc_uart_startup()
965 sirfport->rx_dma_chan) in sirfsoc_uart_startup()
969 if (sirfport->rx_dma_chan && !sirfport->is_hrt_enabled) { in sirfsoc_uart_startup()
970 sirfport->is_hrt_enabled = true; in sirfsoc_uart_startup()
971 sirfport->rx_period_time = 20000000; in sirfsoc_uart_startup()
972 sirfport->rx_last_pos = -1; in sirfsoc_uart_startup()
973 sirfport->pio_fetch_cnt = 0; in sirfsoc_uart_startup()
974 sirfport->rx_dma_items.xmit.tail = in sirfsoc_uart_startup()
975 sirfport->rx_dma_items.xmit.head = 0; in sirfsoc_uart_startup()
976 hrtimer_start(&sirfport->hrt, in sirfsoc_uart_startup()
977 ns_to_ktime(sirfport->rx_period_time), in sirfsoc_uart_startup()
981 if (sirfport->rx_dma_chan) in sirfsoc_uart_startup()
984 if (!sirfport->is_atlas7) in sirfsoc_uart_startup()
988 sirfport->uart_reg->uart_type)); in sirfsoc_uart_startup()
992 sirfport->uart_reg->uart_type)); in sirfsoc_uart_startup()
998 free_irq(port->irq, sirfport); in sirfsoc_uart_startup()
1005 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_shutdown() local
1006 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_shutdown()
1009 xmit = &sirfport->rx_dma_items.xmit; in sirfsoc_uart_shutdown()
1010 if (!sirfport->is_atlas7) in sirfsoc_uart_shutdown()
1015 free_irq(port->irq, sirfport); in sirfsoc_uart_shutdown()
1016 if (sirfport->ms_enabled) in sirfsoc_uart_shutdown()
1018 if (sirfport->uart_reg->uart_type == SIRF_USP_UART && in sirfsoc_uart_shutdown()
1019 sirfport->hw_flow_ctrl) { in sirfsoc_uart_shutdown()
1020 gpio_set_value(sirfport->rts_gpio, 1); in sirfsoc_uart_shutdown()
1021 free_irq(gpio_to_irq(sirfport->cts_gpio), sirfport); in sirfsoc_uart_shutdown()
1023 if (sirfport->tx_dma_chan) in sirfsoc_uart_shutdown()
1024 sirfport->tx_dma_state = TX_DMA_IDLE; in sirfsoc_uart_shutdown()
1025 if (sirfport->rx_dma_chan && sirfport->is_hrt_enabled) { in sirfsoc_uart_shutdown()
1027 SIRFUART_RX_FIFO_MASK) > sirfport->pio_fetch_cnt) && in sirfsoc_uart_shutdown()
1031 sirfport->is_hrt_enabled = false; in sirfsoc_uart_shutdown()
1032 hrtimer_cancel(&sirfport->hrt); in sirfsoc_uart_shutdown()
1043 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_request_port() local
1044 struct sirfsoc_uart_param *uart_param = &sirfport->uart_reg->uart_param; in sirfsoc_uart_request_port()
1091 struct sirfsoc_uart_port *sirfport; in sirfsoc_uart_console_setup() local
1095 sirfport = sirf_ports[co->index]; in sirfsoc_uart_console_setup()
1096 if (!sirfport) in sirfsoc_uart_console_setup()
1098 ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_console_setup()
1099 if (!sirfport->port.mapbase) in sirfsoc_uart_console_setup()
1103 if (sirfport->uart_reg->uart_type == SIRF_USP_UART) in sirfsoc_uart_console_setup()
1104 wr_regl(&sirfport->port, ureg->sirfsoc_mode1, SIRFSOC_USP_EN | in sirfsoc_uart_console_setup()
1108 sirfport->port.cons = co; in sirfsoc_uart_console_setup()
1111 sirfport->rx_dma_chan = NULL; in sirfsoc_uart_console_setup()
1112 sirfport->tx_dma_chan = NULL; in sirfsoc_uart_console_setup()
1113 return uart_set_options(&sirfport->port, co, baud, parity, bits, flow); in sirfsoc_uart_console_setup()
1118 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_console_putchar() local
1119 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_console_putchar()
1120 struct sirfsoc_fifo_status *ufifo_st = &sirfport->uart_reg->fifo_status; in sirfsoc_uart_console_putchar()
1130 struct sirfsoc_uart_port *sirfport = sirf_ports[co->index]; in sirfsoc_uart_console_write() local
1132 uart_console_write(&sirfport->port, s, count, in sirfsoc_uart_console_write()
1171 struct sirfsoc_uart_port *sirfport; in sirfsoc_uart_rx_dma_hrtimer_callback() local
1181 sirfport = container_of(hrt, struct sirfsoc_uart_port, hrt); in sirfsoc_uart_rx_dma_hrtimer_callback()
1182 port = &sirfport->port; in sirfsoc_uart_rx_dma_hrtimer_callback()
1185 ureg = &sirfport->uart_reg->uart_reg; in sirfsoc_uart_rx_dma_hrtimer_callback()
1186 xmit = &sirfport->rx_dma_items.xmit; in sirfsoc_uart_rx_dma_hrtimer_callback()
1187 ufifo_st = &sirfport->uart_reg->fifo_status; in sirfsoc_uart_rx_dma_hrtimer_callback()
1189 dmaengine_tx_status(sirfport->rx_dma_chan, in sirfsoc_uart_rx_dma_hrtimer_callback()
1190 sirfport->rx_dma_items.cookie, &tx_state); in sirfsoc_uart_rx_dma_hrtimer_callback()
1192 sirfport->rx_last_pos) { in sirfsoc_uart_rx_dma_hrtimer_callback()
1194 sirfport->rx_last_pos = xmit->head; in sirfsoc_uart_rx_dma_hrtimer_callback()
1195 sirfport->pio_fetch_cnt = 0; in sirfsoc_uart_rx_dma_hrtimer_callback()
1218 SIRFUART_RX_FIFO_MASK) > sirfport->pio_fetch_cnt)) { in sirfsoc_uart_rx_dma_hrtimer_callback()
1219 dmaengine_pause(sirfport->rx_dma_chan); in sirfsoc_uart_rx_dma_hrtimer_callback()
1243 sirfport->pio_fetch_cnt++; in sirfsoc_uart_rx_dma_hrtimer_callback()
1249 dmaengine_resume(sirfport->rx_dma_chan); in sirfsoc_uart_rx_dma_hrtimer_callback()
1252 hrtimer_forward_now(hrt, ns_to_ktime(sirfport->rx_period_time)); in sirfsoc_uart_rx_dma_hrtimer_callback()
1267 struct sirfsoc_uart_port *sirfport; in sirfsoc_uart_probe() local
1280 sirfport = devm_kzalloc(&pdev->dev, sizeof(*sirfport), GFP_KERNEL); in sirfsoc_uart_probe()
1281 if (!sirfport) { in sirfsoc_uart_probe()
1285 sirfport->port.line = of_alias_get_id(pdev->dev.of_node, "serial"); in sirfsoc_uart_probe()
1286 sirf_ports[sirfport->port.line] = sirfport; in sirfsoc_uart_probe()
1287 sirfport->port.iotype = UPIO_MEM; in sirfsoc_uart_probe()
1288 sirfport->port.flags = UPF_BOOT_AUTOCONF; in sirfsoc_uart_probe()
1289 port = &sirfport->port; in sirfsoc_uart_probe()
1291 port->private_data = sirfport; in sirfsoc_uart_probe()
1292 sirfport->uart_reg = (struct sirfsoc_uart_register *)match->data; in sirfsoc_uart_probe()
1294 sirfport->hw_flow_ctrl = of_property_read_bool(pdev->dev.of_node, in sirfsoc_uart_probe()
1298 sirfport->uart_reg->uart_type = SIRF_REAL_UART; in sirfsoc_uart_probe()
1302 sirfport->uart_reg->uart_type = SIRF_USP_UART; in sirfsoc_uart_probe()
1303 if (!sirfport->hw_flow_ctrl) in sirfsoc_uart_probe()
1306 sirfport->cts_gpio = of_get_named_gpio( in sirfsoc_uart_probe()
1309 sirfport->cts_gpio = -1; in sirfsoc_uart_probe()
1311 sirfport->rts_gpio = of_get_named_gpio( in sirfsoc_uart_probe()
1314 sirfport->rts_gpio = -1; in sirfsoc_uart_probe()
1316 if ((!gpio_is_valid(sirfport->cts_gpio) || in sirfsoc_uart_probe()
1317 !gpio_is_valid(sirfport->rts_gpio))) { in sirfsoc_uart_probe()
1323 ret = devm_gpio_request(&pdev->dev, sirfport->cts_gpio, in sirfsoc_uart_probe()
1329 gpio_direction_input(sirfport->cts_gpio); in sirfsoc_uart_probe()
1330 ret = devm_gpio_request(&pdev->dev, sirfport->rts_gpio, in sirfsoc_uart_probe()
1336 gpio_direction_output(sirfport->rts_gpio, 1); in sirfsoc_uart_probe()
1341 sirfport->is_atlas7 = true; in sirfsoc_uart_probe()
1374 sirfport->clk = devm_clk_get(&pdev->dev, NULL); in sirfsoc_uart_probe()
1375 if (IS_ERR(sirfport->clk)) { in sirfsoc_uart_probe()
1376 ret = PTR_ERR(sirfport->clk); in sirfsoc_uart_probe()
1379 port->uartclk = clk_get_rate(sirfport->clk); in sirfsoc_uart_probe()
1384 platform_set_drvdata(pdev, sirfport); in sirfsoc_uart_probe()
1391 sirfport->rx_dma_chan = dma_request_slave_channel(port->dev, "rx"); in sirfsoc_uart_probe()
1392 sirfport->rx_dma_items.xmit.buf = in sirfsoc_uart_probe()
1394 &sirfport->rx_dma_items.dma_addr, GFP_KERNEL); in sirfsoc_uart_probe()
1395 if (!sirfport->rx_dma_items.xmit.buf) { in sirfsoc_uart_probe()
1400 sirfport->rx_dma_items.xmit.head = in sirfsoc_uart_probe()
1401 sirfport->rx_dma_items.xmit.tail = 0; in sirfsoc_uart_probe()
1402 if (sirfport->rx_dma_chan) in sirfsoc_uart_probe()
1403 dmaengine_slave_config(sirfport->rx_dma_chan, &slv_cfg); in sirfsoc_uart_probe()
1404 sirfport->tx_dma_chan = dma_request_slave_channel(port->dev, "tx"); in sirfsoc_uart_probe()
1405 if (sirfport->tx_dma_chan) in sirfsoc_uart_probe()
1406 dmaengine_slave_config(sirfport->tx_dma_chan, &tx_slv_cfg); in sirfsoc_uart_probe()
1407 if (sirfport->rx_dma_chan) { in sirfsoc_uart_probe()
1408 hrtimer_init(&sirfport->hrt, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in sirfsoc_uart_probe()
1409 sirfport->hrt.function = sirfsoc_uart_rx_dma_hrtimer_callback; in sirfsoc_uart_probe()
1410 sirfport->is_hrt_enabled = false; in sirfsoc_uart_probe()
1416 sirfport->rx_dma_items.xmit.buf, in sirfsoc_uart_probe()
1417 sirfport->rx_dma_items.dma_addr); in sirfsoc_uart_probe()
1418 dma_release_channel(sirfport->rx_dma_chan); in sirfsoc_uart_probe()
1425 struct sirfsoc_uart_port *sirfport = platform_get_drvdata(pdev); in sirfsoc_uart_remove() local
1426 struct uart_port *port = &sirfport->port; in sirfsoc_uart_remove()
1428 if (sirfport->rx_dma_chan) { in sirfsoc_uart_remove()
1429 dmaengine_terminate_all(sirfport->rx_dma_chan); in sirfsoc_uart_remove()
1430 dma_release_channel(sirfport->rx_dma_chan); in sirfsoc_uart_remove()
1432 sirfport->rx_dma_items.xmit.buf, in sirfsoc_uart_remove()
1433 sirfport->rx_dma_items.dma_addr); in sirfsoc_uart_remove()
1435 if (sirfport->tx_dma_chan) { in sirfsoc_uart_remove()
1436 dmaengine_terminate_all(sirfport->tx_dma_chan); in sirfsoc_uart_remove()
1437 dma_release_channel(sirfport->tx_dma_chan); in sirfsoc_uart_remove()
1446 struct sirfsoc_uart_port *sirfport = dev_get_drvdata(pdev); in sirfsoc_uart_suspend() local
1447 struct uart_port *port = &sirfport->port; in sirfsoc_uart_suspend()
1454 struct sirfsoc_uart_port *sirfport = dev_get_drvdata(pdev); in sirfsoc_uart_resume() local
1455 struct uart_port *port = &sirfport->port; in sirfsoc_uart_resume()