mux->pinctrl = devm_pinctrl_get(dev); if (IS_ERR(mux->pinctrl)) {
ret = PTR_ERR(mux->pinctrl);
dev_err(dev, "Cannot get pinctrl: %d\n", ret); goto err_put_parent;
}
for (i = 0; i < num_names; i++) {
ret = of_property_read_string_index(np, "pinctrl-names", i,
&name); if (ret < 0) {
dev_err(dev, "Cannot parse pinctrl-names: %d\n", ret); goto err_put_parent;
}
mux->states[i] = pinctrl_lookup_state(mux->pinctrl, name); if (IS_ERR(mux->states[i])) {
ret = PTR_ERR(mux->states[i]);
dev_err(dev, "Cannot look up pinctrl state %s: %d\n",
name, ret); goto err_put_parent;
}
if (strcmp(name, "idle")) continue;
if (i != num_names - 1) {
dev_err(dev, "idle state must be last\n");
ret = -EINVAL; goto err_put_parent;
}
muxc->deselect = i2c_mux_pinctrl_deselect;
}
root = i2c_root_adapter(&muxc->parent->dev);
muxc->mux_locked = true; for (i = 0; i < num_names; i++) { if (root != i2c_mux_pinctrl_root_adapter(mux->states[i])) {
muxc->mux_locked = false; break;
}
} if (muxc->mux_locked)
dev_info(dev, "mux-locked i2c mux\n");
/* Do not add any adapter for the idle state (if it's there at all). */ for (i = 0; i < num_names - !!muxc->deselect; i++) {
ret = i2c_mux_add_adapter(muxc, 0, i); if (ret) goto err_del_adapter;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.