From 4a7534bf07ee0fb56cf48501d988234382567481 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 26 Aug 2015 10:13:22 +0200 Subject: reset-source: Allow different priorities Different devices may report the reset source with different levels of certainty. For example a SoC may see a power-on reset, but this may only be because an external PMIC has power cycled the SoC. This means the PMIC knows the real reason better and thus the reset reason from the PMIC should be preferred. This patch introduces priorities for the reset_source to handle the above scenario. Also add a of_get_reset_source_priority() function to retrieve the desired priority from the device tree. Signed-off-by: Sascha Hauer --- common/reset_source.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'common') diff --git a/common/reset_source.c b/common/reset_source.c index f9ee99b933..b02a694f9d 100644 --- a/common/reset_source.c +++ b/common/reset_source.c @@ -30,6 +30,7 @@ static const char * const reset_src_names[] = { }; static enum reset_src_type reset_source; +static unsigned int reset_source_priority; enum reset_src_type reset_source_get(void) { @@ -37,9 +38,13 @@ enum reset_src_type reset_source_get(void) } EXPORT_SYMBOL(reset_source_get); -void reset_source_set(enum reset_src_type st) +void reset_source_set_priority(enum reset_src_type st, unsigned int priority) { + if (priority <= reset_source_priority) + return; + reset_source = st; + reset_source_priority = priority; } EXPORT_SYMBOL(reset_source_set); @@ -52,3 +57,19 @@ static int reset_source_init(void) } coredevice_initcall(reset_source_init); + +/** + * of_get_reset_source_priority() - get the desired reset source priority from + * device tree + * @node: The device_node to read the property from + * + * return: The priority + */ +unsigned int of_get_reset_source_priority(struct device_node *node) +{ + unsigned int priority = RESET_SOURCE_DEFAULT_PRIORITY; + + of_property_read_u32(node, "reset-source-priority", &priority); + + return priority; +} -- cgit v1.2.3