Shaunak Datar commented on a discussion on bsps/aarch64/raspberrypi/i2c/raspberrypi-i2c.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_125157 > +} > + > +static int rpi_i2c_set_clock( i2c_bus *base, unsigned long clock ) > +{ > + raspberrypi_i2c_bus *bus = (raspberrypi_i2c_bus *) base; > + uint32_t clock_rate; > + uint16_t divider; > + > + divider = BSC_CORE_CLK_HZ / clock; > + > + clock_rate = BSC_CORE_CLK_HZ / divider; > + > + while ( clock_rate > clock ) { > + ++divider; > + clock_rate = BSC_CORE_CLK_HZ / divider; > + } This is the same one from the arm/raspberry pi I2C. My understanding is that the loop protects against round-off errors. Normally the clock_rate == clock is always true, but if the clock = 99999 we have the BCS_CORE_CLK_HZ = 150000000, divider = 1500.015 which is rounded off to 1500, then clock_rate = 100000. Now clock_rate > clock and the loop is run. -- View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/363#note_125157 You're receiving this email because of your account on gitlab.rtems.org.
_______________________________________________ bugs mailing list bugs@rtems.org http://lists.rtems.org/mailman/listinfo/bugs