public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Still not applied (resending again)
@ 2009-11-06 11:32 Alan Cox
  2009-11-06 11:32 ` [PATCH 1/2] cp210x: Fix carrier handling Alan Cox
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Alan Cox @ 2009-11-06 11:32 UTC (permalink / raw)
  To: greg, linux-kernel

Regression fixes for the carrier handling when using O_NDELAY
---

Alan Cox (2):
      tty_port: If we are opened non blocking we still need to raise the carrier
      cp210x: Fix carrier handling


 drivers/char/tty_port.c     |   10 ++++++++--
 drivers/usb/serial/cp210x.c |   21 +++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

-- 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] cp210x: Fix carrier handling
  2009-11-06 11:32 [PATCH 0/2] Still not applied (resending again) Alan Cox
@ 2009-11-06 11:32 ` Alan Cox
  2009-11-06 11:32 ` [PATCH 2/2] tty_port: If we are opened non blocking we still need to raise the carrier Alan Cox
  2009-11-06 17:40 ` [PATCH 0/2] Still not applied (resending again) Greg KH
  2 siblings, 0 replies; 4+ messages in thread
From: Alan Cox @ 2009-11-06 11:32 UTC (permalink / raw)
  To: greg, linux-kernel

9a68e39d4a701fb3be03cae9b462408664ebd205 broke carrier handling so that a
cp210x setup which needed the carrier lines set up (non CLOCAL) which did
not make a call which set the termios bits left the lines down even if
CLOCAL was not asserted.

Fix this not by reverting but by adding the proper dtr_rts and
carrier_raised methods. This both sets the modem lines properly and also
implements the correct blocking semantics for the port as required by
POSIX.

Signed-off-by: Alan Cox <alan@linux.intel.com>
---

 drivers/usb/serial/cp210x.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)


diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index 698252a..bd254ec 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -50,6 +50,8 @@ static int cp210x_tiocmset_port(struct usb_serial_port *port, struct file *,
 static void cp210x_break_ctl(struct tty_struct *, int);
 static int cp210x_startup(struct usb_serial *);
 static void cp210x_disconnect(struct usb_serial *);
+static void cp210x_dtr_rts(struct usb_serial_port *p, int on);
+static int cp210x_carrier_raised(struct usb_serial_port *p);
 
 static int debug;
 
@@ -143,6 +145,8 @@ static struct usb_serial_driver cp210x_device = {
 	.tiocmset		= cp210x_tiocmset,
 	.attach			= cp210x_startup,
 	.disconnect		= cp210x_disconnect,
+	.dtr_rts		= cp210x_dtr_rts,
+	.carrier_raised		= cp210x_carrier_raised
 };
 
 /* Config request types */
@@ -746,6 +750,14 @@ static int cp210x_tiocmset_port(struct usb_serial_port *port, struct file *file,
 	return cp210x_set_config(port, CP210X_SET_MHS, &control, 2);
 }
 
+static void cp210x_dtr_rts(struct usb_serial_port *p, int on)
+{
+	if (on)
+		cp210x_tiocmset_port(p, NULL,  TIOCM_DTR|TIOCM_RTS, 0);
+	else
+		cp210x_tiocmset_port(p, NULL,  0, TIOCM_DTR|TIOCM_RTS);
+}
+
 static int cp210x_tiocmget (struct tty_struct *tty, struct file *file)
 {
 	struct usb_serial_port *port = tty->driver_data;
@@ -768,6 +780,15 @@ static int cp210x_tiocmget (struct tty_struct *tty, struct file *file)
 	return result;
 }
 
+static int cp210x_carrier_raised(struct usb_serial_port *p)
+{
+	unsigned int control;
+	cp210x_get_config(p, CP210X_GET_MDMSTS, &control, 1);
+	if (control & CONTROL_DCD)
+		return 1;
+	return 0;
+}
+
 static void cp210x_break_ctl (struct tty_struct *tty, int break_state)
 {
 	struct usb_serial_port *port = tty->driver_data;


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] tty_port: If we are opened non blocking we still need to raise the carrier
  2009-11-06 11:32 [PATCH 0/2] Still not applied (resending again) Alan Cox
  2009-11-06 11:32 ` [PATCH 1/2] cp210x: Fix carrier handling Alan Cox
@ 2009-11-06 11:32 ` Alan Cox
  2009-11-06 17:40 ` [PATCH 0/2] Still not applied (resending again) Greg KH
  2 siblings, 0 replies; 4+ messages in thread
From: Alan Cox @ 2009-11-06 11:32 UTC (permalink / raw)
  To: greg, linux-kernel

The tty_port code inherited a bug common to various drivers it was based
upon. If the tty is opened O_NONBLOCK we do not wait for the carrier to be
raised but we must still raise our modem lines if appropriate.

(There is a second question here about whether we should do so if CLOCAL is
 set but that can wait)

Signed-off-by: Alan Cox <alan@linux.intel.com>
---

 drivers/char/tty_port.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)


diff --git a/drivers/char/tty_port.c b/drivers/char/tty_port.c
index 0a35600..5e2ac57 100644
--- a/drivers/char/tty_port.c
+++ b/drivers/char/tty_port.c
@@ -241,8 +241,14 @@ int tty_port_block_til_ready(struct tty_port *port,
 
 	/* if non-blocking mode is set we can pass directly to open unless
 	   the port has just hung up or is in another error state */
-	if ((filp->f_flags & O_NONBLOCK) ||
-			(tty->flags & (1 << TTY_IO_ERROR))) {
+	if (tty->flags & (1 << TTY_IO_ERROR)) {
+		port->flags |= ASYNC_NORMAL_ACTIVE;
+		return 0;
+	}
+	if (filp->f_flags & O_NONBLOCK) {
+		/* Indicate we are open */
+		if (tty->termios->c_cflag & CBAUD)
+			tty_port_raise_dtr_rts(port);
 		port->flags |= ASYNC_NORMAL_ACTIVE;
 		return 0;
 	}


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] Still not applied (resending again)
  2009-11-06 11:32 [PATCH 0/2] Still not applied (resending again) Alan Cox
  2009-11-06 11:32 ` [PATCH 1/2] cp210x: Fix carrier handling Alan Cox
  2009-11-06 11:32 ` [PATCH 2/2] tty_port: If we are opened non blocking we still need to raise the carrier Alan Cox
@ 2009-11-06 17:40 ` Greg KH
  2 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2009-11-06 17:40 UTC (permalink / raw)
  To: Alan Cox; +Cc: linux-kernel

On Fri, Nov 06, 2009 at 11:32:29AM +0000, Alan Cox wrote:
> Regression fixes for the carrier handling when using O_NDELAY

I added these to my tree yesterday, sorry for the delay.

greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-11-06 17:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-06 11:32 [PATCH 0/2] Still not applied (resending again) Alan Cox
2009-11-06 11:32 ` [PATCH 1/2] cp210x: Fix carrier handling Alan Cox
2009-11-06 11:32 ` [PATCH 2/2] tty_port: If we are opened non blocking we still need to raise the carrier Alan Cox
2009-11-06 17:40 ` [PATCH 0/2] Still not applied (resending again) Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox