Re: [PATCH v2 7/7] USB: serial: ftdi_sio: Fill c_*speed fields with real baud rate

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sunday 24 July 2022 14:41:19 Johan Hovold wrote:
> On Tue, Jul 12, 2022 at 01:53:06PM +0200, Marek Behún wrote:
> > From: Pali Rohár <pali@xxxxxxxxxx>
> > 
> > Calculate baud rate value in c_*speed fields to the real values which were
> > set on hardware. For this operation, add a new set of methods
> > *_divisor_to_baud() for each chip and use them for calculating the real
> > baud rate values.
> > 
> > Each *_divisor_to_baud() method is constructed as an inverse function of
> > its corresponding *_baud_to_divisor() method.
> > 
> > Signed-off-by: Pali Rohár <pali@xxxxxxxxxx>
> > Tested-by: Marek Behún <kabel@xxxxxxxxxx>
> > Signed-off-by: Marek Behún <kabel@xxxxxxxxxx>
> > ---
> >  drivers/usb/serial/ftdi_sio.c | 83 +++++++++++++++++++++++++++++++++++
> >  1 file changed, 83 insertions(+)
> > 
> > diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
> > index 39e8c5d06157..838acce53e69 100644
> > --- a/drivers/usb/serial/ftdi_sio.c
> > +++ b/drivers/usb/serial/ftdi_sio.c
> > @@ -1167,6 +1167,23 @@ static int ftdi_sio_baud_to_divisor(int baud)
> >  	}
> >  }
> >  
> > +static int ftdi_sdio_divisor_to_baud(u32 divisor)
> > +{
> > +	switch (divisor) {
> > +	case ftdi_sio_b300: return 300;
> > +	case ftdi_sio_b600: return 600;
> > +	case ftdi_sio_b1200: return 1200;
> > +	case ftdi_sio_b2400: return 2400;
> > +	case ftdi_sio_b4800: return 4800;
> > +	case ftdi_sio_b9600: return 9600;
> > +	case ftdi_sio_b19200: return 19200;
> > +	case ftdi_sio_b38400: return 38400;
> > +	case ftdi_sio_b57600: return 57600;
> > +	case ftdi_sio_b115200: return 115200;
> > +	default: return 9600;
> > +	}
> > +}
> 
> This one should not be needed as sio only supports this discrete set of
> values in the first place.
> 
> >  static unsigned short int ftdi_232am_baud_base_to_divisor(int baud, int base)
> >  {
> >  	unsigned short int divisor;
> > @@ -1189,15 +1206,33 @@ static unsigned short int ftdi_232am_baud_base_to_divisor(int baud, int base)
> >  	return divisor;
> >  }
> >  
> > +static int ftdi_232am_divisor_base_to_baud(unsigned short int divisor, int base)
> 
> I believe "base" was used as a function name suffix in the inverse
> function (due to the additional base argument).

Yes, in the same way as it used in name of ftdi_232am_baud_base_to_divisor.

> > +{
> > +	static const unsigned char divfrac_inv[4] = { 0, 4, 2, 1 };
> > +	unsigned int divisor3;
> > +
> > +	if (divisor == 0)
> > +		divisor = 1;
> > +	divisor3 = (GENMASK(13, 0) & divisor) << 3;
> > +	divisor3 |= divfrac_inv[(divisor >> 14) & 0x3];
> > +	return DIV_ROUND_CLOSEST(base, 2 * divisor3);
> > +}
> 
> I don't have the motivation to try to review these inverses right now.
> 
> Let's get the rest of the series in order first.
> 
> Johan



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux