Lines Matching +full:i2c +full:- +full:mux
2 * General Purpose I2C multiplexer
13 #include <linux/i2c.h>
14 #include <linux/i2c-mux.h>
16 #include <linux/mux/consumer.h>
20 struct mux { struct
28 struct mux *mux = i2c_mux_priv(muxc); in i2c_mux_select() local
31 ret = mux_control_select(mux->control, chan); in i2c_mux_select()
32 mux->do_not_deselect = ret < 0; in i2c_mux_select()
39 struct mux *mux = i2c_mux_priv(muxc); in i2c_mux_deselect() local
41 if (mux->do_not_deselect) in i2c_mux_deselect()
44 return mux_control_deselect(mux->control); in i2c_mux_deselect()
49 struct device_node *np = dev->of_node; in mux_parent_adapter()
53 parent_np = of_parse_phandle(np, "i2c-parent", 0); in mux_parent_adapter()
55 dev_err(dev, "Cannot parse i2c-parent\n"); in mux_parent_adapter()
56 return ERR_PTR(-ENODEV); in mux_parent_adapter()
61 return ERR_PTR(-EPROBE_DEFER); in mux_parent_adapter()
67 { .compatible = "i2c-mux", },
74 struct device *dev = &pdev->dev; in i2c_mux_probe()
75 struct device_node *np = dev->of_node; in i2c_mux_probe()
78 struct mux *mux; in i2c_mux_probe() local
84 return -ENODEV; in i2c_mux_probe()
86 mux = devm_kzalloc(dev, sizeof(*mux), GFP_KERNEL); in i2c_mux_probe()
87 if (!mux) in i2c_mux_probe()
88 return -ENOMEM; in i2c_mux_probe()
90 mux->control = devm_mux_control_get(dev, NULL); in i2c_mux_probe()
91 if (IS_ERR(mux->control)) { in i2c_mux_probe()
92 if (PTR_ERR(mux->control) != -EPROBE_DEFER) in i2c_mux_probe()
93 dev_err(dev, "failed to get control-mux\n"); in i2c_mux_probe()
94 return PTR_ERR(mux->control); in i2c_mux_probe()
99 if (PTR_ERR(parent) != -EPROBE_DEFER) in i2c_mux_probe()
100 dev_err(dev, "failed to get i2c-parent adapter\n"); in i2c_mux_probe()
109 ret = -ENOMEM; in i2c_mux_probe()
112 muxc->priv = mux; in i2c_mux_probe()
116 muxc->mux_locked = of_property_read_bool(np, "mux-locked"); in i2c_mux_probe()
124 child->name); in i2c_mux_probe()
128 if (chan >= mux_control_states(mux->control)) { in i2c_mux_probe()
130 ret = -EINVAL; in i2c_mux_probe()
139 dev_info(dev, "%d-port mux on %s adapter\n", children, parent->name); in i2c_mux_probe()
156 i2c_put_adapter(muxc->parent); in i2c_mux_remove()
165 .name = "i2c-mux-gpmux",
171 MODULE_DESCRIPTION("General Purpose I2C multiplexer driver");