Device-Tree bindings for i2c gpio driver
Required properties:
- compatible = "i2c-gpio";
- sda-gpios: gpio used for the sda signal, this should be flagged as
active high using open drain with (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)
from <dt-bindings/gpio/gpio.h> since the signal is by definition
open drain.
- scl-gpios: gpio used for the scl signal, this should be flagged as
active high using open drain with (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)
from <dt-bindings/gpio/gpio.h> since the signal is by definition
open drain.
Optional properties:
- i2c-gpio,scl-output-only: scl as output only
- i2c-gpio,delay-us: delay between GPIO operations (may depend on each platform)
- i2c-gpio,timeout-ms: timeout to get data
Deprecated properties, do not use in new device tree sources:
- gpios: sda and scl gpio, alternative for {sda,scl}-gpios
- i2c-gpio,sda-open-drain: this means that something outside of our
control has put the GPIO line used for SDA into open drain mode, and
that something is not the GPIO chip. It is essentially an
inconsistency flag.
- i2c-gpio,scl-open-drain: this means that something outside of our
control has put the GPIO line used for SCL into open drain mode, and
that something is not the GPIO chip. It is essentially an
inconsistency flag.
Example nodes:
#include <dt-bindings/gpio/gpio.h>
i2c@0 {
compatible = "i2c-gpio";
sda-gpios = <&pioA 23 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
scl-gpios = <&pioA 24 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
i2c-gpio,delay-us = <2>; /* ~100 kHz */
#address-cells = <1>;
#size-cells = <0>;
rv3029c2@56 {
compatible = "rv3029c2";
reg = <0x56>;
};
};
As I understand based on schema some strings should be corrected for the R64 like this:
i have not written new nodes…only changed some nodes or ported from 1 kernel version to another…you need some more info about the gpio-device (i don’t have it)
at least you need something like this in dtsi
i2c0 {
compatible = "i2c-gpio";
reg= <address size>; //memory address and size for driver
sda-gpios = <&pio 3 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; //which gpio should be used and which mode (active high or opendrain) for sda
scl-gpios = <&pio 5 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; //like sda now for scl
status = "okay";
};
I got i2c working now.
kmod-i2c-gpio-custom was removed from kernel 4.19, and not need that module anymore.
Just enable i2c-core and i2c-gpio from “I2C support”, and enable I2C and mediatek I2C device from kernel_menuconfig.
Not need to modify dts, the i2c config from the default dts for bpi-r64 is correct.