summaryrefslogtreecommitdiffstats
path: root/src/soc/intel/common/block/i2c/i2c.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/intel/common/block/i2c/i2c.c')
-rw-r--r--src/soc/intel/common/block/i2c/i2c.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/i2c/i2c.c b/src/soc/intel/common/block/i2c/i2c.c
index d551c51abf88..854a61a884a1 100644
--- a/src/soc/intel/common/block/i2c/i2c.c
+++ b/src/soc/intel/common/block/i2c/i2c.c
@@ -87,6 +87,9 @@ static int lpss_i2c_early_init_bus(unsigned int bus)
/* Take device out of reset */
lpss_reset_release(base);
+ /* Ensure controller is in D0 state */
+ lpss_set_power_state(tree_dev, STATE_D0);
+
/* Initialize the controller */
if (dw_i2c_init(bus, config) < 0) {
printk(BIOS_ERR, "I2C%u failed to initialize\n", bus);
@@ -162,6 +165,9 @@ static void dw_i2c_device_init(struct device *dev)
if (!base_address)
return;
+ /* Ensure controller is in D0 state */
+ lpss_set_power_state(dev, STATE_D0);
+
/* Take device out of reset if its not done before */
if (lpss_is_controller_in_reset(base_address))
lpss_reset_release(base_address);