Hello, On Wed, Sep 21, 2016 at 12:44:14PM +0200, Nicolas Ferre wrote: > From: Alexey Starikovskiy <aystarik@xxxxxxxxx> > > The problem with previous code was it rounded values in wrong > place and produced wrong baud rate in some cases. > > Signed-off-by: Alexey Starikovskiy <aystarik@xxxxxxxxx> > [nicolas.ferre@xxxxxxxxx: port to newer kernel and add commit log] > Signed-off-by: Nicolas Ferre <nicolas.ferre@xxxxxxxxx> I first thought this patch results in not always picking the optimal divider in some cases. But given the right error function (i.e. error(r) = abs(1/r_target - 1/r_actual) which minimizes the error in the time domain and so guarantees the maximal count of matched samples) it can be proved to result in the right values (assuming no overflow etc.). As writing formulas in email is cumbersome, see the attachment for a prove. Reviewed-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |
Attachment:
baudrate.pdf
Description: Adobe PDF document