|
@@ -794,6 +794,22 @@ static int pca953x_probe(struct i2c_client *client,
|
|
|
}
|
|
|
|
|
|
mutex_init(&chip->i2c_lock);
|
|
|
+ /*
|
|
|
+ * In case we have an i2c-mux controlled by a GPIO provided by an
|
|
|
+ * expander using the same driver higher on the device tree, read the
|
|
|
+ * i2c adapter nesting depth and use the retrieved value as lockdep
|
|
|
+ * subclass for chip->i2c_lock.
|
|
|
+ *
|
|
|
+ * REVISIT: This solution is not complete. It protects us from lockdep
|
|
|
+ * false positives when the expander controlling the i2c-mux is on
|
|
|
+ * a different level on the device tree, but not when it's on the same
|
|
|
+ * level on a different branch (in which case the subclass number
|
|
|
+ * would be the same).
|
|
|
+ *
|
|
|
+ * TODO: Once a correct solution is developed, a similar fix should be
|
|
|
+ * applied to all other i2c-controlled GPIO expanders (and potentially
|
|
|
+ * regmap-i2c).
|
|
|
+ */
|
|
|
lockdep_set_subclass(&chip->i2c_lock,
|
|
|
i2c_adapter_depth(client->adapter));
|
|
|
|