|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Copyright (c) 2016 The Linux Foundation. All rights reserved.
|
|
|
+ * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
|
|
*
|
|
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
|
|
*
|
|
@@ -205,8 +205,7 @@ static int pld_snoc_suspend_noirq(struct device *dev)
|
|
|
return -EINVAL;
|
|
|
|
|
|
if (pld_context->ops->suspend_noirq)
|
|
|
- return pld_context->ops->
|
|
|
- suspend_noirq(dev, PLD_BUS_TYPE_SNOC);
|
|
|
+ return pld_context->ops->suspend_noirq(dev, PLD_BUS_TYPE_SNOC);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -231,8 +230,35 @@ static int pld_snoc_resume_noirq(struct device *dev)
|
|
|
return -EINVAL;
|
|
|
|
|
|
if (pld_context->ops->resume_noirq)
|
|
|
- return pld_context->ops->
|
|
|
- resume_noirq(dev, PLD_BUS_TYPE_SNOC);
|
|
|
+ return pld_context->ops->resume_noirq(dev, PLD_BUS_TYPE_SNOC);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int pld_snoc_uevent(struct device *dev,
|
|
|
+ struct icnss_uevent_data *uevent)
|
|
|
+{
|
|
|
+ struct pld_context *pld_context;
|
|
|
+ uint32_t status;
|
|
|
+
|
|
|
+ pld_context = pld_get_global_context();
|
|
|
+ if (!pld_context)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ if (!pld_context->ops->update_status)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ switch (uevent->uevent) {
|
|
|
+ case ICNSS_UEVENT_FW_CRASHED:
|
|
|
+ status = PLD_RECOVERY;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ pld_context->ops->update_status(dev, status);
|
|
|
+
|
|
|
+out:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -247,6 +273,7 @@ struct icnss_driver_ops pld_snoc_ops = {
|
|
|
.pm_resume = pld_snoc_pm_resume,
|
|
|
.suspend_noirq = pld_snoc_suspend_noirq,
|
|
|
.resume_noirq = pld_snoc_resume_noirq,
|
|
|
+ .uevent = pld_snoc_uevent,
|
|
|
};
|
|
|
|
|
|
/**
|