diff options
Diffstat (limited to 'include/linux/i2c-mux.h')
| -rw-r--r-- | include/linux/i2c-mux.h | 55 | 
1 files changed, 41 insertions, 14 deletions
| diff --git a/include/linux/i2c-mux.h b/include/linux/i2c-mux.h index b5f9a007a3ab..d4c1d12f900d 100644 --- a/include/linux/i2c-mux.h +++ b/include/linux/i2c-mux.h @@ -27,22 +27,49 @@  #ifdef __KERNEL__ +#include <linux/bitops.h> + +struct i2c_mux_core { +	struct i2c_adapter *parent; +	struct device *dev; +	bool mux_locked; + +	void *priv; + +	int (*select)(struct i2c_mux_core *, u32 chan_id); +	int (*deselect)(struct i2c_mux_core *, u32 chan_id); + +	int num_adapters; +	int max_adapters; +	struct i2c_adapter *adapter[0]; +}; + +struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent, +				   struct device *dev, int max_adapters, +				   int sizeof_priv, u32 flags, +				   int (*select)(struct i2c_mux_core *, u32), +				   int (*deselect)(struct i2c_mux_core *, u32)); + +/* flags for i2c_mux_alloc */ +#define I2C_MUX_LOCKED BIT(0) + +static inline void *i2c_mux_priv(struct i2c_mux_core *muxc) +{ +	return muxc->priv; +} + +struct i2c_adapter *i2c_root_adapter(struct device *dev); +  /* - * Called to create a i2c bus on a multiplexed bus segment. - * The mux_dev and chan_id parameters are passed to the select - * and deselect callback functions to perform hardware-specific - * mux control. + * Called to create an i2c bus on a multiplexed bus segment. + * The chan_id parameter is passed to the select and deselect + * callback functions to perform hardware-specific mux control.   */ -struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent, -				struct device *mux_dev, -				void *mux_priv, u32 force_nr, u32 chan_id, -				unsigned int class, -				int (*select) (struct i2c_adapter *, -					       void *mux_dev, u32 chan_id), -				int (*deselect) (struct i2c_adapter *, -						 void *mux_dev, u32 chan_id)); - -void i2c_del_mux_adapter(struct i2c_adapter *adap); +int i2c_mux_add_adapter(struct i2c_mux_core *muxc, +			u32 force_nr, u32 chan_id, +			unsigned int class); + +void i2c_mux_del_adapters(struct i2c_mux_core *muxc);  #endif /* __KERNEL__ */ |