diff mbox

PowerCap: Fix mode for energy counter

Message ID 1386184379-26220-1-git-send-email-srinivas.pandruvada@linux.intel.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Srinivas Pandruvada Dec. 4, 2013, 7:12 p.m. UTC
As per the documentation of powercap sysfs, energy_uj field is read only,
if it can't be reset. Currently it always allows write but will fail,
if there is no reset callback.
Changing mode field, to read only if there is no reset callback.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Reported-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
---
 drivers/powercap/powercap_sys.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Rafael J. Wysocki Dec. 5, 2013, 1:27 a.m. UTC | #1
On Wednesday, December 04, 2013 11:12:59 AM Srinivas Pandruvada wrote:
> As per the documentation of powercap sysfs, energy_uj field is read only,
> if it can't be reset. Currently it always allows write but will fail,
> if there is no reset callback.
> Changing mode field, to read only if there is no reset callback.
> 
> Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> Reported-by: Dirk Brandewie <dirk.j.brandewie@intel.com>

Queued up for the next PM pull request.

Thanks,
Rafael


> ---
>  drivers/powercap/powercap_sys.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c
> index 8d0fe43..84419af 100644
> --- a/drivers/powercap/powercap_sys.c
> +++ b/drivers/powercap/powercap_sys.c
> @@ -377,9 +377,14 @@ static void create_power_zone_common_attributes(
>  	if (power_zone->ops->get_max_energy_range_uj)
>  		power_zone->zone_dev_attrs[count++] =
>  					&dev_attr_max_energy_range_uj.attr;
> -	if (power_zone->ops->get_energy_uj)
> +	if (power_zone->ops->get_energy_uj) {
> +		if (power_zone->ops->reset_energy_uj)
> +			dev_attr_energy_uj.attr.mode = S_IWUSR | S_IRUGO;
> +		else
> +			dev_attr_energy_uj.attr.mode = S_IRUGO;
>  		power_zone->zone_dev_attrs[count++] =
>  					&dev_attr_energy_uj.attr;
> +	}
>  	if (power_zone->ops->get_power_uw)
>  		power_zone->zone_dev_attrs[count++] =
>  					&dev_attr_power_uw.attr;
>
diff mbox

Patch

diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c
index 8d0fe43..84419af 100644
--- a/drivers/powercap/powercap_sys.c
+++ b/drivers/powercap/powercap_sys.c
@@ -377,9 +377,14 @@  static void create_power_zone_common_attributes(
 	if (power_zone->ops->get_max_energy_range_uj)
 		power_zone->zone_dev_attrs[count++] =
 					&dev_attr_max_energy_range_uj.attr;
-	if (power_zone->ops->get_energy_uj)
+	if (power_zone->ops->get_energy_uj) {
+		if (power_zone->ops->reset_energy_uj)
+			dev_attr_energy_uj.attr.mode = S_IWUSR | S_IRUGO;
+		else
+			dev_attr_energy_uj.attr.mode = S_IRUGO;
 		power_zone->zone_dev_attrs[count++] =
 					&dev_attr_energy_uj.attr;
+	}
 	if (power_zone->ops->get_power_uw)
 		power_zone->zone_dev_attrs[count++] =
 					&dev_attr_power_uw.attr;