Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-19 Thread Karl Palsson

Johan Hovold jo...@kernel.org wrote:
 
 Yes, there shouldn't be a need to store the baud rate in the driver (the
 tty layer will keep track of that), but you probably still want to store
 the state of the modem-control signals.

Sounds right.  The modem control signals I'm having a harder time
setting up good tests for, but it's coming together.  I've been testing
with a cp2104 connected back to back with a ch340 device, and 

 Looks like we could get rid of that ch341_configure at every open too?

That's the plan yes.  With more of the control requests decoded, the
_configure call was really just a badly implemented set_termios.  
 
 Looking forward to seeing your patches when you're done. 

Me too!  It's slow going in the evenings, but I'm getting more
comfortable with it slowly but surely :)

Cheers,
Karl P

Re: Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-18 Thread Karl Palsson

Johan Hovold jo...@kernel.org wrote:
 On Wed, Feb 18, 2015 at 11:32:38AM +0700, Johan Hovold wrote:
  On Tue, Feb 17, 2015 at 10:45:11PM -0500, Nicolas PLANEL wrote:
 
  I believe the fix should be implemented slightly differently however.
  Most usb-serial driver call set_termios from open to handle this issue.
  It looks like you could simply replace the calls to set baudrate and
  handshake in open with
  
  ch341_set_termios(tty, port, NULL);
 
 You currently need to make sure tty is not NULL in case the device is
 being used as a console by the way. Just skip the set_termios call in
 that case.

I've already got most of this working in my branch overhauling this
driver.  I agree, the open call shouldn't be doing all the hard
resetting of settings that it currently does.  I've implemented more of
set termios / get termios.

It's not ready for submission yet, I've got a lot of debug added that
needs to be rebased and squished out, and I still want to do more
testing with hardware flow control and the rest of the modem status
lines.

https://github.com/karlp/linux/commits/ch341-3.18.6

By implementing proper reading of settings from the device, a lot of the
private copies can just be dropped out altogether.

Sincerely,
Karl Palsson

Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-18 Thread Nicolas PLANEL


On 02/18/2015 02:05 PM, Karl Palsson wrote:

Johan Hovold jo...@kernel.org wrote:

On Wed, Feb 18, 2015 at 11:32:38AM +0700, Johan Hovold wrote:

On Tue, Feb 17, 2015 at 10:45:11PM -0500, Nicolas PLANEL wrote:
I believe the fix should be implemented slightly differently however.
Most usb-serial driver call set_termios from open to handle this issue.
It looks like you could simply replace the calls to set baudrate and
handshake in open with

ch341_set_termios(tty, port, NULL);

You currently need to make sure tty is not NULL in case the device is
being used as a console by the way. Just skip the set_termios call in
that case.

I've already got most of this working in my branch overhauling this
driver.  I agree, the open call shouldn't be doing all the hard
resetting of settings that it currently does.  I've implemented more of
set termios / get termios.

It's not ready for submission yet, I've got a lot of debug added that
needs to be rebased and squished out, and I still want to do more
testing with hardware flow control and the rest of the modem status
lines.

https://github.com/karlp/linux/commits/ch341-3.18.6

By implementing proper reading of settings from the device, a lot of the
private copies can just be dropped out altogether.

Sincerely,
Karl Palsson


I will try your branch and send you my comment.

Regards,

Nicolas

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-18 Thread Johan Hovold
On Wed, Feb 18, 2015 at 07:05:41PM -, Karl Palsson wrote:

 I've already got most of this working in my branch overhauling this
 driver.  I agree, the open call shouldn't be doing all the hard
 resetting of settings that it currently does.  I've implemented more of
 set termios / get termios.
 
 It's not ready for submission yet, I've got a lot of debug added that
 needs to be rebased and squished out, and I still want to do more
 testing with hardware flow control and the rest of the modem status
 lines.
 
 https://github.com/karlp/linux/commits/ch341-3.18.6
 
 By implementing proper reading of settings from the device, a lot of the
 private copies can just be dropped out altogether.

Yes, there shouldn't be a need to store the baud rate in the driver (the
tty layer will keep track of that), but you probably still want to store
the state of the modem-control signals.

Looks like we could get rid of that ch341_configure at every open too?

Looking forward to seeing your patches when you're done. 

Thanks,
Johan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-17 Thread Nicolas PLANEL

From 467794e88dc08f61e1068c510c97baa9a12b841d Mon Sep 17 00:00:00 2001
From: Nicolas PLANEL nicolas.pla...@enovance.com
Date: Tue, 17 Feb 2015 00:59:14 -0500
Subject: [PATCH] USB: ch341: set tty baud speed according to tty struct

The ch341_set_baudrate() function initialize the device baud speed according
to the value on priv-baud_rate. By default the ch341_open() set it to a
hardcoded value (DEFAULT_BAUD_RATE 9600). Unfortunately, the tty_struct is
not initialized with the same default value. (usually 56700)

This means that the tty_struct and the device baud rate generator are not
synchronized after opening the port.

Fixup is elementary simple by calling tty_get_baud_rate() and
tty_encode_baud_rate() helper to sync up the baud rate during the
ch341_open() call.

Signed-off-by: Nicolas PLANEL nicolas.pla...@enovance.com
---
 drivers/usb/serial/ch341.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index 2d72aa3564a3..2dbbbf6d4187 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -307,9 +307,13 @@ static int ch341_open(struct tty_struct *tty, 
struct usb_serial_port *port)

 {
 struct usb_serial *serial = port-serial;
 struct ch341_private *priv = usb_get_serial_port_data(port);
+unsigned baud;
 int r;

 priv-baud_rate = DEFAULT_BAUD_RATE;
+baud = tty_get_baud_rate(tty);
+if (baud)
+priv-baud_rate = baud;

 r = ch341_configure(serial-dev, priv);
 if (r)
@@ -323,6 +327,9 @@ static int ch341_open(struct tty_struct *tty, struct 
usb_serial_port *port)

 if (r)
 goto out;

+baud = priv-baud_rate;
+tty_encode_baud_rate(tty, baud, baud);
+
 dev_dbg(port-dev, %s - submitting interrupt urb\n, __func__);
 r = usb_submit_urb(port-interrupt_in_urb, GFP_KERNEL);
 if (r) {
--
1.9.1


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-17 Thread Greg KH
On Tue, Feb 17, 2015 at 10:11:55AM -0500, Nicolas PLANEL wrote:
 Hi,
 
 
 According to git log your are currently the two maintainer of the ch341 usb
 serial driver.
 
 Thanks to pyserial, that did not initialize the serial port speed like
 minicom.
 Basically pyserial only set the port speed (calling TIOCSSERIAL ioctl) if
 the user request a different value different currently used. (TIOCGSERIAL)
 
 A long sentence in short code :
 
 if ser.baudrate != user_requested_baudrate:
ser.baudrate = user_requested_baudrate
 
 In short, if the python code open a serial port at a speed of 57600 baud,
 the hw speed line will be in reality at 9600 baud. (driver default speed)
 
 
 Regards,
 
 Nicolas PLANEL
 
 ===
 From 16df0d507a653c48f757635f717f2ba886f8c5ff Mon Sep 17 00:00:00 2001
 From: Nicolas PLANEL nicolas.pla...@enovance.com
 Date: Tue, 17 Feb 2015 00:59:14 -0500
 Subject: [PATCH] USB: ch341: set tty baud speed according to tty struct
 
 The ch341_set_baudrate() function initialize the device baud speed according
 to the value on priv-baud_rate. By default the ch341_open() set it to a
 hardcoded value (DEFAULT_BAUD_RATE 9600). Unfortunately, the tty_struct is
 not initialized with the same default value. (usually 56700)
 
 This means that the tty_struct and the device baud rate generator are not
 synchronized after opening the port.
 
 Fixup is elementary simple by calling tty_get_baud_rate() and
 tty_encode_baud_rate() helper to sync up the baud rate during the
 ch341_open() call.
 ---
  drivers/usb/serial/ch341.c | 7 +++
  1 file changed, 7 insertions(+)

Thanks for the patch, but in order to accept it we need a signed-off-by
line as the file Documentation/SubmittingPatches describes.

Also, just send the patch like this, without the text above, as we can't
hand-edit all emails for patches.

 
 diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
 index 2d72aa3..2dbbbf6 100644
 --- a/drivers/usb/serial/ch341.c
 +++ b/drivers/usb/serial/ch341.c
 @@ -307,9 +307,13 @@ static int ch341_open(struct tty_struct *tty, struct
 usb_serial_port *port)
  {
  struct usb_serial *serial = port-serial;
  struct ch341_private *priv = usb_get_serial_port_data(port);
 +unsigned baud;
  int r;

Also, your email client turned all tabs into spaces, making this patch
unable to be applied.  It also line-wrapped the patch :(

Can you fix this up and resend?

thanks,

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-17 Thread Johan Hovold
On Wed, Feb 18, 2015 at 11:32:38AM +0700, Johan Hovold wrote:
 On Tue, Feb 17, 2015 at 10:45:11PM -0500, Nicolas PLANEL wrote:

 I believe the fix should be implemented slightly differently however.
 Most usb-serial driver call set_termios from open to handle this issue.
 It looks like you could simply replace the calls to set baudrate and
 handshake in open with
 
   ch341_set_termios(tty, port, NULL);

You currently need to make sure tty is not NULL in case the device is
being used as a console by the way. Just skip the set_termios call in
that case.

Johan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-17 Thread Johan Hovold
On Tue, Feb 17, 2015 at 10:45:11PM -0500, Nicolas PLANEL wrote:
  From 467794e88dc08f61e1068c510c97baa9a12b841d Mon Sep 17 00:00:00 2001
 From: Nicolas PLANEL nicolas.pla...@enovance.com
 Date: Tue, 17 Feb 2015 00:59:14 -0500
 Subject: [PATCH] USB: ch341: set tty baud speed according to tty struct

Your patch is still whitespace damaged. Consider using git send-email
for sending. Try sending it to yourself first and run
scritps/checkpatch.pl on the received mail to make sure you got it
right.
 
 The ch341_set_baudrate() function initialize the device baud speed according
 to the value on priv-baud_rate. By default the ch341_open() set it to a
 hardcoded value (DEFAULT_BAUD_RATE 9600). Unfortunately, the tty_struct is
 not initialized with the same default value. (usually 56700)
 
 This means that the tty_struct and the device baud rate generator are not
 synchronized after opening the port.

Good catch.

 Fixup is elementary simple by calling tty_get_baud_rate() and
 tty_encode_baud_rate() helper to sync up the baud rate during the
 ch341_open() call.

I believe the fix should be implemented slightly differently however.
Most usb-serial driver call set_termios from open to handle this issue.
It looks like you could simply replace the calls to set baudrate and
handshake in open with

ch341_set_termios(tty, port, NULL);

Care to send an updated v2 of your patch? Remember to include the patch
revision in the subject line when resending (i.e. [PATCH v2]).

Thanks,
Johan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: usb : serial : ch341 : set tty baud speed according to tty struct

2015-02-17 Thread Greg KH
On Tue, Feb 17, 2015 at 10:45:11PM -0500, Nicolas PLANEL wrote:
 From 467794e88dc08f61e1068c510c97baa9a12b841d Mon Sep 17 00:00:00 2001
 From: Nicolas PLANEL nicolas.pla...@enovance.com
 Date: Tue, 17 Feb 2015 00:59:14 -0500
 Subject: [PATCH] USB: ch341: set tty baud speed according to tty struct

What is all of this here for?  And it doesn't match your From: line in
your email, which is a bit odd.

 
 diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
 index 2d72aa3564a3..2dbbbf6d4187 100644
 --- a/drivers/usb/serial/ch341.c
 +++ b/drivers/usb/serial/ch341.c
 @@ -307,9 +307,13 @@ static int ch341_open(struct tty_struct *tty, struct
 usb_serial_port *port)

Linewrapped :(


  {
  struct usb_serial *serial = port-serial;
  struct ch341_private *priv = usb_get_serial_port_data(port);
 +unsigned baud;
  int r;

tabs converted to spaces :(

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html