diff options
author | Duncan Laurie <dlaurie@chromium.org> | 2016-05-07 19:49:37 -0700 |
---|---|---|
committer | Duncan Laurie <dlaurie@google.com> | 2016-05-16 19:49:46 +0200 |
commit | b7ce5fe31120d6fb7866f2e3e6c66b93bf185127 (patch) | |
tree | fd5dfe2185fb5c75b10b38da1dc4c0fb4d1ba4d8 | |
parent | b1fb0152bfe02d5f22a9550e22b8cc522b5adbfd (diff) | |
download | coreboot-b7ce5fe31120d6fb7866f2e3e6c66b93bf185127.tar.xz |
sconfig: Add 10bit addressing mode to i2c device type
Use the second token for an i2c device entry in devicetree.cb to
indicate if it should use 10-bit addressing or 7-bit. The default if
not provided is to use 7-bit addressing, but it can be changed to
10-bit addressing with the ".1" suffix. For example:
chip drivers/i2c/generic
device i2c 3a.1 on end
end
Change-Id: I1d81a7e154fbc040def4d99ad07966fac242a472
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: https://review.coreboot.org/14788
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r-- | src/device/device_util.c | 5 | ||||
-rw-r--r-- | src/include/device/path.h | 1 | ||||
-rw-r--r-- | util/sconfig/main.c | 2 |
3 files changed, 5 insertions, 3 deletions
diff --git a/src/device/device_util.c b/src/device/device_util.c index 837dfb593f..b538212a83 100644 --- a/src/device/device_util.c +++ b/src/device/device_util.c @@ -202,7 +202,7 @@ u32 dev_path_encode(device_t dev) ret |= dev->path.pnp.port << 8 | dev->path.pnp.device; break; case DEVICE_PATH_I2C: - ret |= dev->bus->secondary << 8 | dev->path.pnp.device; + ret |= dev->path.i2c.mode_10bit << 8 | dev->path.i2c.device; break; case DEVICE_PATH_APIC: ret |= dev->path.apic.apic_id; @@ -334,7 +334,8 @@ int path_eq(struct device_path *path1, struct device_path *path2) (path1->pnp.device == path2->pnp.device); break; case DEVICE_PATH_I2C: - equal = (path1->i2c.device == path2->i2c.device); + equal = (path1->i2c.device == path2->i2c.device) && + (path1->i2c.mode_10bit == path2->i2c.mode_10bit); break; case DEVICE_PATH_APIC: equal = (path1->apic.apic_id == path2->apic.apic_id); diff --git a/src/include/device/path.h b/src/include/device/path.h index ba7661d6c4..8421a38473 100644 --- a/src/include/device/path.h +++ b/src/include/device/path.h @@ -53,6 +53,7 @@ struct pnp_path struct i2c_path { unsigned device; + unsigned mode_10bit; }; struct apic_path diff --git a/util/sconfig/main.c b/util/sconfig/main.c index 53fb030587..fea90f4c57 100644 --- a/util/sconfig/main.c +++ b/util/sconfig/main.c @@ -257,7 +257,7 @@ struct device *new_device(struct device *parent, struct device *busdev, const in break; case I2C: - new_d->path = ".type=DEVICE_PATH_I2C,{.i2c={ .device = 0x%x }}"; + new_d->path = ".type=DEVICE_PATH_I2C,{.i2c={ .device = 0x%x, .mode_10bit = %d }}"; break; case APIC: |