Minix I2C Drivers for the BeagleBone Black - Report 3

This is Report #3. I plan to post these every Sunday. They will give a rundown of what I’ve done during the week, list any problems I had, and what I plan to do the following week. I’ll be posting the reports both to the beagle-gsoc Google Group and to my blog.

Completed this week:

  • Rebased against mainline Minix.
  • Finished a simple I2C EEPROM test program that uses the /dev interface to write to specific locations in the EEPROM and read back what it wrote.
  • Did some testing, but I ran into an issue with the third i2c bus on the BBB (see “Issues” section below for details).
  • Enhanced i2cscan to support scanning using only the 1 byte read method (i.e. make it work similar to i2cdetect -r). Submitted patches upstream to NetBSD.
  • Defined an interface for accessing the i2c bus from other drivers and implemented it.
  • Created libi2cdriver and wrote common routines that would have been repeated in most i2c device drivers.
  • Updated the rc script to start the i2c bus drivers at boot and start the the proper i2c device drivers for the board it’s being run on (BBB, BB, xM).
  • Started work on a CAT24C256 Driver (EEPROM). Implemented reading from specific locations on the chip.
  • Wrote a couple of blog posts: Using i2c-tools with Angstrom Linux on the BeagleBone Black, BeagleBone debugging with OpenOCD

Issues / Concerns / Challenges:

  • I spent well over 15 hours trying to figure out why my i2c bus code worked great for the first two I2C buses but not for the 3rd I2C bus. I got some tips in #beagle-gsoc from the group and from my mentors. Eventually, one of my mentors, Kees, figured out that the pinmux settings were not being applied. It turns out that writes to the control module need to be done in privileged mode. Since my code runs in userspace, writes to the control registers weren’t having an affect. It seems that the only reason the first two buses worked was because they were left over from u-boot’s pinmuxing.

Plan for next week:

  • Follow up with upstream on the patches to NetBSD’s i2cscan program.

  • Finish the CAT24C256 Driver (EEPROM) by implementing writing to specific locations on the chip and developing an interface.

  • See how I can help the Minix team get the pinmux library working.

  • Code clean-up / testing / review.

  • If all goes well and time permits, submit what I’ve done so far to mainline Minix and write some documentation.

  • Begin working on a driver for reading extended display identification data.