This extension allows mux drivers to instruct i2c_mux_add_adapter to call i2c_register_spd. First user of this feature will be gpio mux. Note: In order to avoid a link error we have to ensure that I2C_SMBUS=y if I2C_MUX=y. Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> --- v2: - Select I2C_SMBUS to avoid a link error if I2C_MUX=y and I2C_SMBUS=m --- drivers/i2c/Kconfig | 1 + drivers/i2c/i2c-mux.c | 4 ++++ include/linux/i2c-mux.h | 1 + 3 files changed, 6 insertions(+) diff --git a/drivers/i2c/Kconfig b/drivers/i2c/Kconfig index 9388823bb..f57a4d3fe 100644 --- a/drivers/i2c/Kconfig +++ b/drivers/i2c/Kconfig @@ -61,6 +61,7 @@ config I2C_CHARDEV config I2C_MUX tristate "I2C bus multiplexing support" + select I2C_SMBUS help Say Y here if you want the I2C core to support the ability to handle multiplexed I2C bus topologies, by presenting each diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 57ff09f18..ada9c764f 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -22,6 +22,7 @@ #include <linux/acpi.h> #include <linux/i2c.h> #include <linux/i2c-mux.h> +#include <linux/i2c-smbus.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/of.h> @@ -429,6 +430,9 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, dev_info(&parent->dev, "Added multiplexed i2c bus %d\n", i2c_adapter_id(&priv->adap)); + if (muxc->register_spd) + i2c_register_spd(&priv->adap); + muxc->adapter[muxc->num_adapters++] = &priv->adap; return 0; diff --git a/include/linux/i2c-mux.h b/include/linux/i2c-mux.h index 98ef73b7c..ec51d9bc4 100644 --- a/include/linux/i2c-mux.h +++ b/include/linux/i2c-mux.h @@ -21,6 +21,7 @@ struct i2c_mux_core { unsigned int mux_locked:1; unsigned int arbitrator:1; unsigned int gate:1; + unsigned int register_spd:1; void *priv; -- 2.43.0