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

Reply via email to