[U-Boot] [RFC PATCH 3/6] clk: add function to get peripheral ID
Masahiro Yamada
yamada.masahiro at socionext.com
Fri Dec 18 12:15:12 CET 2015
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 <yamada.masahiro at socionext.com>
---
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
More information about the U-Boot
mailing list