summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/i2c-mux.c8
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) {