Re: [PATCH] keyspan: init termios properly

From: Lucy McCoy
Date: Thu Nov 15 2007 - 16:36:01 EST


Hi Boris,

Actually the 19HS is the usa90 so it is included in the switch but
that isn't a problem.

I'm not familiar with the termios stuff on Linux so can you take a look
at the following modified code to see if this solves your NULL ptr problem?

Also,....

Does cflag need to be set to anything other than CS8?
Is keyspan_open_port() always followed by a keyspan_set_termios()?

Thanks,

Lucy


static int keyspan_open (struct usb_serial_port *port, struct file *filp)
{
struct keyspan_port_private *p_priv;
struct keyspan_serial_private *s_priv;
struct usb_serial *serial = port->serial;
const struct keyspan_device_details *d_details;
int i, err;
struct urb *urb;

s_priv = usb_get_serial_data(serial);
p_priv = usb_get_serial_port_data(port);
d_details = p_priv->device_details;

dbg("%s - port%d.", __FUNCTION__, port->number);

/* Set some sane defaults */
p_priv->rts_state = 1;
p_priv->dtr_state = 1;
p_priv->baud = 9600;

/* set CTS/RTS handshake etc. */
p_priv->cflag = CS8; /* 8/N/1 */
p_priv->flow_control = flow_none;

/* force baud and lcr to be set on open */
p_priv->old_baud = 0;
p_priv->old_cflag = 0;

p_priv->out_flip = 0;
p_priv->in_flip = 0;

/* Reset low level data toggle and start reading from endpoints */
for (i = 0; i < 2; i++) {
if ((urb = p_priv->in_urbs[i]) == NULL)
continue;
urb->dev = serial->dev;

/* make sure endpoint data toggle is synchronized with the device */

usb_clear_halt(urb->dev, urb->pipe);

if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
dbg("%s - submit urb %d failed (%d)", __FUNCTION__, i, err);
}
}

/* Reset low level data toggle on out endpoints */
for (i = 0; i < 2; i++) {
if ((urb = p_priv->out_urbs[i]) == NULL)
continue;
urb->dev = serial->dev;
/* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe), 0); */
}

keyspan_send_setup(port, 1);
//mdelay(100);
//keyspan_set_termios(port, NULL);

return (0);
}


Lucy McCoy
lucy@xxxxxxxxxxx

-----Original Message-----
From: Borislav Petkov <bbpetkov@xxxxxxxx>
Sent: Thursday, November 15, 2007 12:40pm
To: Lucy McCoy <lucy@xxxxxxxxxxx>
Cc: Greg KH <greg@xxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Subject: Re: [PATCH] keyspan: init termios properly

On Thu, Nov 15, 2007 at 09:49:22AM -0800, Lucy McCoy wrote:
> Greg & Boris,
>
> I've been out of town and just saw this.
>
> This patch will work with the 19HS but WILL BREAK all other Keyspan
> adapters. It will take me a few days to get to looking at a correct fix but
> that keyspan_send_setup(port, 1) (and the '1' is the important part) must
> happen once
> when the port is first opened. The cflag can just be set to whatever the
> normal default
> is for your serial environment. What are the defaults?

Hi Lucy,

sorry but i don't have the other usb-to-serial models to test them too, i guess
you're in the position to do that :) Well, from what i've unterstood from
reading the code, you can still do the keyspan_send_setup() call since the
switch-case-statement is not handling the 19s series so while this call won't have any
influence on them, it'll still init the others properly, no? Anyway, you can send me your
fix for testing.

Thanks.

--
Regards/GruÃ,
Boris.


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/