summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorSebastian Reichel <sebastian.reichel@collabora.com>2021-07-15 18:39:59 +0300
committerHeiko Schocher <hs@denx.de>2021-08-22 11:52:53 +0300
commit2aefa6e3f2ab621483ca645b16c7bf8cb9334fa3 (patch)
treece32ac1a9ee05266489dd58f9ff0ade8852e51cb /drivers/i2c
parent79d389a54891a67269bfa366f044a2079409e499 (diff)
downloadu-boot-2aefa6e3f2ab621483ca645b16c7bf8cb9334fa3.tar.xz
i2c: add dm_i2c_reg_clrset
Add function to apply a bitmask to an i2c register, so that specific bits can be cleared and/or set. Suggested-by: Simon Glass <sjg@chromium.org> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/i2c-uclass.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c
index 04c88503a2..db1c9d9462 100644
--- a/drivers/i2c/i2c-uclass.c
+++ b/drivers/i2c/i2c-uclass.c
@@ -247,6 +247,21 @@ int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value)
return dm_i2c_write(dev, offset, &val, 1);
}
+int dm_i2c_reg_clrset(struct udevice *dev, uint offset, u32 clr, u32 set)
+{
+ uint8_t val;
+ int ret;
+
+ ret = dm_i2c_read(dev, offset, &val, 1);
+ if (ret < 0)
+ return ret;
+
+ val &= ~clr;
+ val |= set;
+
+ return dm_i2c_write(dev, offset, &val, 1);
+}
+
/**
* i2c_probe_chip() - probe for a chip on a bus
*