Lines Matching full:port
117 struct uart_port port; member
121 #define to_rda_uart_port(port) container_of(port, struct rda_uart_port, port) argument
125 static inline void rda_uart_write(struct uart_port *port, u32 val, in rda_uart_write() argument
128 writel(val, port->membase + off); in rda_uart_write()
131 static inline u32 rda_uart_read(struct uart_port *port, unsigned int off) in rda_uart_read() argument
133 return readl(port->membase + off); in rda_uart_read()
136 static unsigned int rda_uart_tx_empty(struct uart_port *port) in rda_uart_tx_empty() argument
142 spin_lock_irqsave(&port->lock, flags); in rda_uart_tx_empty()
144 val = rda_uart_read(port, RDA_UART_STATUS); in rda_uart_tx_empty()
147 spin_unlock_irqrestore(&port->lock, flags); in rda_uart_tx_empty()
152 static unsigned int rda_uart_get_mctrl(struct uart_port *port) in rda_uart_get_mctrl() argument
157 cmd_set = rda_uart_read(port, RDA_UART_CMD_SET); in rda_uart_get_mctrl()
158 status = rda_uart_read(port, RDA_UART_STATUS); in rda_uart_get_mctrl()
167 static void rda_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) in rda_uart_set_mctrl() argument
172 val = rda_uart_read(port, RDA_UART_CMD_SET); in rda_uart_set_mctrl()
173 rda_uart_write(port, (val | RDA_UART_RTS), RDA_UART_CMD_SET); in rda_uart_set_mctrl()
176 val = rda_uart_read(port, RDA_UART_CMD_CLR); in rda_uart_set_mctrl()
177 rda_uart_write(port, (val | RDA_UART_RTS), RDA_UART_CMD_CLR); in rda_uart_set_mctrl()
180 val = rda_uart_read(port, RDA_UART_CTRL); in rda_uart_set_mctrl()
187 rda_uart_write(port, val, RDA_UART_CTRL); in rda_uart_set_mctrl()
190 static void rda_uart_stop_tx(struct uart_port *port) in rda_uart_stop_tx() argument
194 val = rda_uart_read(port, RDA_UART_IRQ_MASK); in rda_uart_stop_tx()
196 rda_uart_write(port, val, RDA_UART_IRQ_MASK); in rda_uart_stop_tx()
198 val = rda_uart_read(port, RDA_UART_CMD_SET); in rda_uart_stop_tx()
200 rda_uart_write(port, val, RDA_UART_CMD_SET); in rda_uart_stop_tx()
203 static void rda_uart_stop_rx(struct uart_port *port) in rda_uart_stop_rx() argument
207 val = rda_uart_read(port, RDA_UART_IRQ_MASK); in rda_uart_stop_rx()
209 rda_uart_write(port, val, RDA_UART_IRQ_MASK); in rda_uart_stop_rx()
212 val = rda_uart_read(port, RDA_UART_RXTX_BUFFER); in rda_uart_stop_rx()
214 val = rda_uart_read(port, RDA_UART_CMD_SET); in rda_uart_stop_rx()
216 rda_uart_write(port, val, RDA_UART_CMD_SET); in rda_uart_stop_rx()
219 static void rda_uart_start_tx(struct uart_port *port) in rda_uart_start_tx() argument
223 if (uart_tx_stopped(port)) { in rda_uart_start_tx()
224 rda_uart_stop_tx(port); in rda_uart_start_tx()
228 val = rda_uart_read(port, RDA_UART_IRQ_MASK); in rda_uart_start_tx()
230 rda_uart_write(port, val, RDA_UART_IRQ_MASK); in rda_uart_start_tx()
239 static void rda_uart_set_termios(struct uart_port *port, in rda_uart_set_termios() argument
243 struct rda_uart_port *rda_port = to_rda_uart_port(port); in rda_uart_set_termios()
249 spin_lock_irqsave(&port->lock, flags); in rda_uart_set_termios()
251 baud = uart_get_baud_rate(port, termios, old, 9600, port->uartclk / 4); in rda_uart_set_termios()
254 ctrl = rda_uart_read(port, RDA_UART_CTRL); in rda_uart_set_termios()
255 cmd_set = rda_uart_read(port, RDA_UART_CMD_SET); in rda_uart_set_termios()
256 cmd_clr = rda_uart_read(port, RDA_UART_CMD_CLR); in rda_uart_set_termios()
261 dev_warn(port->dev, "bit size not supported, using 7 bits\n"); in rda_uart_set_termios()
311 irq_mask = rda_uart_read(port, RDA_UART_IRQ_MASK); in rda_uart_set_termios()
312 rda_uart_write(port, 0, RDA_UART_IRQ_MASK); in rda_uart_set_termios()
314 rda_uart_write(port, triggers, RDA_UART_IRQ_TRIGGERS); in rda_uart_set_termios()
315 rda_uart_write(port, ctrl, RDA_UART_CTRL); in rda_uart_set_termios()
316 rda_uart_write(port, cmd_set, RDA_UART_CMD_SET); in rda_uart_set_termios()
317 rda_uart_write(port, cmd_clr, RDA_UART_CMD_CLR); in rda_uart_set_termios()
319 rda_uart_write(port, irq_mask, RDA_UART_IRQ_MASK); in rda_uart_set_termios()
325 /* update the per-port timeout */ in rda_uart_set_termios()
326 uart_update_timeout(port, termios->c_cflag, baud); in rda_uart_set_termios()
328 spin_unlock_irqrestore(&port->lock, flags); in rda_uart_set_termios()
331 static void rda_uart_send_chars(struct uart_port *port) in rda_uart_send_chars() argument
333 struct circ_buf *xmit = &port->state->xmit; in rda_uart_send_chars()
337 if (uart_tx_stopped(port)) in rda_uart_send_chars()
340 if (port->x_char) { in rda_uart_send_chars()
341 while (!(rda_uart_read(port, RDA_UART_STATUS) & in rda_uart_send_chars()
345 rda_uart_write(port, port->x_char, RDA_UART_RXTX_BUFFER); in rda_uart_send_chars()
346 port->icount.tx++; in rda_uart_send_chars()
347 port->x_char = 0; in rda_uart_send_chars()
350 while (rda_uart_read(port, RDA_UART_STATUS) & RDA_UART_TX_FIFO_MASK) { in rda_uart_send_chars()
355 rda_uart_write(port, ch, RDA_UART_RXTX_BUFFER); in rda_uart_send_chars()
357 port->icount.tx++; in rda_uart_send_chars()
361 uart_write_wakeup(port); in rda_uart_send_chars()
365 val = rda_uart_read(port, RDA_UART_IRQ_MASK); in rda_uart_send_chars()
367 rda_uart_write(port, val, RDA_UART_IRQ_MASK); in rda_uart_send_chars()
371 static void rda_uart_receive_chars(struct uart_port *port) in rda_uart_receive_chars() argument
375 status = rda_uart_read(port, RDA_UART_STATUS); in rda_uart_receive_chars()
380 port->icount.parity++; in rda_uart_receive_chars()
385 port->icount.frame++; in rda_uart_receive_chars()
390 port->icount.overrun++; in rda_uart_receive_chars()
394 val = rda_uart_read(port, RDA_UART_RXTX_BUFFER); in rda_uart_receive_chars()
397 port->icount.rx++; in rda_uart_receive_chars()
398 tty_insert_flip_char(&port->state->port, val, flag); in rda_uart_receive_chars()
400 status = rda_uart_read(port, RDA_UART_STATUS); in rda_uart_receive_chars()
403 spin_unlock(&port->lock); in rda_uart_receive_chars()
404 tty_flip_buffer_push(&port->state->port); in rda_uart_receive_chars()
405 spin_lock(&port->lock); in rda_uart_receive_chars()
410 struct uart_port *port = dev_id; in rda_interrupt() local
414 spin_lock_irqsave(&port->lock, flags); in rda_interrupt()
417 val = rda_uart_read(port, RDA_UART_IRQ_CAUSE); in rda_interrupt()
418 rda_uart_write(port, val, RDA_UART_IRQ_CAUSE); in rda_interrupt()
421 rda_uart_receive_chars(port); in rda_interrupt()
424 irq_mask = rda_uart_read(port, RDA_UART_IRQ_MASK); in rda_interrupt()
426 rda_uart_write(port, irq_mask, RDA_UART_IRQ_MASK); in rda_interrupt()
428 rda_uart_send_chars(port); in rda_interrupt()
431 spin_unlock_irqrestore(&port->lock, flags); in rda_interrupt()
436 static int rda_uart_startup(struct uart_port *port) in rda_uart_startup() argument
442 spin_lock_irqsave(&port->lock, flags); in rda_uart_startup()
443 rda_uart_write(port, 0, RDA_UART_IRQ_MASK); in rda_uart_startup()
444 spin_unlock_irqrestore(&port->lock, flags); in rda_uart_startup()
446 ret = request_irq(port->irq, rda_interrupt, IRQF_NO_SUSPEND, in rda_uart_startup()
447 "rda-uart", port); in rda_uart_startup()
451 spin_lock_irqsave(&port->lock, flags); in rda_uart_startup()
453 val = rda_uart_read(port, RDA_UART_CTRL); in rda_uart_startup()
455 rda_uart_write(port, val, RDA_UART_CTRL); in rda_uart_startup()
458 val = rda_uart_read(port, RDA_UART_IRQ_MASK); in rda_uart_startup()
460 rda_uart_write(port, val, RDA_UART_IRQ_MASK); in rda_uart_startup()
462 spin_unlock_irqrestore(&port->lock, flags); in rda_uart_startup()
467 static void rda_uart_shutdown(struct uart_port *port) in rda_uart_shutdown() argument
472 spin_lock_irqsave(&port->lock, flags); in rda_uart_shutdown()
474 rda_uart_stop_tx(port); in rda_uart_shutdown()
475 rda_uart_stop_rx(port); in rda_uart_shutdown()
477 val = rda_uart_read(port, RDA_UART_CTRL); in rda_uart_shutdown()
479 rda_uart_write(port, val, RDA_UART_CTRL); in rda_uart_shutdown()
481 spin_unlock_irqrestore(&port->lock, flags); in rda_uart_shutdown()
484 static const char *rda_uart_type(struct uart_port *port) in rda_uart_type() argument
486 return (port->type == PORT_RDA) ? "rda-uart" : NULL; in rda_uart_type()
489 static int rda_uart_request_port(struct uart_port *port) in rda_uart_request_port() argument
491 struct platform_device *pdev = to_platform_device(port->dev); in rda_uart_request_port()
498 if (!devm_request_mem_region(port->dev, port->mapbase, in rda_uart_request_port()
499 resource_size(res), dev_name(port->dev))) in rda_uart_request_port()
502 if (port->flags & UPF_IOREMAP) { in rda_uart_request_port()
503 port->membase = devm_ioremap(port->dev, port->mapbase, in rda_uart_request_port()
505 if (!port->membase) in rda_uart_request_port()
512 static void rda_uart_config_port(struct uart_port *port, int flags) in rda_uart_config_port() argument
517 port->type = PORT_RDA; in rda_uart_config_port()
518 rda_uart_request_port(port); in rda_uart_config_port()
521 spin_lock_irqsave(&port->lock, irq_flags); in rda_uart_config_port()
524 rda_uart_write(port, 0, RDA_UART_IRQ_MASK); in rda_uart_config_port()
527 rda_uart_write(port, 0, RDA_UART_STATUS); in rda_uart_config_port()
529 spin_unlock_irqrestore(&port->lock, irq_flags); in rda_uart_config_port()
532 static void rda_uart_release_port(struct uart_port *port) in rda_uart_release_port() argument
534 struct platform_device *pdev = to_platform_device(port->dev); in rda_uart_release_port()
541 if (port->flags & UPF_IOREMAP) { in rda_uart_release_port()
542 devm_release_mem_region(port->dev, port->mapbase, in rda_uart_release_port()
544 devm_iounmap(port->dev, port->membase); in rda_uart_release_port()
545 port->membase = NULL; in rda_uart_release_port()
549 static int rda_uart_verify_port(struct uart_port *port, in rda_uart_verify_port() argument
552 if (port->type != PORT_RDA) in rda_uart_verify_port()
555 if (port->irq != ser->irq) in rda_uart_verify_port()
580 static void rda_console_putchar(struct uart_port *port, int ch) in rda_console_putchar() argument
582 if (!port->membase) in rda_console_putchar()
585 while (!(rda_uart_read(port, RDA_UART_STATUS) & RDA_UART_TX_FIFO_MASK)) in rda_console_putchar()
588 rda_uart_write(port, ch, RDA_UART_RXTX_BUFFER); in rda_console_putchar()
591 static void rda_uart_port_write(struct uart_port *port, const char *s, in rda_uart_port_write() argument
600 if (port->sysrq) { in rda_uart_port_write()
603 locked = spin_trylock(&port->lock); in rda_uart_port_write()
605 spin_lock(&port->lock); in rda_uart_port_write()
609 old_irq_mask = rda_uart_read(port, RDA_UART_IRQ_MASK); in rda_uart_port_write()
610 rda_uart_write(port, 0, RDA_UART_IRQ_MASK); in rda_uart_port_write()
612 uart_console_write(port, s, count, rda_console_putchar); in rda_uart_port_write()
615 while (!(rda_uart_read(port, RDA_UART_STATUS) & RDA_UART_TX_FIFO_MASK)) in rda_uart_port_write()
618 rda_uart_write(port, old_irq_mask, RDA_UART_IRQ_MASK); in rda_uart_port_write()
621 spin_unlock(&port->lock); in rda_uart_port_write()
635 rda_uart_port_write(&rda_port->port, s, count); in rda_uart_console_write()
650 if (!rda_port || !rda_port->port.membase) in rda_uart_console_setup()
656 return uart_set_options(&rda_port->port, co, baud, parity, bits, flow); in rda_uart_console_setup()
683 rda_uart_port_write(&dev->port, s, count); in rda_uart_early_console_write()
689 if (!device->port.membase) in rda_uart_early_console_setup()
744 dev_err(&pdev->dev, "port %d already allocated\n", pdev->id); in rda_uart_probe()
758 rda_port->port.dev = &pdev->dev; in rda_uart_probe()
759 rda_port->port.regshift = 0; in rda_uart_probe()
760 rda_port->port.line = pdev->id; in rda_uart_probe()
761 rda_port->port.type = PORT_RDA; in rda_uart_probe()
762 rda_port->port.iotype = UPIO_MEM; in rda_uart_probe()
763 rda_port->port.mapbase = res_mem->start; in rda_uart_probe()
764 rda_port->port.irq = irq; in rda_uart_probe()
765 rda_port->port.uartclk = clk_get_rate(rda_port->clk); in rda_uart_probe()
766 if (rda_port->port.uartclk == 0) { in rda_uart_probe()
770 rda_port->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP | in rda_uart_probe()
772 rda_port->port.x_char = 0; in rda_uart_probe()
773 rda_port->port.fifosize = RDA_UART_TX_FIFO_SIZE; in rda_uart_probe()
774 rda_port->port.ops = &rda_uart_ops; in rda_uart_probe()
779 ret = uart_add_one_port(&rda_uart_driver, &rda_port->port); in rda_uart_probe()
790 uart_remove_one_port(&rda_uart_driver, &rda_port->port); in rda_uart_remove()