summaryrefslogtreecommitdiff
path: root/drivers/thermal
diff options
context:
space:
mode:
authorAnshul Jain <anshulj@nvidia.com>2013-10-15 20:18:57 -0700
committerDiwakar Tundlam <dtundlam@nvidia.com>2014-02-12 22:21:06 -0800
commit5f2203ae5d708e4611a8cb2b4d4137562a94f185 (patch)
tree7ed2ba3c991447371559d24315ce266e3d693bab /drivers/thermal
parentbf1ccea44ceb24a8ecd90039112154c5a294d9a6 (diff)
thermal: pwm-fan: lock during sysfs writes
This change locks the whole sysfs function to ensure atomicity. Also, more logs are added for better visibility during suspend and resume. Bug 1388303 Change-Id: Iadf8bdc4309575ec42a1946ecfb28eb7654440e3 Signed-off-by: Anshul Jain <anshulj@nvidia.com> Reviewed-on: http://git-master/r/299756 (cherry picked from commit 5eec7cd755f9c8dbdc826d63f10b30cad237eb5d) Reviewed-on: http://git-master/r/347142 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com>
Diffstat (limited to 'drivers/thermal')
-rw-r--r--drivers/thermal/pwm_fan.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/drivers/thermal/pwm_fan.c b/drivers/thermal/pwm_fan.c
index dcc36977bdf4..5fb1c5d2a4e2 100644
--- a/drivers/thermal/pwm_fan.c
+++ b/drivers/thermal/pwm_fan.c
@@ -1,7 +1,7 @@
/*
* pwm_fan.c fan driver that is controlled by pwm
*
- * Copyright (c) 2012-2013 NVIDIA CORPORATION, All rights reserved.
+ * Copyright (c) 2013-2014, NVIDIA CORPORATION. All rights reserved.
*
* Author: Anshul Jain <anshulj@nvidia.com>
*
@@ -556,28 +556,26 @@ static ssize_t set_fan_state_cap_sysfs(struct device *dev,
ret = kstrtol(buf, 10, &val);
- if (ret < 0)
- return -EINVAL;
-
- if (!fan_data)
- return -EINVAL;
+ if (ret < 0 || !fan_data)
+ goto error;
+ mutex_lock(&fan_data->fan_state_lock);
if (val < 0)
val = 0;
else if (val >= fan_data->active_steps)
val = fan_data->active_steps - 1;
- mutex_lock(&fan_data->fan_state_lock);
fan_data->fan_state_cap = val;
fan_data->fan_cap_pwm =
fan_data->fan_pwm[fan_data->fan_state_cap_lookup[val]];
fan_data->next_target_pwm = min(fan_data->fan_cap_pwm,
fan_data->next_target_pwm);
- dev_info(dev, "pwm_cap=%d target_pwm=%d\n",
- fan_data->fan_cap_pwm, fan_data->next_target_pwm);
-
mutex_unlock(&fan_data->fan_state_lock);
return count;
+
+error:
+ dev_err(dev, "%s, fan_data is null or wrong input\n", __func__);
+ return -EINVAL;
}
@@ -860,9 +858,6 @@ static int pwm_fan_resume(struct platform_device *pdev)
/*Sanity check, want to make sure fan is off when the driver resumes*/
mutex_lock(&fan_data->fan_state_lock);
- dev_info(&pdev->dev, "%s, cur_pwm:%d, target_pwm:%d, cap:%d",
- __func__, fan_data->fan_cur_pwm, fan_data->next_target_pwm,
- fan_data->fan_cap_pwm);
gpio_free(fan_data->pwm_gpio);
fan_data->pwm_dev = pwm_request(fan_data->pwm_id, dev_name(&pdev->dev));
if (IS_ERR_OR_NULL(fan_data->pwm_dev)) {