aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/tty/serial/8250/8250_aspeed_vuart.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/tty/serial/8250/8250_aspeed_vuart.c b/drivers/tty/serial/8250/8250_aspeed_vuart.c
index 74a408d9db24..cd1bb49dadfe 100644
--- a/drivers/tty/serial/8250/8250_aspeed_vuart.c
+++ b/drivers/tty/serial/8250/8250_aspeed_vuart.c
@@ -179,6 +179,30 @@ static void aspeed_vuart_shutdown(struct uart_port *uart_port)
179 serial8250_do_shutdown(uart_port); 179 serial8250_do_shutdown(uart_port);
180} 180}
181 181
182static void aspeed_vuart_set_throttle(struct uart_port *port, bool throttle)
183{
184 unsigned char irqs = UART_IER_RLSI | UART_IER_RDI;
185 struct uart_8250_port *up = up_to_u8250p(port);
186 unsigned long flags;
187
188 spin_lock_irqsave(&port->lock, flags);
189 up->ier &= ~irqs;
190 if (!throttle)
191 up->ier |= irqs;
192 serial_out(up, UART_IER, up->ier);
193 spin_unlock_irqrestore(&port->lock, flags);
194}
195
196static void aspeed_vuart_throttle(struct uart_port *port)
197{
198 aspeed_vuart_set_throttle(port, true);
199}
200
201static void aspeed_vuart_unthrottle(struct uart_port *port)
202{
203 aspeed_vuart_set_throttle(port, false);
204}
205
182static int aspeed_vuart_probe(struct platform_device *pdev) 206static int aspeed_vuart_probe(struct platform_device *pdev)
183{ 207{
184 struct uart_8250_port port; 208 struct uart_8250_port port;
@@ -208,6 +232,9 @@ static int aspeed_vuart_probe(struct platform_device *pdev)
208 port.port.mapsize = resource_size(res); 232 port.port.mapsize = resource_size(res);
209 port.port.startup = aspeed_vuart_startup; 233 port.port.startup = aspeed_vuart_startup;
210 port.port.shutdown = aspeed_vuart_shutdown; 234 port.port.shutdown = aspeed_vuart_shutdown;
235 port.port.throttle = aspeed_vuart_throttle;
236 port.port.unthrottle = aspeed_vuart_unthrottle;
237 port.port.status = UPSTAT_SYNC_FIFO;
211 port.port.dev = &pdev->dev; 238 port.port.dev = &pdev->dev;
212 239
213 rc = sysfs_create_group(&vuart->dev->kobj, &aspeed_vuart_attr_group); 240 rc = sysfs_create_group(&vuart->dev->kobj, &aspeed_vuart_attr_group);