diff options
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/i2c-mux.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 7409ebb33c47..abd7fb049c65 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -122,7 +122,6 @@ struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent, priv->mux_priv = mux_priv; priv->chan_id = chan_id; priv->select = select; - priv->deselect = deselect; /* Need to do algo dynamically because we don't know ahead * of time what sort of physical adapter we'll be dealing with. @@ -155,6 +154,7 @@ struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent, */ if (mux_dev->of_node) { struct device_node *child; + bool enable_deselect; u32 reg; for_each_child_of_node(mux_dev->of_node, child) { @@ -163,9 +163,15 @@ struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent, continue; if (chan_id == reg) { priv->adap.dev.of_node = child; + enable_deselect = of_property_read_bool(child, + "i2c-mux,deselect-on-exit"); + if (enable_deselect) + priv->deselect = deselect; break; } } + } else { + priv->deselect = deselect; } if (force_nr) { |