diff options
author | Anshul Jain <anshulj@nvidia.com> | 2013-10-15 20:18:57 -0700 |
---|---|---|
committer | Diwakar Tundlam <dtundlam@nvidia.com> | 2014-02-12 22:21:06 -0800 |
commit | 5f2203ae5d708e4611a8cb2b4d4137562a94f185 (patch) | |
tree | 7ed2ba3c991447371559d24315ce266e3d693bab /drivers/thermal | |
parent | bf1ccea44ceb24a8ecd90039112154c5a294d9a6 (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.c | 21 |
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)) { |