diff options
-rw-r--r-- | drivers/hwmon/ibmaem.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c index 08c5179e6d84..0f70dc204105 100644 --- a/drivers/hwmon/ibmaem.c +++ b/drivers/hwmon/ibmaem.c | |||
@@ -463,12 +463,18 @@ static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg, | |||
463 | } | 463 | } |
464 | 464 | ||
465 | /* Update AEM energy registers */ | 465 | /* Update AEM energy registers */ |
466 | static void update_aem_energy_one(struct aem_data *data, int which) | ||
467 | { | ||
468 | aem_read_sensor(data, AEM_ENERGY_ELEMENT, which, | ||
469 | &data->energy[which], 8); | ||
470 | } | ||
471 | |||
466 | static void update_aem_energy(struct aem_data *data) | 472 | static void update_aem_energy(struct aem_data *data) |
467 | { | 473 | { |
468 | aem_read_sensor(data, AEM_ENERGY_ELEMENT, 0, &data->energy[0], 8); | 474 | update_aem_energy_one(data, 0); |
469 | if (data->ver_major < 2) | 475 | if (data->ver_major < 2) |
470 | return; | 476 | return; |
471 | aem_read_sensor(data, AEM_ENERGY_ELEMENT, 1, &data->energy[1], 8); | 477 | update_aem_energy_one(data, 1); |
472 | } | 478 | } |
473 | 479 | ||
474 | /* Update all AEM1 sensors */ | 480 | /* Update all AEM1 sensors */ |
@@ -850,7 +856,7 @@ static ssize_t aem_show_power(struct device *dev, | |||
850 | struct timespec b, a; | 856 | struct timespec b, a; |
851 | 857 | ||
852 | mutex_lock(&data->lock); | 858 | mutex_lock(&data->lock); |
853 | update_aem_energy(data); | 859 | update_aem_energy_one(data, attr->index); |
854 | getnstimeofday(&b); | 860 | getnstimeofday(&b); |
855 | before = data->energy[attr->index]; | 861 | before = data->energy[attr->index]; |
856 | 862 | ||
@@ -862,7 +868,7 @@ static ssize_t aem_show_power(struct device *dev, | |||
862 | return 0; | 868 | return 0; |
863 | } | 869 | } |
864 | 870 | ||
865 | update_aem_energy(data); | 871 | update_aem_energy_one(data, attr->index); |
866 | getnstimeofday(&a); | 872 | getnstimeofday(&a); |
867 | after = data->energy[attr->index]; | 873 | after = data->energy[attr->index]; |
868 | mutex_unlock(&data->lock); | 874 | mutex_unlock(&data->lock); |
@@ -881,7 +887,9 @@ static ssize_t aem_show_energy(struct device *dev, | |||
881 | { | 887 | { |
882 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | 888 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); |
883 | struct aem_data *a = dev_get_drvdata(dev); | 889 | struct aem_data *a = dev_get_drvdata(dev); |
884 | a->update(a); | 890 | mutex_lock(&a->lock); |
891 | update_aem_energy_one(a, attr->index); | ||
892 | mutex_unlock(&a->lock); | ||
885 | 893 | ||
886 | return sprintf(buf, "%llu\n", | 894 | return sprintf(buf, "%llu\n", |
887 | (unsigned long long)a->energy[attr->index] * 1000); | 895 | (unsigned long long)a->energy[attr->index] * 1000); |