提交 00b10ecf 编写于 作者: L Linus Torvalds

Merge tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Couple of minor driver fixes.

* tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (max34440) Fix resetting temperature history
  hwmon: (f75375s) Fix register write order when setting fans to full speed
  hwmon: (ads1015) Fix file leak in probe function
  hwmon: (max6639) Fix PPR register initialization to set both channels
  hwmon: (max6639) Fix FAN_FROM_REG calculation
...@@ -271,7 +271,7 @@ static int ads1015_probe(struct i2c_client *client, ...@@ -271,7 +271,7 @@ static int ads1015_probe(struct i2c_client *client,
continue; continue;
err = device_create_file(&client->dev, &ads1015_in[k].dev_attr); err = device_create_file(&client->dev, &ads1015_in[k].dev_attr);
if (err) if (err)
goto exit_free; goto exit_remove;
} }
data->hwmon_dev = hwmon_device_register(&client->dev); data->hwmon_dev = hwmon_device_register(&client->dev);
...@@ -285,7 +285,6 @@ static int ads1015_probe(struct i2c_client *client, ...@@ -285,7 +285,6 @@ static int ads1015_probe(struct i2c_client *client,
exit_remove: exit_remove:
for (k = 0; k < ADS1015_CHANNELS; ++k) for (k = 0; k < ADS1015_CHANNELS; ++k)
device_remove_file(&client->dev, &ads1015_in[k].dev_attr); device_remove_file(&client->dev, &ads1015_in[k].dev_attr);
exit_free:
kfree(data); kfree(data);
exit: exit:
return err; return err;
......
...@@ -340,8 +340,6 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val) ...@@ -340,8 +340,6 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)
fanmode |= (1 << F75387_FAN_MANU_MODE(nr)); fanmode |= (1 << F75387_FAN_MANU_MODE(nr));
fanmode |= (1 << F75387_FAN_DUTY_MODE(nr)); fanmode |= (1 << F75387_FAN_DUTY_MODE(nr));
data->pwm[nr] = 255; data->pwm[nr] = 255;
f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr),
data->pwm[nr]);
break; break;
case 1: /* PWM */ case 1: /* PWM */
fanmode |= (1 << F75387_FAN_MANU_MODE(nr)); fanmode |= (1 << F75387_FAN_MANU_MODE(nr));
...@@ -361,8 +359,6 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val) ...@@ -361,8 +359,6 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)
case 0: /* full speed */ case 0: /* full speed */
fanmode |= (3 << FAN_CTRL_MODE(nr)); fanmode |= (3 << FAN_CTRL_MODE(nr));
data->pwm[nr] = 255; data->pwm[nr] = 255;
f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr),
data->pwm[nr]);
break; break;
case 1: /* PWM */ case 1: /* PWM */
fanmode |= (3 << FAN_CTRL_MODE(nr)); fanmode |= (3 << FAN_CTRL_MODE(nr));
...@@ -377,6 +373,9 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val) ...@@ -377,6 +373,9 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)
f75375_write8(client, F75375_REG_FAN_TIMER, fanmode); f75375_write8(client, F75375_REG_FAN_TIMER, fanmode);
data->pwm_enable[nr] = val; data->pwm_enable[nr] = val;
if (val == 0)
f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr),
data->pwm[nr]);
return 0; return 0;
} }
......
...@@ -72,8 +72,8 @@ static unsigned short normal_i2c[] = { 0x2c, 0x2e, 0x2f, I2C_CLIENT_END }; ...@@ -72,8 +72,8 @@ static unsigned short normal_i2c[] = { 0x2c, 0x2e, 0x2f, I2C_CLIENT_END };
static const int rpm_ranges[] = { 2000, 4000, 8000, 16000 }; static const int rpm_ranges[] = { 2000, 4000, 8000, 16000 };
#define FAN_FROM_REG(val, div, rpm_range) ((val) == 0 ? -1 : \ #define FAN_FROM_REG(val, rpm_range) ((val) == 0 || (val) == 255 ? \
(val) == 255 ? 0 : (rpm_ranges[rpm_range] * 30) / ((div + 1) * (val))) 0 : (rpm_ranges[rpm_range] * 30) / (val))
#define TEMP_LIMIT_TO_REG(val) SENSORS_LIMIT((val) / 1000, 0, 255) #define TEMP_LIMIT_TO_REG(val) SENSORS_LIMIT((val) / 1000, 0, 255)
/* /*
...@@ -333,7 +333,7 @@ static ssize_t show_fan_input(struct device *dev, ...@@ -333,7 +333,7 @@ static ssize_t show_fan_input(struct device *dev,
return PTR_ERR(data); return PTR_ERR(data);
return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[attr->index], return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[attr->index],
data->ppr, data->rpm_range)); data->rpm_range));
} }
static ssize_t show_alarm(struct device *dev, static ssize_t show_alarm(struct device *dev,
...@@ -429,9 +429,9 @@ static int max6639_init_client(struct i2c_client *client) ...@@ -429,9 +429,9 @@ static int max6639_init_client(struct i2c_client *client)
struct max6639_data *data = i2c_get_clientdata(client); struct max6639_data *data = i2c_get_clientdata(client);
struct max6639_platform_data *max6639_info = struct max6639_platform_data *max6639_info =
client->dev.platform_data; client->dev.platform_data;
int i = 0; int i;
int rpm_range = 1; /* default: 4000 RPM */ int rpm_range = 1; /* default: 4000 RPM */
int err = 0; int err;
/* Reset chip to default values, see below for GCONFIG setup */ /* Reset chip to default values, see below for GCONFIG setup */
err = i2c_smbus_write_byte_data(client, MAX6639_REG_GCONFIG, err = i2c_smbus_write_byte_data(client, MAX6639_REG_GCONFIG,
...@@ -446,11 +446,6 @@ static int max6639_init_client(struct i2c_client *client) ...@@ -446,11 +446,6 @@ static int max6639_init_client(struct i2c_client *client)
else else
data->ppr = 2; data->ppr = 2;
data->ppr -= 1; data->ppr -= 1;
err = i2c_smbus_write_byte_data(client,
MAX6639_REG_FAN_PPR(i),
data->ppr << 5);
if (err)
goto exit;
if (max6639_info) if (max6639_info)
rpm_range = rpm_range_to_reg(max6639_info->rpm_range); rpm_range = rpm_range_to_reg(max6639_info->rpm_range);
...@@ -458,6 +453,13 @@ static int max6639_init_client(struct i2c_client *client) ...@@ -458,6 +453,13 @@ static int max6639_init_client(struct i2c_client *client)
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
/* Set Fan pulse per revolution */
err = i2c_smbus_write_byte_data(client,
MAX6639_REG_FAN_PPR(i),
data->ppr << 6);
if (err)
goto exit;
/* Fans config PWM, RPM */ /* Fans config PWM, RPM */
err = i2c_smbus_write_byte_data(client, err = i2c_smbus_write_byte_data(client,
MAX6639_REG_FAN_CONFIG1(i), MAX6639_REG_FAN_CONFIG1(i),
......
...@@ -82,7 +82,7 @@ static int max34440_write_word_data(struct i2c_client *client, int page, ...@@ -82,7 +82,7 @@ static int max34440_write_word_data(struct i2c_client *client, int page,
case PMBUS_VIRT_RESET_TEMP_HISTORY: case PMBUS_VIRT_RESET_TEMP_HISTORY:
ret = pmbus_write_word_data(client, page, ret = pmbus_write_word_data(client, page,
MAX34440_MFR_TEMPERATURE_PEAK, MAX34440_MFR_TEMPERATURE_PEAK,
0xffff); 0x8000);
break; break;
default: default:
ret = -ENODATA; ret = -ENODATA;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册