mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 18:04:48 +00:00
dm: i2c: dts: Support an offset-len device tree property
Since U-Boot can support different offset lengths (0-4 bytes), add a device tree property to specify this. This avoids hard-coding it in the driver. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
189d80166b
commit
7132b9fd68
2 changed files with 30 additions and 1 deletions
28
doc/device-tree-bindings/i2c/i2c.txt
Normal file
28
doc/device-tree-bindings/i2c/i2c.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
U-Boot I2C
|
||||||
|
----------
|
||||||
|
|
||||||
|
U-Boot's I2C model has the concept of an offset within a chip (I2C target
|
||||||
|
device). The offset can be up to 4 bytes long, but is normally 1 byte,
|
||||||
|
meaning that offsets from 0 to 255 are supported by the chip. This often
|
||||||
|
corresponds to register numbers.
|
||||||
|
|
||||||
|
Apart from the controller-specific I2C bindings, U-Boot supports a special
|
||||||
|
property which allows the chip offset length to be selected.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- u-boot,i2c-offset-len - length of chip offset in bytes. If omitted the
|
||||||
|
default value of 1 is used.
|
||||||
|
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
|
||||||
|
i2c4: i2c@12ca0000 {
|
||||||
|
cros-ec@1e {
|
||||||
|
reg = <0x1e>;
|
||||||
|
compatible = "google,cros-ec";
|
||||||
|
i2c-max-frequency = <100000>;
|
||||||
|
u-boot,i2c-offset-len = <0>;
|
||||||
|
ec-interrupt = <&gpx1 6 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -420,7 +420,8 @@ int i2c_deblock(struct udevice *bus)
|
||||||
int i2c_chip_ofdata_to_platdata(const void *blob, int node,
|
int i2c_chip_ofdata_to_platdata(const void *blob, int node,
|
||||||
struct dm_i2c_chip *chip)
|
struct dm_i2c_chip *chip)
|
||||||
{
|
{
|
||||||
chip->offset_len = 1; /* default */
|
chip->offset_len = fdtdec_get_int(gd->fdt_blob, node,
|
||||||
|
"u-boot,i2c-offset-len", 1);
|
||||||
chip->flags = 0;
|
chip->flags = 0;
|
||||||
chip->chip_addr = fdtdec_get_int(gd->fdt_blob, node, "reg", -1);
|
chip->chip_addr = fdtdec_get_int(gd->fdt_blob, node, "reg", -1);
|
||||||
if (chip->chip_addr == -1) {
|
if (chip->chip_addr == -1) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue