Lines Matching refs:port
37 struct uart_port port; member
47 static void timbuart_mctrl_check(struct uart_port *port, u32 isr, u32 *ier);
51 static void timbuart_stop_rx(struct uart_port *port) in timbuart_stop_rx() argument
54 u32 ier = ioread32(port->membase + TIMBUART_IER) & ~RXFLAGS; in timbuart_stop_rx()
55 iowrite32(ier, port->membase + TIMBUART_IER); in timbuart_stop_rx()
58 static void timbuart_stop_tx(struct uart_port *port) in timbuart_stop_tx() argument
61 u32 ier = ioread32(port->membase + TIMBUART_IER) & ~TXBAE; in timbuart_stop_tx()
62 iowrite32(ier, port->membase + TIMBUART_IER); in timbuart_stop_tx()
65 static void timbuart_start_tx(struct uart_port *port) in timbuart_start_tx() argument
68 container_of(port, struct timbuart_port, port); in timbuart_start_tx()
74 static unsigned int timbuart_tx_empty(struct uart_port *port) in timbuart_tx_empty() argument
76 u32 isr = ioread32(port->membase + TIMBUART_ISR); in timbuart_tx_empty()
81 static void timbuart_flush_buffer(struct uart_port *port) in timbuart_flush_buffer() argument
83 if (!timbuart_tx_empty(port)) { in timbuart_flush_buffer()
84 u8 ctl = ioread8(port->membase + TIMBUART_CTRL) | in timbuart_flush_buffer()
87 iowrite8(ctl, port->membase + TIMBUART_CTRL); in timbuart_flush_buffer()
88 iowrite32(TXBF, port->membase + TIMBUART_ISR); in timbuart_flush_buffer()
92 static void timbuart_rx_chars(struct uart_port *port) in timbuart_rx_chars() argument
94 struct tty_port *tport = &port->state->port; in timbuart_rx_chars()
96 while (ioread32(port->membase + TIMBUART_ISR) & RXDP) { in timbuart_rx_chars()
97 u8 ch = ioread8(port->membase + TIMBUART_RXFIFO); in timbuart_rx_chars()
98 port->icount.rx++; in timbuart_rx_chars()
102 spin_unlock(&port->lock); in timbuart_rx_chars()
104 spin_lock(&port->lock); in timbuart_rx_chars()
106 dev_dbg(port->dev, "%s - total read %d bytes\n", in timbuart_rx_chars()
107 __func__, port->icount.rx); in timbuart_rx_chars()
110 static void timbuart_tx_chars(struct uart_port *port) in timbuart_tx_chars() argument
112 struct circ_buf *xmit = &port->state->xmit; in timbuart_tx_chars()
114 while (!(ioread32(port->membase + TIMBUART_ISR) & TXBF) && in timbuart_tx_chars()
117 port->membase + TIMBUART_TXFIFO); in timbuart_tx_chars()
119 port->icount.tx++; in timbuart_tx_chars()
122 dev_dbg(port->dev, in timbuart_tx_chars()
125 port->icount.tx, in timbuart_tx_chars()
126 ioread8(port->membase + TIMBUART_CTRL), in timbuart_tx_chars()
127 port->mctrl & TIOCM_RTS, in timbuart_tx_chars()
128 ioread8(port->membase + TIMBUART_BAUDRATE)); in timbuart_tx_chars()
131 static void timbuart_handle_tx_port(struct uart_port *port, u32 isr, u32 *ier) in timbuart_handle_tx_port() argument
134 container_of(port, struct timbuart_port, port); in timbuart_handle_tx_port()
135 struct circ_buf *xmit = &port->state->xmit; in timbuart_handle_tx_port()
137 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) in timbuart_handle_tx_port()
140 if (port->x_char) in timbuart_handle_tx_port()
144 timbuart_tx_chars(port); in timbuart_handle_tx_port()
146 iowrite32(TXFLAGS, port->membase + TIMBUART_ISR); in timbuart_handle_tx_port()
149 uart_write_wakeup(port); in timbuart_handle_tx_port()
162 dev_dbg(port->dev, "%s - leaving\n", __func__); in timbuart_handle_tx_port()
165 static void timbuart_handle_rx_port(struct uart_port *port, u32 isr, u32 *ier) in timbuart_handle_rx_port() argument
170 u8 ctl = ioread8(port->membase + TIMBUART_CTRL) | in timbuart_handle_rx_port()
172 iowrite8(ctl, port->membase + TIMBUART_CTRL); in timbuart_handle_rx_port()
173 port->icount.overrun++; in timbuart_handle_rx_port()
175 timbuart_rx_chars(port); in timbuart_handle_rx_port()
178 iowrite32(RXFLAGS, port->membase + TIMBUART_ISR); in timbuart_handle_rx_port()
184 dev_dbg(port->dev, "%s - leaving\n", __func__); in timbuart_handle_rx_port()
192 spin_lock(&uart->port.lock); in timbuart_tasklet()
194 isr = ioread32(uart->port.membase + TIMBUART_ISR); in timbuart_tasklet()
195 dev_dbg(uart->port.dev, "%s ISR: %x\n", __func__, isr); in timbuart_tasklet()
198 timbuart_handle_tx_port(&uart->port, isr, &ier); in timbuart_tasklet()
200 timbuart_mctrl_check(&uart->port, isr, &ier); in timbuart_tasklet()
203 timbuart_handle_rx_port(&uart->port, isr, &ier); in timbuart_tasklet()
205 iowrite32(ier, uart->port.membase + TIMBUART_IER); in timbuart_tasklet()
207 spin_unlock(&uart->port.lock); in timbuart_tasklet()
208 dev_dbg(uart->port.dev, "%s leaving\n", __func__); in timbuart_tasklet()
211 static unsigned int timbuart_get_mctrl(struct uart_port *port) in timbuart_get_mctrl() argument
213 u8 cts = ioread8(port->membase + TIMBUART_CTRL); in timbuart_get_mctrl()
214 dev_dbg(port->dev, "%s - cts %x\n", __func__, cts); in timbuart_get_mctrl()
222 static void timbuart_set_mctrl(struct uart_port *port, unsigned int mctrl) in timbuart_set_mctrl() argument
224 dev_dbg(port->dev, "%s - %x\n", __func__, mctrl); in timbuart_set_mctrl()
227 iowrite8(TIMBUART_CTRL_RTS, port->membase + TIMBUART_CTRL); in timbuart_set_mctrl()
229 iowrite8(0, port->membase + TIMBUART_CTRL); in timbuart_set_mctrl()
232 static void timbuart_mctrl_check(struct uart_port *port, u32 isr, u32 *ier) in timbuart_mctrl_check() argument
238 iowrite32(CTS_DELTA, port->membase + TIMBUART_ISR); in timbuart_mctrl_check()
239 cts = timbuart_get_mctrl(port); in timbuart_mctrl_check()
240 uart_handle_cts_change(port, cts & TIOCM_CTS); in timbuart_mctrl_check()
241 wake_up_interruptible(&port->state->port.delta_msr_wait); in timbuart_mctrl_check()
247 static void timbuart_break_ctl(struct uart_port *port, int ctl) in timbuart_break_ctl() argument
252 static int timbuart_startup(struct uart_port *port) in timbuart_startup() argument
255 container_of(port, struct timbuart_port, port); in timbuart_startup()
257 dev_dbg(port->dev, "%s\n", __func__); in timbuart_startup()
259 iowrite8(TIMBUART_CTRL_FLSHRX, port->membase + TIMBUART_CTRL); in timbuart_startup()
260 iowrite32(0x1ff, port->membase + TIMBUART_ISR); in timbuart_startup()
263 port->membase + TIMBUART_IER); in timbuart_startup()
265 return request_irq(port->irq, timbuart_handleinterrupt, IRQF_SHARED, in timbuart_startup()
269 static void timbuart_shutdown(struct uart_port *port) in timbuart_shutdown() argument
272 container_of(port, struct timbuart_port, port); in timbuart_shutdown()
273 dev_dbg(port->dev, "%s\n", __func__); in timbuart_shutdown()
274 free_irq(port->irq, uart); in timbuart_shutdown()
275 iowrite32(0, port->membase + TIMBUART_IER); in timbuart_shutdown()
277 timbuart_flush_buffer(port); in timbuart_shutdown()
291 static void timbuart_set_termios(struct uart_port *port, in timbuart_set_termios() argument
299 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); in timbuart_set_termios()
301 dev_dbg(port->dev, "%s - bindex %d\n", __func__, bindex); in timbuart_set_termios()
313 spin_lock_irqsave(&port->lock, flags); in timbuart_set_termios()
314 iowrite8((u8)bindex, port->membase + TIMBUART_BAUDRATE); in timbuart_set_termios()
315 uart_update_timeout(port, termios->c_cflag, baud); in timbuart_set_termios()
316 spin_unlock_irqrestore(&port->lock, flags); in timbuart_set_termios()
319 static const char *timbuart_type(struct uart_port *port) in timbuart_type() argument
321 return port->type == PORT_UNKNOWN ? "timbuart" : NULL; in timbuart_type()
327 static void timbuart_release_port(struct uart_port *port) in timbuart_release_port() argument
329 struct platform_device *pdev = to_platform_device(port->dev); in timbuart_release_port()
333 if (port->flags & UPF_IOREMAP) { in timbuart_release_port()
334 iounmap(port->membase); in timbuart_release_port()
335 port->membase = NULL; in timbuart_release_port()
338 release_mem_region(port->mapbase, size); in timbuart_release_port()
341 static int timbuart_request_port(struct uart_port *port) in timbuart_request_port() argument
343 struct platform_device *pdev = to_platform_device(port->dev); in timbuart_request_port()
347 if (!request_mem_region(port->mapbase, size, "timb-uart")) in timbuart_request_port()
350 if (port->flags & UPF_IOREMAP) { in timbuart_request_port()
351 port->membase = ioremap(port->mapbase, size); in timbuart_request_port()
352 if (port->membase == NULL) { in timbuart_request_port()
353 release_mem_region(port->mapbase, size); in timbuart_request_port()
365 if (ioread8(uart->port.membase + TIMBUART_IPR)) { in timbuart_handleinterrupt()
366 uart->last_ier = ioread32(uart->port.membase + TIMBUART_IER); in timbuart_handleinterrupt()
369 iowrite32(0, uart->port.membase + TIMBUART_IER); in timbuart_handleinterrupt()
382 static void timbuart_config_port(struct uart_port *port, int flags) in timbuart_config_port() argument
385 port->type = PORT_TIMBUART; in timbuart_config_port()
386 timbuart_request_port(port); in timbuart_config_port()
390 static int timbuart_verify_port(struct uart_port *port, in timbuart_verify_port() argument
441 uart->port.uartclk = 3250000 * 16; in timbuart_probe()
442 uart->port.fifosize = TIMBUART_FIFO_SIZE; in timbuart_probe()
443 uart->port.regshift = 2; in timbuart_probe()
444 uart->port.iotype = UPIO_MEM; in timbuart_probe()
445 uart->port.ops = &timbuart_ops; in timbuart_probe()
446 uart->port.irq = 0; in timbuart_probe()
447 uart->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP; in timbuart_probe()
448 uart->port.line = 0; in timbuart_probe()
449 uart->port.dev = &dev->dev; in timbuart_probe()
456 uart->port.mapbase = iomem->start; in timbuart_probe()
457 uart->port.membase = NULL; in timbuart_probe()
464 uart->port.irq = irq; in timbuart_probe()
472 err = uart_add_one_port(&timbuart_driver, &uart->port); in timbuart_probe()
496 uart_remove_one_port(&timbuart_driver, &uart->port); in timbuart_remove()