Lines Matching defs:ourport
243 struct s3c24xx_uart_port *ourport = to_ourport(port);
261 ourport->rx_enabled = 1;
267 struct s3c24xx_uart_port *ourport = to_ourport(port);
277 ourport->rx_enabled = 0;
283 struct s3c24xx_uart_port *ourport = to_ourport(port);
284 struct s3c24xx_uart_dma *dma = ourport->dma;
289 if (!ourport->tx_enabled)
295 disable_irq_nosync(ourport->tx_irq);
297 if (dma && dma->tx_chan && ourport->tx_in_progress == S3C24XX_TX_DMA) {
301 dma_sync_single_for_cpu(ourport->port.dev,
309 ourport->tx_enabled = 0;
310 ourport->tx_in_progress = 0;
315 ourport->tx_mode = 0;
318 static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport);
322 struct s3c24xx_uart_port *ourport = args;
323 struct uart_port *port = &ourport->port;
325 struct s3c24xx_uart_dma *dma = ourport->dma;
334 dma_sync_single_for_cpu(ourport->port.dev, dma->tx_transfer_addr,
341 ourport->tx_in_progress = 0;
346 s3c24xx_serial_start_next_tx(ourport);
350 static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
352 struct uart_port *port = &ourport->port;
359 disable_irq_nosync(ourport->tx_irq);
368 ourport->tx_mode = S3C24XX_TX_DMA;
371 static void enable_tx_pio(struct s3c24xx_uart_port *ourport)
373 struct uart_port *port = &ourport->port;
377 ourport->tx_in_progress = S3C24XX_TX_PIO;
392 enable_irq(ourport->tx_irq);
394 ourport->tx_mode = S3C24XX_TX_PIO;
397 static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport)
399 if (ourport->tx_mode != S3C24XX_TX_PIO)
400 enable_tx_pio(ourport);
403 static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport,
406 struct uart_port *port = &ourport->port;
408 struct s3c24xx_uart_dma *dma = ourport->dma;
410 if (ourport->tx_mode != S3C24XX_TX_DMA)
411 enable_tx_dma(ourport);
416 dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr,
423 dev_err(ourport->port.dev, "Unable to get desc for Tx\n");
428 dma->tx_desc->callback_param = ourport;
431 ourport->tx_in_progress = S3C24XX_TX_DMA;
437 static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport)
439 struct uart_port *port = &ourport->port;
451 if (!ourport->dma || !ourport->dma->tx_chan ||
452 count < ourport->min_dma_size ||
454 s3c24xx_serial_start_tx_pio(ourport);
456 s3c24xx_serial_start_tx_dma(ourport, count);
461 struct s3c24xx_uart_port *ourport = to_ourport(port);
464 if (!ourport->tx_enabled) {
468 ourport->tx_enabled = 1;
469 if (!ourport->dma || !ourport->dma->tx_chan)
470 s3c24xx_serial_start_tx_pio(ourport);
473 if (ourport->dma && ourport->dma->tx_chan) {
474 if (!uart_circ_empty(xmit) && !ourport->tx_in_progress)
475 s3c24xx_serial_start_next_tx(ourport);
479 static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport,
482 struct s3c24xx_uart_dma *dma = ourport->dma;
488 dma_sync_single_for_cpu(ourport->port.dev, dma->rx_addr,
491 ourport->port.icount.rx += count;
493 dev_err(ourport->port.dev, "No tty port\n");
497 ((unsigned char *)(ourport->dma->rx_buf)), count);
500 dev_err(ourport->port.dev, "RxData copy to tty layer failed\n");
506 struct s3c24xx_uart_port *ourport = to_ourport(port);
507 struct s3c24xx_uart_dma *dma = ourport->dma;
513 if (ourport->rx_enabled) {
519 disable_irq_nosync(ourport->rx_irq);
520 ourport->rx_enabled = 0;
530 s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
544 struct s3c24xx_uart_port *ourport;
549 ourport = container_of(port, struct s3c24xx_uart_port, port);
550 return ourport->cfg;
553 static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport,
556 struct s3c24xx_uart_info *info = ourport->info;
559 return ourport->port.fifosize;
564 static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport);
567 struct s3c24xx_uart_port *ourport = args;
568 struct uart_port *port = &ourport->port;
570 struct s3c24xx_uart_dma *dma = ourport->dma;
572 struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
585 s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
592 s3c64xx_start_rx_dma(ourport);
597 static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport)
599 struct s3c24xx_uart_dma *dma = ourport->dma;
601 dma_sync_single_for_device(ourport->port.dev, dma->rx_addr,
608 dev_err(ourport->port.dev, "Unable to get desc for Rx\n");
613 dma->rx_desc->callback_param = ourport;
623 static void enable_rx_dma(struct s3c24xx_uart_port *ourport)
625 struct uart_port *port = &ourport->port;
643 ourport->rx_mode = S3C24XX_RX_DMA;
646 static void enable_rx_pio(struct s3c24xx_uart_port *ourport)
648 struct uart_port *port = &ourport->port;
663 ourport->rx_mode = S3C24XX_RX_PIO;
666 static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport);
671 struct s3c24xx_uart_port *ourport = dev_id;
672 struct uart_port *port = &ourport->port;
673 struct s3c24xx_uart_dma *dma = ourport->dma;
674 struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
685 s3c64xx_start_rx_dma(ourport);
686 if (ourport->rx_mode == S3C24XX_RX_PIO)
687 enable_rx_dma(ourport);
691 if (ourport->rx_mode == S3C24XX_RX_DMA) {
696 s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
698 enable_rx_pio(ourport);
701 s3c24xx_serial_rx_drain_fifo(ourport);
716 static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport)
718 struct uart_port *port = &ourport->port;
730 fifocnt = s3c24xx_serial_rx_fifocnt(ourport, ufstat);
742 if (ourport->rx_enabled) {
744 ourport->rx_enabled = 0;
752 ourport->rx_enabled = 1;
805 struct s3c24xx_uart_port *ourport = dev_id;
806 struct uart_port *port = &ourport->port;
810 s3c24xx_serial_rx_drain_fifo(ourport);
818 struct s3c24xx_uart_port *ourport = dev_id;
820 if (ourport->dma && ourport->dma->rx_chan)
827 struct s3c24xx_uart_port *ourport = id;
828 struct uart_port *port = &ourport->port;
837 if (ourport->dma && ourport->dma->tx_chan &&
838 count >= ourport->min_dma_size) {
841 if (count - align >= ourport->min_dma_size) {
871 if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull)
881 s3c24xx_serial_start_tx_dma(ourport, dma_count);
899 struct s3c24xx_uart_port *ourport = id;
900 struct uart_port *port = &ourport->port;
1094 struct s3c24xx_uart_port *ourport = to_ourport(port);
1096 if (ourport->tx_claimed) {
1098 free_irq(ourport->tx_irq, ourport);
1099 ourport->tx_enabled = 0;
1100 ourport->tx_claimed = 0;
1101 ourport->tx_mode = 0;
1104 if (ourport->rx_claimed) {
1106 free_irq(ourport->rx_irq, ourport);
1107 ourport->rx_claimed = 0;
1108 ourport->rx_enabled = 0;
1113 free_irq(port->irq, ourport);
1119 if (ourport->dma)
1120 s3c24xx_serial_release_dma(ourport);
1122 ourport->tx_in_progress = 0;
1127 struct s3c24xx_uart_port *ourport = to_ourport(port);
1130 ourport->rx_enabled = 1;
1132 ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,
1133 s3c24xx_serial_portname(port), ourport);
1136 dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq);
1140 ourport->rx_claimed = 1;
1144 ourport->tx_enabled = 1;
1146 ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,
1147 s3c24xx_serial_portname(port), ourport);
1150 dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq);
1154 ourport->tx_claimed = 1;
1169 struct s3c24xx_uart_port *ourport = to_ourport(port);
1175 if (ourport->dma) {
1176 ret = s3c24xx_serial_request_dma(ourport);
1178 devm_kfree(port->dev, ourport->dma);
1179 ourport->dma = NULL;
1184 s3c24xx_serial_portname(port), ourport);
1191 ourport->rx_enabled = 1;
1192 ourport->rx_claimed = 1;
1193 ourport->tx_enabled = 0;
1194 ourport->tx_claimed = 1;
1204 enable_rx_pio(ourport);
1219 struct s3c24xx_uart_port *ourport = to_ourport(port);
1222 ourport->pm_level = level;
1229 if (!IS_ERR(ourport->baudclk))
1230 clk_disable_unprepare(ourport->baudclk);
1232 clk_disable_unprepare(ourport->clk);
1236 clk_prepare_enable(ourport->clk);
1238 if (!IS_ERR(ourport->baudclk))
1239 clk_prepare_enable(ourport->baudclk);
1293 static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport,
1297 struct s3c24xx_uart_info *info = ourport->info;
1306 if (ourport->cfg->clk_sel &&
1307 !(ourport->cfg->clk_sel & (1 << cnt)))
1311 clk = clk_get(ourport->port.dev, clkname);
1317 dev_err(ourport->port.dev,
1323 if (ourport->info->has_divslot) {
1394 struct s3c24xx_uart_port *ourport = to_ourport(port);
1413 quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel);
1421 if (ourport->baudclk != clk) {
1426 if (!IS_ERR(ourport->baudclk)) {
1427 clk_disable_unprepare(ourport->baudclk);
1428 ourport->baudclk = ERR_PTR(-EINVAL);
1431 ourport->baudclk = clk;
1432 ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0;
1435 if (ourport->info->has_divslot) {
1436 unsigned int div = ourport->baudclk_rate / baud;
1505 if (ourport->info->has_divslot)
1821 static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport)
1823 struct device *dev = ourport->port.dev;
1824 struct s3c24xx_uart_info *info = ourport->info;
1831 clk_sel = ourport->cfg->clk_sel ? : info->def_clk_sel;
1847 ourport->baudclk = clk;
1848 ourport->baudclk_rate = clk_get_rate(clk);
1849 s3c24xx_serial_setsource(&ourport->port, clk_num);
1862 static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
1865 struct uart_port *port = &ourport->port;
1866 struct s3c2410_uartcfg *cfg = ourport->cfg;
1912 ourport->rx_irq = ret;
1913 ourport->tx_irq = ret + 1;
1919 ourport->tx_irq = ret;
1927 ourport->dma = devm_kzalloc(port->dev,
1928 sizeof(*ourport->dma),
1930 if (!ourport->dma) {
1936 ourport->clk = clk_get(&platdev->dev, "uart");
1937 if (IS_ERR(ourport->clk)) {
1940 ret = PTR_ERR(ourport->clk);
1944 ret = clk_prepare_enable(ourport->clk);
1947 clk_put(ourport->clk);
1951 ret = s3c24xx_serial_enable_baudclk(ourport);
1964 ourport->rx_irq, ourport->tx_irq, port->uartclk);
2002 struct s3c24xx_uart_port *ourport;
2016 ourport = &s3c24xx_serial_ports[index];
2018 ourport->drv_data = s3c24xx_get_driver_data(pdev);
2019 if (!ourport->drv_data) {
2024 ourport->baudclk = ERR_PTR(-EINVAL);
2025 ourport->info = ourport->drv_data->info;
2026 ourport->cfg = (dev_get_platdata(&pdev->dev)) ?
2028 ourport->drv_data->def_cfg;
2032 "samsung,uart-fifosize", &ourport->port.fifosize);
2037 ourport->port.iotype = UPIO_MEM;
2040 ourport->port.iotype = UPIO_MEM32;
2051 if (ourport->drv_data->fifosize[index])
2052 ourport->port.fifosize = ourport->drv_data->fifosize[index];
2053 else if (ourport->info->fifosize)
2054 ourport->port.fifosize = ourport->info->fifosize;
2055 ourport->port.has_sysrq = IS_ENABLED(CONFIG_SERIAL_SAMSUNG_CONSOLE);
2061 ourport->min_dma_size = max_t(int, ourport->port.fifosize,
2064 dev_dbg(&pdev->dev, "%s: initialising port %p...\n", __func__, ourport);
2066 ret = s3c24xx_serial_init_port(ourport, pdev);
2079 uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
2080 platform_set_drvdata(pdev, &ourport->port);
2087 clk_disable_unprepare(ourport->clk);
2088 if (!IS_ERR(ourport->baudclk))
2089 clk_disable_unprepare(ourport->baudclk);
2091 ret = s3c24xx_serial_cpufreq_register(ourport);
2129 struct s3c24xx_uart_port *ourport = to_ourport(port);
2132 clk_prepare_enable(ourport->clk);
2133 if (!IS_ERR(ourport->baudclk))
2134 clk_prepare_enable(ourport->baudclk);
2136 if (!IS_ERR(ourport->baudclk))
2137 clk_disable_unprepare(ourport->baudclk);
2138 clk_disable_unprepare(ourport->clk);
2149 struct s3c24xx_uart_port *ourport = to_ourport(port);
2156 if (ourport->tx_enabled)
2158 if (ourport->rx_enabled)
2160 clk_prepare_enable(ourport->clk);
2161 if (!IS_ERR(ourport->baudclk))
2162 clk_prepare_enable(ourport->baudclk);
2164 if (!IS_ERR(ourport->baudclk))
2165 clk_disable_unprepare(ourport->baudclk);
2166 clk_disable_unprepare(ourport->clk);
2225 struct s3c24xx_uart_port *ourport = to_ourport(port);
2229 if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0)