summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/fdt_decode.c15
-rw-r--r--include/fdt_decode.h15
2 files changed, 30 insertions, 0 deletions
diff --git a/common/fdt_decode.c b/common/fdt_decode.c
index 96807c47c9..3d956c3c16 100644
--- a/common/fdt_decode.c
+++ b/common/fdt_decode.c
@@ -718,3 +718,18 @@ int fdt_decode_region(const void *blob, int node,
debug("%s: size=%zx\n", __func__, *size);
return 0;
}
+
+int fdt_decode_clock_rate(const void *blob, const char *clock_name,
+ ulong default_rate)
+{
+ int node;
+
+ node = fdt_node_offset_by_compatible(blob, 0, "board-clocks");
+ if (node >= 0) {
+ node = lookup_phandle(blob, node, clock_name);
+ if (node >= 0)
+ return get_int(blob, node, "clock-frequency",
+ default_rate);
+ }
+ return default_rate;
+}
diff --git a/include/fdt_decode.h b/include/fdt_decode.h
index 6087c21861..68d31653b5 100644
--- a/include/fdt_decode.h
+++ b/include/fdt_decode.h
@@ -614,3 +614,18 @@ int fdt_decode_nand(const void *blob, int node, struct fdt_nand *config);
*/
int fdt_decode_region(const void *blob, int node,
const char *prop_name, void **ptrp, size_t *size);
+
+/**
+ * Look up the required rate of a particular clock in the FDT.
+ *
+ * These are expected to be in a board-clocks compatible node, with a
+ * property pointing to the phandle of each clock. The clock-frequency
+ * property in that phandle is returned.
+ *
+ * @param blob FDT blob
+ * @param clock_name Name of clock to look up (must name a phandle)
+ * @param default_rate Default clock rate to return if property not found
+ * @return clock rate as found in FDT, or default_rate if not found
+ */
+int fdt_decode_clock_rate(const void *blob, const char *clock_name,
+ ulong default_rate);