Lines Matching refs:ourport
162 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_stop_tx() local
163 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_stop_tx()
175 disable_irq_nosync(ourport->tx_irq); in s3c24xx_serial_stop_tx()
177 if (dma && dma->tx_chan && ourport->tx_in_progress == S3C24XX_TX_DMA) { in s3c24xx_serial_stop_tx()
181 dma_sync_single_for_cpu(ourport->port.dev, in s3c24xx_serial_stop_tx()
190 ourport->tx_in_progress = 0; in s3c24xx_serial_stop_tx()
195 ourport->tx_mode = 0; in s3c24xx_serial_stop_tx()
198 static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport);
202 struct s3c24xx_uart_port *ourport = args; in s3c24xx_serial_tx_dma_complete() local
203 struct uart_port *port = &ourport->port; in s3c24xx_serial_tx_dma_complete()
205 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_tx_dma_complete()
215 dma_sync_single_for_cpu(ourport->port.dev, dma->tx_transfer_addr, in s3c24xx_serial_tx_dma_complete()
222 ourport->tx_in_progress = 0; in s3c24xx_serial_tx_dma_complete()
227 s3c24xx_serial_start_next_tx(ourport); in s3c24xx_serial_tx_dma_complete()
231 static void enable_tx_dma(struct s3c24xx_uart_port *ourport) in enable_tx_dma() argument
233 struct uart_port *port = &ourport->port; in enable_tx_dma()
241 disable_irq_nosync(ourport->tx_irq); in enable_tx_dma()
251 ourport->tx_mode = S3C24XX_TX_DMA; in enable_tx_dma()
254 static void enable_tx_pio(struct s3c24xx_uart_port *ourport) in enable_tx_pio() argument
256 struct uart_port *port = &ourport->port; in enable_tx_pio()
260 ourport->tx_in_progress = S3C24XX_TX_PIO; in enable_tx_pio()
275 enable_irq(ourport->tx_irq); in enable_tx_pio()
277 ourport->tx_mode = S3C24XX_TX_PIO; in enable_tx_pio()
280 static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport) in s3c24xx_serial_start_tx_pio() argument
282 if (ourport->tx_mode != S3C24XX_TX_PIO) in s3c24xx_serial_start_tx_pio()
283 enable_tx_pio(ourport); in s3c24xx_serial_start_tx_pio()
286 static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_start_tx_dma() argument
289 struct uart_port *port = &ourport->port; in s3c24xx_serial_start_tx_dma()
291 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_start_tx_dma()
294 if (ourport->tx_mode != S3C24XX_TX_DMA) in s3c24xx_serial_start_tx_dma()
295 enable_tx_dma(ourport); in s3c24xx_serial_start_tx_dma()
300 dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr, in s3c24xx_serial_start_tx_dma()
307 dev_err(ourport->port.dev, "Unable to get desc for Tx\n"); in s3c24xx_serial_start_tx_dma()
312 dma->tx_desc->callback_param = ourport; in s3c24xx_serial_start_tx_dma()
315 ourport->tx_in_progress = S3C24XX_TX_DMA; in s3c24xx_serial_start_tx_dma()
321 static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport) in s3c24xx_serial_start_next_tx() argument
323 struct uart_port *port = &ourport->port; in s3c24xx_serial_start_next_tx()
335 if (!ourport->dma || !ourport->dma->tx_chan || in s3c24xx_serial_start_next_tx()
336 count < ourport->min_dma_size || in s3c24xx_serial_start_next_tx()
338 s3c24xx_serial_start_tx_pio(ourport); in s3c24xx_serial_start_next_tx()
340 s3c24xx_serial_start_tx_dma(ourport, count); in s3c24xx_serial_start_next_tx()
345 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_start_tx() local
353 if (!ourport->dma || !ourport->dma->tx_chan) in s3c24xx_serial_start_tx()
354 s3c24xx_serial_start_tx_pio(ourport); in s3c24xx_serial_start_tx()
357 if (ourport->dma && ourport->dma->tx_chan) { in s3c24xx_serial_start_tx()
358 if (!uart_circ_empty(xmit) && !ourport->tx_in_progress) in s3c24xx_serial_start_tx()
359 s3c24xx_serial_start_next_tx(ourport); in s3c24xx_serial_start_tx()
363 static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport, in s3c24xx_uart_copy_rx_to_tty() argument
366 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_uart_copy_rx_to_tty()
372 dma_sync_single_for_cpu(ourport->port.dev, dma->rx_addr, in s3c24xx_uart_copy_rx_to_tty()
375 ourport->port.icount.rx += count; in s3c24xx_uart_copy_rx_to_tty()
377 dev_err(ourport->port.dev, "No tty port\n"); in s3c24xx_uart_copy_rx_to_tty()
381 ((unsigned char *)(ourport->dma->rx_buf)), count); in s3c24xx_uart_copy_rx_to_tty()
384 dev_err(ourport->port.dev, "RxData copy to tty layer failed\n"); in s3c24xx_uart_copy_rx_to_tty()
390 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_stop_rx() local
391 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_stop_rx()
403 disable_irq_nosync(ourport->rx_irq); in s3c24xx_serial_stop_rx()
414 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_stop_rx()
428 struct s3c24xx_uart_port *ourport; in s3c24xx_port_to_cfg() local
433 ourport = container_of(port, struct s3c24xx_uart_port, port); in s3c24xx_port_to_cfg()
434 return ourport->cfg; in s3c24xx_port_to_cfg()
437 static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_rx_fifocnt() argument
440 struct s3c24xx_uart_info *info = ourport->info; in s3c24xx_serial_rx_fifocnt()
443 return ourport->port.fifosize; in s3c24xx_serial_rx_fifocnt()
448 static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport);
451 struct s3c24xx_uart_port *ourport = args; in s3c24xx_serial_rx_dma_complete() local
452 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_dma_complete()
454 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_rx_dma_complete()
456 struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port); in s3c24xx_serial_rx_dma_complete()
469 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_rx_dma_complete()
476 s3c64xx_start_rx_dma(ourport); in s3c24xx_serial_rx_dma_complete()
481 static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport) in s3c64xx_start_rx_dma() argument
483 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c64xx_start_rx_dma()
485 dma_sync_single_for_device(ourport->port.dev, dma->rx_addr, in s3c64xx_start_rx_dma()
492 dev_err(ourport->port.dev, "Unable to get desc for Rx\n"); in s3c64xx_start_rx_dma()
497 dma->rx_desc->callback_param = ourport; in s3c64xx_start_rx_dma()
507 static void enable_rx_dma(struct s3c24xx_uart_port *ourport) in enable_rx_dma() argument
509 struct uart_port *port = &ourport->port; in enable_rx_dma()
527 ourport->rx_mode = S3C24XX_RX_DMA; in enable_rx_dma()
530 static void enable_rx_pio(struct s3c24xx_uart_port *ourport) in enable_rx_pio() argument
532 struct uart_port *port = &ourport->port; in enable_rx_pio()
547 ourport->rx_mode = S3C24XX_RX_PIO; in enable_rx_pio()
550 static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport);
555 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars_dma() local
556 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_chars_dma()
557 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_rx_chars_dma()
558 struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port); in s3c24xx_serial_rx_chars_dma()
569 s3c64xx_start_rx_dma(ourport); in s3c24xx_serial_rx_chars_dma()
570 if (ourport->rx_mode == S3C24XX_RX_PIO) in s3c24xx_serial_rx_chars_dma()
571 enable_rx_dma(ourport); in s3c24xx_serial_rx_chars_dma()
575 if (ourport->rx_mode == S3C24XX_RX_DMA) { in s3c24xx_serial_rx_chars_dma()
580 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_rx_chars_dma()
582 enable_rx_pio(ourport); in s3c24xx_serial_rx_chars_dma()
585 s3c24xx_serial_rx_drain_fifo(ourport); in s3c24xx_serial_rx_chars_dma()
600 static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport) in s3c24xx_serial_rx_drain_fifo() argument
602 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_drain_fifo()
610 if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0) in s3c24xx_serial_rx_drain_fifo()
680 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars_pio() local
681 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_chars_pio()
685 s3c24xx_serial_rx_drain_fifo(ourport); in s3c24xx_serial_rx_chars_pio()
694 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars() local
696 if (ourport->dma && ourport->dma->rx_chan) in s3c24xx_serial_rx_chars()
703 struct s3c24xx_uart_port *ourport = id; in s3c24xx_serial_tx_chars() local
704 struct uart_port *port = &ourport->port; in s3c24xx_serial_tx_chars()
713 if (ourport->dma && ourport->dma->tx_chan && in s3c24xx_serial_tx_chars()
714 count >= ourport->min_dma_size) { in s3c24xx_serial_tx_chars()
717 if (count-align >= ourport->min_dma_size) { in s3c24xx_serial_tx_chars()
747 if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull) in s3c24xx_serial_tx_chars()
757 s3c24xx_serial_start_tx_dma(ourport, dma_count); in s3c24xx_serial_tx_chars()
778 struct s3c24xx_uart_port *ourport = id; in s3c64xx_serial_handle_irq() local
779 struct uart_port *port = &ourport->port; in s3c64xx_serial_handle_irq()
942 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_shutdown() local
944 if (ourport->tx_claimed) { in s3c24xx_serial_shutdown()
946 free_irq(ourport->tx_irq, ourport); in s3c24xx_serial_shutdown()
948 ourport->tx_claimed = 0; in s3c24xx_serial_shutdown()
949 ourport->tx_mode = 0; in s3c24xx_serial_shutdown()
952 if (ourport->rx_claimed) { in s3c24xx_serial_shutdown()
954 free_irq(ourport->rx_irq, ourport); in s3c24xx_serial_shutdown()
955 ourport->rx_claimed = 0; in s3c24xx_serial_shutdown()
961 free_irq(port->irq, ourport); in s3c24xx_serial_shutdown()
967 if (ourport->dma) in s3c24xx_serial_shutdown()
968 s3c24xx_serial_release_dma(ourport); in s3c24xx_serial_shutdown()
970 ourport->tx_in_progress = 0; in s3c24xx_serial_shutdown()
975 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_startup() local
983 ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0, in s3c24xx_serial_startup()
984 s3c24xx_serial_portname(port), ourport); in s3c24xx_serial_startup()
987 dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq); in s3c24xx_serial_startup()
991 ourport->rx_claimed = 1; in s3c24xx_serial_startup()
997 ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0, in s3c24xx_serial_startup()
998 s3c24xx_serial_portname(port), ourport); in s3c24xx_serial_startup()
1001 dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq); in s3c24xx_serial_startup()
1005 ourport->tx_claimed = 1; in s3c24xx_serial_startup()
1021 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c64xx_serial_startup() local
1030 if (ourport->dma) { in s3c64xx_serial_startup()
1031 ret = s3c24xx_serial_request_dma(ourport); in s3c64xx_serial_startup()
1039 s3c24xx_serial_portname(port), ourport); in s3c64xx_serial_startup()
1047 ourport->rx_claimed = 1; in s3c64xx_serial_startup()
1049 ourport->tx_claimed = 1; in s3c64xx_serial_startup()
1059 enable_rx_pio(ourport); in s3c64xx_serial_startup()
1075 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_pm() local
1078 ourport->pm_level = level; in s3c24xx_serial_pm()
1085 if (!IS_ERR(ourport->baudclk)) in s3c24xx_serial_pm()
1086 clk_disable_unprepare(ourport->baudclk); in s3c24xx_serial_pm()
1088 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_pm()
1092 clk_prepare_enable(ourport->clk); in s3c24xx_serial_pm()
1094 if (!IS_ERR(ourport->baudclk)) in s3c24xx_serial_pm()
1095 clk_prepare_enable(ourport->baudclk); in s3c24xx_serial_pm()
1149 static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_getclk() argument
1153 struct s3c24xx_uart_info *info = ourport->info; in s3c24xx_serial_getclk()
1160 clk_sel = (ourport->cfg->clk_sel) ? ourport->cfg->clk_sel : in s3c24xx_serial_getclk()
1161 ourport->info->def_clk_sel; in s3c24xx_serial_getclk()
1167 clk = clk_get(ourport->port.dev, clkname); in s3c24xx_serial_getclk()
1175 if (ourport->info->has_divslot) { in s3c24xx_serial_getclk()
1238 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_set_termios() local
1257 quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel); in s3c24xx_serial_set_termios()
1265 if (ourport->baudclk != clk) { in s3c24xx_serial_set_termios()
1270 if (!IS_ERR(ourport->baudclk)) { in s3c24xx_serial_set_termios()
1271 clk_disable_unprepare(ourport->baudclk); in s3c24xx_serial_set_termios()
1272 ourport->baudclk = ERR_PTR(-EINVAL); in s3c24xx_serial_set_termios()
1275 ourport->baudclk = clk; in s3c24xx_serial_set_termios()
1276 ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0; in s3c24xx_serial_set_termios()
1279 if (ourport->info->has_divslot) { in s3c24xx_serial_set_termios()
1280 unsigned int div = ourport->baudclk_rate / baud; in s3c24xx_serial_set_termios()
1344 if (ourport->info->has_divslot) in s3c24xx_serial_set_termios()
1665 static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_init_port() argument
1668 struct uart_port *port = &ourport->port; in s3c24xx_serial_init_port()
1669 struct s3c2410_uartcfg *cfg = ourport->cfg; in s3c24xx_serial_init_port()
1717 ourport->rx_irq = ret; in s3c24xx_serial_init_port()
1718 ourport->tx_irq = ret + 1; in s3c24xx_serial_init_port()
1723 ourport->tx_irq = ret; in s3c24xx_serial_init_port()
1730 ourport->dma = devm_kzalloc(port->dev, in s3c24xx_serial_init_port()
1731 sizeof(*ourport->dma), in s3c24xx_serial_init_port()
1733 if (!ourport->dma) in s3c24xx_serial_init_port()
1737 ourport->clk = clk_get(&platdev->dev, "uart"); in s3c24xx_serial_init_port()
1738 if (IS_ERR(ourport->clk)) { in s3c24xx_serial_init_port()
1741 return PTR_ERR(ourport->clk); in s3c24xx_serial_init_port()
1744 ret = clk_prepare_enable(ourport->clk); in s3c24xx_serial_init_port()
1747 clk_put(ourport->clk); in s3c24xx_serial_init_port()
1760 ourport->rx_irq, ourport->tx_irq, port->uartclk); in s3c24xx_serial_init_port()
1789 struct s3c24xx_uart_port *ourport; in s3c24xx_serial_probe() local
1801 ourport = &s3c24xx_serial_ports[index]; in s3c24xx_serial_probe()
1803 ourport->drv_data = s3c24xx_get_driver_data(pdev); in s3c24xx_serial_probe()
1804 if (!ourport->drv_data) { in s3c24xx_serial_probe()
1809 ourport->baudclk = ERR_PTR(-EINVAL); in s3c24xx_serial_probe()
1810 ourport->info = ourport->drv_data->info; in s3c24xx_serial_probe()
1811 ourport->cfg = (dev_get_platdata(&pdev->dev)) ? in s3c24xx_serial_probe()
1813 ourport->drv_data->def_cfg; in s3c24xx_serial_probe()
1817 "samsung,uart-fifosize", &ourport->port.fifosize); in s3c24xx_serial_probe()
1819 if (ourport->drv_data->fifosize[index]) in s3c24xx_serial_probe()
1820 ourport->port.fifosize = ourport->drv_data->fifosize[index]; in s3c24xx_serial_probe()
1821 else if (ourport->info->fifosize) in s3c24xx_serial_probe()
1822 ourport->port.fifosize = ourport->info->fifosize; in s3c24xx_serial_probe()
1828 ourport->min_dma_size = max_t(int, ourport->port.fifosize, in s3c24xx_serial_probe()
1833 dbg("%s: initialising port %p...\n", __func__, ourport); in s3c24xx_serial_probe()
1835 ret = s3c24xx_serial_init_port(ourport, pdev); in s3c24xx_serial_probe()
1848 uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); in s3c24xx_serial_probe()
1849 platform_set_drvdata(pdev, &ourport->port); in s3c24xx_serial_probe()
1856 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_probe()
1858 ret = s3c24xx_serial_cpufreq_register(ourport); in s3c24xx_serial_probe()
1894 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_resume() local
1897 clk_prepare_enable(ourport->clk); in s3c24xx_serial_resume()
1899 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_resume()
1978 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_get_poll_char() local
1982 if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0) in s3c24xx_serial_get_poll_char()