Hi Simon,
2016-01-19 11:27 GMT+09:00 Simon Glass <s...@chromium.org>: > Add a method which can locate a clock for a device, given its index. This > uses the normal device tree bindings to return the clock device and the > first argument which is normally used as a peripheral ID in U-Boot. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > Changes in v2: > - Make the peripheral ID a return value > - Add an assert for clk_devp > - Make the function dependent on OF_CONTROL > > drivers/clk/clk-uclass.c | 28 ++++++++++++++++++++++++++++ > include/clk.h | 14 ++++++++++++++ > 2 files changed, 42 insertions(+) > > diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c > index 8078b0f..f80beaf 100644 > --- a/drivers/clk/clk-uclass.c > +++ b/drivers/clk/clk-uclass.c > @@ -12,6 +12,8 @@ > #include <dm/lists.h> > #include <dm/root.h> > > +DECLARE_GLOBAL_DATA_PTR; > + > ulong clk_get_rate(struct udevice *dev) > { > struct clk_ops *ops = clk_get_ops(dev); > @@ -62,6 +64,32 @@ int clk_get_id(struct udevice *dev, int args_count, > uint32_t *args) > return ops->get_id(dev, args_count, args); > } > > +#ifdef CONFIG_OF_CONTROL Isn't this #if CONFIG_IS_ENABLED(OF_CONTROL)? SPL is controlled by CONFIG_SPL_OF_CONTROL. > +int clk_get_by_index(struct udevice *dev, int index, struct udevice > **clk_devp) > +{ > + struct fdtdec_phandle_args args; > + int ret; > + > + assert(*clk_devp); > + ret = fdtdec_parse_phandle_with_args(gd->fdt_blob, dev->of_offset, > + "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_of_offset(UCLASS_CLK, args.node, clk_devp); > + if (ret) { > + debug("%s: uclass_get_device_by_of_offset failed: err=%d\n", > + __func__, ret); > + return ret; > + } > + return args.args_count > 0 ? args.args[0] : 0; > +} > +#endif > + > UCLASS_DRIVER(clk) = { > .id = UCLASS_CLK, > .name = "clk", > diff --git a/include/clk.h b/include/clk.h > index ce2db41..0af2824 100644 > --- a/include/clk.h > +++ b/include/clk.h > @@ -150,4 +150,18 @@ static inline int fdt_clk_get(const void *fdt, int > nodeoffset, int index, > } > #endif > > +/** > + * clk_get_by_index() - look up a clock referenced by a device > + * > + * Parse a device's 'clocks' list, returning information on the indexed > clock, > + * ensuring that it is activated. > + * > + * @dev: Device containing the clock reference > + * @index: Clock index to return (0 = first) > + * @clk_devp: Returns clock device > + * @return: Peripheral ID for the device to control. This is the first > + * argument after the clock node phandle. If there is no > arguemnt, > + * returns 0. Return -ve error code on any error > + */ > +int clk_get_by_index(struct udevice *dev, int index, struct udevice > **clk_devp); > #endif /* _CLK_H_ */ I want #ifdef in the header too, like mine http://patchwork.ozlabs.org/patch/566812/ -- Best Regards Masahiro Yamada _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot