Skip to content

Adjust the pin control register values of each SDA and SCL pin

This will configure the SDA and SCL pins of each I2C bus to have a drive strength of 45Ohms, a slew rate of 50MHz, and disable their internal pull-up resistors.

This should be merged along with https://source.puri.sm/Librem5/linux-next/merge_requests/71.

Here is the .dtb that I built and tested:

imx8mq-librem5.dtb

purism@pureos:~$ uname -a
Linux pureos 5.3.0-librem5-h1 #1 SMP PREEMPT Fri Mar 20 17:01:48 UTC 2020 aarch64 GNU/Linux
purism@pureos:~$ sha1sum /boot/dtbs/5.3.0-librem5-h1/imx8mq-librem5.dtb
d1162a83fec3bf99af20bd6d9bd92f94aee4de5f  /boot/dtbs/5.3.0-librem5-h1/imx8mq-librem5.dtb

Here are my results from testing this change:

purism@pureos:~$ sudo i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU 
40: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
purism@pureos:~$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: UU -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
purism@pureos:~$ sudo i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- UU -- UU -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- 4a -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
purism@pureos:~$ sudo i2cdetect -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- UU -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
purism@pureos:~$ sudo i2cget -f -y 0 0x4b 0x00
0xa2

I measured I2C1_SDA which did not exhibit any misbehavior:

scope1

scope2

Merge request reports