Lines Matching refs:port

77 	struct uart_port port;
83 static bool digicolor_uart_tx_full(struct uart_port *port)
85 return !!(readb_relaxed(port->membase + UA_STATUS_FIFO) &
89 static bool digicolor_uart_rx_empty(struct uart_port *port)
91 return !!(readb_relaxed(port->membase + UA_STATUS_FIFO) &
95 static void digicolor_uart_stop_tx(struct uart_port *port)
97 u8 int_enable = readb_relaxed(port->membase + UA_INT_ENABLE);
100 writeb_relaxed(int_enable, port->membase + UA_INT_ENABLE);
103 static void digicolor_uart_start_tx(struct uart_port *port)
105 u8 int_enable = readb_relaxed(port->membase + UA_INT_ENABLE);
108 writeb_relaxed(int_enable, port->membase + UA_INT_ENABLE);
111 static void digicolor_uart_stop_rx(struct uart_port *port)
113 u8 int_enable = readb_relaxed(port->membase + UA_INT_ENABLE);
116 writeb_relaxed(int_enable, port->membase + UA_INT_ENABLE);
125 if (!digicolor_uart_rx_empty(&dp->port))
127 writeb_relaxed(UA_INT_RX, dp->port.membase + UA_INTFLAG_SET);
132 static void digicolor_uart_rx(struct uart_port *port)
136 uart_port_lock_irqsave(port, &flags);
141 if (digicolor_uart_rx_empty(port))
144 ch = readb_relaxed(port->membase + UA_EMI_REC);
145 status = readb_relaxed(port->membase + UA_STATUS);
147 port->icount.rx++;
152 port->icount.parity++;
154 port->icount.frame++;
156 port->icount.overrun++;
158 status &= port->read_status_mask;
168 if (status & port->ignore_status_mask)
171 uart_insert_char(port, status, UA_STATUS_OVERRUN_ERR, ch,
175 uart_port_unlock_irqrestore(port, flags);
177 tty_flip_buffer_push(&port->state->port);
180 static void digicolor_uart_tx(struct uart_port *port)
182 struct circ_buf *xmit = &port->state->xmit;
185 if (digicolor_uart_tx_full(port))
188 uart_port_lock_irqsave(port, &flags);
190 if (port->x_char) {
191 writeb_relaxed(port->x_char, port->membase + UA_EMI_REC);
192 port->icount.tx++;
193 port->x_char = 0;
197 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
198 digicolor_uart_stop_tx(port);
203 writeb(xmit->buf[xmit->tail], port->membase + UA_EMI_REC);
204 uart_xmit_advance(port, 1);
206 if (digicolor_uart_tx_full(port))
211 uart_write_wakeup(port);
214 uart_port_unlock_irqrestore(port, flags);
219 struct uart_port *port = dev_id;
220 u8 int_status = readb_relaxed(port->membase + UA_INT_STATUS);
223 port->membase + UA_INTFLAG_CLEAR);
226 digicolor_uart_rx(port);
228 digicolor_uart_tx(port);
233 static unsigned int digicolor_uart_tx_empty(struct uart_port *port)
235 u8 status = readb_relaxed(port->membase + UA_STATUS);
240 static unsigned int digicolor_uart_get_mctrl(struct uart_port *port)
245 static void digicolor_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
249 static void digicolor_uart_break_ctl(struct uart_port *port, int state)
253 static int digicolor_uart_startup(struct uart_port *port)
256 container_of(port, struct digicolor_port, port);
258 writeb_relaxed(UA_ENABLE_ENABLE, port->membase + UA_ENABLE);
259 writeb_relaxed(UA_CONTROL_SOFT_RESET, port->membase + UA_CONTROL);
260 writeb_relaxed(0, port->membase + UA_CONTROL);
264 port->membase + UA_CONFIG_FIFO);
266 port->membase + UA_STATUS_FIFO);
268 port->membase + UA_CONTROL);
270 port->membase + UA_INT_ENABLE);
277 static void digicolor_uart_shutdown(struct uart_port *port)
280 container_of(port, struct digicolor_port, port);
282 writeb_relaxed(0, port->membase + UA_ENABLE);
286 static void digicolor_uart_set_termios(struct uart_port *port,
299 baud = uart_get_baud_rate(port, termios, old,
300 port->uartclk / (0x10000*16),
301 port->uartclk / 256);
302 divisor = uart_get_divisor(port, baud) - 1;
325 port->read_status_mask = UA_STATUS_OVERRUN_ERR;
327 port->read_status_mask |= UA_STATUS_PARITY_ERR
331 port->ignore_status_mask = 0;
333 port->ignore_status_mask |= UA_STATUS_OVERRUN_ERR
336 uart_port_lock_irqsave(port, &flags);
338 uart_update_timeout(port, termios->c_cflag, baud);
340 writeb_relaxed(config, port->membase + UA_CONFIG);
341 writeb_relaxed(divisor & 0xff, port->membase + UA_HBAUD_LO);
342 writeb_relaxed(divisor >> 8, port->membase + UA_HBAUD_HI);
344 uart_port_unlock_irqrestore(port, flags);
347 static const char *digicolor_uart_type(struct uart_port *port)
349 return (port->type == PORT_DIGICOLOR) ? "DIGICOLOR USART" : NULL;
352 static void digicolor_uart_config_port(struct uart_port *port, int flags)
355 port->type = PORT_DIGICOLOR;
358 static void digicolor_uart_release_port(struct uart_port *port)
362 static int digicolor_uart_request_port(struct uart_port *port)
384 static void digicolor_uart_console_putchar(struct uart_port *port, unsigned char ch)
386 while (digicolor_uart_tx_full(port))
389 writeb_relaxed(ch, port->membase + UA_EMI_REC);
395 struct uart_port *port = digicolor_ports[co->index];
401 locked = uart_port_trylock_irqsave(port, &flags);
403 uart_port_lock_irqsave(port, &flags);
405 uart_console_write(port, c, n, digicolor_uart_console_putchar);
408 uart_port_unlock_irqrestore(port, flags);
412 status = readb_relaxed(port->membase + UA_STATUS);
419 struct uart_port *port;
424 port = digicolor_ports[co->index];
425 if (!port)
431 return uart_set_options(port, co, baud, parity, bits, flow);
474 dp->port.membase = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
475 if (IS_ERR(dp->port.membase))
476 return PTR_ERR(dp->port.membase);
477 dp->port.mapbase = res->start;
482 dp->port.irq = irq;
484 dp->port.iotype = UPIO_MEM;
485 dp->port.uartclk = clk_get_rate(uart_clk);
486 dp->port.fifosize = 16;
487 dp->port.dev = &pdev->dev;
488 dp->port.ops = &digicolor_uart_ops;
489 dp->port.line = index;
490 dp->port.type = PORT_DIGICOLOR;
491 spin_lock_init(&dp->port.lock);
493 digicolor_ports[index] = &dp->port;
494 platform_set_drvdata(pdev, &dp->port);
498 ret = devm_request_irq(&pdev->dev, dp->port.irq, digicolor_uart_int, 0,
499 dev_name(&pdev->dev), &dp->port);
503 return uart_add_one_port(&digicolor_uart, &dp->port);
508 struct uart_port *port = platform_get_drvdata(pdev);
510 uart_remove_one_port(&digicolor_uart, port);