Merge "clk: Provide OF helper to mark clocks as CRITICAL"
This commit is contained in:
commit
925ce43342
2 changed files with 44 additions and 1 deletions
|
@ -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
|
* of_clk_init() - Scan and init clock providers from the DT
|
||||||
* @matches: array of compatible values and init functions for providers.
|
* @matches: array of compatible values and init functions for providers.
|
||||||
|
|
|
@ -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,
|
int of_clk_parent_fill(struct device_node *np, const char **parents,
|
||||||
unsigned int size);
|
unsigned int size);
|
||||||
const char *of_clk_get_parent_name(struct device_node *np, int index);
|
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);
|
void of_clk_init(const struct of_device_id *matches);
|
||||||
|
|
||||||
#else /* !CONFIG_OF */
|
#else /* !CONFIG_OF */
|
||||||
|
@ -826,6 +827,13 @@ static inline const char *of_clk_get_parent_name(struct device_node *np,
|
||||||
{
|
{
|
||||||
return NULL;
|
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) \
|
#define of_clk_init(matches) \
|
||||||
{ while (0); }
|
{ while (0); }
|
||||||
#endif /* CONFIG_OF */
|
#endif /* CONFIG_OF */
|
||||||
|
|
Loading…
Add table
Reference in a new issue