Lines Matching refs:ourport

163 	struct s3c24xx_uart_port *ourport = to_ourport(port);  in s3c24xx_serial_stop_tx()  local
164 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_stop_tx()
176 disable_irq_nosync(ourport->tx_irq); in s3c24xx_serial_stop_tx()
178 if (dma && dma->tx_chan && ourport->tx_in_progress == S3C24XX_TX_DMA) { in s3c24xx_serial_stop_tx()
182 dma_sync_single_for_cpu(ourport->port.dev, in s3c24xx_serial_stop_tx()
191 ourport->tx_in_progress = 0; in s3c24xx_serial_stop_tx()
196 ourport->tx_mode = 0; in s3c24xx_serial_stop_tx()
199 static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport);
203 struct s3c24xx_uart_port *ourport = args; in s3c24xx_serial_tx_dma_complete() local
204 struct uart_port *port = &ourport->port; in s3c24xx_serial_tx_dma_complete()
206 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_tx_dma_complete()
216 dma_sync_single_for_cpu(ourport->port.dev, dma->tx_transfer_addr, in s3c24xx_serial_tx_dma_complete()
223 ourport->tx_in_progress = 0; in s3c24xx_serial_tx_dma_complete()
228 s3c24xx_serial_start_next_tx(ourport); in s3c24xx_serial_tx_dma_complete()
232 static void enable_tx_dma(struct s3c24xx_uart_port *ourport) in enable_tx_dma() argument
234 struct uart_port *port = &ourport->port; in enable_tx_dma()
242 disable_irq_nosync(ourport->tx_irq); in enable_tx_dma()
252 ourport->tx_mode = S3C24XX_TX_DMA; in enable_tx_dma()
255 static void enable_tx_pio(struct s3c24xx_uart_port *ourport) in enable_tx_pio() argument
257 struct uart_port *port = &ourport->port; in enable_tx_pio()
261 ourport->tx_in_progress = S3C24XX_TX_PIO; in enable_tx_pio()
276 enable_irq(ourport->tx_irq); in enable_tx_pio()
278 ourport->tx_mode = S3C24XX_TX_PIO; in enable_tx_pio()
281 static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport) in s3c24xx_serial_start_tx_pio() argument
283 if (ourport->tx_mode != S3C24XX_TX_PIO) in s3c24xx_serial_start_tx_pio()
284 enable_tx_pio(ourport); in s3c24xx_serial_start_tx_pio()
287 static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_start_tx_dma() argument
290 struct uart_port *port = &ourport->port; in s3c24xx_serial_start_tx_dma()
292 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_start_tx_dma()
295 if (ourport->tx_mode != S3C24XX_TX_DMA) in s3c24xx_serial_start_tx_dma()
296 enable_tx_dma(ourport); in s3c24xx_serial_start_tx_dma()
301 dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr, in s3c24xx_serial_start_tx_dma()
308 dev_err(ourport->port.dev, "Unable to get desc for Tx\n"); in s3c24xx_serial_start_tx_dma()
313 dma->tx_desc->callback_param = ourport; in s3c24xx_serial_start_tx_dma()
316 ourport->tx_in_progress = S3C24XX_TX_DMA; in s3c24xx_serial_start_tx_dma()
322 static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport) in s3c24xx_serial_start_next_tx() argument
324 struct uart_port *port = &ourport->port; in s3c24xx_serial_start_next_tx()
336 if (!ourport->dma || !ourport->dma->tx_chan || in s3c24xx_serial_start_next_tx()
337 count < ourport->min_dma_size || in s3c24xx_serial_start_next_tx()
339 s3c24xx_serial_start_tx_pio(ourport); in s3c24xx_serial_start_next_tx()
341 s3c24xx_serial_start_tx_dma(ourport, count); in s3c24xx_serial_start_next_tx()
346 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_start_tx() local
354 if (!ourport->dma || !ourport->dma->tx_chan) in s3c24xx_serial_start_tx()
355 s3c24xx_serial_start_tx_pio(ourport); in s3c24xx_serial_start_tx()
358 if (ourport->dma && ourport->dma->tx_chan) { in s3c24xx_serial_start_tx()
359 if (!uart_circ_empty(xmit) && !ourport->tx_in_progress) in s3c24xx_serial_start_tx()
360 s3c24xx_serial_start_next_tx(ourport); in s3c24xx_serial_start_tx()
364 static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport, in s3c24xx_uart_copy_rx_to_tty() argument
367 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_uart_copy_rx_to_tty()
373 dma_sync_single_for_cpu(ourport->port.dev, dma->rx_addr, in s3c24xx_uart_copy_rx_to_tty()
376 ourport->port.icount.rx += count; in s3c24xx_uart_copy_rx_to_tty()
378 dev_err(ourport->port.dev, "No tty port\n"); in s3c24xx_uart_copy_rx_to_tty()
382 ((unsigned char *)(ourport->dma->rx_buf)), count); in s3c24xx_uart_copy_rx_to_tty()
385 dev_err(ourport->port.dev, "RxData copy to tty layer failed\n"); in s3c24xx_uart_copy_rx_to_tty()
389 static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport,
392 static void uart_rx_drain_fifo(struct s3c24xx_uart_port *ourport) in uart_rx_drain_fifo() argument
394 struct uart_port *port = &ourport->port; in uart_rx_drain_fifo()
400 count = s3c24xx_serial_rx_fifocnt(ourport, ufstat); in uart_rx_drain_fifo()
408 ourport->port.icount.rx++; in uart_rx_drain_fifo()
417 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_stop_rx() local
418 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_stop_rx()
430 disable_irq_nosync(ourport->rx_irq); in s3c24xx_serial_stop_rx()
441 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_stop_rx()
455 struct s3c24xx_uart_port *ourport; in s3c24xx_port_to_cfg() local
460 ourport = container_of(port, struct s3c24xx_uart_port, port); in s3c24xx_port_to_cfg()
461 return ourport->cfg; in s3c24xx_port_to_cfg()
464 static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_rx_fifocnt() argument
467 struct s3c24xx_uart_info *info = ourport->info; in s3c24xx_serial_rx_fifocnt()
470 return ourport->port.fifosize; in s3c24xx_serial_rx_fifocnt()
475 static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport);
478 struct s3c24xx_uart_port *ourport = args; in s3c24xx_serial_rx_dma_complete() local
479 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_dma_complete()
481 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_rx_dma_complete()
483 struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port); in s3c24xx_serial_rx_dma_complete()
496 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_rx_dma_complete()
503 s3c64xx_start_rx_dma(ourport); in s3c24xx_serial_rx_dma_complete()
508 static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport) in s3c64xx_start_rx_dma() argument
510 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c64xx_start_rx_dma()
512 dma_sync_single_for_device(ourport->port.dev, dma->rx_addr, in s3c64xx_start_rx_dma()
519 dev_err(ourport->port.dev, "Unable to get desc for Rx\n"); in s3c64xx_start_rx_dma()
524 dma->rx_desc->callback_param = ourport; in s3c64xx_start_rx_dma()
534 static void enable_rx_dma(struct s3c24xx_uart_port *ourport) in enable_rx_dma() argument
536 struct uart_port *port = &ourport->port; in enable_rx_dma()
554 ourport->rx_mode = S3C24XX_RX_DMA; in enable_rx_dma()
557 static void enable_rx_pio(struct s3c24xx_uart_port *ourport) in enable_rx_pio() argument
559 struct uart_port *port = &ourport->port; in enable_rx_pio()
574 ourport->rx_mode = S3C24XX_RX_PIO; in enable_rx_pio()
580 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars_dma() local
581 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_chars_dma()
582 struct s3c24xx_uart_dma *dma = ourport->dma; in s3c24xx_serial_rx_chars_dma()
583 struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port); in s3c24xx_serial_rx_chars_dma()
594 s3c64xx_start_rx_dma(ourport); in s3c24xx_serial_rx_chars_dma()
595 if (ourport->rx_mode == S3C24XX_RX_PIO) in s3c24xx_serial_rx_chars_dma()
596 enable_rx_dma(ourport); in s3c24xx_serial_rx_chars_dma()
600 if (ourport->rx_mode == S3C24XX_RX_DMA) { in s3c24xx_serial_rx_chars_dma()
605 s3c24xx_uart_copy_rx_to_tty(ourport, t, received); in s3c24xx_serial_rx_chars_dma()
607 enable_rx_pio(ourport); in s3c24xx_serial_rx_chars_dma()
610 uart_rx_drain_fifo(ourport); in s3c24xx_serial_rx_chars_dma()
627 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars_pio() local
628 struct uart_port *port = &ourport->port; in s3c24xx_serial_rx_chars_pio()
639 if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0) in s3c24xx_serial_rx_chars_pio()
719 struct s3c24xx_uart_port *ourport = dev_id; in s3c24xx_serial_rx_chars() local
721 if (ourport->dma && ourport->dma->rx_chan) in s3c24xx_serial_rx_chars()
728 struct s3c24xx_uart_port *ourport = id; in s3c24xx_serial_tx_chars() local
729 struct uart_port *port = &ourport->port; in s3c24xx_serial_tx_chars()
738 if (ourport->dma && ourport->dma->tx_chan && in s3c24xx_serial_tx_chars()
739 count >= ourport->min_dma_size) { in s3c24xx_serial_tx_chars()
742 if (count-align >= ourport->min_dma_size) { in s3c24xx_serial_tx_chars()
772 if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull) in s3c24xx_serial_tx_chars()
782 s3c24xx_serial_start_tx_dma(ourport, dma_count); in s3c24xx_serial_tx_chars()
803 struct s3c24xx_uart_port *ourport = id; in s3c64xx_serial_handle_irq() local
804 struct uart_port *port = &ourport->port; in s3c64xx_serial_handle_irq()
967 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_shutdown() local
969 if (ourport->tx_claimed) { in s3c24xx_serial_shutdown()
971 free_irq(ourport->tx_irq, ourport); in s3c24xx_serial_shutdown()
973 ourport->tx_claimed = 0; in s3c24xx_serial_shutdown()
974 ourport->tx_mode = 0; in s3c24xx_serial_shutdown()
977 if (ourport->rx_claimed) { in s3c24xx_serial_shutdown()
979 free_irq(ourport->rx_irq, ourport); in s3c24xx_serial_shutdown()
980 ourport->rx_claimed = 0; in s3c24xx_serial_shutdown()
986 free_irq(port->irq, ourport); in s3c24xx_serial_shutdown()
992 if (ourport->dma) in s3c24xx_serial_shutdown()
993 s3c24xx_serial_release_dma(ourport); in s3c24xx_serial_shutdown()
995 ourport->tx_in_progress = 0; in s3c24xx_serial_shutdown()
1000 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_startup() local
1008 ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0, in s3c24xx_serial_startup()
1009 s3c24xx_serial_portname(port), ourport); in s3c24xx_serial_startup()
1012 dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq); in s3c24xx_serial_startup()
1016 ourport->rx_claimed = 1; in s3c24xx_serial_startup()
1022 ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0, in s3c24xx_serial_startup()
1023 s3c24xx_serial_portname(port), ourport); in s3c24xx_serial_startup()
1026 dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq); in s3c24xx_serial_startup()
1030 ourport->tx_claimed = 1; in s3c24xx_serial_startup()
1046 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c64xx_serial_startup() local
1055 if (ourport->dma) { in s3c64xx_serial_startup()
1056 ret = s3c24xx_serial_request_dma(ourport); in s3c64xx_serial_startup()
1064 s3c24xx_serial_portname(port), ourport); in s3c64xx_serial_startup()
1072 ourport->rx_claimed = 1; in s3c64xx_serial_startup()
1074 ourport->tx_claimed = 1; in s3c64xx_serial_startup()
1084 enable_rx_pio(ourport); in s3c64xx_serial_startup()
1100 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_pm() local
1103 ourport->pm_level = level; in s3c24xx_serial_pm()
1110 if (!IS_ERR(ourport->baudclk)) in s3c24xx_serial_pm()
1111 clk_disable_unprepare(ourport->baudclk); in s3c24xx_serial_pm()
1113 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_pm()
1117 clk_prepare_enable(ourport->clk); in s3c24xx_serial_pm()
1119 if (!IS_ERR(ourport->baudclk)) in s3c24xx_serial_pm()
1120 clk_prepare_enable(ourport->baudclk); in s3c24xx_serial_pm()
1174 static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_getclk() argument
1178 struct s3c24xx_uart_info *info = ourport->info; in s3c24xx_serial_getclk()
1185 clk_sel = (ourport->cfg->clk_sel) ? ourport->cfg->clk_sel : in s3c24xx_serial_getclk()
1186 ourport->info->def_clk_sel; in s3c24xx_serial_getclk()
1192 clk = clk_get(ourport->port.dev, clkname); in s3c24xx_serial_getclk()
1200 if (ourport->info->has_divslot) { in s3c24xx_serial_getclk()
1263 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_set_termios() local
1282 quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel); in s3c24xx_serial_set_termios()
1290 if (ourport->baudclk != clk) { in s3c24xx_serial_set_termios()
1293 if (!IS_ERR(ourport->baudclk)) { in s3c24xx_serial_set_termios()
1294 clk_disable_unprepare(ourport->baudclk); in s3c24xx_serial_set_termios()
1295 ourport->baudclk = ERR_PTR(-EINVAL); in s3c24xx_serial_set_termios()
1300 ourport->baudclk = clk; in s3c24xx_serial_set_termios()
1301 ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0; in s3c24xx_serial_set_termios()
1304 if (ourport->info->has_divslot) { in s3c24xx_serial_set_termios()
1305 unsigned int div = ourport->baudclk_rate / baud; in s3c24xx_serial_set_termios()
1369 if (ourport->info->has_divslot) in s3c24xx_serial_set_termios()
1690 static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, in s3c24xx_serial_init_port() argument
1693 struct uart_port *port = &ourport->port; in s3c24xx_serial_init_port()
1694 struct s3c2410_uartcfg *cfg = ourport->cfg; in s3c24xx_serial_init_port()
1742 ourport->rx_irq = ret; in s3c24xx_serial_init_port()
1743 ourport->tx_irq = ret + 1; in s3c24xx_serial_init_port()
1748 ourport->tx_irq = ret; in s3c24xx_serial_init_port()
1755 ourport->dma = devm_kzalloc(port->dev, in s3c24xx_serial_init_port()
1756 sizeof(*ourport->dma), in s3c24xx_serial_init_port()
1758 if (!ourport->dma) in s3c24xx_serial_init_port()
1762 ourport->clk = clk_get(&platdev->dev, "uart"); in s3c24xx_serial_init_port()
1763 if (IS_ERR(ourport->clk)) { in s3c24xx_serial_init_port()
1766 return PTR_ERR(ourport->clk); in s3c24xx_serial_init_port()
1769 ret = clk_prepare_enable(ourport->clk); in s3c24xx_serial_init_port()
1772 clk_put(ourport->clk); in s3c24xx_serial_init_port()
1785 ourport->rx_irq, ourport->tx_irq, port->uartclk); in s3c24xx_serial_init_port()
1814 struct s3c24xx_uart_port *ourport; in s3c24xx_serial_probe() local
1826 ourport = &s3c24xx_serial_ports[index]; in s3c24xx_serial_probe()
1828 ourport->drv_data = s3c24xx_get_driver_data(pdev); in s3c24xx_serial_probe()
1829 if (!ourport->drv_data) { in s3c24xx_serial_probe()
1834 ourport->baudclk = ERR_PTR(-EINVAL); in s3c24xx_serial_probe()
1835 ourport->info = ourport->drv_data->info; in s3c24xx_serial_probe()
1836 ourport->cfg = (dev_get_platdata(&pdev->dev)) ? in s3c24xx_serial_probe()
1838 ourport->drv_data->def_cfg; in s3c24xx_serial_probe()
1842 "samsung,uart-fifosize", &ourport->port.fifosize); in s3c24xx_serial_probe()
1844 if (ourport->drv_data->fifosize[index]) in s3c24xx_serial_probe()
1845 ourport->port.fifosize = ourport->drv_data->fifosize[index]; in s3c24xx_serial_probe()
1846 else if (ourport->info->fifosize) in s3c24xx_serial_probe()
1847 ourport->port.fifosize = ourport->info->fifosize; in s3c24xx_serial_probe()
1853 ourport->min_dma_size = max_t(int, ourport->port.fifosize, in s3c24xx_serial_probe()
1858 dbg("%s: initialising port %p...\n", __func__, ourport); in s3c24xx_serial_probe()
1860 ret = s3c24xx_serial_init_port(ourport, pdev); in s3c24xx_serial_probe()
1873 uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); in s3c24xx_serial_probe()
1874 platform_set_drvdata(pdev, &ourport->port); in s3c24xx_serial_probe()
1881 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_probe()
1883 ret = s3c24xx_serial_cpufreq_register(ourport); in s3c24xx_serial_probe()
1919 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_resume() local
1922 clk_prepare_enable(ourport->clk); in s3c24xx_serial_resume()
1924 clk_disable_unprepare(ourport->clk); in s3c24xx_serial_resume()
2003 struct s3c24xx_uart_port *ourport = to_ourport(port); in s3c24xx_serial_get_poll_char() local
2007 if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0) in s3c24xx_serial_get_poll_char()