aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hwmon/adt7475.c40
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 }