msm: lpm_resources: Update rpm sleep data on notification
When lpm_resources receives a sleep data notification, the kvp data has
to be buffered into the existing buffer. If not updated, lpm_resources
chooses a mode where its local copy of the vote hasn't changed but the
vote from the originating driver has been updated.
Change-Id: Ie7dd734ede19463ae0be256ae78360705ca2c944
Signed-off-by: Mahesh Sivasubramanian <msivasub@codeaurora.org>
(cherry picked from commit f999d2e6dc2c24507b146a6275174728bd19d087)
(cherry picked from commit a1d747fd9c7dd5af42d10b11279f919eec27289b)
diff --git a/arch/arm/mach-msm/lpm_resources.c b/arch/arm/mach-msm/lpm_resources.c
index 4dcb8e3..48d31f3 100644
--- a/arch/arm/mach-msm/lpm_resources.c
+++ b/arch/arm/mach-msm/lpm_resources.c
@@ -353,18 +353,21 @@
/* lpm resource handling functions */
/* Common */
-static void msm_lpm_notify_common(struct msm_rpm_notifier_data *rpm_notifier_cb,
+static void msm_lpm_notify_common(struct msm_rpm_notifier_data *cb,
struct msm_lpm_resource *rs)
{
- if ((rpm_notifier_cb->rsc_type == rs->rs_data.type) &&
- (rpm_notifier_cb->rsc_id == rs->rs_data.id) &&
- (rpm_notifier_cb->key == rs->rs_data.key)) {
- BUG_ON(rpm_notifier_cb->size > MAX_RS_SIZE);
+ if ((cb->rsc_type == rs->rs_data.type) &&
+ (cb->rsc_id == rs->rs_data.id) &&
+ (cb->key == rs->rs_data.key)) {
+
+ BUG_ON(cb->size > MAX_RS_SIZE);
if (rs->valid) {
- if (rpm_notifier_cb->value)
- memcpy(&rs->rs_data.value,
- rpm_notifier_cb->value, rpm_notifier_cb->size);
+ if (cb->value) {
+ memcpy(&rs->rs_data.value, cb->value, cb->size);
+ msm_rpm_add_kvp_data_noirq(rs->rs_data.handle,
+ cb->key, cb->value, cb->size);
+ }
else
rs->rs_data.value = rs->rs_data.default_value;