int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk) { int index; debug("%s(dev=%p, name=%s, clk=%p)\n", __func__, dev, name, clk); clk->dev = NULL; index = dev_read_stringlist_search(dev, "clock-names", name); if (index < 0) { debug("fdt_stringlist_search() failed: %d\n", index); return index; } return clk_get_by_index(dev, index, clk); }
/** * pinctrl_select_state_full() - full implementation of pinctrl_select_state * * @dev: peripheral device * @statename: state name, like "default" * @return: 0 on success, or negative error code on failure */ static int pinctrl_select_state_full(struct udevice *dev, const char *statename) { char propname[32]; /* long enough */ const fdt32_t *list; uint32_t phandle; struct udevice *config; int state, size, i, ret; state = dev_read_stringlist_search(dev, "pinctrl-names", statename); if (state < 0) { char *end; /* * If statename is not found in "pinctrl-names", * assume statename is just the integer state ID. */ state = simple_strtoul(statename, &end, 10); if (*end) return -EINVAL; } snprintf(propname, sizeof(propname), "pinctrl-%d", state); list = dev_read_prop(dev, propname, &size); if (!list) return -EINVAL; size /= sizeof(*list); for (i = 0; i < size; i++) { phandle = fdt32_to_cpu(*list++); ret = uclass_get_device_by_phandle_id(UCLASS_PINCONFIG, phandle, &config); if (ret) return ret; ret = pinctrl_config_one(config); if (ret) return ret; } return 0; }