Lines Matching refs:ourport

159 	struct s3c24xx_uart_port *ourport = to_ourport(port);  in s3c24xx_serial_stop_tx()  local
160 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_stop_tx()
171 disable_irq_nosync(ourport->tx_irq); in s3c24xx_serial_stop_tx()
173 if (dma && dma->tx_chan && ourport->tx_in_progress == S3C24XX_TX_DMA) { in s3c24xx_serial_stop_tx()
177 dma_sync_single_for_cpu(ourport->port.dev, in s3c24xx_serial_stop_tx()
186 ourport->tx_in_progress = 0; in s3c24xx_serial_stop_tx()
191 ourport->tx_mode = 0; in s3c24xx_serial_stop_tx()
194 static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport);
198 struct s3c24xx_uart_port *ourport = args; in s3c24xx_serial_tx_dma_complete() local
199 struct uart_port *port = &ourport->port; in s3c24xx_serial_tx_dma_complete()
201 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_tx_dma_complete()
211 dma_sync_single_for_cpu(ourport->port.dev, dma->tx_transfer_addr, in s3c24xx_serial_tx_dma_complete()
218 ourport->tx_in_progress = 0; in s3c24xx_serial_tx_dma_complete()
223 s3c24xx_serial_start_next_tx(ourport); in s3c24xx_serial_tx_dma_complete()
227 static void enable_tx_dma(struct s3c24xx_uart_port *ourport) in enable_tx_dma() argument
229 struct uart_port *port = &ourport->port; in enable_tx_dma()
236 disable_irq_nosync(ourport->tx_irq); in enable_tx_dma()
246 ourport->tx_mode = S3C24XX_TX_DMA; in enable_tx_dma()
249 static void enable_tx_pio(struct s3c24xx_uart_port *ourport) in enable_tx_pio() argument
251 struct uart_port *port = &ourport->port; in enable_tx_pio()
255 ourport->tx_in_progress = S3C24XX_TX_PIO; in enable_tx_pio()
270 enable_irq(ourport->tx_irq); in enable_tx_pio()
272 ourport->tx_mode = S3C24XX_TX_PIO; in enable_tx_pio()
275 static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport) in s3c24xx_serial_start_tx_pio() argument
277 if (ourport->tx_mode != S3C24XX_TX_PIO) in s3c24xx_serial_start_tx_pio()
278 enable_tx_pio(ourport); in s3c24xx_serial_start_tx_pio()
281 static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_start_tx_dma() argument
284 struct uart_port *port = &ourport->port; in s3c24xx_serial_start_tx_dma()
286 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_start_tx_dma()
289 if (ourport->tx_mode != S3C24XX_TX_DMA) in s3c24xx_serial_start_tx_dma()
290 enable_tx_dma(ourport); in s3c24xx_serial_start_tx_dma()
295 dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr, in s3c24xx_serial_start_tx_dma()
302 dev_err(ourport->port.dev, "Unable to get desc for Tx\n"); in s3c24xx_serial_start_tx_dma()
307 dma->tx_desc->callback_param = ourport; in s3c24xx_serial_start_tx_dma()
310 ourport->tx_in_progress = S3C24XX_TX_DMA; in s3c24xx_serial_start_tx_dma()
316 static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport) in s3c24xx_serial_start_next_tx() argument
318 struct uart_port *port = &ourport->port; in s3c24xx_serial_start_next_tx()
330 if (!ourport->dma || !ourport->dma->tx_chan || in s3c24xx_serial_start_next_tx()
331 count < ourport->min_dma_size || in s3c24xx_serial_start_next_tx()
333 s3c24xx_serial_start_tx_pio(ourport); in s3c24xx_serial_start_next_tx()
335 s3c24xx_serial_start_tx_dma(ourport, count); in s3c24xx_serial_start_next_tx()
340 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_start_tx() local
348 if (!ourport->dma || !ourport->dma->tx_chan) in s3c24xx_serial_start_tx()
349 s3c24xx_serial_start_tx_pio(ourport); in s3c24xx_serial_start_tx()
352 if (ourport->dma && ourport->dma->tx_chan) { in s3c24xx_serial_start_tx()
353 if (!uart_circ_empty(xmit) && !ourport->tx_in_progress) in s3c24xx_serial_start_tx()
354 s3c24xx_serial_start_next_tx(ourport); in s3c24xx_serial_start_tx()
358 static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport, in s3c24xx_uart_copy_rx_to_tty() argument
361 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_uart_copy_rx_to_tty()
367 dma_sync_single_for_cpu(ourport->port.dev, dma->rx_addr, in s3c24xx_uart_copy_rx_to_tty()
370 ourport->port.icount.rx += count; in s3c24xx_uart_copy_rx_to_tty()
372 dev_err(ourport->port.dev, "No tty port\n"); in s3c24xx_uart_copy_rx_to_tty()
376 ((unsigned char *)(ourport->dma->rx_buf)), count); in s3c24xx_uart_copy_rx_to_tty()
379 dev_err(ourport->port.dev, "RxData copy to tty layer failed\n"); in s3c24xx_uart_copy_rx_to_tty()
385 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_stop_rx() local
386 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_stop_rx()
398 disable_irq_nosync(ourport->rx_irq); in s3c24xx_serial_stop_rx()
409 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_stop_rx()
423 struct s3c24xx_uart_port *ourport; in s3c24xx_port_to_cfg() local
428 ourport = container_of(port, struct s3c24xx_uart_port, port); in s3c24xx_port_to_cfg()
429 return ourport->cfg; in s3c24xx_port_to_cfg()
432 static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_rx_fifocnt() argument
435 struct s3c24xx_uart_info *info = ourport->info; in s3c24xx_serial_rx_fifocnt()
438 return ourport->port.fifosize; in s3c24xx_serial_rx_fifocnt()
443 static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport);
446 struct s3c24xx_uart_port *ourport = args; in s3c24xx_serial_rx_dma_complete() local
447 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_dma_complete()
449 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_rx_dma_complete()
451 struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port); in s3c24xx_serial_rx_dma_complete()
464 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_rx_dma_complete()
471 s3c64xx_start_rx_dma(ourport); in s3c24xx_serial_rx_dma_complete()
476 static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport) in s3c64xx_start_rx_dma() argument
478 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c64xx_start_rx_dma()
480 dma_sync_single_for_device(ourport->port.dev, dma->rx_addr, in s3c64xx_start_rx_dma()
487 dev_err(ourport->port.dev, "Unable to get desc for Rx\n"); in s3c64xx_start_rx_dma()
492 dma->rx_desc->callback_param = ourport; in s3c64xx_start_rx_dma()
502 static void enable_rx_dma(struct s3c24xx_uart_port *ourport) in enable_rx_dma() argument
504 struct uart_port *port = &ourport->port; in enable_rx_dma()
522 ourport->rx_mode = S3C24XX_RX_DMA; in enable_rx_dma()
525 static void enable_rx_pio(struct s3c24xx_uart_port *ourport) in enable_rx_pio() argument
527 struct uart_port *port = &ourport->port; in enable_rx_pio()
542 ourport->rx_mode = S3C24XX_RX_PIO; in enable_rx_pio()
545 static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport);
550 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars_dma() local
551 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_chars_dma()
552 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_rx_chars_dma()
553 struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port); in s3c24xx_serial_rx_chars_dma()
564 s3c64xx_start_rx_dma(ourport); in s3c24xx_serial_rx_chars_dma()
565 if (ourport->rx_mode == S3C24XX_RX_PIO) in s3c24xx_serial_rx_chars_dma()
566 enable_rx_dma(ourport); in s3c24xx_serial_rx_chars_dma()
570 if (ourport->rx_mode == S3C24XX_RX_DMA) { in s3c24xx_serial_rx_chars_dma()
575 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_rx_chars_dma()
577 enable_rx_pio(ourport); in s3c24xx_serial_rx_chars_dma()
580 s3c24xx_serial_rx_drain_fifo(ourport); in s3c24xx_serial_rx_chars_dma()
595 static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport) in s3c24xx_serial_rx_drain_fifo() argument
597 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_drain_fifo()
609 fifocnt = s3c24xx_serial_rx_fifocnt(ourport, ufstat); in s3c24xx_serial_rx_drain_fifo()
683 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars_pio() local
684 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_chars_pio()
688 s3c24xx_serial_rx_drain_fifo(ourport); in s3c24xx_serial_rx_chars_pio()
697 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars() local
699 if (ourport->dma && ourport->dma->rx_chan) in s3c24xx_serial_rx_chars()
706 struct s3c24xx_uart_port *ourport = id; in s3c24xx_serial_tx_chars() local
707 struct uart_port *port = &ourport->port; in s3c24xx_serial_tx_chars()
716 if (ourport->dma && ourport->dma->tx_chan && in s3c24xx_serial_tx_chars()
717 count >= ourport->min_dma_size) { in s3c24xx_serial_tx_chars()
720 if (count-align >= ourport->min_dma_size) { in s3c24xx_serial_tx_chars()
750 if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull) in s3c24xx_serial_tx_chars()
760 s3c24xx_serial_start_tx_dma(ourport, dma_count); in s3c24xx_serial_tx_chars()
781 struct s3c24xx_uart_port *ourport = id; in s3c64xx_serial_handle_irq() local
782 struct uart_port *port = &ourport->port; in s3c64xx_serial_handle_irq()
976 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_shutdown() local
978 if (ourport->tx_claimed) { in s3c24xx_serial_shutdown()
980 free_irq(ourport->tx_irq, ourport); in s3c24xx_serial_shutdown()
982 ourport->tx_claimed = 0; in s3c24xx_serial_shutdown()
983 ourport->tx_mode = 0; in s3c24xx_serial_shutdown()
986 if (ourport->rx_claimed) { in s3c24xx_serial_shutdown()
988 free_irq(ourport->rx_irq, ourport); in s3c24xx_serial_shutdown()
989 ourport->rx_claimed = 0; in s3c24xx_serial_shutdown()
995 free_irq(port->irq, ourport); in s3c24xx_serial_shutdown()
1001 if (ourport->dma) in s3c24xx_serial_shutdown()
1002 s3c24xx_serial_release_dma(ourport); in s3c24xx_serial_shutdown()
1004 ourport->tx_in_progress = 0; in s3c24xx_serial_shutdown()
1009 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_startup() local
1017 ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0, in s3c24xx_serial_startup()
1018 s3c24xx_serial_portname(port), ourport); in s3c24xx_serial_startup()
1021 dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq); in s3c24xx_serial_startup()
1025 ourport->rx_claimed = 1; in s3c24xx_serial_startup()
1031 ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0, in s3c24xx_serial_startup()
1032 s3c24xx_serial_portname(port), ourport); in s3c24xx_serial_startup()
1035 dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq); in s3c24xx_serial_startup()
1039 ourport->tx_claimed = 1; in s3c24xx_serial_startup()
1055 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c64xx_serial_startup() local
1064 if (ourport->dma) { in s3c64xx_serial_startup()
1065 ret = s3c24xx_serial_request_dma(ourport); in s3c64xx_serial_startup()
1067 devm_kfree(port->dev, ourport->dma); in s3c64xx_serial_startup()
1068 ourport->dma = NULL; in s3c64xx_serial_startup()
1073 s3c24xx_serial_portname(port), ourport); in s3c64xx_serial_startup()
1081 ourport->rx_claimed = 1; in s3c64xx_serial_startup()
1083 ourport->tx_claimed = 1; in s3c64xx_serial_startup()
1093 enable_rx_pio(ourport); in s3c64xx_serial_startup()
1109 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_pm() local
1112 ourport->pm_level = level; in s3c24xx_serial_pm()
1119 if (!IS_ERR(ourport->baudclk)) in s3c24xx_serial_pm()
1120 clk_disable_unprepare(ourport->baudclk); in s3c24xx_serial_pm()
1122 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_pm()
1126 clk_prepare_enable(ourport->clk); in s3c24xx_serial_pm()
1128 if (!IS_ERR(ourport->baudclk)) in s3c24xx_serial_pm()
1129 clk_prepare_enable(ourport->baudclk); in s3c24xx_serial_pm()
1183 static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_getclk() argument
1187 struct s3c24xx_uart_info *info = ourport->info; in s3c24xx_serial_getclk()
1194 clk_sel = (ourport->cfg->clk_sel) ? ourport->cfg->clk_sel : in s3c24xx_serial_getclk()
1195 ourport->info->def_clk_sel; in s3c24xx_serial_getclk()
1201 clk = clk_get(ourport->port.dev, clkname); in s3c24xx_serial_getclk()
1209 if (ourport->info->has_divslot) { in s3c24xx_serial_getclk()
1272 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_set_termios() local
1291 quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel); in s3c24xx_serial_set_termios()
1299 if (ourport->baudclk != clk) { in s3c24xx_serial_set_termios()
1304 if (!IS_ERR(ourport->baudclk)) { in s3c24xx_serial_set_termios()
1305 clk_disable_unprepare(ourport->baudclk); in s3c24xx_serial_set_termios()
1306 ourport->baudclk = ERR_PTR(-EINVAL); in s3c24xx_serial_set_termios()
1309 ourport->baudclk = clk; in s3c24xx_serial_set_termios()
1310 ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0; in s3c24xx_serial_set_termios()
1313 if (ourport->info->has_divslot) { in s3c24xx_serial_set_termios()
1314 unsigned int div = ourport->baudclk_rate / baud; in s3c24xx_serial_set_termios()
1378 if (ourport->info->has_divslot) in s3c24xx_serial_set_termios()
1699 static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_init_port() argument
1702 struct uart_port *port = &ourport->port; in s3c24xx_serial_init_port()
1703 struct s3c2410_uartcfg *cfg = ourport->cfg; in s3c24xx_serial_init_port()
1751 ourport->rx_irq = ret; in s3c24xx_serial_init_port()
1752 ourport->tx_irq = ret + 1; in s3c24xx_serial_init_port()
1757 ourport->tx_irq = ret; in s3c24xx_serial_init_port()
1764 ourport->dma = devm_kzalloc(port->dev, in s3c24xx_serial_init_port()
1765 sizeof(*ourport->dma), in s3c24xx_serial_init_port()
1767 if (!ourport->dma) { in s3c24xx_serial_init_port()
1773 ourport->clk = clk_get(&platdev->dev, "uart"); in s3c24xx_serial_init_port()
1774 if (IS_ERR(ourport->clk)) { in s3c24xx_serial_init_port()
1777 ret = PTR_ERR(ourport->clk); in s3c24xx_serial_init_port()
1781 ret = clk_prepare_enable(ourport->clk); in s3c24xx_serial_init_port()
1784 clk_put(ourport->clk); in s3c24xx_serial_init_port()
1797 ourport->rx_irq, ourport->tx_irq, port->uartclk); in s3c24xx_serial_init_port()
1831 struct s3c24xx_uart_port *ourport; in s3c24xx_serial_probe() local
1847 ourport = &s3c24xx_serial_ports[index]; in s3c24xx_serial_probe()
1849 ourport->drv_data = s3c24xx_get_driver_data(pdev); in s3c24xx_serial_probe()
1850 if (!ourport->drv_data) { in s3c24xx_serial_probe()
1855 ourport->baudclk = ERR_PTR(-EINVAL); in s3c24xx_serial_probe()
1856 ourport->info = ourport->drv_data->info; in s3c24xx_serial_probe()
1857 ourport->cfg = (dev_get_platdata(&pdev->dev)) ? in s3c24xx_serial_probe()
1859 ourport->drv_data->def_cfg; in s3c24xx_serial_probe()
1863 "samsung,uart-fifosize", &ourport->port.fifosize); in s3c24xx_serial_probe()
1865 if (ourport->drv_data->fifosize[index]) in s3c24xx_serial_probe()
1866 ourport->port.fifosize = ourport->drv_data->fifosize[index]; in s3c24xx_serial_probe()
1867 else if (ourport->info->fifosize) in s3c24xx_serial_probe()
1868 ourport->port.fifosize = ourport->info->fifosize; in s3c24xx_serial_probe()
1874 ourport->min_dma_size = max_t(int, ourport->port.fifosize, in s3c24xx_serial_probe()
1877 dbg("%s: initialising port %p...\n", __func__, ourport); in s3c24xx_serial_probe()
1879 ret = s3c24xx_serial_init_port(ourport, pdev); in s3c24xx_serial_probe()
1892 uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); in s3c24xx_serial_probe()
1893 platform_set_drvdata(pdev, &ourport->port); in s3c24xx_serial_probe()
1900 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_probe()
1902 ret = s3c24xx_serial_cpufreq_register(ourport); in s3c24xx_serial_probe()
1940 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_resume() local
1943 clk_prepare_enable(ourport->clk); in s3c24xx_serial_resume()
1945 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_resume()
1956 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_resume_noirq() local
1966 clk_prepare_enable(ourport->clk); in s3c24xx_serial_resume_noirq()
1968 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_resume_noirq()
2027 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_get_poll_char() local
2031 if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0) in s3c24xx_serial_get_poll_char()