Message ID | 20220712115306.26471-6-kabel@kernel.org |
---|---|
State | New |
Headers | show |
Series | ftdi_sio driver improvements | expand |
On Tue, Jul 12, 2022 at 01:53:04PM +0200, Marek Behún wrote: > From: Pali Rohár <pali@kernel.org> > > To compute more accurate baud rate when user uses ASYNC_SPD_CUST API, > use DIV_ROUND_CLOSEST() instead of just rounding down. > > Rationale: > Application uses old API, so it computes divisor D for baud rate B. > > The driver then tries to compute back the requested baud rate B, but > rounds down in the division. > > Using rounding to closest value instead should increate accuracy here. > > Signed-off-by: Pali Rohár <pali@kernel.org> > Tested-by: Marek Behún <kabel@kernel.org> > Signed-off-by: Marek Behún <kabel@kernel.org> > --- > drivers/usb/serial/ftdi_sio.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c > index cdbba1a9edd9..5db1293bb7a2 100644 > --- a/drivers/usb/serial/ftdi_sio.c > +++ b/drivers/usb/serial/ftdi_sio.c > @@ -1317,7 +1317,7 @@ static u32 get_ftdi_divisor(struct tty_struct *tty, > if (baud == 38400 && > ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) && > (priv->custom_divisor)) { > - baud = priv->baud_base / priv->custom_divisor; > + baud = DIV_ROUND_CLOSEST(priv->baud_base, priv->custom_divisor); Sure, why not, but this should only be used for the following debug statement. (See next patch). > dev_dbg(dev, "%s - custom divisor %d sets baud rate to %d\n", > __func__, priv->custom_divisor, baud); > } Johan
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index cdbba1a9edd9..5db1293bb7a2 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -1317,7 +1317,7 @@ static u32 get_ftdi_divisor(struct tty_struct *tty, if (baud == 38400 && ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) && (priv->custom_divisor)) { - baud = priv->baud_base / priv->custom_divisor; + baud = DIV_ROUND_CLOSEST(priv->baud_base, priv->custom_divisor); dev_dbg(dev, "%s - custom divisor %d sets baud rate to %d\n", __func__, priv->custom_divisor, baud); }