From mboxrd@z Thu Jan 1 00:00:00 1970 From: Masahiro Yamada Date: Fri, 18 Dec 2015 20:15:12 +0900 Subject: [U-Boot] [RFC PATCH 3/6] clk: add function to get peripheral ID In-Reply-To: <1450437315-26333-1-git-send-email-yamada.masahiro@socionext.com> References: <1450437315-26333-1-git-send-email-yamada.masahiro@socionext.com> Message-ID: <1450437315-26333-4-git-send-email-yamada.masahiro@socionext.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Currently, this framework does not provide the systematic way to get the peripheral ID (clock index). I assume that the functions added by this commit are mainly used to get the ID from "clocks" properties in device trees although they are not limited to that use. Signed-off-by: Masahiro Yamada --- drivers/clk/clk-uclass.c | 10 ++++++++++ include/clk.h | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 73dfd7d..8078b0f 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -52,6 +52,16 @@ ulong clk_set_periph_rate(struct udevice *dev, int periph, ulong rate) return ops->set_periph_rate(dev, periph, rate); } +int clk_get_id(struct udevice *dev, int args_count, uint32_t *args) +{ + struct clk_ops *ops = clk_get_ops(dev); + + if (!ops->get_id) + return -ENOSYS; + + return ops->get_id(dev, args_count, args); +} + UCLASS_DRIVER(clk) = { .id = UCLASS_CLK, .name = "clk", diff --git a/include/clk.h b/include/clk.h index 371784a..1efbaf2 100644 --- a/include/clk.h +++ b/include/clk.h @@ -49,6 +49,16 @@ struct clk_ops { * @return new clock rate in Hz, or -ve error code */ ulong (*set_periph_rate)(struct udevice *dev, int periph, ulong rate); + + /** + * get_id() - Get peripheral ID + * + * @dev: clock provider + * @args_count: number of arguments + * @args: arguments. The meaning is driver specific. + * @return peripheral ID, or -ve error code + */ + int (*get_id)(struct udevice *dev, int args_count, uint32_t *args); }; #define clk_get_ops(dev) ((struct clk_ops *)(dev)->driver->ops) @@ -87,4 +97,28 @@ ulong clk_get_periph_rate(struct udevice *dev, int periph); */ ulong clk_set_periph_rate(struct udevice *dev, int periph, ulong rate); +/** + * clk_get_id() - Get peripheral ID + * + * @dev: clock provider + * @args_count: number of arguments + * @args: arguments. The meaning is driver specific. + * @return peripheral ID, or -ve error code + */ +int clk_get_id(struct udevice *dev, int args_count, uint32_t *args); + +/** + * clk_get_id_simple() - Simple implementation of get_id() callback + * + * @dev: clock provider + * @args_count: number of arguments + * @args: arguments. + * @return peripheral ID, or -ve error code + */ +static inline int clk_get_id_simple(struct udevice *dev, int args_count, + uint32_t *args) +{ + return args_count > 0 ? args[0] : 0; +} + #endif /* _CLK_H_ */ -- 1.9.1