Lines Matching refs:port

25 	struct uart_port	port;
35 static void timbuart_mctrl_check(struct uart_port *port, u32 isr, u32 *ier);
39 static void timbuart_stop_rx(struct uart_port *port)
42 u32 ier = ioread32(port->membase + TIMBUART_IER) & ~RXFLAGS;
43 iowrite32(ier, port->membase + TIMBUART_IER);
46 static void timbuart_stop_tx(struct uart_port *port)
49 u32 ier = ioread32(port->membase + TIMBUART_IER) & ~TXBAE;
50 iowrite32(ier, port->membase + TIMBUART_IER);
53 static void timbuart_start_tx(struct uart_port *port)
56 container_of(port, struct timbuart_port, port);
62 static unsigned int timbuart_tx_empty(struct uart_port *port)
64 u32 isr = ioread32(port->membase + TIMBUART_ISR);
69 static void timbuart_flush_buffer(struct uart_port *port)
71 if (!timbuart_tx_empty(port)) {
72 u8 ctl = ioread8(port->membase + TIMBUART_CTRL) |
75 iowrite8(ctl, port->membase + TIMBUART_CTRL);
76 iowrite32(TXBF, port->membase + TIMBUART_ISR);
80 static void timbuart_rx_chars(struct uart_port *port)
82 struct tty_port *tport = &port->state->port;
84 while (ioread32(port->membase + TIMBUART_ISR) & RXDP) {
85 u8 ch = ioread8(port->membase + TIMBUART_RXFIFO);
86 port->icount.rx++;
90 spin_unlock(&port->lock);
92 spin_lock(&port->lock);
94 dev_dbg(port->dev, "%s - total read %d bytes\n",
95 __func__, port->icount.rx);
98 static void timbuart_tx_chars(struct uart_port *port)
100 struct circ_buf *xmit = &port->state->xmit;
102 while (!(ioread32(port->membase + TIMBUART_ISR) & TXBF) &&
105 port->membase + TIMBUART_TXFIFO);
107 port->icount.tx++;
110 dev_dbg(port->dev,
113 port->icount.tx,
114 ioread8(port->membase + TIMBUART_CTRL),
115 port->mctrl & TIOCM_RTS,
116 ioread8(port->membase + TIMBUART_BAUDRATE));
119 static void timbuart_handle_tx_port(struct uart_port *port, u32 isr, u32 *ier)
122 container_of(port, struct timbuart_port, port);
123 struct circ_buf *xmit = &port->state->xmit;
125 if (uart_circ_empty(xmit) || uart_tx_stopped(port))
128 if (port->x_char)
132 timbuart_tx_chars(port);
134 iowrite32(TXFLAGS, port->membase + TIMBUART_ISR);
137 uart_write_wakeup(port);
150 dev_dbg(port->dev, "%s - leaving\n", __func__);
153 static void timbuart_handle_rx_port(struct uart_port *port, u32 isr, u32 *ier)
158 u8 ctl = ioread8(port->membase + TIMBUART_CTRL) |
160 iowrite8(ctl, port->membase + TIMBUART_CTRL);
161 port->icount.overrun++;
163 timbuart_rx_chars(port);
166 iowrite32(RXFLAGS, port->membase + TIMBUART_ISR);
172 dev_dbg(port->dev, "%s - leaving\n", __func__);
180 spin_lock(&uart->port.lock);
182 isr = ioread32(uart->port.membase + TIMBUART_ISR);
183 dev_dbg(uart->port.dev, "%s ISR: %x\n", __func__, isr);
186 timbuart_handle_tx_port(&uart->port, isr, &ier);
188 timbuart_mctrl_check(&uart->port, isr, &ier);
191 timbuart_handle_rx_port(&uart->port, isr, &ier);
193 iowrite32(ier, uart->port.membase + TIMBUART_IER);
195 spin_unlock(&uart->port.lock);
196 dev_dbg(uart->port.dev, "%s leaving\n", __func__);
199 static unsigned int timbuart_get_mctrl(struct uart_port *port)
201 u8 cts = ioread8(port->membase + TIMBUART_CTRL);
202 dev_dbg(port->dev, "%s - cts %x\n", __func__, cts);
210 static void timbuart_set_mctrl(struct uart_port *port, unsigned int mctrl)
212 dev_dbg(port->dev, "%s - %x\n", __func__, mctrl);
215 iowrite8(TIMBUART_CTRL_RTS, port->membase + TIMBUART_CTRL);
217 iowrite8(0, port->membase + TIMBUART_CTRL);
220 static void timbuart_mctrl_check(struct uart_port *port, u32 isr, u32 *ier)
226 iowrite32(CTS_DELTA, port->membase + TIMBUART_ISR);
227 cts = timbuart_get_mctrl(port);
228 uart_handle_cts_change(port, cts & TIOCM_CTS);
229 wake_up_interruptible(&port->state->port.delta_msr_wait);
235 static void timbuart_break_ctl(struct uart_port *port, int ctl)
240 static int timbuart_startup(struct uart_port *port)
243 container_of(port, struct timbuart_port, port);
245 dev_dbg(port->dev, "%s\n", __func__);
247 iowrite8(TIMBUART_CTRL_FLSHRX, port->membase + TIMBUART_CTRL);
248 iowrite32(0x1ff, port->membase + TIMBUART_ISR);
251 port->membase + TIMBUART_IER);
253 return request_irq(port->irq, timbuart_handleinterrupt, IRQF_SHARED,
257 static void timbuart_shutdown(struct uart_port *port)
260 container_of(port, struct timbuart_port, port);
261 dev_dbg(port->dev, "%s\n", __func__);
262 free_irq(port->irq, uart);
263 iowrite32(0, port->membase + TIMBUART_IER);
265 timbuart_flush_buffer(port);
279 static void timbuart_set_termios(struct uart_port *port,
287 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
289 dev_dbg(port->dev, "%s - bindex %d\n", __func__, bindex);
301 spin_lock_irqsave(&port->lock, flags);
302 iowrite8((u8)bindex, port->membase + TIMBUART_BAUDRATE);
303 uart_update_timeout(port, termios->c_cflag, baud);
304 spin_unlock_irqrestore(&port->lock, flags);
307 static const char *timbuart_type(struct uart_port *port)
309 return port->type == PORT_UNKNOWN ? "timbuart" : NULL;
315 static void timbuart_release_port(struct uart_port *port)
317 struct platform_device *pdev = to_platform_device(port->dev);
321 if (port->flags & UPF_IOREMAP) {
322 iounmap(port->membase);
323 port->membase = NULL;
326 release_mem_region(port->mapbase, size);
329 static int timbuart_request_port(struct uart_port *port)
331 struct platform_device *pdev = to_platform_device(port->dev);
335 if (!request_mem_region(port->mapbase, size, "timb-uart"))
338 if (port->flags & UPF_IOREMAP) {
339 port->membase = ioremap(port->mapbase, size);
340 if (port->membase == NULL) {
341 release_mem_region(port->mapbase, size);
353 if (ioread8(uart->port.membase + TIMBUART_IPR)) {
354 uart->last_ier = ioread32(uart->port.membase + TIMBUART_IER);
357 iowrite32(0, uart->port.membase + TIMBUART_IER);
368 * Configure/autoconfigure the port.
370 static void timbuart_config_port(struct uart_port *port, int flags)
373 port->type = PORT_TIMBUART;
374 timbuart_request_port(port);
378 static int timbuart_verify_port(struct uart_port *port,
381 /* we don't want the core code to modify any port params */
429 uart->port.uartclk = 3250000 * 16;
430 uart->port.fifosize = TIMBUART_FIFO_SIZE;
431 uart->port.regshift = 2;
432 uart->port.iotype = UPIO_MEM;
433 uart->port.ops = &timbuart_ops;
434 uart->port.irq = 0;
435 uart->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP;
436 uart->port.line = 0;
437 uart->port.dev = &dev->dev;
444 uart->port.mapbase = iomem->start;
445 uart->port.membase = NULL;
452 uart->port.irq = irq;
460 err = uart_add_one_port(&timbuart_driver, &uart->port);
484 uart_remove_one_port(&timbuart_driver, &uart->port);