dev_info(dev, "%d-port mux on %s adapter\n", children, parent->name);
#include <linux/i2c-mux.h>
#include <linux/module.h>
#include <linux/mux/consumer.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
struct mux_control *control;
static int i2c_mux_select(struct i2c_mux_core *muxc, u32 chan)
struct mux *mux = i2c_mux_priv(muxc);
ret = mux_control_select(mux->control, chan);
mux->do_not_deselect = ret < 0;
static int i2c_mux_deselect(struct i2c_mux_core *muxc, u32 chan)
struct mux *mux = i2c_mux_priv(muxc);
if (mux->do_not_deselect)
return mux_control_deselect(mux->control);
static struct i2c_adapter *mux_parent_adapter(struct device *dev)
struct device_node *np = dev->of_node;
struct device_node *parent_np;
struct i2c_adapter *parent;
parent_np = of_parse_phandle(np, "i2c-parent", 0);
dev_err(dev, "Cannot parse i2c-parent\n");
parent = of_find_i2c_adapter_by_node(parent_np);
return ERR_PTR(-EPROBE_DEFER);
static const struct of_device_id i2c_mux_of_match[] = {