diff options
author | Tokunori Ikegami <ikegami@allied-telesis.co.jp> | 2018-08-07 21:32:19 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2018-08-10 12:13:01 -0400 |
commit | 4afec79f652b11189c07ce49498c4477adda887c (patch) | |
tree | 76e06b56af86bde0766c3467143aa3980ce10458 | |
parent | 702afead45e15407bea94ccee16b801bbe9db13e (diff) |
hwmon: (adt7475) Change show functions to return error data correctly
Change update device function to return an error pointer if needed,
and report the error to user space.
Signed-off-by: Tokunori Ikegami <ikegami@allied-telesis.co.jp>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
[groeck: Clarified/updated description]
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r-- | drivers/hwmon/adt7475.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c index 9f7e1a5b08a5..90837f7c7d0f 100644 --- a/drivers/hwmon/adt7475.c +++ b/drivers/hwmon/adt7475.c | |||
@@ -325,6 +325,9 @@ static ssize_t show_voltage(struct device *dev, struct device_attribute *attr, | |||
325 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); | 325 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
326 | unsigned short val; | 326 | unsigned short val; |
327 | 327 | ||
328 | if (IS_ERR(data)) | ||
329 | return PTR_ERR(data); | ||
330 | |||
328 | switch (sattr->nr) { | 331 | switch (sattr->nr) { |
329 | case ALARM: | 332 | case ALARM: |
330 | return sprintf(buf, "%d\n", | 333 | return sprintf(buf, "%d\n", |
@@ -380,6 +383,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *attr, | |||
380 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); | 383 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
381 | int out; | 384 | int out; |
382 | 385 | ||
386 | if (IS_ERR(data)) | ||
387 | return PTR_ERR(data); | ||
388 | |||
383 | switch (sattr->nr) { | 389 | switch (sattr->nr) { |
384 | case HYSTERSIS: | 390 | case HYSTERSIS: |
385 | mutex_lock(&data->lock); | 391 | mutex_lock(&data->lock); |
@@ -624,6 +630,9 @@ static ssize_t show_point2(struct device *dev, struct device_attribute *attr, | |||
624 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); | 630 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
625 | int out, val; | 631 | int out, val; |
626 | 632 | ||
633 | if (IS_ERR(data)) | ||
634 | return PTR_ERR(data); | ||
635 | |||
627 | mutex_lock(&data->lock); | 636 | mutex_lock(&data->lock); |
628 | out = (data->range[sattr->index] >> 4) & 0x0F; | 637 | out = (data->range[sattr->index] >> 4) & 0x0F; |
629 | val = reg2temp(data, data->temp[AUTOMIN][sattr->index]); | 638 | val = reg2temp(data, data->temp[AUTOMIN][sattr->index]); |
@@ -682,6 +691,9 @@ static ssize_t show_tach(struct device *dev, struct device_attribute *attr, | |||
682 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); | 691 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
683 | int out; | 692 | int out; |
684 | 693 | ||
694 | if (IS_ERR(data)) | ||
695 | return PTR_ERR(data); | ||
696 | |||
685 | if (sattr->nr == ALARM) | 697 | if (sattr->nr == ALARM) |
686 | out = (data->alarms >> (sattr->index + 10)) & 1; | 698 | out = (data->alarms >> (sattr->index + 10)) & 1; |
687 | else | 699 | else |
@@ -719,6 +731,9 @@ static ssize_t show_pwm(struct device *dev, struct device_attribute *attr, | |||
719 | struct adt7475_data *data = adt7475_update_device(dev); | 731 | struct adt7475_data *data = adt7475_update_device(dev); |
720 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); | 732 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
721 | 733 | ||
734 | if (IS_ERR(data)) | ||
735 | return PTR_ERR(data); | ||
736 | |||
722 | return sprintf(buf, "%d\n", data->pwm[sattr->nr][sattr->index]); | 737 | return sprintf(buf, "%d\n", data->pwm[sattr->nr][sattr->index]); |
723 | } | 738 | } |
724 | 739 | ||
@@ -728,6 +743,9 @@ static ssize_t show_pwmchan(struct device *dev, struct device_attribute *attr, | |||
728 | struct adt7475_data *data = adt7475_update_device(dev); | 743 | struct adt7475_data *data = adt7475_update_device(dev); |
729 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); | 744 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
730 | 745 | ||
746 | if (IS_ERR(data)) | ||
747 | return PTR_ERR(data); | ||
748 | |||
731 | return sprintf(buf, "%d\n", data->pwmchan[sattr->index]); | 749 | return sprintf(buf, "%d\n", data->pwmchan[sattr->index]); |
732 | } | 750 | } |
733 | 751 | ||
@@ -737,6 +755,9 @@ static ssize_t show_pwmctrl(struct device *dev, struct device_attribute *attr, | |||
737 | struct adt7475_data *data = adt7475_update_device(dev); | 755 | struct adt7475_data *data = adt7475_update_device(dev); |
738 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); | 756 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
739 | 757 | ||
758 | if (IS_ERR(data)) | ||
759 | return PTR_ERR(data); | ||
760 | |||
740 | return sprintf(buf, "%d\n", data->pwmctl[sattr->index]); | 761 | return sprintf(buf, "%d\n", data->pwmctl[sattr->index]); |
741 | } | 762 | } |
742 | 763 | ||
@@ -944,6 +965,9 @@ static ssize_t show_pwmfreq(struct device *dev, struct device_attribute *attr, | |||
944 | int i = clamp_val(data->range[sattr->index] & 0xf, 0, | 965 | int i = clamp_val(data->range[sattr->index] & 0xf, 0, |
945 | ARRAY_SIZE(pwmfreq_table) - 1); | 966 | ARRAY_SIZE(pwmfreq_table) - 1); |
946 | 967 | ||
968 | if (IS_ERR(data)) | ||
969 | return PTR_ERR(data); | ||
970 | |||
947 | return sprintf(buf, "%d\n", pwmfreq_table[i]); | 971 | return sprintf(buf, "%d\n", pwmfreq_table[i]); |
948 | } | 972 | } |
949 | 973 | ||
@@ -1034,6 +1058,10 @@ static ssize_t cpu0_vid_show(struct device *dev, | |||
1034 | struct device_attribute *devattr, char *buf) | 1058 | struct device_attribute *devattr, char *buf) |
1035 | { | 1059 | { |
1036 | struct adt7475_data *data = adt7475_update_device(dev); | 1060 | struct adt7475_data *data = adt7475_update_device(dev); |
1061 | |||
1062 | if (IS_ERR(data)) | ||
1063 | return PTR_ERR(data); | ||
1064 | |||
1037 | return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); | 1065 | return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); |
1038 | } | 1066 | } |
1039 | 1067 | ||
@@ -1677,7 +1705,9 @@ static int adt7475_probe(struct i2c_client *client, | |||
1677 | (data->bypass_attn & (1 << 4)) ? " in4" : ""); | 1705 | (data->bypass_attn & (1 << 4)) ? " in4" : ""); |
1678 | 1706 | ||
1679 | /* Limits and settings, should never change update more than once */ | 1707 | /* Limits and settings, should never change update more than once */ |
1680 | adt7475_update_limits(client); | 1708 | ret = adt7475_update_limits(client); |
1709 | if (ret) | ||
1710 | goto eremove; | ||
1681 | 1711 | ||
1682 | return 0; | 1712 | return 0; |
1683 | 1713 | ||
@@ -1876,13 +1906,19 @@ static struct adt7475_data *adt7475_update_device(struct device *dev) | |||
1876 | { | 1906 | { |
1877 | struct i2c_client *client = to_i2c_client(dev); | 1907 | struct i2c_client *client = to_i2c_client(dev); |
1878 | struct adt7475_data *data = i2c_get_clientdata(client); | 1908 | struct adt7475_data *data = i2c_get_clientdata(client); |
1909 | int ret; | ||
1879 | 1910 | ||
1880 | mutex_lock(&data->lock); | 1911 | mutex_lock(&data->lock); |
1881 | 1912 | ||
1882 | /* Measurement values update every 2 seconds */ | 1913 | /* Measurement values update every 2 seconds */ |
1883 | if (time_after(jiffies, data->measure_updated + HZ * 2) || | 1914 | if (time_after(jiffies, data->measure_updated + HZ * 2) || |
1884 | !data->valid) { | 1915 | !data->valid) { |
1885 | adt7475_update_measure(dev); | 1916 | ret = adt7475_update_measure(dev); |
1917 | if (ret) { | ||
1918 | data->valid = false; | ||
1919 | mutex_unlock(&data->lock); | ||
1920 | return ERR_PTR(ret); | ||
1921 | } | ||
1886 | data->measure_updated = jiffies; | 1922 | data->measure_updated = jiffies; |
1887 | data->valid = true; | 1923 | data->valid = true; |
1888 | } | 1924 | } |