Commit ef11f1b7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull tty/serial driver fixes from Greg KH:
 "Here are a number of small tty and serial driver fixes for 5.6-rc3
  that resolve a bunch of reported issues.

  They are:
   - vt selection and ioctl fixes
   - serdev bugfix
   - atmel serial driver fixes
   - qcom serial driver fixes
   - other minor serial driver fixes

  All of these have been in linux-next for a while with no reported
  issues"

* tag 'tty-5.6-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
  vt: selection, close sel_buffer race
  vt: selection, handle pending signals in paste_selection
  serial: cpm_uart: call cpm_muram_init before registering console
  tty: serial: qcom_geni_serial: Fix RX cancel command failure
  serial: 8250: Check UPF_IRQ_SHARED in advance
  tty: serial: imx: setup the correct sg entry for tx dma
  vt: vt_ioctl: fix race in VT_RESIZEX
  vt: fix scrollback flushing on background consoles
  tty: serial: tegra: Handle RX transfer in PIO mode if DMA wasn't started
  tty/serial: atmel: manage shutdown in case of RS485 or ISO7816 mode
  serdev: ttyport: restore client ops on deregistration
  serial: ar933x_uart: set UART_CS_{RX,TX}_READY_ORIDE
parents cee853e8 07e6124a
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -265,7 +265,6 @@ struct device *serdev_tty_port_register(struct tty_port *port,
					struct device *parent,
					struct tty_driver *drv, int idx)
{
	const struct tty_port_client_operations *old_ops;
	struct serdev_controller *ctrl;
	struct serport *serport;
	int ret;
@@ -284,7 +283,6 @@ struct device *serdev_tty_port_register(struct tty_port *port,

	ctrl->ops = &ctrl_ops;

	old_ops = port->client_ops;
	port->client_ops = &client_ops;
	port->client_data = ctrl;

@@ -297,7 +295,7 @@ struct device *serdev_tty_port_register(struct tty_port *port,

err_reset_data:
	port->client_data = NULL;
	port->client_ops = old_ops;
	port->client_ops = &tty_port_default_client_ops;
	serdev_controller_put(ctrl);

	return ERR_PTR(ret);
@@ -312,8 +310,8 @@ int serdev_tty_port_unregister(struct tty_port *port)
		return -ENODEV;

	serdev_controller_remove(ctrl);
	port->client_ops = NULL;
	port->client_data = NULL;
	port->client_ops = &tty_port_default_client_ops;
	serdev_controller_put(ctrl);

	return 0;
+0 −1
Original line number Diff line number Diff line
@@ -446,7 +446,6 @@ static int aspeed_vuart_probe(struct platform_device *pdev)
		port.port.line = rc;

	port.port.irq = irq_of_parse_and_map(np, 0);
	port.port.irqflags = IRQF_SHARED;
	port.port.handle_irq = aspeed_vuart_handle_irq;
	port.port.iotype = UPIO_MEM;
	port.port.type = PORT_16550A;
+2 −3
Original line number Diff line number Diff line
@@ -174,7 +174,7 @@ static int serial_link_irq_chain(struct uart_8250_port *up)
	struct hlist_head *h;
	struct hlist_node *n;
	struct irq_info *i;
	int ret, irq_flags = up->port.flags & UPF_SHARE_IRQ ? IRQF_SHARED : 0;
	int ret;

	mutex_lock(&hash_mutex);

@@ -209,9 +209,8 @@ static int serial_link_irq_chain(struct uart_8250_port *up)
		INIT_LIST_HEAD(&up->list);
		i->head = &up->list;
		spin_unlock_irq(&i->lock);
		irq_flags |= up->port.irqflags;
		ret = request_irq(up->port.irq, serial8250_interrupt,
				  irq_flags, up->port.name, i);
				  up->port.irqflags, up->port.name, i);
		if (ret < 0)
			serial_do_unlink(i, up);
	}
+0 −1
Original line number Diff line number Diff line
@@ -202,7 +202,6 @@ static int of_platform_serial_setup(struct platform_device *ofdev,

	port->type = type;
	port->uartclk = clk;
	port->irqflags |= IRQF_SHARED;

	if (of_property_read_bool(np, "no-loopback-test"))
		port->flags |= UPF_SKIP_TEST;
+4 −0
Original line number Diff line number Diff line
@@ -2177,6 +2177,10 @@ int serial8250_do_startup(struct uart_port *port)
		}
	}

	/* Check if we need to have shared IRQs */
	if (port->irq && (up->port.flags & UPF_SHARE_IRQ))
		up->port.irqflags |= IRQF_SHARED;

	if (port->irq && !(up->port.flags & UPF_NO_THRE_TEST)) {
		unsigned char iir1;
		/*
Loading