From: Johan Hovold <johan@kernel.org>
To: "Ji-Ze Hong \(Peter Hong\)" <hpeter@gmail.com>
Cc: peter_hong@fintek.com.tw, johan@kernel.org,
gregkh@linuxfoundation.org, linux-usb@vger.kernel.org,
linux-kernel@vger.kernel.org,
"Ji-Ze Hong \(Peter Hong\)" <hpeter+linux_kernel@gmail.com>
Subject: [V9,4/4] USB: serial: f81232: implement break control
Date: Fri, 3 May 2019 08:59:17 +0200 [thread overview]
Message-ID: <20190503065917.GA26546@localhost> (raw)
On Tue, Apr 30, 2019 at 09:22:32AM +0800, Ji-Ze Hong (Peter Hong) wrote:
> Implement Fintek F81232 break on/off with LCR register.
> It's the same with 16550A LCR register layout.
>
> Signed-off-by: Ji-Ze Hong (Peter Hong) <hpeter+linux_kernel@gmail.com>
> ---
> static void f81232_break_ctl(struct tty_struct *tty, int break_state)
> {
> - /* FIXME - Stubbed out for now */
> + struct usb_serial_port *port = tty->driver_data;
> + struct f81232_private *priv = usb_get_serial_port_data(port);
> + int status;
>
> - /*
> - * break_state = -1 to turn on break, and 0 to turn off break
> - * see drivers/char/tty_io.c to see it used.
> - * last_set_data_urb_value NEVER has the break bit set in it.
> - */
> + mutex_lock(&priv->lock);
> +
> + if (break_state)
> + priv->shadow_lcr |= UART_LCR_SBC;
> + else
> + priv->shadow_lcr &= ~UART_LCR_SBC;
> +
> + status = f81232_set_register(port, LINE_CONTROL_REGISTER,
> + priv->shadow_lcr);
> + if (status)
> + dev_err(&port->dev, "set break failed: %d\n", status);
> +
> + mutex_unlock(&priv->lock);
> }
> @@ -519,6 +530,7 @@ static int f81232_port_disable(struct usb_serial_port *port)
> static void f81232_set_termios(struct tty_struct *tty,
> struct usb_serial_port *port, struct ktermios *old_termios)
> {
> + struct f81232_private *priv = usb_get_serial_port_data(port);
> u8 new_lcr = 0;
> int status = 0;
> speed_t baudrate;
> @@ -572,11 +584,16 @@ static void f81232_set_termios(struct tty_struct *tty,
> break;
> }
>
> + mutex_lock(&priv->lock);
> +
> + new_lcr |= (priv->shadow_lcr & UART_LCR_SBC);
> status = f81232_set_register(port, LINE_CONTROL_REGISTER, new_lcr);
> if (status) {
> dev_err(&port->dev, "%s failed to set LCR: %d\n",
> __func__, status);
> }
> +
> + mutex_unlock(&priv->lock);
You forgot to update shadow_lcr here so the line settings would be
corrupted (e.g set to 5 bit words) whenever a break is signalled.
Did you not test this version of the patch?
I added the missing update, but please test the code that's in my
usb-next branch in a minute and confirm everything works as expected.
All four patches now applied.
Thanks,
Johan
WARNING: multiple messages have this Message-ID (diff)
From: Johan Hovold <johan@kernel.org>
To: "Ji-Ze Hong (Peter Hong)" <hpeter@gmail.com>
Cc: peter_hong@fintek.com.tw, johan@kernel.org,
gregkh@linuxfoundation.org, linux-usb@vger.kernel.org,
linux-kernel@vger.kernel.org,
"Ji-Ze Hong (Peter Hong)" <hpeter+linux_kernel@gmail.com>
Subject: Re: [PATCH V9 4/4] USB: serial: f81232: implement break control
Date: Fri, 3 May 2019 08:59:17 +0200 [thread overview]
Message-ID: <20190503065917.GA26546@localhost> (raw)
Message-ID: <20190503065917.BBhdcuiSx4NwfL7e8Tq4ap0HvDEhgkjEc-fhW-Jtxb0@z> (raw)
In-Reply-To: <1556587352-19500-4-git-send-email-hpeter+linux_kernel@gmail.com>
On Tue, Apr 30, 2019 at 09:22:32AM +0800, Ji-Ze Hong (Peter Hong) wrote:
> Implement Fintek F81232 break on/off with LCR register.
> It's the same with 16550A LCR register layout.
>
> Signed-off-by: Ji-Ze Hong (Peter Hong) <hpeter+linux_kernel@gmail.com>
> ---
> static void f81232_break_ctl(struct tty_struct *tty, int break_state)
> {
> - /* FIXME - Stubbed out for now */
> + struct usb_serial_port *port = tty->driver_data;
> + struct f81232_private *priv = usb_get_serial_port_data(port);
> + int status;
>
> - /*
> - * break_state = -1 to turn on break, and 0 to turn off break
> - * see drivers/char/tty_io.c to see it used.
> - * last_set_data_urb_value NEVER has the break bit set in it.
> - */
> + mutex_lock(&priv->lock);
> +
> + if (break_state)
> + priv->shadow_lcr |= UART_LCR_SBC;
> + else
> + priv->shadow_lcr &= ~UART_LCR_SBC;
> +
> + status = f81232_set_register(port, LINE_CONTROL_REGISTER,
> + priv->shadow_lcr);
> + if (status)
> + dev_err(&port->dev, "set break failed: %d\n", status);
> +
> + mutex_unlock(&priv->lock);
> }
> @@ -519,6 +530,7 @@ static int f81232_port_disable(struct usb_serial_port *port)
> static void f81232_set_termios(struct tty_struct *tty,
> struct usb_serial_port *port, struct ktermios *old_termios)
> {
> + struct f81232_private *priv = usb_get_serial_port_data(port);
> u8 new_lcr = 0;
> int status = 0;
> speed_t baudrate;
> @@ -572,11 +584,16 @@ static void f81232_set_termios(struct tty_struct *tty,
> break;
> }
>
> + mutex_lock(&priv->lock);
> +
> + new_lcr |= (priv->shadow_lcr & UART_LCR_SBC);
> status = f81232_set_register(port, LINE_CONTROL_REGISTER, new_lcr);
> if (status) {
> dev_err(&port->dev, "%s failed to set LCR: %d\n",
> __func__, status);
> }
> +
> + mutex_unlock(&priv->lock);
You forgot to update shadow_lcr here so the line settings would be
corrupted (e.g set to 5 bit words) whenever a break is signalled.
Did you not test this version of the patch?
I added the missing update, but please test the code that's in my
usb-next branch in a minute and confirm everything works as expected.
All four patches now applied.
Thanks,
Johan
next prev reply other threads:[~2019-05-03 6:59 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-30 1:22 [V9,1/4] USB: serial: f81232: fix interrupt worker not stop Ji-Ze Hong (Peter Hong)
2019-04-30 1:22 ` [PATCH V9 1/4] " Ji-Ze Hong (Peter Hong)
2019-04-30 1:22 ` [V9,2/4] USB: serial: f81232: clear overrun flag Ji-Ze Hong (Peter Hong)
2019-04-30 1:22 ` [PATCH V9 2/4] " Ji-Ze Hong (Peter Hong)
2019-04-30 1:22 ` [V9,3/4] USB: serial: f81232: add high baud rate support Ji-Ze Hong (Peter Hong)
2019-04-30 1:22 ` [PATCH V9 3/4] " Ji-Ze Hong (Peter Hong)
2019-04-30 1:22 ` [V9,4/4] USB: serial: f81232: implement break control Ji-Ze Hong (Peter Hong)
2019-04-30 1:22 ` [PATCH V9 4/4] " Ji-Ze Hong (Peter Hong)
2019-05-03 6:59 ` Johan Hovold [this message]
2019-05-03 6:59 ` Johan Hovold
2019-05-06 2:52 ` [V9,4/4] " Ji-Ze Hong (Peter Hong)
2019-05-06 2:52 ` [PATCH V9 4/4] " Ji-Ze Hong (Peter Hong)
2019-05-07 9:16 ` Johan Hovold
2019-05-03 6:53 ` [V9,1/4] USB: serial: f81232: fix interrupt worker not stop Johan Hovold
2019-05-03 6:53 ` [PATCH V9 1/4] " Johan Hovold
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190503065917.GA26546@localhost \
--to=johan@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hpeter+linux_kernel@gmail.com \
--cc=hpeter@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=peter_hong@fintek.com.tw \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).