| .. | .. |
|---|
| 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 */ |
|---|