int clk_disable(struct clk *clk) { struct clk_ops *ops = clk_dev_ops(clk->dev); debug("%s(clk=%p)\n", __func__, clk); if (!ops->disable) return -ENOSYS; return ops->disable(clk); }
ulong clk_set_rate(struct clk *clk, ulong rate) { struct clk_ops *ops = clk_dev_ops(clk->dev); debug("%s(clk=%p, rate=%lu)\n", __func__, clk, rate); if (!ops->set_rate) return -ENOSYS; return ops->set_rate(clk, rate); }
ulong clk_get_rate(struct clk *clk) { struct clk_ops *ops = clk_dev_ops(clk->dev); debug("%s(clk=%p)\n", __func__, clk); if (!ops->get_rate) return -ENOSYS; return ops->get_rate(clk); }
int clk_free(struct clk *clk) { struct clk_ops *ops = clk_dev_ops(clk->dev); debug("%s(clk=%p)\n", __func__, clk); if (!ops->free) return 0; return ops->free(clk); }
int clk_request(struct udevice *dev, struct clk *clk) { struct clk_ops *ops = clk_dev_ops(dev); debug("%s(dev=%p, clk=%p)\n", __func__, dev, clk); clk->dev = dev; if (!ops->request) return 0; return ops->request(clk); }
int clk_get_by_index(struct udevice *dev, int index, struct clk *clk) { int ret; struct ofnode_phandle_args args; struct udevice *dev_clk; struct clk_ops *ops; debug("%s(dev=%p, index=%d, clk=%p)\n", __func__, dev, index, clk); assert(clk); clk->dev = NULL; ret = dev_read_phandle_with_args(dev, "clocks", "#clock-cells", 0, index, &args); if (ret) { debug("%s: fdtdec_parse_phandle_with_args failed: err=%d\n", __func__, ret); return ret; } ret = uclass_get_device_by_ofnode(UCLASS_CLK, args.node, &dev_clk); if (ret) { debug("%s: uclass_get_device_by_of_offset failed: err=%d\n", __func__, ret); return ret; } clk->dev = dev_clk; ops = clk_dev_ops(dev_clk); if (ops->of_xlate) ret = ops->of_xlate(clk, &args); else ret = clk_of_xlate_default(clk, &args); if (ret) { debug("of_xlate() failed: %d\n", ret); return ret; } return clk_request(dev_clk, clk); }