* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.