summaryrefslogtreecommitdiff
path: root/drivers/soc
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-09-23 20:19:06 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-09-23 20:19:06 -0700
commit5038545dd9de19cb1f4e169bdc6948c74c987433 (patch)
tree3cbfa19fbe1dfa58c184efe311142e175c2b51cb /drivers/soc
parent6ae0998ab6ca854add052b234e04223001a6421c (diff)
parent85689f1c26aeea45d184c91d7e3a91422d48aa21 (diff)
Merge "soc: qcom: ssr: Return from acknowledgment wait if modem is crashed"
Diffstat (limited to 'drivers/soc')
-rw-r--r--drivers/soc/qcom/subsystem_restart.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/drivers/soc/qcom/subsystem_restart.c b/drivers/soc/qcom/subsystem_restart.c
index 6cfb8f7c836c..015e60ac622c 100644
--- a/drivers/soc/qcom/subsystem_restart.c
+++ b/drivers/soc/qcom/subsystem_restart.c
@@ -572,25 +572,6 @@ static void disable_all_irqs(struct subsys_device *dev)
}
}
-int wait_for_shutdown_ack(struct subsys_desc *desc)
-{
- int count;
-
- if (desc && !desc->shutdown_ack_gpio)
- return 0;
-
- for (count = SHUTDOWN_ACK_MAX_LOOPS; count > 0; count--) {
- if (gpio_get_value(desc->shutdown_ack_gpio))
- return count;
- msleep(SHUTDOWN_ACK_DELAY_MS);
- }
-
- pr_err("[%s]: Timed out waiting for shutdown ack\n", desc->name);
-
- return -ETIMEDOUT;
-}
-EXPORT_SYMBOL(wait_for_shutdown_ack);
-
static int wait_for_err_ready(struct subsys_device *subsys)
{
int ret;
@@ -768,6 +749,31 @@ int subsystem_set_fwname(const char *name, const char *fw_name)
}
EXPORT_SYMBOL(subsystem_set_fwname);
+int wait_for_shutdown_ack(struct subsys_desc *desc)
+{
+ int count;
+ struct subsys_device *dev;
+
+ if (!desc || !desc->shutdown_ack_gpio)
+ return 0;
+
+ dev = find_subsys(desc->name);
+ if (!dev)
+ return 0;
+
+ for (count = SHUTDOWN_ACK_MAX_LOOPS; count > 0; count--) {
+ if (gpio_get_value(desc->shutdown_ack_gpio))
+ return count;
+ else if (subsys_get_crash_status(dev))
+ break;
+ msleep(SHUTDOWN_ACK_DELAY_MS);
+ }
+
+ pr_err("[%s]: Timed out waiting for shutdown ack\n", desc->name);
+ return -ETIMEDOUT;
+}
+EXPORT_SYMBOL(wait_for_shutdown_ack);
+
void *__subsystem_get(const char *name, const char *fw_name)
{
struct subsys_device *subsys;