hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/drivers/i2c/i2c-mux.c
....@@ -26,6 +26,7 @@
2626 #include <linux/module.h>
2727 #include <linux/of.h>
2828 #include <linux/slab.h>
29
+#include <linux/sysfs.h>
2930
3031 /* multiplexer per channel data */
3132 struct i2c_mux_priv {
....@@ -243,8 +244,7 @@
243244 {
244245 struct i2c_mux_core *muxc;
245246
246
- muxc = devm_kzalloc(dev, sizeof(*muxc)
247
- + max_adapters * sizeof(muxc->adapter[0])
247
+ muxc = devm_kzalloc(dev, struct_size(muxc, adapter, max_adapters)
248248 + sizeof_priv, GFP_KERNEL);
249249 if (!muxc)
250250 return NULL;
....@@ -310,12 +310,18 @@
310310 else
311311 priv->algo.master_xfer = __i2c_mux_master_xfer;
312312 }
313
+ if (parent->algo->master_xfer_atomic)
314
+ priv->algo.master_xfer_atomic = priv->algo.master_xfer;
315
+
313316 if (parent->algo->smbus_xfer) {
314317 if (muxc->mux_locked)
315318 priv->algo.smbus_xfer = i2c_mux_smbus_xfer;
316319 else
317320 priv->algo.smbus_xfer = __i2c_mux_smbus_xfer;
318321 }
322
+ if (parent->algo->smbus_xfer_atomic)
323
+ priv->algo.smbus_xfer_atomic = priv->algo.smbus_xfer;
324
+
319325 priv->algo.functionality = i2c_mux_functionality;
320326
321327 /* Now fill out new adapter structure */