Messages in this thread | | | Date | Thu, 9 Nov 2017 18:21:24 +0100 | From | Juergen Fitschen <> | Subject | [PATCH v2 0/3] i2c: at91: slave mode support |
| |
Based on the discussion we had on the i2c-linux list [1], I wrote a patch for AT91 hardware and tried to fulfill the Linux I2C slave interface description [2] as good as possible. This enables aforementioned hardware to act as an I2C slave that can be accessed by a remote I2C master.
I have tested this patchset successfully on an ATSAMA5D27.
^ 3.3V ^ 3.3V +-----------------------+ | | +-----------------------+ | Slave: ATSAMA5D27 | +-+ +-+ | Master: ATSAMA5D35 | | with i2c-slave-eeprom | | | 100k | | 100k | with i2cset | +-------------------+-+-+ +-+ +-+ +-+-+-------------------+ | | | | | | | +------+---------|---(SDA)---+ | +------------------+---(SCL)-----+
Schematic: Connection of slave and master with 100kOhm pullup resistors.
On the master the following BASH script has been used to stress the slave.
root@emblinux:~# cat ./stress.sh #!/bin/bash I=0 while true do if i2cset -y -r 1 0x64 0 $I w | grep mismatch then echo "$(date): Error in transmission ${I}" fi ((I++)) if [ $I -eq 65536 ] then I=0 echo "$(date): Sent 65536 transmissions" fi done
After running the script for some time I had the following output. To me this looks promising :)
root@emblinux:~# ./stress.sh Thu Nov 9 13:58:45 CTE 2017: Sent 65536 transmissions Thu Nov 9 14:35:20 CTE 2017: Sent 65536 transmissions Thu Nov 9 15:12:11 CTE 2017: Sent 65536 transmissions Thu Nov 9 15:49:04 CTE 2017: Sent 65536 transmissions Thu Nov 9 16:26:00 CTE 2017: Sent 65536 transmissions Thu Nov 9 17:03:07 UTC 2017: Sent 65536 transmissions Thu Nov 9 17:40:15 UTC 2017: Sent 65536 transmissions
If you have some hardware with an at91-i2c interface included at hand, I really would appreciate if you can run the test script on your hardware and test this driver.
Best regards Juergen
Changes in v2: - Implemented all suggestions made by Ludovic. (Thank you!) - Reworked the IRQ handler completely. Have a look in patch 3 fort further details.
[1] https://marc.info/?t=150824004800001&r=1&w=1 [2] https://www.kernel.org/doc/Documentation/i2c/slave-interface
Juergen Fitschen (3): i2c: at91: segregate master mode specific code from probe and init func i2c: at91: split driver into core and master file i2c: at91: added slave mode support
Documentation/devicetree/bindings/i2c/i2c-at91.txt | 14 + MAINTAINERS | 3 +- drivers/i2c/busses/Kconfig | 10 + drivers/i2c/busses/Makefile | 4 + drivers/i2c/busses/i2c-at91-core.c | 390 ++++++ drivers/i2c/busses/i2c-at91-master.c | 806 +++++++++++++ drivers/i2c/busses/i2c-at91-slave.c | 216 ++++ drivers/i2c/busses/i2c-at91.c | 1243 -------------------- drivers/i2c/busses/i2c-at91.h | 191 +++ 9 files changed, 1633 insertions(+), 1244 deletions(-) create mode 100644 drivers/i2c/busses/i2c-at91-core.c create mode 100644 drivers/i2c/busses/i2c-at91-master.c create mode 100644 drivers/i2c/busses/i2c-at91-slave.c delete mode 100644 drivers/i2c/busses/i2c-at91.c create mode 100644 drivers/i2c/busses/i2c-at91.h
-- 2.7.4
| |