Lines Matching +full:control +full:- +full:parent
14 #include <linux/i2c-mux.h>
21 struct mux_control *control; member
31 ret = mux_control_select(mux->control, chan); in i2c_mux_select()
32 mux->do_not_deselect = ret < 0; in i2c_mux_select()
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()
51 struct i2c_adapter *parent; in mux_parent_adapter() local
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()
58 parent = of_find_i2c_adapter_by_node(parent_np); in mux_parent_adapter()
60 if (!parent) in mux_parent_adapter()
61 return ERR_PTR(-EPROBE_DEFER); in mux_parent_adapter()
63 return parent; 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()
79 struct i2c_adapter *parent; in i2c_mux_probe() local
84 return -ENODEV; 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()
97 parent = mux_parent_adapter(dev); in i2c_mux_probe()
98 if (IS_ERR(parent)) { 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()
101 return PTR_ERR(parent); in i2c_mux_probe()
106 muxc = i2c_mux_alloc(parent, dev, children, 0, 0, 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()
146 i2c_put_adapter(parent); in i2c_mux_probe()
156 i2c_put_adapter(muxc->parent); in i2c_mux_remove()
165 .name = "i2c-mux-gpmux",