|
@@ -3137,6 +3137,41 @@ static int parent_ready(struct device_node *np)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * of_clk_detect_critical() - set CLK_IS_CRITICAL flag from Device Tree
|
|
|
+ * @np: Device node pointer associated with clock provider
|
|
|
+ * @index: clock index
|
|
|
+ * @flags: pointer to clk_core->flags
|
|
|
+ *
|
|
|
+ * Detects if the clock-critical property exists and, if so, sets the
|
|
|
+ * corresponding CLK_IS_CRITICAL flag.
|
|
|
+ *
|
|
|
+ * Do not use this function. It exists only for legacy Device Tree
|
|
|
+ * bindings, such as the one-clock-per-node style that are outdated.
|
|
|
+ * Those bindings typically put all clock data into .dts and the Linux
|
|
|
+ * driver has no clock data, thus making it impossible to set this flag
|
|
|
+ * correctly from the driver. Only those drivers may call
|
|
|
+ * of_clk_detect_critical from their setup functions.
|
|
|
+ *
|
|
|
+ * Return: error code or zero on success
|
|
|
+ */
|
|
|
+int of_clk_detect_critical(struct device_node *np,
|
|
|
+ int index, unsigned long *flags)
|
|
|
+{
|
|
|
+ struct property *prop;
|
|
|
+ const __be32 *cur;
|
|
|
+ uint32_t idx;
|
|
|
+
|
|
|
+ if (!np || !flags)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ of_property_for_each_u32(np, "clock-critical", prop, cur, idx)
|
|
|
+ if (index == idx)
|
|
|
+ *flags |= CLK_IS_CRITICAL;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* of_clk_init() - Scan and init clock providers from the DT
|
|
|
* @matches: array of compatible values and init functions for providers.
|