diff options
Diffstat (limited to 'drivers/hwmon')
| -rw-r--r-- | drivers/hwmon/f71805f.c | 10 | ||||
| -rw-r--r-- | drivers/hwmon/f75375s.c | 11 | ||||
| -rw-r--r-- | drivers/hwmon/sht15.c | 3 | ||||
| -rw-r--r-- | drivers/hwmon/w83627ehf.c | 34 |
4 files changed, 38 insertions, 20 deletions
diff --git a/drivers/hwmon/f71805f.c b/drivers/hwmon/f71805f.c index 92f949767ece..6dbfd3e516e4 100644 --- a/drivers/hwmon/f71805f.c +++ b/drivers/hwmon/f71805f.c | |||
| @@ -283,11 +283,11 @@ static inline long temp_from_reg(u8 reg) | |||
| 283 | 283 | ||
| 284 | static inline u8 temp_to_reg(long val) | 284 | static inline u8 temp_to_reg(long val) |
| 285 | { | 285 | { |
| 286 | if (val < 0) | 286 | if (val <= 0) |
| 287 | val = 0; | 287 | return 0; |
| 288 | else if (val > 1000 * 0xff) | 288 | if (val >= 1000 * 0xff) |
| 289 | val = 0xff; | 289 | return 0xff; |
| 290 | return ((val + 500) / 1000); | 290 | return (val + 500) / 1000; |
| 291 | } | 291 | } |
| 292 | 292 | ||
| 293 | /* | 293 | /* |
diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c index eedf574ab539..f609b5727ba9 100644 --- a/drivers/hwmon/f75375s.c +++ b/drivers/hwmon/f75375s.c | |||
| @@ -172,7 +172,7 @@ static inline void f75375_write8(struct i2c_client *client, u8 reg, | |||
| 172 | static inline void f75375_write16(struct i2c_client *client, u8 reg, | 172 | static inline void f75375_write16(struct i2c_client *client, u8 reg, |
| 173 | u16 value) | 173 | u16 value) |
| 174 | { | 174 | { |
| 175 | int err = i2c_smbus_write_byte_data(client, reg, (value << 8)); | 175 | int err = i2c_smbus_write_byte_data(client, reg, (value >> 8)); |
| 176 | if (err) | 176 | if (err) |
| 177 | return; | 177 | return; |
| 178 | i2c_smbus_write_byte_data(client, reg + 1, (value & 0xFF)); | 178 | i2c_smbus_write_byte_data(client, reg + 1, (value & 0xFF)); |
| @@ -200,9 +200,6 @@ static struct f75375_data *f75375_update_device(struct device *dev) | |||
| 200 | f75375_read16(client, F75375_REG_FAN_MIN(nr)); | 200 | f75375_read16(client, F75375_REG_FAN_MIN(nr)); |
| 201 | data->fan_target[nr] = | 201 | data->fan_target[nr] = |
| 202 | f75375_read16(client, F75375_REG_FAN_EXP(nr)); | 202 | f75375_read16(client, F75375_REG_FAN_EXP(nr)); |
| 203 | data->pwm[nr] = f75375_read8(client, | ||
| 204 | F75375_REG_FAN_PWM_DUTY(nr)); | ||
| 205 | |||
| 206 | } | 203 | } |
| 207 | for (nr = 0; nr < 4; nr++) { | 204 | for (nr = 0; nr < 4; nr++) { |
| 208 | data->in_max[nr] = | 205 | data->in_max[nr] = |
| @@ -218,6 +215,8 @@ static struct f75375_data *f75375_update_device(struct device *dev) | |||
| 218 | if (time_after(jiffies, data->last_updated + 2 * HZ) | 215 | if (time_after(jiffies, data->last_updated + 2 * HZ) |
| 219 | || !data->valid) { | 216 | || !data->valid) { |
| 220 | for (nr = 0; nr < 2; nr++) { | 217 | for (nr = 0; nr < 2; nr++) { |
| 218 | data->pwm[nr] = f75375_read8(client, | ||
| 219 | F75375_REG_FAN_PWM_DUTY(nr)); | ||
| 221 | /* assign MSB, therefore shift it by 8 bits */ | 220 | /* assign MSB, therefore shift it by 8 bits */ |
| 222 | data->temp11[nr] = | 221 | data->temp11[nr] = |
| 223 | f75375_read8(client, F75375_REG_TEMP(nr)) << 8; | 222 | f75375_read8(client, F75375_REG_TEMP(nr)) << 8; |
| @@ -369,7 +368,7 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val) | |||
| 369 | fanmode |= (3 << FAN_CTRL_MODE(nr)); | 368 | fanmode |= (3 << FAN_CTRL_MODE(nr)); |
| 370 | break; | 369 | break; |
| 371 | case 2: /* AUTOMATIC*/ | 370 | case 2: /* AUTOMATIC*/ |
| 372 | fanmode |= (2 << FAN_CTRL_MODE(nr)); | 371 | fanmode |= (1 << FAN_CTRL_MODE(nr)); |
| 373 | break; | 372 | break; |
| 374 | case 3: /* fan speed */ | 373 | case 3: /* fan speed */ |
| 375 | break; | 374 | break; |
| @@ -723,7 +722,7 @@ static void f75375_init(struct i2c_client *client, struct f75375_data *data, | |||
| 723 | if (data->kind == f75387) { | 722 | if (data->kind == f75387) { |
| 724 | bool manu, duty; | 723 | bool manu, duty; |
| 725 | 724 | ||
| 726 | if (!(conf & (1 << F75387_FAN_CTRL_LINEAR(nr)))) | 725 | if (!(mode & (1 << F75387_FAN_CTRL_LINEAR(nr)))) |
| 727 | data->pwm_mode[nr] = 1; | 726 | data->pwm_mode[nr] = 1; |
| 728 | 727 | ||
| 729 | manu = ((mode >> F75387_FAN_MANU_MODE(nr)) & 1); | 728 | manu = ((mode >> F75387_FAN_MANU_MODE(nr)) & 1); |
diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c index 6ddeae049058..91fdd1fe18b0 100644 --- a/drivers/hwmon/sht15.c +++ b/drivers/hwmon/sht15.c | |||
| @@ -883,7 +883,7 @@ static int sht15_invalidate_voltage(struct notifier_block *nb, | |||
| 883 | 883 | ||
| 884 | static int __devinit sht15_probe(struct platform_device *pdev) | 884 | static int __devinit sht15_probe(struct platform_device *pdev) |
| 885 | { | 885 | { |
| 886 | int ret = 0; | 886 | int ret; |
| 887 | struct sht15_data *data = kzalloc(sizeof(*data), GFP_KERNEL); | 887 | struct sht15_data *data = kzalloc(sizeof(*data), GFP_KERNEL); |
| 888 | u8 status = 0; | 888 | u8 status = 0; |
| 889 | 889 | ||
| @@ -901,6 +901,7 @@ static int __devinit sht15_probe(struct platform_device *pdev) | |||
| 901 | init_waitqueue_head(&data->wait_queue); | 901 | init_waitqueue_head(&data->wait_queue); |
| 902 | 902 | ||
| 903 | if (pdev->dev.platform_data == NULL) { | 903 | if (pdev->dev.platform_data == NULL) { |
| 904 | ret = -EINVAL; | ||
| 904 | dev_err(&pdev->dev, "no platform data supplied\n"); | 905 | dev_err(&pdev->dev, "no platform data supplied\n"); |
| 905 | goto err_free_data; | 906 | goto err_free_data; |
| 906 | } | 907 | } |
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c index 0e0af0445222..5276d1933dbc 100644 --- a/drivers/hwmon/w83627ehf.c +++ b/drivers/hwmon/w83627ehf.c | |||
| @@ -1319,6 +1319,7 @@ store_pwm_mode(struct device *dev, struct device_attribute *attr, | |||
| 1319 | { | 1319 | { |
| 1320 | struct w83627ehf_data *data = dev_get_drvdata(dev); | 1320 | struct w83627ehf_data *data = dev_get_drvdata(dev); |
| 1321 | struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); | 1321 | struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); |
| 1322 | struct w83627ehf_sio_data *sio_data = dev->platform_data; | ||
| 1322 | int nr = sensor_attr->index; | 1323 | int nr = sensor_attr->index; |
| 1323 | unsigned long val; | 1324 | unsigned long val; |
| 1324 | int err; | 1325 | int err; |
| @@ -1330,6 +1331,11 @@ store_pwm_mode(struct device *dev, struct device_attribute *attr, | |||
| 1330 | 1331 | ||
| 1331 | if (val > 1) | 1332 | if (val > 1) |
| 1332 | return -EINVAL; | 1333 | return -EINVAL; |
| 1334 | |||
| 1335 | /* On NCT67766F, DC mode is only supported for pwm1 */ | ||
| 1336 | if (sio_data->kind == nct6776 && nr && val != 1) | ||
| 1337 | return -EINVAL; | ||
| 1338 | |||
| 1333 | mutex_lock(&data->update_lock); | 1339 | mutex_lock(&data->update_lock); |
| 1334 | reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]); | 1340 | reg = w83627ehf_read_value(data, W83627EHF_REG_PWM_ENABLE[nr]); |
| 1335 | data->pwm_mode[nr] = val; | 1341 | data->pwm_mode[nr] = val; |
| @@ -1914,9 +1920,26 @@ w83627ehf_check_fan_inputs(const struct w83627ehf_sio_data *sio_data, | |||
| 1914 | fan4min = 0; | 1920 | fan4min = 0; |
| 1915 | fan5pin = 0; | 1921 | fan5pin = 0; |
| 1916 | } else if (sio_data->kind == nct6776) { | 1922 | } else if (sio_data->kind == nct6776) { |
| 1917 | fan3pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x40); | 1923 | bool gpok = superio_inb(sio_data->sioreg, 0x27) & 0x80; |
| 1918 | fan4pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x01); | 1924 | |
| 1919 | fan5pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x02); | 1925 | superio_select(sio_data->sioreg, W83627EHF_LD_HWM); |
| 1926 | regval = superio_inb(sio_data->sioreg, SIO_REG_ENABLE); | ||
| 1927 | |||
| 1928 | if (regval & 0x80) | ||
| 1929 | fan3pin = gpok; | ||
| 1930 | else | ||
| 1931 | fan3pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x40); | ||
| 1932 | |||
| 1933 | if (regval & 0x40) | ||
| 1934 | fan4pin = gpok; | ||
| 1935 | else | ||
| 1936 | fan4pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x01); | ||
| 1937 | |||
| 1938 | if (regval & 0x20) | ||
| 1939 | fan5pin = gpok; | ||
| 1940 | else | ||
| 1941 | fan5pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x02); | ||
| 1942 | |||
| 1920 | fan4min = fan4pin; | 1943 | fan4min = fan4pin; |
| 1921 | } else if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) { | 1944 | } else if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) { |
| 1922 | fan3pin = 1; | 1945 | fan3pin = 1; |
| @@ -2331,11 +2354,6 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev) | |||
| 2331 | for (i = 0; i < data->pwm_num; i++) | 2354 | for (i = 0; i < data->pwm_num; i++) |
| 2332 | data->pwm_enable_orig[i] = data->pwm_enable[i]; | 2355 | data->pwm_enable_orig[i] = data->pwm_enable[i]; |
| 2333 | 2356 | ||
| 2334 | /* Read pwm data to save original values */ | ||
| 2335 | w83627ehf_update_pwm_common(dev, data); | ||
| 2336 | for (i = 0; i < data->pwm_num; i++) | ||
| 2337 | data->pwm_enable_orig[i] = data->pwm_enable[i]; | ||
| 2338 | |||
| 2339 | /* Register sysfs hooks */ | 2357 | /* Register sysfs hooks */ |
| 2340 | for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++) { | 2358 | for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++) { |
| 2341 | err = device_create_file(dev, &sda_sf3_arrays[i].dev_attr); | 2359 | err = device_create_file(dev, &sda_sf3_arrays[i].dev_attr); |
