RTEMS | Add the support for i2c driver in the aarch64/raspberrypi bsp (!363)

Shaunak Datar (@skdatar) gitlab at rtems.org
Tue Jun 24 17:33:51 UTC 2025




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.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/bugs/attachments/20250624/16b29a69/attachment-0001.htm>


More information about the bugs mailing list