Loading drivers/clk/clk.c +35 −0 Original line number Diff line number Diff line Loading @@ -3863,6 +3863,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. Loading include/linux/clk-provider.h +9 −1 Original line number Diff line number Diff line Loading @@ -788,7 +788,8 @@ int of_clk_get_parent_count(struct device_node *np); int of_clk_parent_fill(struct device_node *np, const char **parents, unsigned int size); const char *of_clk_get_parent_name(struct device_node *np, int index); int of_clk_detect_critical(struct device_node *np, int index, unsigned long *flags); void of_clk_init(const struct of_device_id *matches); #else /* !CONFIG_OF */ Loading Loading @@ -826,6 +827,13 @@ static inline const char *of_clk_get_parent_name(struct device_node *np, { return NULL; } static inline int of_clk_detect_critical(struct device_node *np, int index, unsigned long *flags) { return 0; } #define of_clk_init(matches) \ { while (0); } #endif /* CONFIG_OF */ Loading Loading
drivers/clk/clk.c +35 −0 Original line number Diff line number Diff line Loading @@ -3863,6 +3863,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. Loading
include/linux/clk-provider.h +9 −1 Original line number Diff line number Diff line Loading @@ -788,7 +788,8 @@ int of_clk_get_parent_count(struct device_node *np); int of_clk_parent_fill(struct device_node *np, const char **parents, unsigned int size); const char *of_clk_get_parent_name(struct device_node *np, int index); int of_clk_detect_critical(struct device_node *np, int index, unsigned long *flags); void of_clk_init(const struct of_device_id *matches); #else /* !CONFIG_OF */ Loading Loading @@ -826,6 +827,13 @@ static inline const char *of_clk_get_parent_name(struct device_node *np, { return NULL; } static inline int of_clk_detect_critical(struct device_node *np, int index, unsigned long *flags) { return 0; } #define of_clk_init(matches) \ { while (0); } #endif /* CONFIG_OF */ Loading