|
@@ -98,6 +98,33 @@ static unsigned int i2c_mux_parent_classes(struct i2c_adapter *parent)
|
|
|
return class;
|
|
|
}
|
|
|
|
|
|
+static void i2c_parent_lock_bus(struct i2c_adapter *adapter,
|
|
|
+ unsigned int flags)
|
|
|
+{
|
|
|
+ struct i2c_mux_priv *priv = adapter->algo_data;
|
|
|
+ struct i2c_adapter *parent = priv->muxc->parent;
|
|
|
+
|
|
|
+ parent->lock_bus(parent, flags);
|
|
|
+}
|
|
|
+
|
|
|
+static int i2c_parent_trylock_bus(struct i2c_adapter *adapter,
|
|
|
+ unsigned int flags)
|
|
|
+{
|
|
|
+ struct i2c_mux_priv *priv = adapter->algo_data;
|
|
|
+ struct i2c_adapter *parent = priv->muxc->parent;
|
|
|
+
|
|
|
+ return parent->trylock_bus(parent, flags);
|
|
|
+}
|
|
|
+
|
|
|
+static void i2c_parent_unlock_bus(struct i2c_adapter *adapter,
|
|
|
+ unsigned int flags)
|
|
|
+{
|
|
|
+ struct i2c_mux_priv *priv = adapter->algo_data;
|
|
|
+ struct i2c_adapter *parent = priv->muxc->parent;
|
|
|
+
|
|
|
+ parent->unlock_bus(parent, flags);
|
|
|
+}
|
|
|
+
|
|
|
struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent,
|
|
|
struct device *dev, int max_adapters,
|
|
|
int sizeof_priv, u32 flags,
|
|
@@ -165,6 +192,9 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
|
|
|
priv->adap.retries = parent->retries;
|
|
|
priv->adap.timeout = parent->timeout;
|
|
|
priv->adap.quirks = parent->quirks;
|
|
|
+ priv->adap.lock_bus = i2c_parent_lock_bus;
|
|
|
+ priv->adap.trylock_bus = i2c_parent_trylock_bus;
|
|
|
+ priv->adap.unlock_bus = i2c_parent_unlock_bus;
|
|
|
|
|
|
/* Sanity check on class */
|
|
|
if (i2c_mux_parent_classes(parent) & class)
|