diff options
author | Samuel Holland <samuel@sholland.org> | 2021-09-12 10:21:39 -0500 |
---|---|---|
committer | Heiko Schocher <hs@denx.de> | 2021-09-28 06:34:27 +0200 |
commit | 06cec894a5c37e79afd81eaaec7f1325b55f3e32 (patch) | |
tree | 955eebd685bb3d032d46470557c91690b65d3b87 /drivers/i2c | |
parent | e53979cd34320c67c8d0213618c2999a45e0d578 (diff) |
i2c: mvtwsi: Add support for DM clocks and resets
The controller may need to have clocks/resets enabled for it to work.
Add support for this. Since the clocks/resets are optional on some
platforms (per the device tree binding), do not prevent probing the
controller if they are missing.
Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/mvtwsi.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/i2c/mvtwsi.c b/drivers/i2c/mvtwsi.c index d33e2c7c9d..236bfb8d8e 100644 --- a/drivers/i2c/mvtwsi.c +++ b/drivers/i2c/mvtwsi.c @@ -17,7 +17,9 @@ #include <linux/bitops.h> #include <linux/compat.h> #if CONFIG_IS_ENABLED(DM_I2C) +#include <clk.h> #include <dm.h> +#include <reset.h> #endif DECLARE_GLOBAL_DATA_PTR; @@ -835,7 +837,18 @@ static int mvtwsi_i2c_bind(struct udevice *bus) static int mvtwsi_i2c_probe(struct udevice *bus) { struct mvtwsi_i2c_dev *dev = dev_get_priv(bus); + struct reset_ctl reset; + struct clk clk; uint actual_speed; + int ret; + + ret = reset_get_by_index(bus, 0, &reset); + if (!ret) + reset_deassert(&reset); + + ret = clk_get_by_index(bus, 0, &clk); + if (!ret) + clk_enable(&clk); __twsi_i2c_init(dev->base, dev->speed, dev->slaveadd, &actual_speed); dev->speed = actual_speed; |