.. | .. |
---|
26 | 26 | #include <linux/module.h> |
---|
27 | 27 | #include <linux/of.h> |
---|
28 | 28 | #include <linux/slab.h> |
---|
| 29 | +#include <linux/sysfs.h> |
---|
29 | 30 | |
---|
30 | 31 | /* multiplexer per channel data */ |
---|
31 | 32 | struct i2c_mux_priv { |
---|
.. | .. |
---|
243 | 244 | { |
---|
244 | 245 | struct i2c_mux_core *muxc; |
---|
245 | 246 | |
---|
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) |
---|
248 | 248 | + sizeof_priv, GFP_KERNEL); |
---|
249 | 249 | if (!muxc) |
---|
250 | 250 | return NULL; |
---|
.. | .. |
---|
310 | 310 | else |
---|
311 | 311 | priv->algo.master_xfer = __i2c_mux_master_xfer; |
---|
312 | 312 | } |
---|
| 313 | + if (parent->algo->master_xfer_atomic) |
---|
| 314 | + priv->algo.master_xfer_atomic = priv->algo.master_xfer; |
---|
| 315 | + |
---|
313 | 316 | if (parent->algo->smbus_xfer) { |
---|
314 | 317 | if (muxc->mux_locked) |
---|
315 | 318 | priv->algo.smbus_xfer = i2c_mux_smbus_xfer; |
---|
316 | 319 | else |
---|
317 | 320 | priv->algo.smbus_xfer = __i2c_mux_smbus_xfer; |
---|
318 | 321 | } |
---|
| 322 | + if (parent->algo->smbus_xfer_atomic) |
---|
| 323 | + priv->algo.smbus_xfer_atomic = priv->algo.smbus_xfer; |
---|
| 324 | + |
---|
319 | 325 | priv->algo.functionality = i2c_mux_functionality; |
---|
320 | 326 | |
---|
321 | 327 | /* Now fill out new adapter structure */ |
---|