diff options
author | ian <ian@FreeBSD.org> | 2015-10-09 22:28:56 +0000 |
---|---|---|
committer | ian <ian@FreeBSD.org> | 2015-10-09 22:28:56 +0000 |
commit | 0fec972d61176205b027afb563c843df9b03d010 (patch) | |
tree | 9b03e111cea4dadc3df9db016c8586aadc44cbb7 /lib/libc/stdio/stdio.c | |
parent | 626dfed37b2d9cc2220210fac8774afe30c40fcf (diff) | |
download | FreeBSD-src-0fec972d61176205b027afb563c843df9b03d010.zip FreeBSD-src-0fec972d61176205b027afb563c843df9b03d010.tar.gz |
Mostly rewrite the imx i2c driver. This started out as an attempt to fix
one specific problem: the driver didn't check for ACK/NAK after writing a
slave address byte to the bus, and some slaves signal that they are busy
(such as when completing an internal write to flash memory) by sending a
NAK in response to being addressed.
While working on that problem I discovered that the driver's handling of
error conditions in general didn't match the state transition diagram in
the reference manual, and making that right resulted in a lot of code
reorganization.
Along the way various other changes also happened...
- Remove a mutex that wasn't protecting anything.
- Remove some mystery DELAY()s, document the few that remain.
- Use pause_sbt(9) to yield the processor for the bulk of the time it
takes to transfer each byte rather than busy-polling the whole time.
- Disable the controller when no transfers are in progress; since we
don't operate in slave mode, there's no reason to run the hardware.
- Remove a bunch of unecessary code from probe().
Diffstat (limited to 'lib/libc/stdio/stdio.c')
0 files changed, 0 insertions, 0 deletions