Commit 7629bac6 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull hwmon updates from Guenter Roeck:

 - Add support for LM96000, DPS-650AB to existing drivers

 - Use permission specific SENSOR[_DEVICE]_ATTR variants in several
   drivers

 - Replace S_<PERMS> with octal values in several drivers

 - Update some license headers

 - Various minor fixes and improvements in several drivers

* tag 'hwmon-for-v5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: (89 commits)
  dt-bindings: hwmon: Add missing documentation for lm75
  hwmon: (ad7418) Add device tree probing
  hwmon: (ad741x) Add DT bindings for Analog Devices AD741x
  hwmon: (ntc_thermistor) Convert to new hwmon API
  hwmon: (pwm-fan) Add optional regulator support
  dt-bindings: hwmon: Add optional regulator support to pwm-fan
  hwmon: (f71882fg) Mark expected switch fall-through
  hwmon: (ad7418) Catch I2C errors
  hwmon: (lm85) add support for LM96000 high frequencies
  hwmon: (lm85) support the LM96000
  dt-bindings: Add LM96000 as a trivial device
  hwmon: (lm85) remove freq_map size hardcodes
  hwmon: (occ) Fix license headers
  hwmon: (via-cputemp) Use permission specific SENSOR[_DEVICE]_ATTR variants
  hwmon: (vexpress-hwmon) Use permission specific SENSOR[_DEVICE]_ATTR variants
  hwmon: (tmp421) Replace S_<PERMS> with octal values
  hwmon: (tmp103) Use permission specific SENSOR[_DEVICE]_ATTR variants
  hwmon: (tmp102) Replace S_<PERMS> with octal values
  hwmon: (tc74) Use permission specific SENSOR[_DEVICE]_ATTR variants
  hwmon: (tc654) Use permission specific SENSOR[_DEVICE]_ATTR variants
  ...
parents dcc75dde 985e2251
* AD7416/AD7417/AD7418 Temperature Sensor Device Tree Bindings
Required properties:
- compatible: one of
"adi,ad7416"
"adi,ad7417"
"adi,ad7418"
- reg: I2C address
Example:
hwmon@28 {
compatible = "adi,ad7418";
reg = <0x28>;
};
Bindings for Delta Electronics DPS-650-AB power supply
Required properties:
- compatible : "delta,dps650ab"
- reg : I2C address, one of 0x58, 0x59.
Example:
dps650ab@58 {
compatible = "delta,dps650ab";
reg = <0x58>;
};
Honeywell Humidicon HIH-6130 humidity/temperature sensor
--------------------------------------------------------
Requires node properties:
- compatible : "honeywell,hi6130"
- reg : the I2C address of the device. This is 0x27.
Example:
hih6130@27 {
compatible = "honeywell,hih6130";
reg = <0x27>;
};
...@@ -6,6 +6,16 @@ Texas Instruments INA3221 Device Tree Bindings ...@@ -6,6 +6,16 @@ Texas Instruments INA3221 Device Tree Bindings
- reg: I2C address - reg: I2C address
Optional properties: Optional properties:
- ti,single-shot: This chip has two power modes: single-shot (chip takes one
measurement and then shuts itself down) and continuous (
chip takes continuous measurements). The continuous mode is
more reliable and suitable for hardware monitor type device,
but the single-shot mode is more power-friendly and useful
for battery-powered device which cares power consumptions
while still needs some measurements occasionally.
If this property is present, the single-shot mode will be
used, instead of the default continuous one for monitoring.
= The node contains optional child nodes for three channels = = The node contains optional child nodes for three channels =
= Each child node describes the information of input source = = Each child node describes the information of input source =
......
*LM75 hwmon sensor.
Required properties:
- compatible: manufacturer and chip name, one of
"adi,adt75",
"dallas,ds1775",
"dallas,ds75",
"dallas,ds7505",
"gmt,g751",
"national,lm75",
"national,lm75a",
"national,lm75b",
"maxim,max6625",
"maxim,max6626",
"maxim,max31725",
"maxim,max31726",
"maxim,mcp980x",
"st,stds75",
"st,stlm75",
"microchip,tcn75",
"ti,tmp100",
"ti,tmp101",
"ti,tmp105",
"ti,tmp112",
"ti,tmp175",
"ti,tmp275",
"ti,tmp75",
"ti,tmp75c",
- reg: I2C bus address of the device
Example:
sensor@48 {
compatible = "st,stlm75";
reg = <0x48>;
};
...@@ -6,6 +6,9 @@ Required properties: ...@@ -6,6 +6,9 @@ Required properties:
- cooling-levels : PWM duty cycle values in a range from 0 to 255 - cooling-levels : PWM duty cycle values in a range from 0 to 255
which correspond to thermal cooling states which correspond to thermal cooling states
Optional properties:
- fan-supply : phandle to the regulator that provides power to the fan
Example: Example:
fan0: pwm-fan { fan0: pwm-fan {
compatible = "pwm-fan"; compatible = "pwm-fan";
......
...@@ -322,6 +322,8 @@ properties: ...@@ -322,6 +322,8 @@ properties:
- ti,ads7830 - ti,ads7830
# Temperature Monitoring and Fan Control # Temperature Monitoring and Fan Control
- ti,amc6821 - ti,amc6821
# Temperature sensor with integrated fan control
- ti,lm96000
# I2C Touch-Screen Controller # I2C Touch-Screen Controller
- ti,tsc2003 - ti,tsc2003
# Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface # Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface
......
...@@ -3,9 +3,13 @@ Kernel driver lm85 ...@@ -3,9 +3,13 @@ Kernel driver lm85
Supported chips: Supported chips:
* National Semiconductor LM85 (B and C versions) * National Semiconductor LM85 (B and C versions)
Prefix: 'lm85' Prefix: 'lm85b' or 'lm85c'
Addresses scanned: I2C 0x2c, 0x2d, 0x2e Addresses scanned: I2C 0x2c, 0x2d, 0x2e
Datasheet: http://www.national.com/pf/LM/LM85.html Datasheet: http://www.national.com/pf/LM/LM85.html
* Texas Instruments LM96000
Prefix: 'lm9600'
Addresses scanned: I2C 0x2c, 0x2d, 0x2e
Datasheet: http://www.ti.com/lit/ds/symlink/lm96000.pdf
* Analog Devices ADM1027 * Analog Devices ADM1027
Prefix: 'adm1027' Prefix: 'adm1027'
Addresses scanned: I2C 0x2c, 0x2d, 0x2e Addresses scanned: I2C 0x2c, 0x2d, 0x2e
...@@ -136,6 +140,9 @@ of voltage and temperature channels. ...@@ -136,6 +140,9 @@ of voltage and temperature channels.
SMSC EMC6D103S is similar to EMC6D103, but does not support pwm#_auto_pwm_minctl SMSC EMC6D103S is similar to EMC6D103, but does not support pwm#_auto_pwm_minctl
and temp#_auto_temp_off. and temp#_auto_temp_off.
The LM96000 supports additional high frequency PWM modes (22.5 kHz, 24 kHz,
25.7 kHz, 27.7 kHz and 30 kHz), which can be configured on a per-PWM basis.
Hardware Configurations Hardware Configurations
----------------------- -----------------------
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/hwmon-sysfs.h> #include <linux/hwmon-sysfs.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/of_device.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -54,10 +55,11 @@ struct ad7418_data { ...@@ -54,10 +55,11 @@ struct ad7418_data {
u16 in[4]; u16 in[4];
}; };
static struct ad7418_data *ad7418_update_device(struct device *dev) static int ad7418_update_device(struct device *dev)
{ {
struct ad7418_data *data = dev_get_drvdata(dev); struct ad7418_data *data = dev_get_drvdata(dev);
struct i2c_client *client = data->client; struct i2c_client *client = data->client;
s32 val;
mutex_lock(&data->lock); mutex_lock(&data->lock);
...@@ -67,47 +69,74 @@ static struct ad7418_data *ad7418_update_device(struct device *dev) ...@@ -67,47 +69,74 @@ static struct ad7418_data *ad7418_update_device(struct device *dev)
int i, ch; int i, ch;
/* read config register and clear channel bits */ /* read config register and clear channel bits */
cfg = i2c_smbus_read_byte_data(client, AD7418_REG_CONF); val = i2c_smbus_read_byte_data(client, AD7418_REG_CONF);
if (val < 0)
goto abort;
cfg = val;
cfg &= 0x1F; cfg &= 0x1F;
i2c_smbus_write_byte_data(client, AD7418_REG_CONF, val = i2c_smbus_write_byte_data(client, AD7418_REG_CONF,
cfg | AD7418_CH_TEMP); cfg | AD7418_CH_TEMP);
if (val < 0)
goto abort;
udelay(30); udelay(30);
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
data->temp[i] = val = i2c_smbus_read_word_swapped(client,
i2c_smbus_read_word_swapped(client,
AD7418_REG_TEMP[i]); AD7418_REG_TEMP[i]);
if (val < 0)
goto abort;
data->temp[i] = val;
} }
for (i = 0, ch = 4; i < data->adc_max; i++, ch--) { for (i = 0, ch = 4; i < data->adc_max; i++, ch--) {
i2c_smbus_write_byte_data(client, val = i2c_smbus_write_byte_data(client, AD7418_REG_CONF,
AD7418_REG_CONF,
cfg | AD7418_REG_ADC_CH(ch)); cfg | AD7418_REG_ADC_CH(ch));
if (val < 0)
goto abort;
udelay(15); udelay(15);
data->in[data->adc_max - 1 - i] = val = i2c_smbus_read_word_swapped(client,
i2c_smbus_read_word_swapped(client,
AD7418_REG_ADC); AD7418_REG_ADC);
if (val < 0)
goto abort;
data->in[data->adc_max - 1 - i] = val;
} }
/* restore old configuration value */ /* restore old configuration value */
i2c_smbus_write_word_swapped(client, AD7418_REG_CONF, cfg); val = i2c_smbus_write_word_swapped(client, AD7418_REG_CONF,
cfg);
if (val < 0)
goto abort;
data->last_updated = jiffies; data->last_updated = jiffies;
data->valid = 1; data->valid = 1;
} }
mutex_unlock(&data->lock); mutex_unlock(&data->lock);
return 0;
return data; abort:
data->valid = 0;
mutex_unlock(&data->lock);
return val;
} }
static ssize_t temp_show(struct device *dev, struct device_attribute *devattr, static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct ad7418_data *data = ad7418_update_device(dev); struct ad7418_data *data = dev_get_drvdata(dev);
int ret;
ret = ad7418_update_device(dev);
if (ret < 0)
return ret;
return sprintf(buf, "%d\n", return sprintf(buf, "%d\n",
LM75_TEMP_FROM_REG(data->temp[attr->index])); LM75_TEMP_FROM_REG(data->temp[attr->index]));
} }
...@@ -116,7 +145,12 @@ static ssize_t adc_show(struct device *dev, struct device_attribute *devattr, ...@@ -116,7 +145,12 @@ static ssize_t adc_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct ad7418_data *data = ad7418_update_device(dev); struct ad7418_data *data = dev_get_drvdata(dev);
int ret;
ret = ad7418_update_device(dev);
if (ret < 0)
return ret;
return sprintf(buf, "%d\n", return sprintf(buf, "%d\n",
((data->in[attr->index] >> 6) * 2500 + 512) / 1024); ((data->in[attr->index] >> 6) * 2500 + 512) / 1024);
...@@ -220,6 +254,9 @@ static int ad7418_probe(struct i2c_client *client, ...@@ -220,6 +254,9 @@ static int ad7418_probe(struct i2c_client *client,
mutex_init(&data->lock); mutex_init(&data->lock);
data->client = client; data->client = client;
if (dev->of_node)
data->type = (enum chips)of_device_get_match_data(dev);
else
data->type = id->driver_data; data->type = id->driver_data;
switch (data->type) { switch (data->type) {
...@@ -258,9 +295,18 @@ static const struct i2c_device_id ad7418_id[] = { ...@@ -258,9 +295,18 @@ static const struct i2c_device_id ad7418_id[] = {
}; };
MODULE_DEVICE_TABLE(i2c, ad7418_id); MODULE_DEVICE_TABLE(i2c, ad7418_id);
static const struct of_device_id ad7418_dt_ids[] = {
{ .compatible = "adi,ad7416", .data = (void *)ad7416, },
{ .compatible = "adi,ad7417", .data = (void *)ad7417, },
{ .compatible = "adi,ad7418", .data = (void *)ad7418, },
{ }
};
MODULE_DEVICE_TABLE(of, ad7418_dt_ids);
static struct i2c_driver ad7418_driver = { static struct i2c_driver ad7418_driver = {
.driver = { .driver = {
.name = "ad7418", .name = "ad7418",
.of_match_table = ad7418_dt_ids,
}, },
.probe = ad7418_probe, .probe = ad7418_probe,
.id_table = ad7418_id, .id_table = ad7418_id,
......
// SPDX-License-Identifier: GPL-2.0
/* /*
* adm1029.c - Part of lm_sensors, Linux kernel modules for hardware monitoring * adm1029.c - Part of lm_sensors, Linux kernel modules for hardware monitoring
* *
...@@ -19,10 +20,6 @@ ...@@ -19,10 +20,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/module.h> #include <linux/module.h>
...@@ -111,7 +108,7 @@ static const u8 ADM1029_REG_FAN_DIV[] = { ...@@ -111,7 +108,7 @@ static const u8 ADM1029_REG_FAN_DIV[] = {
struct adm1029_data { struct adm1029_data {
struct i2c_client *client; struct i2c_client *client;
struct mutex update_lock; struct mutex update_lock; /* protect register access */
char valid; /* zero until following fields are valid */ char valid; /* zero until following fields are valid */
unsigned long last_updated; /* in jiffies */ unsigned long last_updated; /* in jiffies */
...@@ -134,8 +131,7 @@ static struct adm1029_data *adm1029_update_device(struct device *dev) ...@@ -134,8 +131,7 @@ static struct adm1029_data *adm1029_update_device(struct device *dev)
* Use the "cache" Luke, don't recheck values * Use the "cache" Luke, don't recheck values
* if there are already checked not a long time later * if there are already checked not a long time later
*/ */
if (time_after(jiffies, data->last_updated + HZ * 2) if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
|| !data->valid) {
int nr; int nr;
dev_dbg(&client->dev, "Updating adm1029 data\n"); dev_dbg(&client->dev, "Updating adm1029 data\n");
...@@ -174,6 +170,7 @@ show_temp(struct device *dev, struct device_attribute *devattr, char *buf) ...@@ -174,6 +170,7 @@ show_temp(struct device *dev, struct device_attribute *devattr, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct adm1029_data *data = adm1029_update_device(dev); struct adm1029_data *data = adm1029_update_device(dev);
return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index])); return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index]));
} }
...@@ -183,9 +180,10 @@ show_fan(struct device *dev, struct device_attribute *devattr, char *buf) ...@@ -183,9 +180,10 @@ show_fan(struct device *dev, struct device_attribute *devattr, char *buf)
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct adm1029_data *data = adm1029_update_device(dev); struct adm1029_data *data = adm1029_update_device(dev);
u16 val; u16 val;
if (data->fan[attr->index] == 0
|| (data->fan_div[attr->index] & 0xC0) == 0 if (data->fan[attr->index] == 0 ||
|| data->fan[attr->index] == 255) { (data->fan_div[attr->index] & 0xC0) == 0 ||
data->fan[attr->index] == 255) {
return sprintf(buf, "0\n"); return sprintf(buf, "0\n");
} }
...@@ -199,13 +197,14 @@ show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf) ...@@ -199,13 +197,14 @@ show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct adm1029_data *data = adm1029_update_device(dev); struct adm1029_data *data = adm1029_update_device(dev);
if ((data->fan_div[attr->index] & 0xC0) == 0) if ((data->fan_div[attr->index] & 0xC0) == 0)
return sprintf(buf, "0\n"); return sprintf(buf, "0\n");
return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[attr->index])); return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[attr->index]));
} }
static ssize_t set_fan_div(struct device *dev, static ssize_t set_fan_div(struct device *dev, struct device_attribute *devattr,
struct device_attribute *devattr, const char *buf, size_t count) const char *buf, size_t count)
{ {
struct adm1029_data *data = dev_get_drvdata(dev); struct adm1029_data *data = dev_get_drvdata(dev);
struct i2c_client *client = data->client; struct i2c_client *client = data->client;
...@@ -213,6 +212,7 @@ static ssize_t set_fan_div(struct device *dev, ...@@ -213,6 +212,7 @@ static ssize_t set_fan_div(struct device *dev,
u8 reg; u8 reg;
long val; long val;
int ret = kstrtol(buf, 10, &val); int ret = kstrtol(buf, 10, &val);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -253,32 +253,27 @@ static ssize_t set_fan_div(struct device *dev, ...@@ -253,32 +253,27 @@ static ssize_t set_fan_div(struct device *dev,
return count; return count;
} }
/* /* Access rights on sysfs. */
* Access rights on sysfs. S_IRUGO: Is Readable by User, Group and Others static SENSOR_DEVICE_ATTR(temp1_input, 0444, show_temp, NULL, 0);
* S_IWUSR: Is Writable by User. static SENSOR_DEVICE_ATTR(temp2_input, 0444, show_temp, NULL, 1);
*/ static SENSOR_DEVICE_ATTR(temp3_input, 0444, show_temp, NULL, 2);
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, show_temp, NULL, 3); static SENSOR_DEVICE_ATTR(temp1_max, 0444, show_temp, NULL, 3);
static SENSOR_DEVICE_ATTR(temp2_max, S_IRUGO, show_temp, NULL, 4); static SENSOR_DEVICE_ATTR(temp2_max, 0444, show_temp, NULL, 4);
static SENSOR_DEVICE_ATTR(temp3_max, S_IRUGO, show_temp, NULL, 5); static SENSOR_DEVICE_ATTR(temp3_max, 0444, show_temp, NULL, 5);
static SENSOR_DEVICE_ATTR(temp1_min, S_IRUGO, show_temp, NULL, 6); static SENSOR_DEVICE_ATTR(temp1_min, 0444, show_temp, NULL, 6);
static SENSOR_DEVICE_ATTR(temp2_min, S_IRUGO, show_temp, NULL, 7); static SENSOR_DEVICE_ATTR(temp2_min, 0444, show_temp, NULL, 7);
static SENSOR_DEVICE_ATTR(temp3_min, S_IRUGO, show_temp, NULL, 8); static SENSOR_DEVICE_ATTR(temp3_min, 0444, show_temp, NULL, 8);
static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0); static SENSOR_DEVICE_ATTR(fan1_input, 0444, show_fan, NULL, 0);
static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1); static SENSOR_DEVICE_ATTR(fan2_input, 0444, show_fan, NULL, 1);
static SENSOR_DEVICE_ATTR(fan1_min, S_IRUGO, show_fan, NULL, 2); static SENSOR_DEVICE_ATTR(fan1_min, 0444, show_fan, NULL, 2);
static SENSOR_DEVICE_ATTR(fan2_min, S_IRUGO, show_fan, NULL, 3); static SENSOR_DEVICE_ATTR(fan2_min, 0444, show_fan, NULL, 3);
static SENSOR_DEVICE_ATTR(fan1_div, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR(fan1_div, 0644, show_fan_div, set_fan_div, 0);
show_fan_div, set_fan_div, 0); static SENSOR_DEVICE_ATTR(fan2_div, 0644, show_fan_div, set_fan_div, 1);
static SENSOR_DEVICE_ATTR(fan2_div, S_IRUGO | S_IWUSR,
show_fan_div, set_fan_div, 1);
static struct attribute *adm1029_attrs[] = { static struct attribute *adm1029_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
...@@ -329,8 +324,8 @@ static int adm1029_detect(struct i2c_client *client, ...@@ -329,8 +324,8 @@ static int adm1029_detect(struct i2c_client *client,
nb_fan_support = i2c_smbus_read_byte_data(client, nb_fan_support = i2c_smbus_read_byte_data(client,
ADM1029_REG_NB_FAN_SUPPORT); ADM1029_REG_NB_FAN_SUPPORT);
/* 0x41 is Analog Devices */ /* 0x41 is Analog Devices */
if (man_id != 0x41 || (temp_devices_installed & 0xf9) != 0x01 if (man_id != 0x41 || (temp_devices_installed & 0xf9) != 0x01 ||
|| nb_fan_support != 0x03) nb_fan_support != 0x03)
return -ENODEV; return -ENODEV;
if ((chip_id & 0xF0) != 0x00) { if ((chip_id & 0xF0) != 0x00) {
......
...@@ -448,6 +448,7 @@ static const char *voltage_label(struct adt7462_data *data, int which) ...@@ -448,6 +448,7 @@ static const char *voltage_label(struct adt7462_data *data, int which)
case 3: case 3:
return "+1.5V"; return "+1.5V";
} }
/* fall through */
case 2: case 2:
if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
return "+12V3"; return "+12V3";
...@@ -505,6 +506,7 @@ static const char *voltage_label(struct adt7462_data *data, int which) ...@@ -505,6 +506,7 @@ static const char *voltage_label(struct adt7462_data *data, int which)
case 3: case 3:
return "+1.5"; return "+1.5";
} }
/* fall through */
case 11: case 11:
if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
ADT7462_PIN28_VOLT && ADT7462_PIN28_VOLT &&
...@@ -542,6 +544,7 @@ static int voltage_multiplier(struct adt7462_data *data, int which) ...@@ -542,6 +544,7 @@ static int voltage_multiplier(struct adt7462_data *data, int which)
case 3: case 3:
return 7800; return 7800;
} }
/* fall through */
case 2: case 2:
if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
return 62500; return 62500;
...@@ -599,6 +602,7 @@ static int voltage_multiplier(struct adt7462_data *data, int which) ...@@ -599,6 +602,7 @@ static int voltage_multiplier(struct adt7462_data *data, int which)
case 3: case 3:
return 7800; return 7800;
} }
/* fall through */
case 11: case 11:
case 12: case 12:
if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
......
...@@ -82,9 +82,15 @@ static bool disallow_fan_support; ...@@ -82,9 +82,15 @@ static bool disallow_fan_support;
#define I8K_HWMON_HAVE_TEMP2 (1 << 1) #define I8K_HWMON_HAVE_TEMP2 (1 << 1)
#define I8K_HWMON_HAVE_TEMP3 (1 << 2) #define I8K_HWMON_HAVE_TEMP3 (1 << 2)
#define I8K_HWMON_HAVE_TEMP4 (1 << 3) #define I8K_HWMON_HAVE_TEMP4 (1 << 3)
#define I8K_HWMON_HAVE_FAN1 (1 << 4) #define I8K_HWMON_HAVE_TEMP5 (1 << 4)
#define I8K_HWMON_HAVE_FAN2 (1 << 5) #define I8K_HWMON_HAVE_TEMP6 (1 << 5)
#define I8K_HWMON_HAVE_FAN3 (1 << 6) #define I8K_HWMON_HAVE_TEMP7 (1 << 6)
#define I8K_HWMON_HAVE_TEMP8 (1 << 7)
#define I8K_HWMON_HAVE_TEMP9 (1 << 8)
#define I8K_HWMON_HAVE_TEMP10 (1 << 9)
#define I8K_HWMON_HAVE_FAN1 (1 << 10)
#define I8K_HWMON_HAVE_FAN2 (1 << 11)
#define I8K_HWMON_HAVE_FAN3 (1 << 12)
MODULE_AUTHOR("Massimo Dal Zotto (dz@debian.org)"); MODULE_AUTHOR("Massimo Dal Zotto (dz@debian.org)");
MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>"); MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>");
...@@ -737,6 +743,18 @@ static SENSOR_DEVICE_ATTR_RO(temp3_input, i8k_hwmon_temp, 2); ...@@ -737,6 +743,18 @@ static SENSOR_DEVICE_ATTR_RO(temp3_input, i8k_hwmon_temp, 2);
static SENSOR_DEVICE_ATTR_RO(temp3_label, i8k_hwmon_temp_label, 2); static SENSOR_DEVICE_ATTR_RO(temp3_label, i8k_hwmon_temp_label, 2);
static SENSOR_DEVICE_ATTR_RO(temp4_input, i8k_hwmon_temp, 3); static SENSOR_DEVICE_ATTR_RO(temp4_input, i8k_hwmon_temp, 3);
static SENSOR_DEVICE_ATTR_RO(temp4_label, i8k_hwmon_temp_label, 3); static SENSOR_DEVICE_ATTR_RO(temp4_label, i8k_hwmon_temp_label, 3);
static SENSOR_DEVICE_ATTR_RO(temp5_input, i8k_hwmon_temp, 4);
static SENSOR_DEVICE_ATTR_RO(temp5_label, i8k_hwmon_temp_label, 4);
static SENSOR_DEVICE_ATTR_RO(temp6_input, i8k_hwmon_temp, 5);
static SENSOR_DEVICE_ATTR_RO(temp6_label, i8k_hwmon_temp_label, 5);
static SENSOR_DEVICE_ATTR_RO(temp7_input, i8k_hwmon_temp, 6);
static SENSOR_DEVICE_ATTR_RO(temp7_label, i8k_hwmon_temp_label, 6);
static SENSOR_DEVICE_ATTR_RO(temp8_input, i8k_hwmon_temp, 7);
static SENSOR_DEVICE_ATTR_RO(temp8_label, i8k_hwmon_temp_label, 7);
static SENSOR_DEVICE_ATTR_RO(temp9_input, i8k_hwmon_temp, 8);
static SENSOR_DEVICE_ATTR_RO(temp9_label, i8k_hwmon_temp_label, 8);
static SENSOR_DEVICE_ATTR_RO(temp10_input, i8k_hwmon_temp, 9);
static SENSOR_DEVICE_ATTR_RO(temp10_label, i8k_hwmon_temp_label, 9);
static SENSOR_DEVICE_ATTR_RO(fan1_input, i8k_hwmon_fan, 0); static SENSOR_DEVICE_ATTR_RO(fan1_input, i8k_hwmon_fan, 0);
static SENSOR_DEVICE_ATTR_RO(fan1_label, i8k_hwmon_fan_label, 0); static SENSOR_DEVICE_ATTR_RO(fan1_label, i8k_hwmon_fan_label, 0);
static SENSOR_DEVICE_ATTR_RW(pwm1, i8k_hwmon_pwm, 0); static SENSOR_DEVICE_ATTR_RW(pwm1, i8k_hwmon_pwm, 0);
...@@ -756,15 +774,27 @@ static struct attribute *i8k_attrs[] = { ...@@ -756,15 +774,27 @@ static struct attribute *i8k_attrs[] = {
&sensor_dev_attr_temp3_label.dev_attr.attr, /* 5 */ &sensor_dev_attr_temp3_label.dev_attr.attr, /* 5 */
&sensor_dev_attr_temp4_input.dev_attr.attr, /* 6 */ &sensor_dev_attr_temp4_input.dev_attr.attr, /* 6 */
&sensor_dev_attr_temp4_label.dev_attr.attr, /* 7 */ &sensor_dev_attr_temp4_label.dev_attr.attr, /* 7 */
&sensor_dev_attr_fan1_input.dev_attr.attr, /* 8 */ &sensor_dev_attr_temp5_input.dev_attr.attr, /* 8 */
&sensor_dev_attr_fan1_label.dev_attr.attr, /* 9 */ &sensor_dev_attr_temp5_label.dev_attr.attr, /* 9 */
&sensor_dev_attr_pwm1.dev_attr.attr, /* 10 */ &sensor_dev_attr_temp6_input.dev_attr.attr, /* 10 */
&sensor_dev_attr_fan2_input.dev_attr.attr, /* 11 */ &sensor_dev_attr_temp6_label.dev_attr.attr, /* 11 */
&sensor_dev_attr_fan2_label.dev_attr.attr, /* 12 */ &sensor_dev_attr_temp7_input.dev_attr.attr, /* 12 */
&sensor_dev_attr_pwm2.dev_attr.attr, /* 13 */ &sensor_dev_attr_temp7_label.dev_attr.attr, /* 13 */
&sensor_dev_attr_fan3_input.dev_attr.attr, /* 14 */ &sensor_dev_attr_temp8_input.dev_attr.attr, /* 14 */
&sensor_dev_attr_fan3_label.dev_attr.attr, /* 15 */ &sensor_dev_attr_temp8_label.dev_attr.attr, /* 15 */
&sensor_dev_attr_pwm3.dev_attr.attr, /* 16 */ &sensor_dev_attr_temp9_input.dev_attr.attr, /* 16 */
&sensor_dev_attr_temp9_label.dev_attr.attr, /* 17 */
&sensor_dev_attr_temp10_input.dev_attr.attr, /* 18 */
&sensor_dev_attr_temp10_label.dev_attr.attr, /* 19 */
&sensor_dev_attr_fan1_input.dev_attr.attr, /* 20 */
&sensor_dev_attr_fan1_label.dev_attr.attr, /* 21 */
&sensor_dev_attr_pwm1.dev_attr.attr, /* 22 */
&sensor_dev_attr_fan2_input.dev_attr.attr, /* 23 */
&sensor_dev_attr_fan2_label.dev_attr.attr, /* 24 */
&sensor_dev_attr_pwm2.dev_attr.attr, /* 25 */
&sensor_dev_attr_fan3_input.dev_attr.attr, /* 26 */
&sensor_dev_attr_fan3_label.dev_attr.attr, /* 27 */
&sensor_dev_attr_pwm3.dev_attr.attr, /* 28 */
NULL NULL
}; };
...@@ -788,13 +818,32 @@ static umode_t i8k_is_visible(struct kobject *kobj, struct attribute *attr, ...@@ -788,13 +818,32 @@ static umode_t i8k_is_visible(struct kobject *kobj, struct attribute *attr,
if (index >= 6 && index <= 7 && if (index >= 6 && index <= 7 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP4)) !(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP4))
return 0; return 0;
if (index >= 8 && index <= 10 && if (index >= 8 && index <= 9 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP5))
return 0;
if (index >= 10 && index <= 11 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP6))
return 0;
if (index >= 12 && index <= 13 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP7))
return 0;
if (index >= 14 && index <= 15 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP8))
return 0;
if (index >= 16 && index <= 17 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP9))
return 0;
if (index >= 18 && index <= 19 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP10))
return 0;
if (index >= 20 && index <= 22 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_FAN1)) !(i8k_hwmon_flags & I8K_HWMON_HAVE_FAN1))
return 0; return 0;
if (index >= 11 && index <= 13 && if (index >= 23 && index <= 25 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_FAN2)) !(i8k_hwmon_flags & I8K_HWMON_HAVE_FAN2))
return 0; return 0;
if (index >= 14 && index <= 16 && if (index >= 26 && index <= 28 &&
!(i8k_hwmon_flags & I8K_HWMON_HAVE_FAN3)) !(i8k_hwmon_flags & I8K_HWMON_HAVE_FAN3))
return 0; return 0;
...@@ -827,6 +876,24 @@ static int __init i8k_init_hwmon(void) ...@@ -827,6 +876,24 @@ static int __init i8k_init_hwmon(void)
err = i8k_get_temp_type(3); err = i8k_get_temp_type(3);
if (err >= 0) if (err >= 0)
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP4; i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP4;
err = i8k_get_temp_type(4);
if (err >= 0)
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP5;
err = i8k_get_temp_type(5);
if (err >= 0)
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP6;
err = i8k_get_temp_type(6);
if (err >= 0)
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP7;
err = i8k_get_temp_type(7);
if (err >= 0)
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP8;
err = i8k_get_temp_type(8);
if (err >= 0)
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP9;
err = i8k_get_temp_type(9);
if (err >= 0)
i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP10;
/* First fan attributes, if fan status or type is OK */ /* First fan attributes, if fan status or type is OK */
err = i8k_get_fan_status(0); err = i8k_get_fan_status(0);
......
...@@ -2455,7 +2455,7 @@ static int f71882fg_probe(struct platform_device *pdev) ...@@ -2455,7 +2455,7 @@ static int f71882fg_probe(struct platform_device *pdev)
case f71869a: case f71869a:
/* These always have signed auto point temps */ /* These always have signed auto point temps */
data->auto_point_temp_signed = 1; data->auto_point_temp_signed = 1;
/* Fall through to select correct fan/pwm reg bank! */ /* Fall through - to select correct fan/pwm reg bank! */
case f71889fg: case f71889fg:
case f71889ed: case f71889ed:
case f71889a: case f71889a:
......
...@@ -264,7 +264,7 @@ show(RAW, alarms, alarms); ...@@ -264,7 +264,7 @@ show(RAW, alarms, alarms);
show(BOOL, beep_enable, beep_enable); show(BOOL, beep_enable, beep_enable);
show(BEEP_MASK, beep_mask, beep_mask); show(BEEP_MASK, beep_mask, beep_mask);
static ssize_t show_fan_input(struct device *dev, static ssize_t fan_input_show(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
int nr = to_sensor_dev_attr(attr)->index; int nr = to_sensor_dev_attr(attr)->index;
...@@ -273,8 +273,8 @@ static ssize_t show_fan_input(struct device *dev, ...@@ -273,8 +273,8 @@ static ssize_t show_fan_input(struct device *dev,
DIV_FROM_REG(data->fan_div[nr]))); DIV_FROM_REG(data->fan_div[nr])));
} }
static ssize_t show_fan_min(struct device *dev, static ssize_t fan_min_show(struct device *dev, struct device_attribute *attr,
struct device_attribute *attr, char *buf) char *buf)
{ {
int nr = to_sensor_dev_attr(attr)->index; int nr = to_sensor_dev_attr(attr)->index;
struct gl518_data *data = gl518_update_device(dev); struct gl518_data *data = gl518_update_device(dev);
...@@ -282,8 +282,8 @@ static ssize_t show_fan_min(struct device *dev, ...@@ -282,8 +282,8 @@ static ssize_t show_fan_min(struct device *dev,
DIV_FROM_REG(data->fan_div[nr]))); DIV_FROM_REG(data->fan_div[nr])));
} }
static ssize_t show_fan_div(struct device *dev, static ssize_t fan_div_show(struct device *dev, struct device_attribute *attr,
struct device_attribute *attr, char *buf) char *buf)
{ {
int nr = to_sensor_dev_attr(attr)->index; int nr = to_sensor_dev_attr(attr)->index;
struct gl518_data *data = gl518_update_device(dev); struct gl518_data *data = gl518_update_device(dev);
...@@ -350,8 +350,9 @@ set_high(IN, in_max3, voltage_max[3], GL518_REG_VIN3_LIMIT); ...@@ -350,8 +350,9 @@ set_high(IN, in_max3, voltage_max[3], GL518_REG_VIN3_LIMIT);
set_bits(BOOL, beep_enable, beep_enable, GL518_REG_CONF, 0x04, 2); set_bits(BOOL, beep_enable, beep_enable, GL518_REG_CONF, 0x04, 2);
set(BEEP_MASK, beep_mask, beep_mask, GL518_REG_ALARM); set(BEEP_MASK, beep_mask, beep_mask, GL518_REG_ALARM);
static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, static ssize_t fan_min_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *attr, const char *buf,
size_t count)
{ {
struct gl518_data *data = dev_get_drvdata(dev); struct gl518_data *data = dev_get_drvdata(dev);
struct i2c_client *client = data->client; struct i2c_client *client = data->client;
...@@ -383,8 +384,9 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, ...@@ -383,8 +384,9 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
return count; return count;
} }
static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, static ssize_t fan_div_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *attr, const char *buf,
size_t count)
{ {
struct gl518_data *data = dev_get_drvdata(dev); struct gl518_data *data = dev_get_drvdata(dev);
struct i2c_client *client = data->client; struct i2c_client *client = data->client;
...@@ -427,40 +429,36 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, ...@@ -427,40 +429,36 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
return count; return count;
} }
static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input1, NULL); static DEVICE_ATTR(temp1_input, 0444, show_temp_input1, NULL);
static DEVICE_ATTR(temp1_max, S_IWUSR|S_IRUGO, show_temp_max1, set_temp_max1); static DEVICE_ATTR(temp1_max, 0644, show_temp_max1, set_temp_max1);
static DEVICE_ATTR(temp1_max_hyst, S_IWUSR|S_IRUGO, static DEVICE_ATTR(temp1_max_hyst, 0644,
show_temp_hyst1, set_temp_hyst1); show_temp_hyst1, set_temp_hyst1);
static DEVICE_ATTR(fan1_auto, S_IWUSR|S_IRUGO, show_fan_auto1, set_fan_auto1); static DEVICE_ATTR(fan1_auto, 0644, show_fan_auto1, set_fan_auto1);
static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan_input, NULL, 0); static SENSOR_DEVICE_ATTR_RO(fan1_input, fan_input, 0);
static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan_input, NULL, 1); static SENSOR_DEVICE_ATTR_RO(fan2_input, fan_input, 1);
static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR|S_IRUGO, static SENSOR_DEVICE_ATTR_RW(fan1_min, fan_min, 0);
show_fan_min, set_fan_min, 0); static SENSOR_DEVICE_ATTR_RW(fan2_min, fan_min, 1);
static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR|S_IRUGO, static SENSOR_DEVICE_ATTR_RW(fan1_div, fan_div, 0);
show_fan_min, set_fan_min, 1); static SENSOR_DEVICE_ATTR_RW(fan2_div, fan_div, 1);
static SENSOR_DEVICE_ATTR(fan1_div, S_IWUSR|S_IRUGO, static DEVICE_ATTR(in0_input, 0444, show_in_input0, NULL);
show_fan_div, set_fan_div, 0); static DEVICE_ATTR(in1_input, 0444, show_in_input1, NULL);
static SENSOR_DEVICE_ATTR(fan2_div, S_IWUSR|S_IRUGO, static DEVICE_ATTR(in2_input, 0444, show_in_input2, NULL);
show_fan_div, set_fan_div, 1); static DEVICE_ATTR(in3_input, 0444, show_in_input3, NULL);
static DEVICE_ATTR(in0_input, S_IRUGO, show_in_input0, NULL); static DEVICE_ATTR(in0_min, 0644, show_in_min0, set_in_min0);
static DEVICE_ATTR(in1_input, S_IRUGO, show_in_input1, NULL); static DEVICE_ATTR(in1_min, 0644, show_in_min1, set_in_min1);
static DEVICE_ATTR(in2_input, S_IRUGO, show_in_input2, NULL); static DEVICE_ATTR(in2_min, 0644, show_in_min2, set_in_min2);
static DEVICE_ATTR(in3_input, S_IRUGO, show_in_input3, NULL); static DEVICE_ATTR(in3_min, 0644, show_in_min3, set_in_min3);
static DEVICE_ATTR(in0_min, S_IWUSR|S_IRUGO, show_in_min0, set_in_min0); static DEVICE_ATTR(in0_max, 0644, show_in_max0, set_in_max0);
static DEVICE_ATTR(in1_min, S_IWUSR|S_IRUGO, show_in_min1, set_in_min1); static DEVICE_ATTR(in1_max, 0644, show_in_max1, set_in_max1);
static DEVICE_ATTR(in2_min, S_IWUSR|S_IRUGO, show_in_min2, set_in_min2); static DEVICE_ATTR(in2_max, 0644, show_in_max2, set_in_max2);
static DEVICE_ATTR(in3_min, S_IWUSR|S_IRUGO, show_in_min3, set_in_min3); static DEVICE_ATTR(in3_max, 0644, show_in_max3, set_in_max3);
static DEVICE_ATTR(in0_max, S_IWUSR|S_IRUGO, show_in_max0, set_in_max0); static DEVICE_ATTR(alarms, 0444, show_alarms, NULL);
static DEVICE_ATTR(in1_max, S_IWUSR|S_IRUGO, show_in_max1, set_in_max1); static DEVICE_ATTR(beep_enable, 0644,
static DEVICE_ATTR(in2_max, S_IWUSR|S_IRUGO, show_in_max2, set_in_max2);
static DEVICE_ATTR(in3_max, S_IWUSR|S_IRUGO, show_in_max3, set_in_max3);
static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
static DEVICE_ATTR(beep_enable, S_IWUSR|S_IRUGO,
show_beep_enable, set_beep_enable); show_beep_enable, set_beep_enable);
static DEVICE_ATTR(beep_mask, S_IWUSR|S_IRUGO, static DEVICE_ATTR(beep_mask, 0644,
show_beep_mask, set_beep_mask); show_beep_mask, set_beep_mask);
static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int bitnr = to_sensor_dev_attr(attr)->index; int bitnr = to_sensor_dev_attr(attr)->index;
...@@ -468,15 +466,15 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, ...@@ -468,15 +466,15 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
} }
static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); static SENSOR_DEVICE_ATTR_RO(in0_alarm, alarm, 0);
static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR_RO(in1_alarm, alarm, 1);
static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); static SENSOR_DEVICE_ATTR_RO(in2_alarm, alarm, 2);
static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3); static SENSOR_DEVICE_ATTR_RO(in3_alarm, alarm, 3);
static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4); static SENSOR_DEVICE_ATTR_RO(temp1_alarm, alarm, 4);
static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 5); static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm, 5);
static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 6); static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm, 6);
static ssize_t show_beep(struct device *dev, struct device_attribute *attr, static ssize_t beep_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int bitnr = to_sensor_dev_attr(attr)->index; int bitnr = to_sensor_dev_attr(attr)->index;
...@@ -484,7 +482,7 @@ static ssize_t show_beep(struct device *dev, struct device_attribute *attr, ...@@ -484,7 +482,7 @@ static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1); return sprintf(buf, "%u\n", (data->beep_mask >> bitnr) & 1);
} }
static ssize_t set_beep(struct device *dev, struct device_attribute *attr, static ssize_t beep_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct gl518_data *data = dev_get_drvdata(dev); struct gl518_data *data = dev_get_drvdata(dev);
...@@ -511,13 +509,13 @@ static ssize_t set_beep(struct device *dev, struct device_attribute *attr, ...@@ -511,13 +509,13 @@ static ssize_t set_beep(struct device *dev, struct device_attribute *attr,
return count; return count;
} }
static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 0); static SENSOR_DEVICE_ATTR_RW(in0_beep, beep, 0);
static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 1); static SENSOR_DEVICE_ATTR_RW(in1_beep, beep, 1);
static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 2); static SENSOR_DEVICE_ATTR_RW(in2_beep, beep, 2);
static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 3); static SENSOR_DEVICE_ATTR_RW(in3_beep, beep, 3);
static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 4); static SENSOR_DEVICE_ATTR_RW(temp1_beep, beep, 4);
static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 5); static SENSOR_DEVICE_ATTR_RW(fan1_beep, beep, 5);
static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO|S_IWUSR, show_beep, set_beep, 6); static SENSOR_DEVICE_ATTR_RW(fan2_beep, beep, 6);
static struct attribute *gl518_attributes[] = { static struct attribute *gl518_attributes[] = {
&dev_attr_in3_input.attr, &dev_attr_in3_input.attr,
......
This diff is collapsed.
...@@ -307,7 +307,7 @@ static DEVICE_ATTR_RO(pwm1_mode); ...@@ -307,7 +307,7 @@ static DEVICE_ATTR_RO(pwm1_mode);
static DEVICE_ATTR_RO(fan1_min); static DEVICE_ATTR_RO(fan1_min);
static DEVICE_ATTR_RO(fan1_max); static DEVICE_ATTR_RO(fan1_max);
static DEVICE_ATTR_RO(fan1_input); static DEVICE_ATTR_RO(fan1_input);
static DEVICE_ATTR(fan1_target, S_IRUGO | S_IWUSR, fan1_input_show, set_rpm); static DEVICE_ATTR(fan1_target, 0644, fan1_input_show, set_rpm);
static umode_t gpio_fan_is_visible(struct kobject *kobj, static umode_t gpio_fan_is_visible(struct kobject *kobj,
struct attribute *attr, int index) struct attribute *attr, int index)
......
...@@ -171,7 +171,7 @@ static int hih6130_update_measurements(struct device *dev) ...@@ -171,7 +171,7 @@ static int hih6130_update_measurements(struct device *dev)
* Will be called on read access to temp1_input sysfs attribute. * Will be called on read access to temp1_input sysfs attribute.
* Returns number of bytes written into buffer, negative errno on error. * Returns number of bytes written into buffer, negative errno on error.
*/ */
static ssize_t hih6130_show_temperature(struct device *dev, static ssize_t hih6130_temperature_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
{ {
...@@ -193,7 +193,7 @@ static ssize_t hih6130_show_temperature(struct device *dev, ...@@ -193,7 +193,7 @@ static ssize_t hih6130_show_temperature(struct device *dev,
* Will be called on read access to humidity1_input sysfs attribute. * Will be called on read access to humidity1_input sysfs attribute.
* Returns number of bytes written into buffer, negative errno on error. * Returns number of bytes written into buffer, negative errno on error.
*/ */
static ssize_t hih6130_show_humidity(struct device *dev, static ssize_t hih6130_humidity_show(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
struct hih6130 *hih6130 = dev_get_drvdata(dev); struct hih6130 *hih6130 = dev_get_drvdata(dev);
...@@ -206,10 +206,8 @@ static ssize_t hih6130_show_humidity(struct device *dev, ...@@ -206,10 +206,8 @@ static ssize_t hih6130_show_humidity(struct device *dev,
} }
/* sysfs attributes */ /* sysfs attributes */
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, hih6130_show_temperature, static SENSOR_DEVICE_ATTR_RO(temp1_input, hih6130_temperature, 0);
NULL, 0); static SENSOR_DEVICE_ATTR_RO(humidity1_input, hih6130_humidity, 0);
static SENSOR_DEVICE_ATTR(humidity1_input, S_IRUGO, hih6130_show_humidity,
NULL, 0);
static struct attribute *hih6130_attrs[] = { static struct attribute *hih6130_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
...@@ -254,8 +252,17 @@ static const struct i2c_device_id hih6130_id[] = { ...@@ -254,8 +252,17 @@ static const struct i2c_device_id hih6130_id[] = {
}; };
MODULE_DEVICE_TABLE(i2c, hih6130_id); MODULE_DEVICE_TABLE(i2c, hih6130_id);
static const struct of_device_id hih6130_of_match[] = {
{ .compatible = "honeywell,hih6130", },
{ }
};
MODULE_DEVICE_TABLE(of, hih6130_of_match);
static struct i2c_driver hih6130_driver = { static struct i2c_driver hih6130_driver = {
.driver.name = "hih6130", .driver = {
.name = "hih6130",
.of_match_table = of_match_ptr(hih6130_of_match),
},
.probe = hih6130_probe, .probe = hih6130_probe,
.id_table = hih6130_id, .id_table = hih6130_id,
}; };
......
...@@ -278,10 +278,10 @@ static struct attribute *hwmon_genattr(struct device *dev, ...@@ -278,10 +278,10 @@ static struct attribute *hwmon_genattr(struct device *dev,
if (!mode) if (!mode)
return ERR_PTR(-ENOENT); return ERR_PTR(-ENOENT);
if ((mode & S_IRUGO) && ((is_string && !ops->read_string) || if ((mode & 0444) && ((is_string && !ops->read_string) ||
(!is_string && !ops->read))) (!is_string && !ops->read)))
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
if ((mode & S_IWUGO) && !ops->write) if ((mode & 0222) && !ops->write)
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
hattr = devm_kzalloc(dev, sizeof(*hattr), GFP_KERNEL); hattr = devm_kzalloc(dev, sizeof(*hattr), GFP_KERNEL);
......
...@@ -58,7 +58,7 @@ static ssize_t temp1_input_show(struct device *dev, ...@@ -58,7 +58,7 @@ static ssize_t temp1_input_show(struct device *dev,
return sprintf(buf, "%ld\n", temp); return sprintf(buf, "%ld\n", temp);
} }
static ssize_t show_thresh(struct device *dev, static ssize_t thresh_show(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr, char *buf)
{ {
struct pci_dev *pdev = to_pci_dev(dev->parent); struct pci_dev *pdev = to_pci_dev(dev->parent);
...@@ -72,7 +72,7 @@ static ssize_t show_thresh(struct device *dev, ...@@ -72,7 +72,7 @@ static ssize_t show_thresh(struct device *dev,
return sprintf(buf, "%ld\n", temp); return sprintf(buf, "%ld\n", temp);
} }
static ssize_t show_alarm(struct device *dev, static ssize_t alarm_show(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr, char *buf)
{ {
struct pci_dev *pdev = to_pci_dev(dev->parent); struct pci_dev *pdev = to_pci_dev(dev->parent);
...@@ -84,11 +84,11 @@ static ssize_t show_alarm(struct device *dev, ...@@ -84,11 +84,11 @@ static ssize_t show_alarm(struct device *dev,
} }
static DEVICE_ATTR_RO(temp1_input); static DEVICE_ATTR_RO(temp1_input);
static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_thresh, NULL, 0xE2); static SENSOR_DEVICE_ATTR_RO(temp1_crit, thresh, 0xE2);
static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IRUGO, show_thresh, NULL, 0xEC); static SENSOR_DEVICE_ATTR_RO(temp1_max_hyst, thresh, 0xEC);
static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, show_thresh, NULL, 0xEE); static SENSOR_DEVICE_ATTR_RO(temp1_max, thresh, 0xEE);
static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 0);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 1);
static struct attribute *i5500_temp_attrs[] = { static struct attribute *i5500_temp_attrs[] = {
&dev_attr_temp1_input.attr, &dev_attr_temp1_input.attr,
......
...@@ -296,7 +296,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev) ...@@ -296,7 +296,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
snprintf(iattr->name, AMB_SYSFS_NAME_LEN, snprintf(iattr->name, AMB_SYSFS_NAME_LEN,
"temp%d_label", d); "temp%d_label", d);
iattr->s_attr.dev_attr.attr.name = iattr->name; iattr->s_attr.dev_attr.attr.name = iattr->name;
iattr->s_attr.dev_attr.attr.mode = S_IRUGO; iattr->s_attr.dev_attr.attr.mode = 0444;
iattr->s_attr.dev_attr.show = show_label; iattr->s_attr.dev_attr.show = show_label;
iattr->s_attr.index = k; iattr->s_attr.index = k;
sysfs_attr_init(&iattr->s_attr.dev_attr.attr); sysfs_attr_init(&iattr->s_attr.dev_attr.attr);
...@@ -311,7 +311,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev) ...@@ -311,7 +311,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
snprintf(iattr->name, AMB_SYSFS_NAME_LEN, snprintf(iattr->name, AMB_SYSFS_NAME_LEN,
"temp%d_input", d); "temp%d_input", d);
iattr->s_attr.dev_attr.attr.name = iattr->name; iattr->s_attr.dev_attr.attr.name = iattr->name;
iattr->s_attr.dev_attr.attr.mode = S_IRUGO; iattr->s_attr.dev_attr.attr.mode = 0444;
iattr->s_attr.dev_attr.show = show_amb_temp; iattr->s_attr.dev_attr.show = show_amb_temp;
iattr->s_attr.index = k; iattr->s_attr.index = k;
sysfs_attr_init(&iattr->s_attr.dev_attr.attr); sysfs_attr_init(&iattr->s_attr.dev_attr.attr);
...@@ -326,7 +326,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev) ...@@ -326,7 +326,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
snprintf(iattr->name, AMB_SYSFS_NAME_LEN, snprintf(iattr->name, AMB_SYSFS_NAME_LEN,
"temp%d_min", d); "temp%d_min", d);
iattr->s_attr.dev_attr.attr.name = iattr->name; iattr->s_attr.dev_attr.attr.name = iattr->name;
iattr->s_attr.dev_attr.attr.mode = S_IWUSR | S_IRUGO; iattr->s_attr.dev_attr.attr.mode = 0644;
iattr->s_attr.dev_attr.show = show_amb_min; iattr->s_attr.dev_attr.show = show_amb_min;
iattr->s_attr.dev_attr.store = store_amb_min; iattr->s_attr.dev_attr.store = store_amb_min;
iattr->s_attr.index = k; iattr->s_attr.index = k;
...@@ -342,7 +342,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev) ...@@ -342,7 +342,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
snprintf(iattr->name, AMB_SYSFS_NAME_LEN, snprintf(iattr->name, AMB_SYSFS_NAME_LEN,
"temp%d_mid", d); "temp%d_mid", d);
iattr->s_attr.dev_attr.attr.name = iattr->name; iattr->s_attr.dev_attr.attr.name = iattr->name;
iattr->s_attr.dev_attr.attr.mode = S_IWUSR | S_IRUGO; iattr->s_attr.dev_attr.attr.mode = 0644;
iattr->s_attr.dev_attr.show = show_amb_mid; iattr->s_attr.dev_attr.show = show_amb_mid;
iattr->s_attr.dev_attr.store = store_amb_mid; iattr->s_attr.dev_attr.store = store_amb_mid;
iattr->s_attr.index = k; iattr->s_attr.index = k;
...@@ -358,7 +358,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev) ...@@ -358,7 +358,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
snprintf(iattr->name, AMB_SYSFS_NAME_LEN, snprintf(iattr->name, AMB_SYSFS_NAME_LEN,
"temp%d_max", d); "temp%d_max", d);
iattr->s_attr.dev_attr.attr.name = iattr->name; iattr->s_attr.dev_attr.attr.name = iattr->name;
iattr->s_attr.dev_attr.attr.mode = S_IWUSR | S_IRUGO; iattr->s_attr.dev_attr.attr.mode = 0644;
iattr->s_attr.dev_attr.show = show_amb_max; iattr->s_attr.dev_attr.show = show_amb_max;
iattr->s_attr.dev_attr.store = store_amb_max; iattr->s_attr.dev_attr.store = store_amb_max;
iattr->s_attr.index = k; iattr->s_attr.index = k;
...@@ -374,7 +374,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev) ...@@ -374,7 +374,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
snprintf(iattr->name, AMB_SYSFS_NAME_LEN, snprintf(iattr->name, AMB_SYSFS_NAME_LEN,
"temp%d_alarm", d); "temp%d_alarm", d);
iattr->s_attr.dev_attr.attr.name = iattr->name; iattr->s_attr.dev_attr.attr.name = iattr->name;
iattr->s_attr.dev_attr.attr.mode = S_IRUGO; iattr->s_attr.dev_attr.attr.mode = 0444;
iattr->s_attr.dev_attr.show = show_amb_alarm; iattr->s_attr.dev_attr.show = show_amb_alarm;
iattr->s_attr.index = k; iattr->s_attr.index = k;
sysfs_attr_init(&iattr->s_attr.dev_attr.attr); sysfs_attr_init(&iattr->s_attr.dev_attr.attr);
......
...@@ -813,25 +813,24 @@ static void aem_bmc_gone(int iface) ...@@ -813,25 +813,24 @@ static void aem_bmc_gone(int iface)
/* sysfs support functions */ /* sysfs support functions */
/* AEM device name */ /* AEM device name */
static ssize_t show_name(struct device *dev, struct device_attribute *devattr, static ssize_t name_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
struct aem_data *data = dev_get_drvdata(dev); struct aem_data *data = dev_get_drvdata(dev);
return sprintf(buf, "%s%d\n", DRVNAME, data->ver_major); return sprintf(buf, "%s%d\n", DRVNAME, data->ver_major);
} }
static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, 0); static SENSOR_DEVICE_ATTR_RO(name, name, 0);
/* AEM device version */ /* AEM device version */
static ssize_t show_version(struct device *dev, static ssize_t version_show(struct device *dev,
struct device_attribute *devattr, struct device_attribute *devattr, char *buf)
char *buf)
{ {
struct aem_data *data = dev_get_drvdata(dev); struct aem_data *data = dev_get_drvdata(dev);
return sprintf(buf, "%d.%d\n", data->ver_major, data->ver_minor); return sprintf(buf, "%d.%d\n", data->ver_major, data->ver_minor);
} }
static SENSOR_DEVICE_ATTR(version, S_IRUGO, show_version, NULL, 0); static SENSOR_DEVICE_ATTR_RO(version, version, 0);
/* Display power use */ /* Display power use */
static ssize_t aem_show_power(struct device *dev, static ssize_t aem_show_power(struct device *dev,
...@@ -931,7 +930,7 @@ static int aem_register_sensors(struct aem_data *data, ...@@ -931,7 +930,7 @@ static int aem_register_sensors(struct aem_data *data,
while (ro->label) { while (ro->label) {
sysfs_attr_init(&sensors->dev_attr.attr); sysfs_attr_init(&sensors->dev_attr.attr);
sensors->dev_attr.attr.name = ro->label; sensors->dev_attr.attr.name = ro->label;
sensors->dev_attr.attr.mode = S_IRUGO; sensors->dev_attr.attr.mode = 0444;
sensors->dev_attr.show = ro->show; sensors->dev_attr.show = ro->show;
sensors->index = ro->index; sensors->index = ro->index;
...@@ -948,7 +947,7 @@ static int aem_register_sensors(struct aem_data *data, ...@@ -948,7 +947,7 @@ static int aem_register_sensors(struct aem_data *data,
while (rw->label) { while (rw->label) {
sysfs_attr_init(&sensors->dev_attr.attr); sysfs_attr_init(&sensors->dev_attr.attr);
sensors->dev_attr.attr.name = rw->label; sensors->dev_attr.attr.name = rw->label;
sensors->dev_attr.attr.mode = S_IRUGO | S_IWUSR; sensors->dev_attr.attr.mode = 0644;
sensors->dev_attr.show = rw->show; sensors->dev_attr.show = rw->show;
sensors->dev_attr.store = rw->set; sensors->dev_attr.store = rw->set;
sensors->index = rw->index; sensors->index = rw->index;
......
...@@ -269,12 +269,12 @@ static struct ibmpex_bmc_data *get_bmc_data(int iface) ...@@ -269,12 +269,12 @@ static struct ibmpex_bmc_data *get_bmc_data(int iface)
return NULL; return NULL;
} }
static ssize_t show_name(struct device *dev, struct device_attribute *devattr, static ssize_t name_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
return sprintf(buf, "%s\n", DRVNAME); return sprintf(buf, "%s\n", DRVNAME);
} }
static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, 0); static SENSOR_DEVICE_ATTR_RO(name, name, 0);
static ssize_t ibmpex_show_sensor(struct device *dev, static ssize_t ibmpex_show_sensor(struct device *dev,
struct device_attribute *devattr, struct device_attribute *devattr,
...@@ -289,10 +289,9 @@ static ssize_t ibmpex_show_sensor(struct device *dev, ...@@ -289,10 +289,9 @@ static ssize_t ibmpex_show_sensor(struct device *dev,
data->sensors[attr->index].values[attr->nr] * mult); data->sensors[attr->index].values[attr->nr] * mult);
} }
static ssize_t ibmpex_reset_high_low(struct device *dev, static ssize_t ibmpex_high_low_store(struct device *dev,
struct device_attribute *devattr, struct device_attribute *devattr,
const char *buf, const char *buf, size_t count)
size_t count)
{ {
struct ibmpex_bmc_data *data = dev_get_drvdata(dev); struct ibmpex_bmc_data *data = dev_get_drvdata(dev);
...@@ -301,8 +300,7 @@ static ssize_t ibmpex_reset_high_low(struct device *dev, ...@@ -301,8 +300,7 @@ static ssize_t ibmpex_reset_high_low(struct device *dev,
return count; return count;
} }
static SENSOR_DEVICE_ATTR(reset_high_low, S_IWUSR, NULL, static SENSOR_DEVICE_ATTR_WO(reset_high_low, ibmpex_high_low, 0);
ibmpex_reset_high_low, 0);
static int is_power_sensor(const char *sensor_id, int len) static int is_power_sensor(const char *sensor_id, int len)
{ {
...@@ -358,7 +356,7 @@ static int create_sensor(struct ibmpex_bmc_data *data, int type, ...@@ -358,7 +356,7 @@ static int create_sensor(struct ibmpex_bmc_data *data, int type,
sysfs_attr_init(&data->sensors[sensor].attr[func].dev_attr.attr); sysfs_attr_init(&data->sensors[sensor].attr[func].dev_attr.attr);
data->sensors[sensor].attr[func].dev_attr.attr.name = n; data->sensors[sensor].attr[func].dev_attr.attr.name = n;
data->sensors[sensor].attr[func].dev_attr.attr.mode = S_IRUGO; data->sensors[sensor].attr[func].dev_attr.attr.mode = 0444;
data->sensors[sensor].attr[func].dev_attr.show = ibmpex_show_sensor; data->sensors[sensor].attr[func].dev_attr.show = ibmpex_show_sensor;
data->sensors[sensor].attr[func].index = sensor; data->sensors[sensor].attr[func].index = sensor;
data->sensors[sensor].attr[func].nr = func; data->sensors[sensor].attr[func].nr = func;
......
...@@ -129,7 +129,7 @@ static int iio_hwmon_probe(struct platform_device *pdev) ...@@ -129,7 +129,7 @@ static int iio_hwmon_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
a->dev_attr.show = iio_hwmon_read_val; a->dev_attr.show = iio_hwmon_read_val;
a->dev_attr.attr.mode = S_IRUGO; a->dev_attr.attr.mode = 0444;
a->index = i; a->index = i;
st->attrs[i] = &a->dev_attr.attr; st->attrs[i] = &a->dev_attr.attr;
} }
......
...@@ -230,7 +230,7 @@ static u16 ina209_reg_from_interval(u16 config, long interval) ...@@ -230,7 +230,7 @@ static u16 ina209_reg_from_interval(u16 config, long interval)
return (config & 0xf807) | (adc << 3) | (adc << 7); return (config & 0xf807) | (adc << 3) | (adc << 7);
} }
static ssize_t ina209_set_interval(struct device *dev, static ssize_t ina209_interval_store(struct device *dev,
struct device_attribute *da, struct device_attribute *da,
const char *buf, size_t count) const char *buf, size_t count)
{ {
...@@ -257,7 +257,7 @@ static ssize_t ina209_set_interval(struct device *dev, ...@@ -257,7 +257,7 @@ static ssize_t ina209_set_interval(struct device *dev,
return count; return count;
} }
static ssize_t ina209_show_interval(struct device *dev, static ssize_t ina209_interval_show(struct device *dev,
struct device_attribute *da, char *buf) struct device_attribute *da, char *buf)
{ {
struct ina209_data *data = dev_get_drvdata(dev); struct ina209_data *data = dev_get_drvdata(dev);
...@@ -279,10 +279,9 @@ static u16 ina209_reset_history_regs[] = { ...@@ -279,10 +279,9 @@ static u16 ina209_reset_history_regs[] = {
INA209_POWER_PEAK INA209_POWER_PEAK
}; };
static ssize_t ina209_reset_history(struct device *dev, static ssize_t ina209_history_store(struct device *dev,
struct device_attribute *da, struct device_attribute *da,
const char *buf, const char *buf, size_t count)
size_t count)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct ina209_data *data = dev_get_drvdata(dev); struct ina209_data *data = dev_get_drvdata(dev);
...@@ -306,10 +305,9 @@ static ssize_t ina209_reset_history(struct device *dev, ...@@ -306,10 +305,9 @@ static ssize_t ina209_reset_history(struct device *dev,
return count; return count;
} }
static ssize_t ina209_set_value(struct device *dev, static ssize_t ina209_value_store(struct device *dev,
struct device_attribute *da, struct device_attribute *da,
const char *buf, const char *buf, size_t count)
size_t count)
{ {
struct ina209_data *data = ina209_update_device(dev); struct ina209_data *data = ina209_update_device(dev);
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -337,9 +335,8 @@ static ssize_t ina209_set_value(struct device *dev, ...@@ -337,9 +335,8 @@ static ssize_t ina209_set_value(struct device *dev,
return count; return count;
} }
static ssize_t ina209_show_value(struct device *dev, static ssize_t ina209_value_show(struct device *dev,
struct device_attribute *da, struct device_attribute *da, char *buf)
char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct ina209_data *data = ina209_update_device(dev); struct ina209_data *data = ina209_update_device(dev);
...@@ -352,9 +349,8 @@ static ssize_t ina209_show_value(struct device *dev, ...@@ -352,9 +349,8 @@ static ssize_t ina209_show_value(struct device *dev,
return snprintf(buf, PAGE_SIZE, "%ld\n", val); return snprintf(buf, PAGE_SIZE, "%ld\n", val);
} }
static ssize_t ina209_show_alarm(struct device *dev, static ssize_t ina209_alarm_show(struct device *dev,
struct device_attribute *da, struct device_attribute *da, char *buf)
char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct ina209_data *data = ina209_update_device(dev); struct ina209_data *data = ina209_update_device(dev);
...@@ -374,82 +370,65 @@ static ssize_t ina209_show_alarm(struct device *dev, ...@@ -374,82 +370,65 @@ static ssize_t ina209_show_alarm(struct device *dev,
} }
/* Shunt voltage, history, limits, alarms */ /* Shunt voltage, history, limits, alarms */
static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, ina209_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in0_input, ina209_value, INA209_SHUNT_VOLTAGE);
INA209_SHUNT_VOLTAGE); static SENSOR_DEVICE_ATTR_RO(in0_input_highest, ina209_value,
static SENSOR_DEVICE_ATTR(in0_input_highest, S_IRUGO, ina209_show_value, NULL,
INA209_SHUNT_VOLTAGE_POS_PEAK); INA209_SHUNT_VOLTAGE_POS_PEAK);
static SENSOR_DEVICE_ATTR(in0_input_lowest, S_IRUGO, ina209_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in0_input_lowest, ina209_value,
INA209_SHUNT_VOLTAGE_NEG_PEAK); INA209_SHUNT_VOLTAGE_NEG_PEAK);
static SENSOR_DEVICE_ATTR(in0_reset_history, S_IWUSR, NULL, static SENSOR_DEVICE_ATTR_WO(in0_reset_history, ina209_history,
ina209_reset_history, (1 << 0) | (1 << 1)); (1 << 0) | (1 << 1));
static SENSOR_DEVICE_ATTR(in0_max, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RW(in0_max, ina209_value,
ina209_set_value, INA209_SHUNT_VOLTAGE_POS_WARN); INA209_SHUNT_VOLTAGE_POS_WARN);
static SENSOR_DEVICE_ATTR(in0_min, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RW(in0_min, ina209_value,
ina209_set_value, INA209_SHUNT_VOLTAGE_NEG_WARN); INA209_SHUNT_VOLTAGE_NEG_WARN);
static SENSOR_DEVICE_ATTR(in0_crit_max, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RW(in0_crit_max, ina209_value,
ina209_set_value, INA209_CRITICAL_DAC_POS); INA209_CRITICAL_DAC_POS);
static SENSOR_DEVICE_ATTR(in0_crit_min, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RW(in0_crit_min, ina209_value,
ina209_set_value, INA209_CRITICAL_DAC_NEG); INA209_CRITICAL_DAC_NEG);
static SENSOR_DEVICE_ATTR(in0_min_alarm, S_IRUGO, ina209_show_alarm, NULL, static SENSOR_DEVICE_ATTR_RO(in0_min_alarm, ina209_alarm, 1 << 11);
1 << 11); static SENSOR_DEVICE_ATTR_RO(in0_max_alarm, ina209_alarm, 1 << 12);
static SENSOR_DEVICE_ATTR(in0_max_alarm, S_IRUGO, ina209_show_alarm, NULL, static SENSOR_DEVICE_ATTR_RO(in0_crit_min_alarm, ina209_alarm, 1 << 6);
1 << 12); static SENSOR_DEVICE_ATTR_RO(in0_crit_max_alarm, ina209_alarm, 1 << 7);
static SENSOR_DEVICE_ATTR(in0_crit_min_alarm, S_IRUGO, ina209_show_alarm, NULL,
1 << 6);
static SENSOR_DEVICE_ATTR(in0_crit_max_alarm, S_IRUGO, ina209_show_alarm, NULL,
1 << 7);
/* Bus voltage, history, limits, alarms */ /* Bus voltage, history, limits, alarms */
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, ina209_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in1_input, ina209_value, INA209_BUS_VOLTAGE);
INA209_BUS_VOLTAGE); static SENSOR_DEVICE_ATTR_RO(in1_input_highest, ina209_value,
static SENSOR_DEVICE_ATTR(in1_input_highest, S_IRUGO, ina209_show_value, NULL,
INA209_BUS_VOLTAGE_MAX_PEAK); INA209_BUS_VOLTAGE_MAX_PEAK);
static SENSOR_DEVICE_ATTR(in1_input_lowest, S_IRUGO, ina209_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in1_input_lowest, ina209_value,
INA209_BUS_VOLTAGE_MIN_PEAK); INA209_BUS_VOLTAGE_MIN_PEAK);
static SENSOR_DEVICE_ATTR(in1_reset_history, S_IWUSR, NULL, static SENSOR_DEVICE_ATTR_WO(in1_reset_history, ina209_history,
ina209_reset_history, (1 << 2) | (1 << 3)); (1 << 2) | (1 << 3));
static SENSOR_DEVICE_ATTR(in1_max, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RW(in1_max, ina209_value,
ina209_set_value, INA209_BUS_VOLTAGE_OVER_WARN); INA209_BUS_VOLTAGE_OVER_WARN);
static SENSOR_DEVICE_ATTR(in1_min, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RW(in1_min, ina209_value,
ina209_set_value, INA209_BUS_VOLTAGE_UNDER_WARN); INA209_BUS_VOLTAGE_UNDER_WARN);
static SENSOR_DEVICE_ATTR(in1_crit_max, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RW(in1_crit_max, ina209_value,
ina209_set_value, INA209_BUS_VOLTAGE_OVER_LIMIT); INA209_BUS_VOLTAGE_OVER_LIMIT);
static SENSOR_DEVICE_ATTR(in1_crit_min, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RW(in1_crit_min, ina209_value,
ina209_set_value, INA209_BUS_VOLTAGE_UNDER_LIMIT); INA209_BUS_VOLTAGE_UNDER_LIMIT);
static SENSOR_DEVICE_ATTR(in1_min_alarm, S_IRUGO, ina209_show_alarm, NULL, static SENSOR_DEVICE_ATTR_RO(in1_min_alarm, ina209_alarm, 1 << 14);
1 << 14); static SENSOR_DEVICE_ATTR_RO(in1_max_alarm, ina209_alarm, 1 << 15);
static SENSOR_DEVICE_ATTR(in1_max_alarm, S_IRUGO, ina209_show_alarm, NULL, static SENSOR_DEVICE_ATTR_RO(in1_crit_min_alarm, ina209_alarm, 1 << 9);
1 << 15); static SENSOR_DEVICE_ATTR_RO(in1_crit_max_alarm, ina209_alarm, 1 << 10);
static SENSOR_DEVICE_ATTR(in1_crit_min_alarm, S_IRUGO, ina209_show_alarm, NULL,
1 << 9);
static SENSOR_DEVICE_ATTR(in1_crit_max_alarm, S_IRUGO, ina209_show_alarm, NULL,
1 << 10);
/* Power */ /* Power */
static SENSOR_DEVICE_ATTR(power1_input, S_IRUGO, ina209_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(power1_input, ina209_value, INA209_POWER);
INA209_POWER); static SENSOR_DEVICE_ATTR_RO(power1_input_highest, ina209_value,
static SENSOR_DEVICE_ATTR(power1_input_highest, S_IRUGO, ina209_show_value, INA209_POWER_PEAK);
NULL, INA209_POWER_PEAK); static SENSOR_DEVICE_ATTR_WO(power1_reset_history, ina209_history, 1 << 4);
static SENSOR_DEVICE_ATTR(power1_reset_history, S_IWUSR, NULL, static SENSOR_DEVICE_ATTR_RW(power1_max, ina209_value, INA209_POWER_WARN);
ina209_reset_history, 1 << 4); static SENSOR_DEVICE_ATTR_RW(power1_crit, ina209_value,
static SENSOR_DEVICE_ATTR(power1_max, S_IRUGO | S_IWUSR, ina209_show_value, INA209_POWER_OVER_LIMIT);
ina209_set_value, INA209_POWER_WARN);
static SENSOR_DEVICE_ATTR(power1_crit, S_IRUGO | S_IWUSR, ina209_show_value, static SENSOR_DEVICE_ATTR_RO(power1_max_alarm, ina209_alarm, 1 << 13);
ina209_set_value, INA209_POWER_OVER_LIMIT); static SENSOR_DEVICE_ATTR_RO(power1_crit_alarm, ina209_alarm, 1 << 8);
static SENSOR_DEVICE_ATTR(power1_max_alarm, S_IRUGO, ina209_show_alarm, NULL,
1 << 13);
static SENSOR_DEVICE_ATTR(power1_crit_alarm, S_IRUGO, ina209_show_alarm, NULL,
1 << 8);
/* Current */ /* Current */
static SENSOR_DEVICE_ATTR(curr1_input, S_IRUGO, ina209_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(curr1_input, ina209_value, INA209_CURRENT);
INA209_CURRENT);
static SENSOR_DEVICE_ATTR(update_interval, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR_RW(update_interval, ina209_interval, 0);
ina209_show_interval, ina209_set_interval, 0);
/* /*
* Finally, construct an array of pointers to members of the above objects, * Finally, construct an array of pointers to members of the above objects,
......
...@@ -111,6 +111,7 @@ struct ina3221_input { ...@@ -111,6 +111,7 @@ struct ina3221_input {
* @inputs: Array of channel input source specific structures * @inputs: Array of channel input source specific structures
* @lock: mutex lock to serialize sysfs attribute accesses * @lock: mutex lock to serialize sysfs attribute accesses
* @reg_config: Register value of INA3221_CONFIG * @reg_config: Register value of INA3221_CONFIG
* @single_shot: running in single-shot operating mode
*/ */
struct ina3221_data { struct ina3221_data {
struct device *pm_dev; struct device *pm_dev;
...@@ -119,6 +120,8 @@ struct ina3221_data { ...@@ -119,6 +120,8 @@ struct ina3221_data {
struct ina3221_input inputs[INA3221_NUM_CHANNELS]; struct ina3221_input inputs[INA3221_NUM_CHANNELS];
struct mutex lock; struct mutex lock;
u32 reg_config; u32 reg_config;
bool single_shot;
}; };
static inline bool ina3221_is_enabled(struct ina3221_data *ina, int channel) static inline bool ina3221_is_enabled(struct ina3221_data *ina, int channel)
...@@ -188,6 +191,11 @@ static int ina3221_read_in(struct device *dev, u32 attr, int channel, long *val) ...@@ -188,6 +191,11 @@ static int ina3221_read_in(struct device *dev, u32 attr, int channel, long *val)
if (!ina3221_is_enabled(ina, channel)) if (!ina3221_is_enabled(ina, channel))
return -ENODATA; return -ENODATA;
/* Write CONFIG register to trigger a single-shot measurement */
if (ina->single_shot)
regmap_write(ina->regmap, INA3221_CONFIG,
ina->reg_config);
ret = ina3221_wait_for_data(ina); ret = ina3221_wait_for_data(ina);
if (ret) if (ret)
return ret; return ret;
...@@ -232,6 +240,11 @@ static int ina3221_read_curr(struct device *dev, u32 attr, ...@@ -232,6 +240,11 @@ static int ina3221_read_curr(struct device *dev, u32 attr,
if (!ina3221_is_enabled(ina, channel)) if (!ina3221_is_enabled(ina, channel))
return -ENODATA; return -ENODATA;
/* Write CONFIG register to trigger a single-shot measurement */
if (ina->single_shot)
regmap_write(ina->regmap, INA3221_CONFIG,
ina->reg_config);
ret = ina3221_wait_for_data(ina); ret = ina3221_wait_for_data(ina);
if (ret) if (ret)
return ret; return ret;
...@@ -499,7 +512,7 @@ static const struct hwmon_chip_info ina3221_chip_info = { ...@@ -499,7 +512,7 @@ static const struct hwmon_chip_info ina3221_chip_info = {
}; };
/* Extra attribute groups */ /* Extra attribute groups */
static ssize_t ina3221_show_shunt(struct device *dev, static ssize_t ina3221_shunt_show(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
struct sensor_device_attribute *sd_attr = to_sensor_dev_attr(attr); struct sensor_device_attribute *sd_attr = to_sensor_dev_attr(attr);
...@@ -510,7 +523,7 @@ static ssize_t ina3221_show_shunt(struct device *dev, ...@@ -510,7 +523,7 @@ static ssize_t ina3221_show_shunt(struct device *dev,
return snprintf(buf, PAGE_SIZE, "%d\n", input->shunt_resistor); return snprintf(buf, PAGE_SIZE, "%d\n", input->shunt_resistor);
} }
static ssize_t ina3221_set_shunt(struct device *dev, static ssize_t ina3221_shunt_store(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
...@@ -533,12 +546,9 @@ static ssize_t ina3221_set_shunt(struct device *dev, ...@@ -533,12 +546,9 @@ static ssize_t ina3221_set_shunt(struct device *dev,
} }
/* shunt resistance */ /* shunt resistance */
static SENSOR_DEVICE_ATTR(shunt1_resistor, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR_RW(shunt1_resistor, ina3221_shunt, INA3221_CHANNEL1);
ina3221_show_shunt, ina3221_set_shunt, INA3221_CHANNEL1); static SENSOR_DEVICE_ATTR_RW(shunt2_resistor, ina3221_shunt, INA3221_CHANNEL2);
static SENSOR_DEVICE_ATTR(shunt2_resistor, S_IRUGO | S_IWUSR, static SENSOR_DEVICE_ATTR_RW(shunt3_resistor, ina3221_shunt, INA3221_CHANNEL3);
ina3221_show_shunt, ina3221_set_shunt, INA3221_CHANNEL2);
static SENSOR_DEVICE_ATTR(shunt3_resistor, S_IRUGO | S_IWUSR,
ina3221_show_shunt, ina3221_set_shunt, INA3221_CHANNEL3);
static struct attribute *ina3221_attrs[] = { static struct attribute *ina3221_attrs[] = {
&sensor_dev_attr_shunt1_resistor.dev_attr.attr, &sensor_dev_attr_shunt1_resistor.dev_attr.attr,
...@@ -617,6 +627,8 @@ static int ina3221_probe_from_dt(struct device *dev, struct ina3221_data *ina) ...@@ -617,6 +627,8 @@ static int ina3221_probe_from_dt(struct device *dev, struct ina3221_data *ina)
if (!np) if (!np)
return 0; return 0;
ina->single_shot = of_property_read_bool(np, "ti,single-shot");
for_each_child_of_node(np, child) { for_each_child_of_node(np, child) {
ret = ina3221_probe_child_from_dt(dev, child, ina); ret = ina3221_probe_child_from_dt(dev, child, ina);
if (ret) if (ret)
...@@ -666,6 +678,10 @@ static int ina3221_probe(struct i2c_client *client, ...@@ -666,6 +678,10 @@ static int ina3221_probe(struct i2c_client *client,
/* The driver will be reset, so use reset value */ /* The driver will be reset, so use reset value */
ina->reg_config = INA3221_CONFIG_DEFAULT; ina->reg_config = INA3221_CONFIG_DEFAULT;
/* Clear continuous bit to use single-shot mode */
if (ina->single_shot)
ina->reg_config &= ~INA3221_CONFIG_MODE_CONTINUOUS;
/* Disable channels if their inputs are disconnected */ /* Disable channels if their inputs are disconnected */
for (i = 0; i < INA3221_NUM_CHANNELS; i++) { for (i = 0; i < INA3221_NUM_CHANNELS; i++) {
if (ina->inputs[i].disconnected) if (ina->inputs[i].disconnected)
......
...@@ -390,21 +390,21 @@ static umode_t jc42_is_visible(const void *_data, enum hwmon_sensor_types type, ...@@ -390,21 +390,21 @@ static umode_t jc42_is_visible(const void *_data, enum hwmon_sensor_types type,
{ {
const struct jc42_data *data = _data; const struct jc42_data *data = _data;
unsigned int config = data->config; unsigned int config = data->config;
umode_t mode = S_IRUGO; umode_t mode = 0444;
switch (attr) { switch (attr) {
case hwmon_temp_min: case hwmon_temp_min:
case hwmon_temp_max: case hwmon_temp_max:
if (!(config & JC42_CFG_EVENT_LOCK)) if (!(config & JC42_CFG_EVENT_LOCK))
mode |= S_IWUSR; mode |= 0200;
break; break;
case hwmon_temp_crit: case hwmon_temp_crit:
if (!(config & JC42_CFG_TCRIT_LOCK)) if (!(config & JC42_CFG_TCRIT_LOCK))
mode |= S_IWUSR; mode |= 0200;
break; break;
case hwmon_temp_crit_hyst: case hwmon_temp_crit_hyst:
if (!(config & (JC42_CFG_EVENT_LOCK | JC42_CFG_TCRIT_LOCK))) if (!(config & (JC42_CFG_EVENT_LOCK | JC42_CFG_TCRIT_LOCK)))
mode |= S_IWUSR; mode |= 0200;
break; break;
case hwmon_temp_input: case hwmon_temp_input:
case hwmon_temp_max_hyst: case hwmon_temp_max_hyst:
......
...@@ -109,8 +109,8 @@ static ssize_t name_show(struct device *dev, struct device_attribute ...@@ -109,8 +109,8 @@ static ssize_t name_show(struct device *dev, struct device_attribute
} }
static ssize_t show_temp(struct device *dev, static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
struct device_attribute *devattr, char *buf) char *buf)
{ {
struct sensor_device_attribute_2 *attr = struct sensor_device_attribute_2 *attr =
to_sensor_dev_attr_2(devattr); to_sensor_dev_attr_2(devattr);
...@@ -129,10 +129,10 @@ static ssize_t show_temp(struct device *dev, ...@@ -129,10 +129,10 @@ static ssize_t show_temp(struct device *dev,
/* core, place */ /* core, place */
static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, 0, 0); static SENSOR_DEVICE_ATTR_2_RO(temp1_input, temp, 0, 0);
static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, 0, 1); static SENSOR_DEVICE_ATTR_2_RO(temp2_input, temp, 0, 1);
static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, 1, 0); static SENSOR_DEVICE_ATTR_2_RO(temp3_input, temp, 1, 0);
static SENSOR_DEVICE_ATTR_2(temp4_input, S_IRUGO, show_temp, NULL, 1, 1); static SENSOR_DEVICE_ATTR_2_RO(temp4_input, temp, 1, 1);
static DEVICE_ATTR_RO(name); static DEVICE_ATTR_RO(name);
static const struct pci_device_id k8temp_ids[] = { static const struct pci_device_id k8temp_ids[] = {
......
...@@ -282,8 +282,8 @@ static long pem_get_fan(u8 *data, int len, int index) ...@@ -282,8 +282,8 @@ static long pem_get_fan(u8 *data, int len, int index)
* Show boolean, either a fault or an alarm. * Show boolean, either a fault or an alarm.
* .nr points to the register, .index is the bit mask to check * .nr points to the register, .index is the bit mask to check
*/ */
static ssize_t pem_show_bool(struct device *dev, static ssize_t pem_bool_show(struct device *dev, struct device_attribute *da,
struct device_attribute *da, char *buf) char *buf)
{ {
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(da); struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(da);
struct pem_data *data = pem_update_device(dev); struct pem_data *data = pem_update_device(dev);
...@@ -296,7 +296,7 @@ static ssize_t pem_show_bool(struct device *dev, ...@@ -296,7 +296,7 @@ static ssize_t pem_show_bool(struct device *dev,
return snprintf(buf, PAGE_SIZE, "%d\n", !!status); return snprintf(buf, PAGE_SIZE, "%d\n", !!status);
} }
static ssize_t pem_show_data(struct device *dev, struct device_attribute *da, static ssize_t pem_data_show(struct device *dev, struct device_attribute *da,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -312,7 +312,7 @@ static ssize_t pem_show_data(struct device *dev, struct device_attribute *da, ...@@ -312,7 +312,7 @@ static ssize_t pem_show_data(struct device *dev, struct device_attribute *da,
return snprintf(buf, PAGE_SIZE, "%ld\n", value); return snprintf(buf, PAGE_SIZE, "%ld\n", value);
} }
static ssize_t pem_show_input(struct device *dev, struct device_attribute *da, static ssize_t pem_input_show(struct device *dev, struct device_attribute *da,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -328,7 +328,7 @@ static ssize_t pem_show_input(struct device *dev, struct device_attribute *da, ...@@ -328,7 +328,7 @@ static ssize_t pem_show_input(struct device *dev, struct device_attribute *da,
return snprintf(buf, PAGE_SIZE, "%ld\n", value); return snprintf(buf, PAGE_SIZE, "%ld\n", value);
} }
static ssize_t pem_show_fan(struct device *dev, struct device_attribute *da, static ssize_t pem_fan_show(struct device *dev, struct device_attribute *da,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -345,53 +345,42 @@ static ssize_t pem_show_fan(struct device *dev, struct device_attribute *da, ...@@ -345,53 +345,42 @@ static ssize_t pem_show_fan(struct device *dev, struct device_attribute *da,
} }
/* Voltages */ /* Voltages */
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, pem_show_data, NULL, static SENSOR_DEVICE_ATTR_RO(in1_input, pem_data, PEM_DATA_VOUT_LSB);
PEM_DATA_VOUT_LSB); static SENSOR_DEVICE_ATTR_2_RO(in1_alarm, pem_bool, PEM_DATA_ALARM_1,
static SENSOR_DEVICE_ATTR_2(in1_alarm, S_IRUGO, pem_show_bool, NULL, ALRM1_VOUT_OUT_LIMIT);
PEM_DATA_ALARM_1, ALRM1_VOUT_OUT_LIMIT); static SENSOR_DEVICE_ATTR_2_RO(in1_crit_alarm, pem_bool, PEM_DATA_ALARM_1,
static SENSOR_DEVICE_ATTR_2(in1_crit_alarm, S_IRUGO, pem_show_bool, NULL, ALRM1_OV_VOLT_SHUTDOWN);
PEM_DATA_ALARM_1, ALRM1_OV_VOLT_SHUTDOWN); static SENSOR_DEVICE_ATTR_RO(in2_input, pem_input, PEM_INPUT_VOLTAGE);
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, pem_show_input, NULL, static SENSOR_DEVICE_ATTR_2_RO(in2_alarm, pem_bool, PEM_DATA_ALARM_1,
PEM_INPUT_VOLTAGE);
static SENSOR_DEVICE_ATTR_2(in2_alarm, S_IRUGO, pem_show_bool, NULL,
PEM_DATA_ALARM_1,
ALRM1_VIN_OUT_LIMIT | ALRM1_PRIMARY_FAULT); ALRM1_VIN_OUT_LIMIT | ALRM1_PRIMARY_FAULT);
/* Currents */ /* Currents */
static SENSOR_DEVICE_ATTR(curr1_input, S_IRUGO, pem_show_data, NULL, static SENSOR_DEVICE_ATTR_RO(curr1_input, pem_data, PEM_DATA_CURRENT);
PEM_DATA_CURRENT); static SENSOR_DEVICE_ATTR_2_RO(curr1_alarm, pem_bool, PEM_DATA_ALARM_1,
static SENSOR_DEVICE_ATTR_2(curr1_alarm, S_IRUGO, pem_show_bool, NULL, ALRM1_VIN_OVERCURRENT);
PEM_DATA_ALARM_1, ALRM1_VIN_OVERCURRENT);
/* Power */ /* Power */
static SENSOR_DEVICE_ATTR(power1_input, S_IRUGO, pem_show_input, NULL, static SENSOR_DEVICE_ATTR_RO(power1_input, pem_input, PEM_INPUT_POWER_LSB);
PEM_INPUT_POWER_LSB); static SENSOR_DEVICE_ATTR_2_RO(power1_alarm, pem_bool, PEM_DATA_ALARM_1,
static SENSOR_DEVICE_ATTR_2(power1_alarm, S_IRUGO, pem_show_bool, NULL, ALRM1_POWER_LIMIT);
PEM_DATA_ALARM_1, ALRM1_POWER_LIMIT);
/* Fans */ /* Fans */
static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, pem_show_fan, NULL, static SENSOR_DEVICE_ATTR_RO(fan1_input, pem_fan, PEM_FAN_FAN1);
PEM_FAN_FAN1); static SENSOR_DEVICE_ATTR_RO(fan2_input, pem_fan, PEM_FAN_FAN2);
static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, pem_show_fan, NULL, static SENSOR_DEVICE_ATTR_RO(fan3_input, pem_fan, PEM_FAN_FAN3);
PEM_FAN_FAN2); static SENSOR_DEVICE_ATTR_2_RO(fan1_alarm, pem_bool, PEM_DATA_ALARM_2,
static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, pem_show_fan, NULL, ALRM2_FAN_FAULT);
PEM_FAN_FAN3);
static SENSOR_DEVICE_ATTR_2(fan1_alarm, S_IRUGO, pem_show_bool, NULL,
PEM_DATA_ALARM_2, ALRM2_FAN_FAULT);
/* Temperatures */ /* Temperatures */
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, pem_show_data, NULL, static SENSOR_DEVICE_ATTR_RO(temp1_input, pem_data, PEM_DATA_TEMP);
PEM_DATA_TEMP); static SENSOR_DEVICE_ATTR_RO(temp1_max, pem_data, PEM_DATA_TEMP_MAX);
static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, pem_show_data, NULL, static SENSOR_DEVICE_ATTR_RO(temp1_crit, pem_data, PEM_DATA_TEMP_CRIT);
PEM_DATA_TEMP_MAX); static SENSOR_DEVICE_ATTR_2_RO(temp1_alarm, pem_bool, PEM_DATA_ALARM_1,
static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, pem_show_data, NULL, ALRM1_TEMP_WARNING);
PEM_DATA_TEMP_CRIT); static SENSOR_DEVICE_ATTR_2_RO(temp1_crit_alarm, pem_bool, PEM_DATA_ALARM_1,
static SENSOR_DEVICE_ATTR_2(temp1_alarm, S_IRUGO, pem_show_bool, NULL, ALRM1_TEMP_SHUTDOWN);
PEM_DATA_ALARM_1, ALRM1_TEMP_WARNING); static SENSOR_DEVICE_ATTR_2_RO(temp1_fault, pem_bool, PEM_DATA_ALARM_2,
static SENSOR_DEVICE_ATTR_2(temp1_crit_alarm, S_IRUGO, pem_show_bool, NULL, ALRM2_TEMP_FAULT);
PEM_DATA_ALARM_1, ALRM1_TEMP_SHUTDOWN);
static SENSOR_DEVICE_ATTR_2(temp1_fault, S_IRUGO, pem_show_bool, NULL,
PEM_DATA_ALARM_2, ALRM2_TEMP_FAULT);
static struct attribute *pem_attributes[] = { static struct attribute *pem_attributes[] = {
&sensor_dev_attr_in1_input.dev_attr.attr, &sensor_dev_attr_in1_input.dev_attr.attr,
......
...@@ -62,7 +62,7 @@ struct lm73_data { ...@@ -62,7 +62,7 @@ struct lm73_data {
/*-----------------------------------------------------------------------*/ /*-----------------------------------------------------------------------*/
static ssize_t set_temp(struct device *dev, struct device_attribute *da, static ssize_t temp_store(struct device *dev, struct device_attribute *da,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -81,7 +81,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *da, ...@@ -81,7 +81,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *da,
return (err < 0) ? err : count; return (err < 0) ? err : count;
} }
static ssize_t show_temp(struct device *dev, struct device_attribute *da, static ssize_t temp_show(struct device *dev, struct device_attribute *da,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -98,7 +98,7 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *da, ...@@ -98,7 +98,7 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *da,
return scnprintf(buf, PAGE_SIZE, "%d\n", temp); return scnprintf(buf, PAGE_SIZE, "%d\n", temp);
} }
static ssize_t set_convrate(struct device *dev, struct device_attribute *da, static ssize_t convrate_store(struct device *dev, struct device_attribute *da,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct lm73_data *data = dev_get_drvdata(dev); struct lm73_data *data = dev_get_drvdata(dev);
...@@ -133,7 +133,7 @@ static ssize_t set_convrate(struct device *dev, struct device_attribute *da, ...@@ -133,7 +133,7 @@ static ssize_t set_convrate(struct device *dev, struct device_attribute *da,
return count; return count;
} }
static ssize_t show_convrate(struct device *dev, struct device_attribute *da, static ssize_t convrate_show(struct device *dev, struct device_attribute *da,
char *buf) char *buf)
{ {
struct lm73_data *data = dev_get_drvdata(dev); struct lm73_data *data = dev_get_drvdata(dev);
...@@ -143,7 +143,7 @@ static ssize_t show_convrate(struct device *dev, struct device_attribute *da, ...@@ -143,7 +143,7 @@ static ssize_t show_convrate(struct device *dev, struct device_attribute *da,
return scnprintf(buf, PAGE_SIZE, "%hu\n", lm73_convrates[res]); return scnprintf(buf, PAGE_SIZE, "%hu\n", lm73_convrates[res]);
} }
static ssize_t show_maxmin_alarm(struct device *dev, static ssize_t maxmin_alarm_show(struct device *dev,
struct device_attribute *da, char *buf) struct device_attribute *da, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -168,18 +168,14 @@ static ssize_t show_maxmin_alarm(struct device *dev, ...@@ -168,18 +168,14 @@ static ssize_t show_maxmin_alarm(struct device *dev,
/* sysfs attributes for hwmon */ /* sysfs attributes for hwmon */
static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_RW(temp1_max, temp, LM73_REG_MAX);
show_temp, set_temp, LM73_REG_MAX); static SENSOR_DEVICE_ATTR_RW(temp1_min, temp, LM73_REG_MIN);
static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, LM73_REG_INPUT);
show_temp, set_temp, LM73_REG_MIN); static SENSOR_DEVICE_ATTR_RW(update_interval, convrate, 0);
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, maxmin_alarm,
show_temp, NULL, LM73_REG_INPUT); LM73_CTRL_HI_SHIFT);
static SENSOR_DEVICE_ATTR(update_interval, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_RO(temp1_min_alarm, maxmin_alarm,
show_convrate, set_convrate, 0); LM73_CTRL_LO_SHIFT);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO,
show_maxmin_alarm, NULL, LM73_CTRL_HI_SHIFT);
static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO,
show_maxmin_alarm, NULL, LM73_CTRL_LO_SHIFT);
static struct attribute *lm73_attrs[] = { static struct attribute *lm73_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
......
...@@ -176,16 +176,16 @@ static umode_t lm75_is_visible(const void *data, enum hwmon_sensor_types type, ...@@ -176,16 +176,16 @@ static umode_t lm75_is_visible(const void *data, enum hwmon_sensor_types type,
case hwmon_chip: case hwmon_chip:
switch (attr) { switch (attr) {
case hwmon_chip_update_interval: case hwmon_chip_update_interval:
return S_IRUGO; return 0444;
} }
break; break;
case hwmon_temp: case hwmon_temp:
switch (attr) { switch (attr) {
case hwmon_temp_input: case hwmon_temp_input:
return S_IRUGO; return 0444;
case hwmon_temp_max: case hwmon_temp_max:
case hwmon_temp_max_hyst: case hwmon_temp_max_hyst:
return S_IRUGO | S_IWUSR; return 0644;
} }
break; break;
default: default:
......
...@@ -137,7 +137,7 @@ static struct lm77_data *lm77_update_device(struct device *dev) ...@@ -137,7 +137,7 @@ static struct lm77_data *lm77_update_device(struct device *dev)
/* sysfs stuff */ /* sysfs stuff */
static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
...@@ -146,7 +146,7 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, ...@@ -146,7 +146,7 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
return sprintf(buf, "%d\n", data->temp[attr->index]); return sprintf(buf, "%d\n", data->temp[attr->index]);
} }
static ssize_t show_temp_hyst(struct device *dev, static ssize_t temp_hyst_show(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
...@@ -160,8 +160,9 @@ static ssize_t show_temp_hyst(struct device *dev, ...@@ -160,8 +160,9 @@ static ssize_t show_temp_hyst(struct device *dev,
return sprintf(buf, "%d\n", temp); return sprintf(buf, "%d\n", temp);
} }
static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *devattr, const char *buf,
size_t count)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct lm77_data *data = dev_get_drvdata(dev); struct lm77_data *data = dev_get_drvdata(dev);
...@@ -186,7 +187,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, ...@@ -186,7 +187,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr,
* hysteresis is stored as a relative value on the chip, so it has to be * hysteresis is stored as a relative value on the chip, so it has to be
* converted first. * converted first.
*/ */
static ssize_t set_temp_hyst(struct device *dev, static ssize_t temp_hyst_store(struct device *dev,
struct device_attribute *devattr, struct device_attribute *devattr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
...@@ -208,7 +209,7 @@ static ssize_t set_temp_hyst(struct device *dev, ...@@ -208,7 +209,7 @@ static ssize_t set_temp_hyst(struct device *dev,
return count; return count;
} }
static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int bitnr = to_sensor_dev_attr(attr)->index; int bitnr = to_sensor_dev_attr(attr)->index;
...@@ -216,22 +217,18 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, ...@@ -216,22 +217,18 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
} }
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, t_input); static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, t_input);
static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp, set_temp, static SENSOR_DEVICE_ATTR_RW(temp1_crit, temp, t_crit);
t_crit); static SENSOR_DEVICE_ATTR_RW(temp1_min, temp, t_min);
static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp, set_temp, static SENSOR_DEVICE_ATTR_RW(temp1_max, temp, t_max);
t_min);
static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp, set_temp, static SENSOR_DEVICE_ATTR_RW(temp1_crit_hyst, temp_hyst, t_crit);
t_max); static SENSOR_DEVICE_ATTR_RO(temp1_min_hyst, temp_hyst, t_min);
static SENSOR_DEVICE_ATTR_RO(temp1_max_hyst, temp_hyst, t_max);
static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temp_hyst,
set_temp_hyst, t_crit); static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 2);
static SENSOR_DEVICE_ATTR(temp1_min_hyst, S_IRUGO, show_temp_hyst, NULL, t_min); static SENSOR_DEVICE_ATTR_RO(temp1_min_alarm, alarm, 0);
static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IRUGO, show_temp_hyst, NULL, t_max); static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 1);
static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 2);
static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 0);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 1);
static struct attribute *lm77_attrs[] = { static struct attribute *lm77_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
......
...@@ -269,7 +269,7 @@ static struct lm80_data *lm80_update_device(struct device *dev) ...@@ -269,7 +269,7 @@ static struct lm80_data *lm80_update_device(struct device *dev)
* Sysfs stuff * Sysfs stuff
*/ */
static ssize_t show_in(struct device *dev, struct device_attribute *attr, static ssize_t in_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
struct lm80_data *data = lm80_update_device(dev); struct lm80_data *data = lm80_update_device(dev);
...@@ -281,7 +281,7 @@ static ssize_t show_in(struct device *dev, struct device_attribute *attr, ...@@ -281,7 +281,7 @@ static ssize_t show_in(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr][index])); return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr][index]));
} }
static ssize_t set_in(struct device *dev, struct device_attribute *attr, static ssize_t in_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct lm80_data *data = dev_get_drvdata(dev); struct lm80_data *data = dev_get_drvdata(dev);
...@@ -303,7 +303,7 @@ static ssize_t set_in(struct device *dev, struct device_attribute *attr, ...@@ -303,7 +303,7 @@ static ssize_t set_in(struct device *dev, struct device_attribute *attr,
return count; return count;
} }
static ssize_t show_fan(struct device *dev, struct device_attribute *attr, static ssize_t fan_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int index = to_sensor_dev_attr_2(attr)->index; int index = to_sensor_dev_attr_2(attr)->index;
...@@ -315,7 +315,7 @@ static ssize_t show_fan(struct device *dev, struct device_attribute *attr, ...@@ -315,7 +315,7 @@ static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
DIV_FROM_REG(data->fan_div[index]))); DIV_FROM_REG(data->fan_div[index])));
} }
static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr, static ssize_t fan_div_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int nr = to_sensor_dev_attr(attr)->index; int nr = to_sensor_dev_attr(attr)->index;
...@@ -325,7 +325,7 @@ static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr, ...@@ -325,7 +325,7 @@ static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr]));
} }
static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, static ssize_t fan_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
int index = to_sensor_dev_attr_2(attr)->index; int index = to_sensor_dev_attr_2(attr)->index;
...@@ -352,8 +352,9 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, ...@@ -352,8 +352,9 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
* least surprise; the user doesn't expect the fan minimum to change just * least surprise; the user doesn't expect the fan minimum to change just
* because the divisor changed. * because the divisor changed.
*/ */
static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, static ssize_t fan_div_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *attr, const char *buf,
size_t count)
{ {
int nr = to_sensor_dev_attr(attr)->index; int nr = to_sensor_dev_attr(attr)->index;
struct lm80_data *data = dev_get_drvdata(dev); struct lm80_data *data = dev_get_drvdata(dev);
...@@ -410,7 +411,7 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, ...@@ -410,7 +411,7 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
return count; return count;
} }
static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
...@@ -420,8 +421,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, ...@@ -420,8 +421,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index])); return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index]));
} }
static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *devattr, const char *buf,
size_t count)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct lm80_data *data = dev_get_drvdata(dev); struct lm80_data *data = dev_get_drvdata(dev);
...@@ -448,7 +450,7 @@ static ssize_t alarms_show(struct device *dev, struct device_attribute *attr, ...@@ -448,7 +450,7 @@ static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%u\n", data->alarms); return sprintf(buf, "%u\n", data->alarms);
} }
static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int bitnr = to_sensor_dev_attr(attr)->index; int bitnr = to_sensor_dev_attr(attr)->index;
...@@ -458,72 +460,50 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, ...@@ -458,72 +460,50 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
} }
static SENSOR_DEVICE_ATTR_2(in0_min, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RW(in0_min, in, i_min, 0);
show_in, set_in, i_min, 0); static SENSOR_DEVICE_ATTR_2_RW(in1_min, in, i_min, 1);
static SENSOR_DEVICE_ATTR_2(in1_min, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RW(in2_min, in, i_min, 2);
show_in, set_in, i_min, 1); static SENSOR_DEVICE_ATTR_2_RW(in3_min, in, i_min, 3);
static SENSOR_DEVICE_ATTR_2(in2_min, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RW(in4_min, in, i_min, 4);
show_in, set_in, i_min, 2); static SENSOR_DEVICE_ATTR_2_RW(in5_min, in, i_min, 5);
static SENSOR_DEVICE_ATTR_2(in3_min, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RW(in6_min, in, i_min, 6);
show_in, set_in, i_min, 3); static SENSOR_DEVICE_ATTR_2_RW(in0_max, in, i_max, 0);
static SENSOR_DEVICE_ATTR_2(in4_min, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RW(in1_max, in, i_max, 1);
show_in, set_in, i_min, 4); static SENSOR_DEVICE_ATTR_2_RW(in2_max, in, i_max, 2);
static SENSOR_DEVICE_ATTR_2(in5_min, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RW(in3_max, in, i_max, 3);
show_in, set_in, i_min, 5); static SENSOR_DEVICE_ATTR_2_RW(in4_max, in, i_max, 4);
static SENSOR_DEVICE_ATTR_2(in6_min, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RW(in5_max, in, i_max, 5);
show_in, set_in, i_min, 6); static SENSOR_DEVICE_ATTR_2_RW(in6_max, in, i_max, 6);
static SENSOR_DEVICE_ATTR_2(in0_max, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RO(in0_input, in, i_input, 0);
show_in, set_in, i_max, 0); static SENSOR_DEVICE_ATTR_2_RO(in1_input, in, i_input, 1);
static SENSOR_DEVICE_ATTR_2(in1_max, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RO(in2_input, in, i_input, 2);
show_in, set_in, i_max, 1); static SENSOR_DEVICE_ATTR_2_RO(in3_input, in, i_input, 3);
static SENSOR_DEVICE_ATTR_2(in2_max, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RO(in4_input, in, i_input, 4);
show_in, set_in, i_max, 2); static SENSOR_DEVICE_ATTR_2_RO(in5_input, in, i_input, 5);
static SENSOR_DEVICE_ATTR_2(in3_max, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RO(in6_input, in, i_input, 6);
show_in, set_in, i_max, 3); static SENSOR_DEVICE_ATTR_2_RW(fan1_min, fan, f_min, 0);
static SENSOR_DEVICE_ATTR_2(in4_max, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RW(fan2_min, fan, f_min, 1);
show_in, set_in, i_max, 4); static SENSOR_DEVICE_ATTR_2_RO(fan1_input, fan, f_input, 0);
static SENSOR_DEVICE_ATTR_2(in5_max, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_2_RO(fan2_input, fan, f_input, 1);
show_in, set_in, i_max, 5); static SENSOR_DEVICE_ATTR_RW(fan1_div, fan_div, 0);
static SENSOR_DEVICE_ATTR_2(in6_max, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_RW(fan2_div, fan_div, 1);
show_in, set_in, i_max, 6); static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, t_input);
static SENSOR_DEVICE_ATTR_2(in0_input, S_IRUGO, show_in, NULL, i_input, 0); static SENSOR_DEVICE_ATTR_RW(temp1_max, temp, t_hot_max);
static SENSOR_DEVICE_ATTR_2(in1_input, S_IRUGO, show_in, NULL, i_input, 1); static SENSOR_DEVICE_ATTR_RW(temp1_max_hyst, temp, t_hot_hyst);
static SENSOR_DEVICE_ATTR_2(in2_input, S_IRUGO, show_in, NULL, i_input, 2); static SENSOR_DEVICE_ATTR_RW(temp1_crit, temp, t_os_max);
static SENSOR_DEVICE_ATTR_2(in3_input, S_IRUGO, show_in, NULL, i_input, 3); static SENSOR_DEVICE_ATTR_RW(temp1_crit_hyst, temp, t_os_hyst);
static SENSOR_DEVICE_ATTR_2(in4_input, S_IRUGO, show_in, NULL, i_input, 4);
static SENSOR_DEVICE_ATTR_2(in5_input, S_IRUGO, show_in, NULL, i_input, 5);
static SENSOR_DEVICE_ATTR_2(in6_input, S_IRUGO, show_in, NULL, i_input, 6);
static SENSOR_DEVICE_ATTR_2(fan1_min, S_IWUSR | S_IRUGO,
show_fan, set_fan_min, f_min, 0);
static SENSOR_DEVICE_ATTR_2(fan2_min, S_IWUSR | S_IRUGO,
show_fan, set_fan_min, f_min, 1);
static SENSOR_DEVICE_ATTR_2(fan1_input, S_IRUGO, show_fan, NULL, f_input, 0);
static SENSOR_DEVICE_ATTR_2(fan2_input, S_IRUGO, show_fan, NULL, f_input, 1);
static SENSOR_DEVICE_ATTR(fan1_div, S_IWUSR | S_IRUGO,
show_fan_div, set_fan_div, 0);
static SENSOR_DEVICE_ATTR(fan2_div, S_IWUSR | S_IRUGO,
show_fan_div, set_fan_div, 1);
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, t_input);
static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp,
set_temp, t_hot_max);
static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IWUSR | S_IRUGO, show_temp,
set_temp, t_hot_hyst);
static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp,
set_temp, t_os_max);
static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temp,
set_temp, t_os_hyst);
static DEVICE_ATTR_RO(alarms); static DEVICE_ATTR_RO(alarms);
static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); static SENSOR_DEVICE_ATTR_RO(in0_alarm, alarm, 0);
static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR_RO(in1_alarm, alarm, 1);
static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); static SENSOR_DEVICE_ATTR_RO(in2_alarm, alarm, 2);
static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3); static SENSOR_DEVICE_ATTR_RO(in3_alarm, alarm, 3);
static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 4); static SENSOR_DEVICE_ATTR_RO(in4_alarm, alarm, 4);
static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 5); static SENSOR_DEVICE_ATTR_RO(in5_alarm, alarm, 5);
static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 6); static SENSOR_DEVICE_ATTR_RO(in6_alarm, alarm, 6);
static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 10); static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm, 10);
static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 11); static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm, 11);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 8); static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 8);
static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 13); static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 13);
/* /*
* Real code * Real code
......
...@@ -158,7 +158,7 @@ static struct lm83_data *lm83_update_device(struct device *dev) ...@@ -158,7 +158,7 @@ static struct lm83_data *lm83_update_device(struct device *dev)
* Sysfs stuff * Sysfs stuff
*/ */
static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
...@@ -166,8 +166,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, ...@@ -166,8 +166,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index])); return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index]));
} }
static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *devattr, const char *buf,
size_t count)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct lm83_data *data = dev_get_drvdata(dev); struct lm83_data *data = dev_get_drvdata(dev);
...@@ -195,8 +196,8 @@ static ssize_t alarms_show(struct device *dev, struct device_attribute *dummy, ...@@ -195,8 +196,8 @@ static ssize_t alarms_show(struct device *dev, struct device_attribute *dummy,
return sprintf(buf, "%d\n", data->alarms); return sprintf(buf, "%d\n", data->alarms);
} }
static ssize_t show_alarm(struct device *dev, struct device_attribute static ssize_t alarm_show(struct device *dev,
*devattr, char *buf) struct device_attribute *devattr, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct lm83_data *data = lm83_update_device(dev); struct lm83_data *data = lm83_update_device(dev);
...@@ -205,36 +206,31 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute ...@@ -205,36 +206,31 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute
return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1); return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
} }
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0);
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1);
static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2); static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2);
static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3); static SENSOR_DEVICE_ATTR_RO(temp4_input, temp, 3);
static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp, static SENSOR_DEVICE_ATTR_RW(temp1_max, temp, 4);
set_temp, 4); static SENSOR_DEVICE_ATTR_RW(temp2_max, temp, 5);
static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp, static SENSOR_DEVICE_ATTR_RW(temp3_max, temp, 6);
set_temp, 5); static SENSOR_DEVICE_ATTR_RW(temp4_max, temp, 7);
static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp, static SENSOR_DEVICE_ATTR_RO(temp1_crit, temp, 8);
set_temp, 6); static SENSOR_DEVICE_ATTR_RO(temp2_crit, temp, 8);
static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp, static SENSOR_DEVICE_ATTR_RW(temp3_crit, temp, 8);
set_temp, 7); static SENSOR_DEVICE_ATTR_RO(temp4_crit, temp, 8);
static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_temp, NULL, 8);
static SENSOR_DEVICE_ATTR(temp2_crit, S_IRUGO, show_temp, NULL, 8);
static SENSOR_DEVICE_ATTR(temp3_crit, S_IWUSR | S_IRUGO, show_temp,
set_temp, 8);
static SENSOR_DEVICE_ATTR(temp4_crit, S_IRUGO, show_temp, NULL, 8);
/* Individual alarm files */ /* Individual alarm files */
static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 0);
static SENSOR_DEVICE_ATTR(temp3_crit_alarm, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp3_crit_alarm, alarm, 1);
static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_alarm, NULL, 2); static SENSOR_DEVICE_ATTR_RO(temp3_fault, alarm, 2);
static SENSOR_DEVICE_ATTR(temp3_max_alarm, S_IRUGO, show_alarm, NULL, 4); static SENSOR_DEVICE_ATTR_RO(temp3_max_alarm, alarm, 4);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6); static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 6);
static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 8); static SENSOR_DEVICE_ATTR_RO(temp2_crit_alarm, alarm, 8);
static SENSOR_DEVICE_ATTR(temp4_crit_alarm, S_IRUGO, show_alarm, NULL, 9); static SENSOR_DEVICE_ATTR_RO(temp4_crit_alarm, alarm, 9);
static SENSOR_DEVICE_ATTR(temp4_fault, S_IRUGO, show_alarm, NULL, 10); static SENSOR_DEVICE_ATTR_RO(temp4_fault, alarm, 10);
static SENSOR_DEVICE_ATTR(temp4_max_alarm, S_IRUGO, show_alarm, NULL, 12); static SENSOR_DEVICE_ATTR_RO(temp4_max_alarm, alarm, 12);
static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 13); static SENSOR_DEVICE_ATTR_RO(temp2_fault, alarm, 13);
static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 15); static SENSOR_DEVICE_ATTR_RO(temp2_max_alarm, alarm, 15);
/* Raw alarm file for compatibility */ /* Raw alarm file for compatibility */
static DEVICE_ATTR_RO(alarms); static DEVICE_ATTR_RO(alarms);
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
enum chips { enum chips {
lm85, lm85, lm96000,
adm1027, adt7463, adt7468, adm1027, adt7463, adt7468,
emc6d100, emc6d102, emc6d103, emc6d103s emc6d100, emc6d102, emc6d103, emc6d103s
}; };
...@@ -198,13 +198,18 @@ static int RANGE_TO_REG(long range) ...@@ -198,13 +198,18 @@ static int RANGE_TO_REG(long range)
#define RANGE_FROM_REG(val) lm85_range_map[(val) & 0x0f] #define RANGE_FROM_REG(val) lm85_range_map[(val) & 0x0f]
/* These are the PWM frequency encodings */ /* These are the PWM frequency encodings */
static const int lm85_freq_map[8] = { /* 1 Hz */ static const int lm85_freq_map[] = { /* 1 Hz */
10, 15, 23, 30, 38, 47, 61, 94 10, 15, 23, 30, 38, 47, 61, 94
}; };
static const int adm1027_freq_map[8] = { /* 1 Hz */
static const int lm96000_freq_map[] = { /* 1 Hz */
10, 15, 23, 30, 38, 47, 61, 94,
22500, 24000, 25700, 25700, 27700, 27700, 30000, 30000
};
static const int adm1027_freq_map[] = { /* 1 Hz */
11, 15, 22, 29, 35, 44, 59, 88 11, 15, 22, 29, 35, 44, 59, 88
}; };
#define FREQ_MAP_LEN 8
static int FREQ_TO_REG(const int *map, static int FREQ_TO_REG(const int *map,
unsigned int map_size, unsigned long freq) unsigned int map_size, unsigned long freq)
...@@ -212,9 +217,9 @@ static int FREQ_TO_REG(const int *map, ...@@ -212,9 +217,9 @@ static int FREQ_TO_REG(const int *map,
return find_closest(freq, map, map_size); return find_closest(freq, map, map_size);
} }
static int FREQ_FROM_REG(const int *map, u8 reg) static int FREQ_FROM_REG(const int *map, unsigned int map_size, u8 reg)
{ {
return map[reg & 0x07]; return map[reg % map_size];
} }
/* /*
...@@ -296,6 +301,8 @@ struct lm85_data { ...@@ -296,6 +301,8 @@ struct lm85_data {
struct i2c_client *client; struct i2c_client *client;
const struct attribute_group *groups[6]; const struct attribute_group *groups[6];
const int *freq_map; const int *freq_map;
unsigned int freq_map_size;
enum chips type; enum chips type;
bool has_vid5; /* true if VID5 is configured for ADT7463 or ADT7468 */ bool has_vid5; /* true if VID5 is configured for ADT7463 or ADT7468 */
...@@ -514,7 +521,7 @@ static struct lm85_data *lm85_update_device(struct device *dev) ...@@ -514,7 +521,7 @@ static struct lm85_data *lm85_update_device(struct device *dev)
data->autofan[i].config = data->autofan[i].config =
lm85_read_value(client, LM85_REG_AFAN_CONFIG(i)); lm85_read_value(client, LM85_REG_AFAN_CONFIG(i));
val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i)); val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i));
data->pwm_freq[i] = val & 0x07; data->pwm_freq[i] = val % data->freq_map_size;
data->zone[i].range = val >> 4; data->zone[i].range = val >> 4;
data->autofan[i].min_pwm = data->autofan[i].min_pwm =
lm85_read_value(client, LM85_REG_AFAN_MINPWM(i)); lm85_read_value(client, LM85_REG_AFAN_MINPWM(i));
...@@ -791,7 +798,8 @@ static ssize_t show_pwm_freq(struct device *dev, ...@@ -791,7 +798,8 @@ static ssize_t show_pwm_freq(struct device *dev,
if (IS_ADT7468_HFPWM(data)) if (IS_ADT7468_HFPWM(data))
freq = 22500; freq = 22500;
else else
freq = FREQ_FROM_REG(data->freq_map, data->pwm_freq[nr]); freq = FREQ_FROM_REG(data->freq_map, data->freq_map_size,
data->pwm_freq[nr]);
return sprintf(buf, "%d\n", freq); return sprintf(buf, "%d\n", freq);
} }
...@@ -820,7 +828,7 @@ static ssize_t set_pwm_freq(struct device *dev, ...@@ -820,7 +828,7 @@ static ssize_t set_pwm_freq(struct device *dev,
lm85_write_value(client, ADT7468_REG_CFG5, data->cfg5); lm85_write_value(client, ADT7468_REG_CFG5, data->cfg5);
} else { /* Low freq. mode */ } else { /* Low freq. mode */
data->pwm_freq[nr] = FREQ_TO_REG(data->freq_map, data->pwm_freq[nr] = FREQ_TO_REG(data->freq_map,
FREQ_MAP_LEN, val); data->freq_map_size, val);
lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
(data->zone[nr].range << 4) (data->zone[nr].range << 4)
| data->pwm_freq[nr]); | data->pwm_freq[nr]);
...@@ -1196,7 +1204,7 @@ static ssize_t set_temp_auto_temp_min(struct device *dev, ...@@ -1196,7 +1204,7 @@ static ssize_t set_temp_auto_temp_min(struct device *dev,
TEMP_FROM_REG(data->zone[nr].limit)); TEMP_FROM_REG(data->zone[nr].limit));
lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
((data->zone[nr].range & 0x0f) << 4) ((data->zone[nr].range & 0x0f) << 4)
| (data->pwm_freq[nr] & 0x07)); | data->pwm_freq[nr]);
mutex_unlock(&data->update_lock); mutex_unlock(&data->update_lock);
return count; return count;
...@@ -1232,7 +1240,7 @@ static ssize_t set_temp_auto_temp_max(struct device *dev, ...@@ -1232,7 +1240,7 @@ static ssize_t set_temp_auto_temp_max(struct device *dev,
val - min); val - min);
lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
((data->zone[nr].range & 0x0f) << 4) ((data->zone[nr].range & 0x0f) << 4)
| (data->pwm_freq[nr] & 0x07)); | data->pwm_freq[nr]);
mutex_unlock(&data->update_lock); mutex_unlock(&data->update_lock);
return count; return count;
} }
...@@ -1496,7 +1504,7 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info) ...@@ -1496,7 +1504,7 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
"Found Winbond WPCD377I, ignoring\n"); "Found Winbond WPCD377I, ignoring\n");
return -ENODEV; return -ENODEV;
} }
type_name = "lm85"; type_name = "lm96000";
break; break;
} }
} else if (company == LM85_COMPANY_ANALOG_DEV) { } else if (company == LM85_COMPANY_ANALOG_DEV) {
...@@ -1569,9 +1577,15 @@ static int lm85_probe(struct i2c_client *client, const struct i2c_device_id *id) ...@@ -1569,9 +1577,15 @@ static int lm85_probe(struct i2c_client *client, const struct i2c_device_id *id)
case emc6d103: case emc6d103:
case emc6d103s: case emc6d103s:
data->freq_map = adm1027_freq_map; data->freq_map = adm1027_freq_map;
data->freq_map_size = ARRAY_SIZE(adm1027_freq_map);
break;
case lm96000:
data->freq_map = lm96000_freq_map;
data->freq_map_size = ARRAY_SIZE(lm96000_freq_map);
break; break;
default: default:
data->freq_map = lm85_freq_map; data->freq_map = lm85_freq_map;
data->freq_map_size = ARRAY_SIZE(lm85_freq_map);
} }
/* Set the VRM version */ /* Set the VRM version */
...@@ -1618,6 +1632,7 @@ static const struct i2c_device_id lm85_id[] = { ...@@ -1618,6 +1632,7 @@ static const struct i2c_device_id lm85_id[] = {
{ "lm85", lm85 }, { "lm85", lm85 },
{ "lm85b", lm85 }, { "lm85b", lm85 },
{ "lm85c", lm85 }, { "lm85c", lm85 },
{ "lm96000", lm96000 },
{ "emc6d100", emc6d100 }, { "emc6d100", emc6d100 },
{ "emc6d101", emc6d100 }, { "emc6d101", emc6d100 },
{ "emc6d102", emc6d102 }, { "emc6d102", emc6d102 },
...@@ -1652,6 +1667,10 @@ static const struct of_device_id lm85_of_match[] = { ...@@ -1652,6 +1667,10 @@ static const struct of_device_id lm85_of_match[] = {
.compatible = "national,lm85c", .compatible = "national,lm85c",
.data = (void *)lm85 .data = (void *)lm85
}, },
{
.compatible = "ti,lm96000",
.data = (void *)lm96000
},
{ {
.compatible = "smsc,emc6d100", .compatible = "smsc,emc6d100",
.data = (void *)emc6d100 .data = (void *)emc6d100
......
...@@ -1266,17 +1266,17 @@ static umode_t lm90_temp_is_visible(const void *data, u32 attr, int channel) ...@@ -1266,17 +1266,17 @@ static umode_t lm90_temp_is_visible(const void *data, u32 attr, int channel)
case hwmon_temp_emergency_alarm: case hwmon_temp_emergency_alarm:
case hwmon_temp_emergency_hyst: case hwmon_temp_emergency_hyst:
case hwmon_temp_fault: case hwmon_temp_fault:
return S_IRUGO; return 0444;
case hwmon_temp_min: case hwmon_temp_min:
case hwmon_temp_max: case hwmon_temp_max:
case hwmon_temp_crit: case hwmon_temp_crit:
case hwmon_temp_emergency: case hwmon_temp_emergency:
case hwmon_temp_offset: case hwmon_temp_offset:
return S_IRUGO | S_IWUSR; return 0644;
case hwmon_temp_crit_hyst: case hwmon_temp_crit_hyst:
if (channel == 0) if (channel == 0)
return S_IRUGO | S_IWUSR; return 0644;
return S_IRUGO; return 0444;
default: default:
return 0; return 0;
} }
...@@ -1338,9 +1338,9 @@ static umode_t lm90_chip_is_visible(const void *data, u32 attr, int channel) ...@@ -1338,9 +1338,9 @@ static umode_t lm90_chip_is_visible(const void *data, u32 attr, int channel)
{ {
switch (attr) { switch (attr) {
case hwmon_chip_update_interval: case hwmon_chip_update_interval:
return S_IRUGO | S_IWUSR; return 0644;
case hwmon_chip_alarms: case hwmon_chip_alarms:
return S_IRUGO; return 0444;
default: default:
return 0; return 0;
} }
......
...@@ -143,7 +143,7 @@ static struct lm92_data *lm92_update_device(struct device *dev) ...@@ -143,7 +143,7 @@ static struct lm92_data *lm92_update_device(struct device *dev)
return data; return data;
} }
static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
...@@ -152,8 +152,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, ...@@ -152,8 +152,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index])); return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index]));
} }
static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *devattr, const char *buf,
size_t count)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct lm92_data *data = dev_get_drvdata(dev); struct lm92_data *data = dev_get_drvdata(dev);
...@@ -173,7 +174,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, ...@@ -173,7 +174,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr,
return count; return count;
} }
static ssize_t show_temp_hyst(struct device *dev, static ssize_t temp_hyst_show(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
...@@ -192,7 +193,7 @@ static ssize_t temp1_min_hyst_show(struct device *dev, ...@@ -192,7 +193,7 @@ static ssize_t temp1_min_hyst_show(struct device *dev,
+ TEMP_FROM_REG(data->temp[t_hyst])); + TEMP_FROM_REG(data->temp[t_hyst]));
} }
static ssize_t set_temp_hyst(struct device *dev, static ssize_t temp_hyst_store(struct device *dev,
struct device_attribute *devattr, struct device_attribute *devattr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
...@@ -224,7 +225,7 @@ static ssize_t alarms_show(struct device *dev, struct device_attribute *attr, ...@@ -224,7 +225,7 @@ static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", ALARMS_FROM_REG(data->temp[t_input])); return sprintf(buf, "%d\n", ALARMS_FROM_REG(data->temp[t_input]));
} }
static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int bitnr = to_sensor_dev_attr(attr)->index; int bitnr = to_sensor_dev_attr(attr)->index;
...@@ -232,21 +233,17 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, ...@@ -232,21 +233,17 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", (data->temp[t_input] >> bitnr) & 1); return sprintf(buf, "%d\n", (data->temp[t_input] >> bitnr) & 1);
} }
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, t_input); static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, t_input);
static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp, set_temp, static SENSOR_DEVICE_ATTR_RW(temp1_crit, temp, t_crit);
t_crit); static SENSOR_DEVICE_ATTR_RW(temp1_crit_hyst, temp_hyst, t_crit);
static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temp_hyst, static SENSOR_DEVICE_ATTR_RW(temp1_min, temp, t_min);
set_temp_hyst, t_crit);
static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp, set_temp,
t_min);
static DEVICE_ATTR_RO(temp1_min_hyst); static DEVICE_ATTR_RO(temp1_min_hyst);
static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp, set_temp, static SENSOR_DEVICE_ATTR_RW(temp1_max, temp, t_max);
t_max); static SENSOR_DEVICE_ATTR_RO(temp1_max_hyst, temp_hyst, t_max);
static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IRUGO, show_temp_hyst, NULL, t_max);
static DEVICE_ATTR_RO(alarms); static DEVICE_ATTR_RO(alarms);
static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 2); static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 2);
static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp1_min_alarm, alarm, 0);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 1);
/* /*
* Detection and registration * Detection and registration
......
This diff is collapsed.
...@@ -349,19 +349,19 @@ static umode_t lm95241_is_visible(const void *data, ...@@ -349,19 +349,19 @@ static umode_t lm95241_is_visible(const void *data,
case hwmon_chip: case hwmon_chip:
switch (attr) { switch (attr) {
case hwmon_chip_update_interval: case hwmon_chip_update_interval:
return S_IRUGO | S_IWUSR; return 0644;
} }
break; break;
case hwmon_temp: case hwmon_temp:
switch (attr) { switch (attr) {
case hwmon_temp_input: case hwmon_temp_input:
return S_IRUGO; return 0444;
case hwmon_temp_fault: case hwmon_temp_fault:
return S_IRUGO; return 0444;
case hwmon_temp_min: case hwmon_temp_min:
case hwmon_temp_max: case hwmon_temp_max:
case hwmon_temp_type: case hwmon_temp_type:
return S_IRUGO | S_IWUSR; return 0644;
} }
break; break;
default: default:
......
...@@ -421,14 +421,14 @@ static umode_t lm95245_temp_is_visible(const void *data, u32 attr, int channel) ...@@ -421,14 +421,14 @@ static umode_t lm95245_temp_is_visible(const void *data, u32 attr, int channel)
case hwmon_temp_max_hyst: case hwmon_temp_max_hyst:
case hwmon_temp_crit_alarm: case hwmon_temp_crit_alarm:
case hwmon_temp_fault: case hwmon_temp_fault:
return S_IRUGO; return 0444;
case hwmon_temp_type: case hwmon_temp_type:
case hwmon_temp_max: case hwmon_temp_max:
case hwmon_temp_crit: case hwmon_temp_crit:
case hwmon_temp_offset: case hwmon_temp_offset:
return S_IRUGO | S_IWUSR; return 0644;
case hwmon_temp_crit_hyst: case hwmon_temp_crit_hyst:
return (channel == 0) ? S_IRUGO | S_IWUSR : S_IRUGO; return (channel == 0) ? 0644 : 0444;
default: default:
return 0; return 0;
} }
...@@ -442,7 +442,7 @@ static umode_t lm95245_is_visible(const void *data, ...@@ -442,7 +442,7 @@ static umode_t lm95245_is_visible(const void *data,
case hwmon_chip: case hwmon_chip:
switch (attr) { switch (attr) {
case hwmon_chip_update_interval: case hwmon_chip_update_interval:
return S_IRUGO | S_IWUSR; return 0644;
default: default:
return 0; return 0;
} }
......
...@@ -136,7 +136,7 @@ static int ltc2990_get_value(struct i2c_client *i2c, int index, int *result) ...@@ -136,7 +136,7 @@ static int ltc2990_get_value(struct i2c_client *i2c, int index, int *result)
return 0; return 0;
} }
static ssize_t ltc2990_show_value(struct device *dev, static ssize_t ltc2990_value_show(struct device *dev,
struct device_attribute *da, char *buf) struct device_attribute *da, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -170,26 +170,16 @@ static umode_t ltc2990_attrs_visible(struct kobject *kobj, ...@@ -170,26 +170,16 @@ static umode_t ltc2990_attrs_visible(struct kobject *kobj,
return 0; return 0;
} }
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, ltc2990_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(temp1_input, ltc2990_value, LTC2990_TEMP1);
LTC2990_TEMP1); static SENSOR_DEVICE_ATTR_RO(temp2_input, ltc2990_value, LTC2990_TEMP2);
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, ltc2990_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(temp3_input, ltc2990_value, LTC2990_TEMP3);
LTC2990_TEMP2); static SENSOR_DEVICE_ATTR_RO(curr1_input, ltc2990_value, LTC2990_CURR1);
static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, ltc2990_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(curr2_input, ltc2990_value, LTC2990_CURR2);
LTC2990_TEMP3); static SENSOR_DEVICE_ATTR_RO(in0_input, ltc2990_value, LTC2990_IN0);
static SENSOR_DEVICE_ATTR(curr1_input, S_IRUGO, ltc2990_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in1_input, ltc2990_value, LTC2990_IN1);
LTC2990_CURR1); static SENSOR_DEVICE_ATTR_RO(in2_input, ltc2990_value, LTC2990_IN2);
static SENSOR_DEVICE_ATTR(curr2_input, S_IRUGO, ltc2990_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in3_input, ltc2990_value, LTC2990_IN3);
LTC2990_CURR2); static SENSOR_DEVICE_ATTR_RO(in4_input, ltc2990_value, LTC2990_IN4);
static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, ltc2990_show_value, NULL,
LTC2990_IN0);
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, ltc2990_show_value, NULL,
LTC2990_IN1);
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, ltc2990_show_value, NULL,
LTC2990_IN2);
static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, ltc2990_show_value, NULL,
LTC2990_IN3);
static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, ltc2990_show_value, NULL,
LTC2990_IN4);
static struct attribute *ltc2990_attrs[] = { static struct attribute *ltc2990_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
......
...@@ -131,7 +131,7 @@ static int ltc4151_get_value(struct ltc4151_data *data, u8 reg) ...@@ -131,7 +131,7 @@ static int ltc4151_get_value(struct ltc4151_data *data, u8 reg)
return val; return val;
} }
static ssize_t ltc4151_show_value(struct device *dev, static ssize_t ltc4151_value_show(struct device *dev,
struct device_attribute *da, char *buf) struct device_attribute *da, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -148,14 +148,11 @@ static ssize_t ltc4151_show_value(struct device *dev, ...@@ -148,14 +148,11 @@ static ssize_t ltc4151_show_value(struct device *dev,
/* /*
* Input voltages. * Input voltages.
*/ */
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, ltc4151_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in1_input, ltc4151_value, LTC4151_VIN_H);
LTC4151_VIN_H); static SENSOR_DEVICE_ATTR_RO(in2_input, ltc4151_value, LTC4151_ADIN_H);
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, ltc4151_show_value, NULL,
LTC4151_ADIN_H);
/* Currents (via sense resistor) */ /* Currents (via sense resistor) */
static SENSOR_DEVICE_ATTR(curr1_input, S_IRUGO, ltc4151_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(curr1_input, ltc4151_value, LTC4151_SENSE_H);
LTC4151_SENSE_H);
/* /*
* Finally, construct an array of pointers to members of the above objects, * Finally, construct an array of pointers to members of the above objects,
......
...@@ -94,7 +94,7 @@ static int ltc4222_get_value(struct device *dev, u8 reg) ...@@ -94,7 +94,7 @@ static int ltc4222_get_value(struct device *dev, u8 reg)
return val; return val;
} }
static ssize_t ltc4222_show_value(struct device *dev, static ssize_t ltc4222_value_show(struct device *dev,
struct device_attribute *da, char *buf) struct device_attribute *da, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -106,7 +106,7 @@ static ssize_t ltc4222_show_value(struct device *dev, ...@@ -106,7 +106,7 @@ static ssize_t ltc4222_show_value(struct device *dev,
return snprintf(buf, PAGE_SIZE, "%d\n", value); return snprintf(buf, PAGE_SIZE, "%d\n", value);
} }
static ssize_t ltc4222_show_bool(struct device *dev, static ssize_t ltc4222_bool_show(struct device *dev,
struct device_attribute *da, char *buf) struct device_attribute *da, char *buf)
{ {
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(da); struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(da);
...@@ -125,45 +125,39 @@ static ssize_t ltc4222_show_bool(struct device *dev, ...@@ -125,45 +125,39 @@ static ssize_t ltc4222_show_bool(struct device *dev,
} }
/* Voltages */ /* Voltages */
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, ltc4222_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in1_input, ltc4222_value, LTC4222_SOURCE1);
LTC4222_SOURCE1); static SENSOR_DEVICE_ATTR_RO(in2_input, ltc4222_value, LTC4222_ADIN1);
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, ltc4222_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in3_input, ltc4222_value, LTC4222_SOURCE2);
LTC4222_ADIN1); static SENSOR_DEVICE_ATTR_RO(in4_input, ltc4222_value, LTC4222_ADIN2);
static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, ltc4222_show_value, NULL,
LTC4222_SOURCE2);
static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, ltc4222_show_value, NULL,
LTC4222_ADIN2);
/* /*
* Voltage alarms * Voltage alarms
* UV/OV faults are associated with the input voltage, and power bad and fet * UV/OV faults are associated with the input voltage, and power bad and fet
* faults are associated with the output voltage. * faults are associated with the output voltage.
*/ */
static SENSOR_DEVICE_ATTR_2(in1_min_alarm, S_IRUGO, ltc4222_show_bool, NULL, static SENSOR_DEVICE_ATTR_2_RO(in1_min_alarm, ltc4222_bool, LTC4222_FAULT1,
LTC4222_FAULT1, FAULT_UV); FAULT_UV);
static SENSOR_DEVICE_ATTR_2(in1_max_alarm, S_IRUGO, ltc4222_show_bool, NULL, static SENSOR_DEVICE_ATTR_2_RO(in1_max_alarm, ltc4222_bool, LTC4222_FAULT1,
LTC4222_FAULT1, FAULT_OV); FAULT_OV);
static SENSOR_DEVICE_ATTR_2(in2_alarm, S_IRUGO, ltc4222_show_bool, NULL, static SENSOR_DEVICE_ATTR_2_RO(in2_alarm, ltc4222_bool, LTC4222_FAULT1,
LTC4222_FAULT1, FAULT_POWER_BAD | FAULT_FET_BAD); FAULT_POWER_BAD | FAULT_FET_BAD);
static SENSOR_DEVICE_ATTR_2(in3_min_alarm, S_IRUGO, ltc4222_show_bool, NULL, static SENSOR_DEVICE_ATTR_2_RO(in3_min_alarm, ltc4222_bool, LTC4222_FAULT2,
LTC4222_FAULT2, FAULT_UV); FAULT_UV);
static SENSOR_DEVICE_ATTR_2(in3_max_alarm, S_IRUGO, ltc4222_show_bool, NULL, static SENSOR_DEVICE_ATTR_2_RO(in3_max_alarm, ltc4222_bool, LTC4222_FAULT2,
LTC4222_FAULT2, FAULT_OV); FAULT_OV);
static SENSOR_DEVICE_ATTR_2(in4_alarm, S_IRUGO, ltc4222_show_bool, NULL, static SENSOR_DEVICE_ATTR_2_RO(in4_alarm, ltc4222_bool, LTC4222_FAULT2,
LTC4222_FAULT2, FAULT_POWER_BAD | FAULT_FET_BAD); FAULT_POWER_BAD | FAULT_FET_BAD);
/* Current (via sense resistor) */ /* Current (via sense resistor) */
static SENSOR_DEVICE_ATTR(curr1_input, S_IRUGO, ltc4222_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(curr1_input, ltc4222_value, LTC4222_SENSE1);
LTC4222_SENSE1); static SENSOR_DEVICE_ATTR_RO(curr2_input, ltc4222_value, LTC4222_SENSE2);
static SENSOR_DEVICE_ATTR(curr2_input, S_IRUGO, ltc4222_show_value, NULL,
LTC4222_SENSE2);
/* Overcurrent alarm */ /* Overcurrent alarm */
static SENSOR_DEVICE_ATTR_2(curr1_max_alarm, S_IRUGO, ltc4222_show_bool, NULL, static SENSOR_DEVICE_ATTR_2_RO(curr1_max_alarm, ltc4222_bool, LTC4222_FAULT1,
LTC4222_FAULT1, FAULT_OC); FAULT_OC);
static SENSOR_DEVICE_ATTR_2(curr2_max_alarm, S_IRUGO, ltc4222_show_bool, NULL, static SENSOR_DEVICE_ATTR_2_RO(curr2_max_alarm, ltc4222_bool, LTC4222_FAULT2,
LTC4222_FAULT2, FAULT_OC); FAULT_OC);
static struct attribute *ltc4222_attrs[] = { static struct attribute *ltc4222_attrs[] = {
&sensor_dev_attr_in1_input.dev_attr.attr, &sensor_dev_attr_in1_input.dev_attr.attr,
......
...@@ -362,11 +362,11 @@ static umode_t ltc4245_is_visible(const void *_data, ...@@ -362,11 +362,11 @@ static umode_t ltc4245_is_visible(const void *_data,
case hwmon_in_input: case hwmon_in_input:
if (channel > 9 && !data->use_extra_gpios) if (channel > 9 && !data->use_extra_gpios)
return 0; return 0;
return S_IRUGO; return 0444;
case hwmon_in_min_alarm: case hwmon_in_min_alarm:
if (channel > 8) if (channel > 8)
return 0; return 0;
return S_IRUGO; return 0444;
default: default:
return 0; return 0;
} }
...@@ -374,14 +374,14 @@ static umode_t ltc4245_is_visible(const void *_data, ...@@ -374,14 +374,14 @@ static umode_t ltc4245_is_visible(const void *_data,
switch (attr) { switch (attr) {
case hwmon_curr_input: case hwmon_curr_input:
case hwmon_curr_max_alarm: case hwmon_curr_max_alarm:
return S_IRUGO; return 0444;
default: default:
return 0; return 0;
} }
case hwmon_power: case hwmon_power:
switch (attr) { switch (attr) {
case hwmon_power_input: case hwmon_power_input:
return S_IRUGO; return 0444;
default: default:
return 0; return 0;
} }
......
...@@ -132,7 +132,7 @@ static int ltc4261_get_value(struct ltc4261_data *data, u8 reg) ...@@ -132,7 +132,7 @@ static int ltc4261_get_value(struct ltc4261_data *data, u8 reg)
return val; return val;
} }
static ssize_t ltc4261_show_value(struct device *dev, static ssize_t ltc4261_value_show(struct device *dev,
struct device_attribute *da, char *buf) struct device_attribute *da, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -146,7 +146,7 @@ static ssize_t ltc4261_show_value(struct device *dev, ...@@ -146,7 +146,7 @@ static ssize_t ltc4261_show_value(struct device *dev,
return snprintf(buf, PAGE_SIZE, "%d\n", value); return snprintf(buf, PAGE_SIZE, "%d\n", value);
} }
static ssize_t ltc4261_show_bool(struct device *dev, static ssize_t ltc4261_bool_show(struct device *dev,
struct device_attribute *da, char *buf) struct device_attribute *da, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
...@@ -166,10 +166,8 @@ static ssize_t ltc4261_show_bool(struct device *dev, ...@@ -166,10 +166,8 @@ static ssize_t ltc4261_show_bool(struct device *dev,
/* /*
* Input voltages. * Input voltages.
*/ */
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, ltc4261_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(in1_input, ltc4261_value, LTC4261_ADIN_H);
LTC4261_ADIN_H); static SENSOR_DEVICE_ATTR_RO(in2_input, ltc4261_value, LTC4261_ADIN2_H);
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, ltc4261_show_value, NULL,
LTC4261_ADIN2_H);
/* /*
* Voltage alarms. The chip has only one set of voltage alarm status bits, * Voltage alarms. The chip has only one set of voltage alarm status bits,
...@@ -179,22 +177,16 @@ static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, ltc4261_show_value, NULL, ...@@ -179,22 +177,16 @@ static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, ltc4261_show_value, NULL,
* To ensure that the alarm condition is reported to the user, report it * To ensure that the alarm condition is reported to the user, report it
* with both voltage sensors. * with both voltage sensors.
*/ */
static SENSOR_DEVICE_ATTR(in1_min_alarm, S_IRUGO, ltc4261_show_bool, NULL, static SENSOR_DEVICE_ATTR_RO(in1_min_alarm, ltc4261_bool, FAULT_UV);
FAULT_UV); static SENSOR_DEVICE_ATTR_RO(in1_max_alarm, ltc4261_bool, FAULT_OV);
static SENSOR_DEVICE_ATTR(in1_max_alarm, S_IRUGO, ltc4261_show_bool, NULL, static SENSOR_DEVICE_ATTR_RO(in2_min_alarm, ltc4261_bool, FAULT_UV);
FAULT_OV); static SENSOR_DEVICE_ATTR_RO(in2_max_alarm, ltc4261_bool, FAULT_OV);
static SENSOR_DEVICE_ATTR(in2_min_alarm, S_IRUGO, ltc4261_show_bool, NULL,
FAULT_UV);
static SENSOR_DEVICE_ATTR(in2_max_alarm, S_IRUGO, ltc4261_show_bool, NULL,
FAULT_OV);
/* Currents (via sense resistor) */ /* Currents (via sense resistor) */
static SENSOR_DEVICE_ATTR(curr1_input, S_IRUGO, ltc4261_show_value, NULL, static SENSOR_DEVICE_ATTR_RO(curr1_input, ltc4261_value, LTC4261_SENSE_H);
LTC4261_SENSE_H);
/* Overcurrent alarm */ /* Overcurrent alarm */
static SENSOR_DEVICE_ATTR(curr1_max_alarm, S_IRUGO, ltc4261_show_bool, NULL, static SENSOR_DEVICE_ATTR_RO(curr1_max_alarm, ltc4261_bool, FAULT_OC);
FAULT_OC);
static struct attribute *ltc4261_attrs[] = { static struct attribute *ltc4261_attrs[] = {
&sensor_dev_attr_in1_input.dev_attr.attr, &sensor_dev_attr_in1_input.dev_attr.attr,
......
This diff is collapsed.
...@@ -145,7 +145,7 @@ static struct max1619_data *max1619_update_device(struct device *dev) ...@@ -145,7 +145,7 @@ static struct max1619_data *max1619_update_device(struct device *dev)
* Sysfs stuff * Sysfs stuff
*/ */
static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_show(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
...@@ -154,8 +154,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, ...@@ -154,8 +154,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
return sprintf(buf, "%d\n", temp_from_reg(data->temp[attr->index])); return sprintf(buf, "%d\n", temp_from_reg(data->temp[attr->index]));
} }
static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, static ssize_t temp_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *devattr, const char *buf,
size_t count)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
struct max1619_data *data = dev_get_drvdata(dev); struct max1619_data *data = dev_get_drvdata(dev);
...@@ -180,7 +181,7 @@ static ssize_t alarms_show(struct device *dev, struct device_attribute *attr, ...@@ -180,7 +181,7 @@ static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", data->alarms); return sprintf(buf, "%d\n", data->alarms);
} }
static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int bitnr = to_sensor_dev_attr(attr)->index; int bitnr = to_sensor_dev_attr(attr)->index;
...@@ -188,22 +189,18 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, ...@@ -188,22 +189,18 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1); return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
} }
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, t_input1); static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, t_input1);
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, t_input2); static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, t_input2);
static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp, set_temp, static SENSOR_DEVICE_ATTR_RW(temp2_min, temp, t_low2);
t_low2); static SENSOR_DEVICE_ATTR_RW(temp2_max, temp, t_high2);
static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp, set_temp, static SENSOR_DEVICE_ATTR_RW(temp2_crit, temp, t_crit2);
t_high2); static SENSOR_DEVICE_ATTR_RW(temp2_crit_hyst, temp, t_hyst2);
static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp, set_temp,
t_crit2);
static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp,
set_temp, t_hyst2);
static DEVICE_ATTR_RO(alarms); static DEVICE_ATTR_RO(alarms);
static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp2_crit_alarm, alarm, 1);
static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2); static SENSOR_DEVICE_ATTR_RO(temp2_fault, alarm, 2);
static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3); static SENSOR_DEVICE_ATTR_RO(temp2_min_alarm, alarm, 3);
static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4); static SENSOR_DEVICE_ATTR_RO(temp2_max_alarm, alarm, 4);
static struct attribute *max1619_attrs[] = { static struct attribute *max1619_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
......
...@@ -50,9 +50,8 @@ static int max31722_set_mode(struct max31722_data *data, u8 mode) ...@@ -50,9 +50,8 @@ static int max31722_set_mode(struct max31722_data *data, u8 mode)
return 0; return 0;
} }
static ssize_t max31722_show_temp(struct device *dev, static ssize_t max31722_temp_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr, char *buf)
char *buf)
{ {
ssize_t ret; ssize_t ret;
struct max31722_data *data = dev_get_drvdata(dev); struct max31722_data *data = dev_get_drvdata(dev);
...@@ -64,8 +63,7 @@ static ssize_t max31722_show_temp(struct device *dev, ...@@ -64,8 +63,7 @@ static ssize_t max31722_show_temp(struct device *dev,
return sprintf(buf, "%d\n", (s16)le16_to_cpu(ret) * 125 / 32); return sprintf(buf, "%d\n", (s16)le16_to_cpu(ret) * 125 / 32);
} }
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, static SENSOR_DEVICE_ATTR_RO(temp1_input, max31722_temp, 0);
max31722_show_temp, NULL, 0);
static struct attribute *max31722_attrs[] = { static struct attribute *max31722_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
......
...@@ -252,12 +252,12 @@ static umode_t max31790_fan_is_visible(const void *_data, u32 attr, int channel) ...@@ -252,12 +252,12 @@ static umode_t max31790_fan_is_visible(const void *_data, u32 attr, int channel)
case hwmon_fan_fault: case hwmon_fan_fault:
if (channel < NR_CHANNEL || if (channel < NR_CHANNEL ||
(fan_config & MAX31790_FAN_CFG_TACH_INPUT)) (fan_config & MAX31790_FAN_CFG_TACH_INPUT))
return S_IRUGO; return 0444;
return 0; return 0;
case hwmon_fan_target: case hwmon_fan_target:
if (channel < NR_CHANNEL && if (channel < NR_CHANNEL &&
!(fan_config & MAX31790_FAN_CFG_TACH_INPUT)) !(fan_config & MAX31790_FAN_CFG_TACH_INPUT))
return S_IRUGO | S_IWUSR; return 0644;
return 0; return 0;
default: default:
return 0; return 0;
...@@ -353,7 +353,7 @@ static umode_t max31790_pwm_is_visible(const void *_data, u32 attr, int channel) ...@@ -353,7 +353,7 @@ static umode_t max31790_pwm_is_visible(const void *_data, u32 attr, int channel)
case hwmon_pwm_input: case hwmon_pwm_input:
case hwmon_pwm_enable: case hwmon_pwm_enable:
if (!(fan_config & MAX31790_FAN_CFG_TACH_INPUT)) if (!(fan_config & MAX31790_FAN_CFG_TACH_INPUT))
return S_IRUGO | S_IWUSR; return 0644;
return 0; return 0;
default: default:
return 0; return 0;
......
...@@ -162,7 +162,7 @@ static struct max6639_data *max6639_update_device(struct device *dev) ...@@ -162,7 +162,7 @@ static struct max6639_data *max6639_update_device(struct device *dev)
return ret; return ret;
} }
static ssize_t show_temp_input(struct device *dev, static ssize_t temp_input_show(struct device *dev,
struct device_attribute *dev_attr, char *buf) struct device_attribute *dev_attr, char *buf)
{ {
long temp; long temp;
...@@ -176,7 +176,7 @@ static ssize_t show_temp_input(struct device *dev, ...@@ -176,7 +176,7 @@ static ssize_t show_temp_input(struct device *dev,
return sprintf(buf, "%ld\n", temp); return sprintf(buf, "%ld\n", temp);
} }
static ssize_t show_temp_fault(struct device *dev, static ssize_t temp_fault_show(struct device *dev,
struct device_attribute *dev_attr, char *buf) struct device_attribute *dev_attr, char *buf)
{ {
struct max6639_data *data = max6639_update_device(dev); struct max6639_data *data = max6639_update_device(dev);
...@@ -188,7 +188,7 @@ static ssize_t show_temp_fault(struct device *dev, ...@@ -188,7 +188,7 @@ static ssize_t show_temp_fault(struct device *dev,
return sprintf(buf, "%d\n", data->temp_fault[attr->index]); return sprintf(buf, "%d\n", data->temp_fault[attr->index]);
} }
static ssize_t show_temp_max(struct device *dev, static ssize_t temp_max_show(struct device *dev,
struct device_attribute *dev_attr, char *buf) struct device_attribute *dev_attr, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
...@@ -197,7 +197,7 @@ static ssize_t show_temp_max(struct device *dev, ...@@ -197,7 +197,7 @@ static ssize_t show_temp_max(struct device *dev,
return sprintf(buf, "%d\n", (data->temp_therm[attr->index] * 1000)); return sprintf(buf, "%d\n", (data->temp_therm[attr->index] * 1000));
} }
static ssize_t set_temp_max(struct device *dev, static ssize_t temp_max_store(struct device *dev,
struct device_attribute *dev_attr, struct device_attribute *dev_attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
...@@ -220,7 +220,7 @@ static ssize_t set_temp_max(struct device *dev, ...@@ -220,7 +220,7 @@ static ssize_t set_temp_max(struct device *dev,
return count; return count;
} }
static ssize_t show_temp_crit(struct device *dev, static ssize_t temp_crit_show(struct device *dev,
struct device_attribute *dev_attr, char *buf) struct device_attribute *dev_attr, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
...@@ -229,7 +229,7 @@ static ssize_t show_temp_crit(struct device *dev, ...@@ -229,7 +229,7 @@ static ssize_t show_temp_crit(struct device *dev,
return sprintf(buf, "%d\n", (data->temp_alert[attr->index] * 1000)); return sprintf(buf, "%d\n", (data->temp_alert[attr->index] * 1000));
} }
static ssize_t set_temp_crit(struct device *dev, static ssize_t temp_crit_store(struct device *dev,
struct device_attribute *dev_attr, struct device_attribute *dev_attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
...@@ -252,7 +252,7 @@ static ssize_t set_temp_crit(struct device *dev, ...@@ -252,7 +252,7 @@ static ssize_t set_temp_crit(struct device *dev,
return count; return count;
} }
static ssize_t show_temp_emergency(struct device *dev, static ssize_t temp_emergency_show(struct device *dev,
struct device_attribute *dev_attr, struct device_attribute *dev_attr,
char *buf) char *buf)
{ {
...@@ -262,7 +262,7 @@ static ssize_t show_temp_emergency(struct device *dev, ...@@ -262,7 +262,7 @@ static ssize_t show_temp_emergency(struct device *dev,
return sprintf(buf, "%d\n", (data->temp_ot[attr->index] * 1000)); return sprintf(buf, "%d\n", (data->temp_ot[attr->index] * 1000));
} }
static ssize_t set_temp_emergency(struct device *dev, static ssize_t temp_emergency_store(struct device *dev,
struct device_attribute *dev_attr, struct device_attribute *dev_attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
...@@ -285,8 +285,8 @@ static ssize_t set_temp_emergency(struct device *dev, ...@@ -285,8 +285,8 @@ static ssize_t set_temp_emergency(struct device *dev,
return count; return count;
} }
static ssize_t show_pwm(struct device *dev, static ssize_t pwm_show(struct device *dev, struct device_attribute *dev_attr,
struct device_attribute *dev_attr, char *buf) char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
struct max6639_data *data = dev_get_drvdata(dev); struct max6639_data *data = dev_get_drvdata(dev);
...@@ -294,9 +294,9 @@ static ssize_t show_pwm(struct device *dev, ...@@ -294,9 +294,9 @@ static ssize_t show_pwm(struct device *dev,
return sprintf(buf, "%d\n", data->pwm[attr->index] * 255 / 120); return sprintf(buf, "%d\n", data->pwm[attr->index] * 255 / 120);
} }
static ssize_t set_pwm(struct device *dev, static ssize_t pwm_store(struct device *dev,
struct device_attribute *dev_attr, struct device_attribute *dev_attr, const char *buf,
const char *buf, size_t count) size_t count)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
struct max6639_data *data = dev_get_drvdata(dev); struct max6639_data *data = dev_get_drvdata(dev);
...@@ -319,7 +319,7 @@ static ssize_t set_pwm(struct device *dev, ...@@ -319,7 +319,7 @@ static ssize_t set_pwm(struct device *dev,
return count; return count;
} }
static ssize_t show_fan_input(struct device *dev, static ssize_t fan_input_show(struct device *dev,
struct device_attribute *dev_attr, char *buf) struct device_attribute *dev_attr, char *buf)
{ {
struct max6639_data *data = max6639_update_device(dev); struct max6639_data *data = max6639_update_device(dev);
...@@ -332,7 +332,7 @@ static ssize_t show_fan_input(struct device *dev, ...@@ -332,7 +332,7 @@ static ssize_t show_fan_input(struct device *dev,
data->rpm_range)); data->rpm_range));
} }
static ssize_t show_alarm(struct device *dev, static ssize_t alarm_show(struct device *dev,
struct device_attribute *dev_attr, char *buf) struct device_attribute *dev_attr, char *buf)
{ {
struct max6639_data *data = max6639_update_device(dev); struct max6639_data *data = max6639_update_device(dev);
...@@ -344,34 +344,28 @@ static ssize_t show_alarm(struct device *dev, ...@@ -344,34 +344,28 @@ static ssize_t show_alarm(struct device *dev,
return sprintf(buf, "%d\n", !!(data->status & (1 << attr->index))); return sprintf(buf, "%d\n", !!(data->status & (1 << attr->index)));
} }
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp1_input, temp_input, 0);
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp_input, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp2_input, temp_input, 1);
static SENSOR_DEVICE_ATTR(temp1_fault, S_IRUGO, show_temp_fault, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp1_fault, temp_fault, 0);
static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_temp_fault, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp2_fault, temp_fault, 1);
static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max, static SENSOR_DEVICE_ATTR_RW(temp1_max, temp_max, 0);
set_temp_max, 0); static SENSOR_DEVICE_ATTR_RW(temp2_max, temp_max, 1);
static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max, static SENSOR_DEVICE_ATTR_RW(temp1_crit, temp_crit, 0);
set_temp_max, 1); static SENSOR_DEVICE_ATTR_RW(temp2_crit, temp_crit, 1);
static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp_crit, static SENSOR_DEVICE_ATTR_RW(temp1_emergency, temp_emergency, 0);
set_temp_crit, 0); static SENSOR_DEVICE_ATTR_RW(temp2_emergency, temp_emergency, 1);
static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp_crit, static SENSOR_DEVICE_ATTR_RW(pwm1, pwm, 0);
set_temp_crit, 1); static SENSOR_DEVICE_ATTR_RW(pwm2, pwm, 1);
static SENSOR_DEVICE_ATTR(temp1_emergency, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_RO(fan1_input, fan_input, 0);
show_temp_emergency, set_temp_emergency, 0); static SENSOR_DEVICE_ATTR_RO(fan2_input, fan_input, 1);
static SENSOR_DEVICE_ATTR(temp2_emergency, S_IWUSR | S_IRUGO, static SENSOR_DEVICE_ATTR_RO(fan1_fault, alarm, 1);
show_temp_emergency, set_temp_emergency, 1); static SENSOR_DEVICE_ATTR_RO(fan2_fault, alarm, 0);
static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0); static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 3);
static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1); static SENSOR_DEVICE_ATTR_RO(temp2_max_alarm, alarm, 2);
static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan_input, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 7);
static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan_input, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp2_crit_alarm, alarm, 6);
static SENSOR_DEVICE_ATTR(fan1_fault, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp1_emergency_alarm, alarm, 5);
static SENSOR_DEVICE_ATTR(fan2_fault, S_IRUGO, show_alarm, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp2_emergency_alarm, alarm, 4);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 3);
static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 2);
static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 7);
static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 6);
static SENSOR_DEVICE_ATTR(temp1_emergency_alarm, S_IRUGO, show_alarm, NULL, 5);
static SENSOR_DEVICE_ATTR(temp2_emergency_alarm, S_IRUGO, show_alarm, NULL, 4);
static struct attribute *max6639_attrs[] = { static struct attribute *max6639_attrs[] = {
......
...@@ -206,7 +206,7 @@ static struct max6642_data *max6642_update_device(struct device *dev) ...@@ -206,7 +206,7 @@ static struct max6642_data *max6642_update_device(struct device *dev)
* Sysfs stuff * Sysfs stuff
*/ */
static ssize_t show_temp_max10(struct device *dev, static ssize_t temp_max10_show(struct device *dev,
struct device_attribute *dev_attr, char *buf) struct device_attribute *dev_attr, char *buf)
{ {
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
...@@ -216,8 +216,8 @@ static ssize_t show_temp_max10(struct device *dev, ...@@ -216,8 +216,8 @@ static ssize_t show_temp_max10(struct device *dev,
temp_from_reg10(data->temp_input[attr->index])); temp_from_reg10(data->temp_input[attr->index]));
} }
static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr, static ssize_t temp_max_show(struct device *dev,
char *buf) struct device_attribute *attr, char *buf)
{ {
struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr); struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr);
struct max6642_data *data = max6642_update_device(dev); struct max6642_data *data = max6642_update_device(dev);
...@@ -225,8 +225,9 @@ static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr, ...@@ -225,8 +225,9 @@ static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", temp_from_reg(data->temp_high[attr2->nr])); return sprintf(buf, "%d\n", temp_from_reg(data->temp_high[attr2->nr]));
} }
static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, static ssize_t temp_max_store(struct device *dev,
const char *buf, size_t count) struct device_attribute *attr, const char *buf,
size_t count)
{ {
struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr); struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr);
struct max6642_data *data = dev_get_drvdata(dev); struct max6642_data *data = dev_get_drvdata(dev);
...@@ -245,7 +246,7 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, ...@@ -245,7 +246,7 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
return count; return count;
} }
static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
int bitnr = to_sensor_dev_attr(attr)->index; int bitnr = to_sensor_dev_attr(attr)->index;
...@@ -253,15 +254,15 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, ...@@ -253,15 +254,15 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1); return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
} }
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_max10, NULL, 0); static SENSOR_DEVICE_ATTR_RO(temp1_input, temp_max10, 0);
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp_max10, NULL, 1); static SENSOR_DEVICE_ATTR_RO(temp2_input, temp_max10, 1);
static SENSOR_DEVICE_ATTR_2(temp1_max, S_IWUSR | S_IRUGO, show_temp_max, static SENSOR_DEVICE_ATTR_2_RW(temp1_max, temp_max, 0,
set_temp_max, 0, MAX6642_REG_W_LOCAL_HIGH); MAX6642_REG_W_LOCAL_HIGH);
static SENSOR_DEVICE_ATTR_2(temp2_max, S_IWUSR | S_IRUGO, show_temp_max, static SENSOR_DEVICE_ATTR_2_RW(temp2_max, temp_max, 1,
set_temp_max, 1, MAX6642_REG_W_REMOTE_HIGH); MAX6642_REG_W_REMOTE_HIGH);
static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2); static SENSOR_DEVICE_ATTR_RO(temp2_fault, alarm, 2);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6); static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 6);
static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4); static SENSOR_DEVICE_ATTR_RO(temp2_max_alarm, alarm, 4);
static struct attribute *max6642_attrs[] = { static struct attribute *max6642_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
......
...@@ -52,9 +52,9 @@ static int prescaler; ...@@ -52,9 +52,9 @@ static int prescaler;
/* clock: The clock frequency of the chip (max6651 can be clocked externally) */ /* clock: The clock frequency of the chip (max6651 can be clocked externally) */
static int clock = 254000; static int clock = 254000;
module_param(fan_voltage, int, S_IRUGO); module_param(fan_voltage, int, 0444);
module_param(prescaler, int, S_IRUGO); module_param(prescaler, int, 0444);
module_param(clock, int, S_IRUGO); module_param(clock, int, 0444);
/* /*
* MAX 6650/6651 registers * MAX 6650/6651 registers
......
...@@ -63,8 +63,9 @@ static int mc13783_adc_read(struct device *dev, ...@@ -63,8 +63,9 @@ static int mc13783_adc_read(struct device *dev,
return 0; return 0;
} }
static ssize_t mc13783_adc_read_bp(struct device *dev, static ssize_t mc13783_adc_bp_show(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr,
char *buf)
{ {
unsigned val; unsigned val;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
...@@ -86,8 +87,9 @@ static ssize_t mc13783_adc_read_bp(struct device *dev, ...@@ -86,8 +87,9 @@ static ssize_t mc13783_adc_read_bp(struct device *dev,
return sprintf(buf, "%u\n", val); return sprintf(buf, "%u\n", val);
} }
static ssize_t mc13783_adc_read_gp(struct device *dev, static ssize_t mc13783_adc_gp_show(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr,
char *buf)
{ {
unsigned val; unsigned val;
int ret = mc13783_adc_read(dev, devattr, &val); int ret = mc13783_adc_read(dev, devattr, &val);
...@@ -104,8 +106,9 @@ static ssize_t mc13783_adc_read_gp(struct device *dev, ...@@ -104,8 +106,9 @@ static ssize_t mc13783_adc_read_gp(struct device *dev,
return sprintf(buf, "%u\n", val); return sprintf(buf, "%u\n", val);
} }
static ssize_t mc13783_adc_read_uid(struct device *dev, static ssize_t mc13783_adc_uid_show(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr,
char *buf)
{ {
unsigned int val; unsigned int val;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
...@@ -125,8 +128,9 @@ static ssize_t mc13783_adc_read_uid(struct device *dev, ...@@ -125,8 +128,9 @@ static ssize_t mc13783_adc_read_uid(struct device *dev,
return sprintf(buf, "%u\n", val); return sprintf(buf, "%u\n", val);
} }
static ssize_t mc13783_adc_read_temp(struct device *dev, static ssize_t mc13783_adc_temp_show(struct device *dev,
struct device_attribute *devattr, char *buf) struct device_attribute *devattr,
char *buf)
{ {
unsigned int val; unsigned int val;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
...@@ -156,21 +160,20 @@ static ssize_t mc13783_adc_read_temp(struct device *dev, ...@@ -156,21 +160,20 @@ static ssize_t mc13783_adc_read_temp(struct device *dev,
} }
static DEVICE_ATTR_RO(name); static DEVICE_ATTR_RO(name);
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, mc13783_adc_read_bp, NULL, 2); static SENSOR_DEVICE_ATTR_RO(in2_input, mc13783_adc_bp, 2);
static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, mc13783_adc_read_gp, NULL, 5); static SENSOR_DEVICE_ATTR_RO(in5_input, mc13783_adc_gp, 5);
static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, mc13783_adc_read_gp, NULL, 6); static SENSOR_DEVICE_ATTR_RO(in6_input, mc13783_adc_gp, 6);
static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, mc13783_adc_read_gp, NULL, 7); static SENSOR_DEVICE_ATTR_RO(in7_input, mc13783_adc_gp, 7);
static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, mc13783_adc_read_gp, NULL, 8); static SENSOR_DEVICE_ATTR_RO(in8_input, mc13783_adc_gp, 8);
static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, mc13783_adc_read_gp, NULL, 9); static SENSOR_DEVICE_ATTR_RO(in9_input, mc13783_adc_gp, 9);
static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, mc13783_adc_read_gp, NULL, 10); static SENSOR_DEVICE_ATTR_RO(in10_input, mc13783_adc_gp, 10);
static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, mc13783_adc_read_gp, NULL, 11); static SENSOR_DEVICE_ATTR_RO(in11_input, mc13783_adc_gp, 11);
static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, mc13783_adc_read_gp, NULL, 12); static SENSOR_DEVICE_ATTR_RO(in12_input, mc13783_adc_gp, 12);
static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, mc13783_adc_read_gp, NULL, 13); static SENSOR_DEVICE_ATTR_RO(in13_input, mc13783_adc_gp, 13);
static SENSOR_DEVICE_ATTR(in14_input, S_IRUGO, mc13783_adc_read_gp, NULL, 14); static SENSOR_DEVICE_ATTR_RO(in14_input, mc13783_adc_gp, 14);
static SENSOR_DEVICE_ATTR(in15_input, S_IRUGO, mc13783_adc_read_gp, NULL, 15); static SENSOR_DEVICE_ATTR_RO(in15_input, mc13783_adc_gp, 15);
static SENSOR_DEVICE_ATTR(in16_input, S_IRUGO, mc13783_adc_read_uid, NULL, 16); static SENSOR_DEVICE_ATTR_RO(in16_input, mc13783_adc_uid, 16);
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, static SENSOR_DEVICE_ATTR_RO(temp1_input, mc13783_adc_temp, 17);
mc13783_adc_read_temp, NULL, 17);
static struct attribute *mc13783_attr_base[] = { static struct attribute *mc13783_attr_base[] = {
&dev_attr_name.attr, &dev_attr_name.attr,
......
...@@ -182,7 +182,7 @@ static umode_t nct7904_fan_is_visible(const void *_data, u32 attr, int channel) ...@@ -182,7 +182,7 @@ static umode_t nct7904_fan_is_visible(const void *_data, u32 attr, int channel)
const struct nct7904_data *data = _data; const struct nct7904_data *data = _data;
if (attr == hwmon_fan_input && data->fanin_mask & (1 << channel)) if (attr == hwmon_fan_input && data->fanin_mask & (1 << channel))
return S_IRUGO; return 0444;
return 0; return 0;
} }
...@@ -225,7 +225,7 @@ static umode_t nct7904_in_is_visible(const void *_data, u32 attr, int channel) ...@@ -225,7 +225,7 @@ static umode_t nct7904_in_is_visible(const void *_data, u32 attr, int channel)
if (channel > 0 && attr == hwmon_in_input && if (channel > 0 && attr == hwmon_in_input &&
(data->vsen_mask & BIT(index))) (data->vsen_mask & BIT(index)))
return S_IRUGO; return 0444;
return 0; return 0;
} }
...@@ -260,10 +260,10 @@ static umode_t nct7904_temp_is_visible(const void *_data, u32 attr, int channel) ...@@ -260,10 +260,10 @@ static umode_t nct7904_temp_is_visible(const void *_data, u32 attr, int channel)
if (attr == hwmon_temp_input) { if (attr == hwmon_temp_input) {
if (channel == 0) { if (channel == 0) {
if (data->vsen_mask & BIT(17)) if (data->vsen_mask & BIT(17))
return S_IRUGO; return 0444;
} else { } else {
if (data->tcpu_mask & BIT(channel - 1)) if (data->tcpu_mask & BIT(channel - 1))
return S_IRUGO; return 0444;
} }
} }
...@@ -325,7 +325,7 @@ static umode_t nct7904_pwm_is_visible(const void *_data, u32 attr, int channel) ...@@ -325,7 +325,7 @@ static umode_t nct7904_pwm_is_visible(const void *_data, u32 attr, int channel)
switch (attr) { switch (attr) {
case hwmon_pwm_input: case hwmon_pwm_input:
case hwmon_pwm_enable: case hwmon_pwm_enable:
return S_IRUGO | S_IWUSR; return 0644;
default: default:
return 0; return 0;
} }
......
...@@ -114,8 +114,8 @@ static s32 nsa320_hwmon_update(struct device *dev) ...@@ -114,8 +114,8 @@ static s32 nsa320_hwmon_update(struct device *dev)
return mcu_data; return mcu_data;
} }
static ssize_t show_label(struct device *dev, static ssize_t label_show(struct device *dev, struct device_attribute *attr,
struct device_attribute *attr, char *buf) char *buf)
{ {
int channel = to_sensor_dev_attr(attr)->index; int channel = to_sensor_dev_attr(attr)->index;
...@@ -144,9 +144,9 @@ static ssize_t fan1_input_show(struct device *dev, ...@@ -144,9 +144,9 @@ static ssize_t fan1_input_show(struct device *dev,
return sprintf(buf, "%d\n", ((mcu_data & 0xff0000) >> 16) * 100); return sprintf(buf, "%d\n", ((mcu_data & 0xff0000) >> 16) * 100);
} }
static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_label, NULL, NSA320_TEMP); static SENSOR_DEVICE_ATTR_RO(temp1_label, label, NSA320_TEMP);
static DEVICE_ATTR_RO(temp1_input); static DEVICE_ATTR_RO(temp1_input);
static SENSOR_DEVICE_ATTR(fan1_label, S_IRUGO, show_label, NULL, NSA320_FAN); static SENSOR_DEVICE_ATTR_RO(fan1_label, label, NSA320_FAN);
static DEVICE_ATTR_RO(fan1_input); static DEVICE_ATTR_RO(fan1_input);
static struct attribute *nsa320_attrs[] = { static struct attribute *nsa320_attrs[] = {
......
...@@ -37,8 +37,6 @@ ...@@ -37,8 +37,6 @@
#include <linux/iio/consumer.h> #include <linux/iio/consumer.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h>
#include <linux/thermal.h>
struct ntc_compensation { struct ntc_compensation {
int temp_c; int temp_c;
...@@ -588,55 +586,87 @@ static int ntc_thermistor_get_ohm(struct ntc_data *data) ...@@ -588,55 +586,87 @@ static int ntc_thermistor_get_ohm(struct ntc_data *data)
return -EINVAL; return -EINVAL;
} }
static int ntc_read_temp(void *data, int *temp) static int ntc_read(struct device *dev, enum hwmon_sensor_types type,
u32 attr, int channel, long *val)
{ {
struct ntc_data *data = dev_get_drvdata(dev);
int ohm; int ohm;
switch (type) {
case hwmon_temp:
switch (attr) {
case hwmon_temp_input:
ohm = ntc_thermistor_get_ohm(data); ohm = ntc_thermistor_get_ohm(data);
if (ohm < 0) if (ohm < 0)
return ohm; return ohm;
*val = get_temp_mc(data, ohm);
*temp = get_temp_mc(data, ohm);
return 0; return 0;
case hwmon_temp_type:
*val = 4;
return 0;
default:
break;
}
break;
default:
break;
}
return -EINVAL;
} }
static ssize_t ntc_type_show(struct device *dev, static umode_t ntc_is_visible(const void *data, enum hwmon_sensor_types type,
struct device_attribute *attr, char *buf) u32 attr, int channel)
{ {
return sprintf(buf, "4\n"); if (type == hwmon_temp) {
switch (attr) {
case hwmon_temp_input:
case hwmon_temp_type:
return 0444;
default:
break;
}
}
return 0;
} }
static ssize_t ntc_temp_show(struct device *dev, static const u32 ntc_chip_config[] = {
struct device_attribute *attr, char *buf) HWMON_C_REGISTER_TZ,
{ 0
struct ntc_data *data = dev_get_drvdata(dev); };
int ohm;
ohm = ntc_thermistor_get_ohm(data); static const struct hwmon_channel_info ntc_chip = {
if (ohm < 0) .type = hwmon_chip,
return ohm; .config = ntc_chip_config,
};
return sprintf(buf, "%d\n", get_temp_mc(data, ohm)); static const u32 ntc_temp_config[] = {
} HWMON_T_INPUT, HWMON_T_TYPE,
0
};
static const struct hwmon_channel_info ntc_temp = {
.type = hwmon_temp,
.config = ntc_temp_config,
};
static SENSOR_DEVICE_ATTR_RO(temp1_type, ntc_type, 0); static const struct hwmon_channel_info *ntc_info[] = {
static SENSOR_DEVICE_ATTR_RO(temp1_input, ntc_temp, 0); &ntc_chip,
&ntc_temp,
NULL
};
static struct attribute *ntc_attrs[] = { static const struct hwmon_ops ntc_hwmon_ops = {
&sensor_dev_attr_temp1_type.dev_attr.attr, .is_visible = ntc_is_visible,
&sensor_dev_attr_temp1_input.dev_attr.attr, .read = ntc_read,
NULL,
}; };
ATTRIBUTE_GROUPS(ntc);
static const struct thermal_zone_of_device_ops ntc_of_thermal_ops = { static const struct hwmon_chip_info ntc_chip_info = {
.get_temp = ntc_read_temp, .ops = &ntc_hwmon_ops,
.info = ntc_info,
}; };
static int ntc_thermistor_probe(struct platform_device *pdev) static int ntc_thermistor_probe(struct platform_device *pdev)
{ {
struct thermal_zone_device *tz;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct of_device_id *of_id = const struct of_device_id *of_id =
of_match_device(of_match_ptr(ntc_match), dev); of_match_device(of_match_ptr(ntc_match), dev);
...@@ -697,8 +727,9 @@ static int ntc_thermistor_probe(struct platform_device *pdev) ...@@ -697,8 +727,9 @@ static int ntc_thermistor_probe(struct platform_device *pdev)
data->comp = ntc_type[pdev_id->driver_data].comp; data->comp = ntc_type[pdev_id->driver_data].comp;
data->n_comp = ntc_type[pdev_id->driver_data].n_comp; data->n_comp = ntc_type[pdev_id->driver_data].n_comp;
hwmon_dev = devm_hwmon_device_register_with_groups(dev, pdev_id->name, hwmon_dev = devm_hwmon_device_register_with_info(dev, pdev_id->name,
data, ntc_groups); data, &ntc_chip_info,
NULL);
if (IS_ERR(hwmon_dev)) { if (IS_ERR(hwmon_dev)) {
dev_err(dev, "unable to register as hwmon device.\n"); dev_err(dev, "unable to register as hwmon device.\n");
return PTR_ERR(hwmon_dev); return PTR_ERR(hwmon_dev);
...@@ -707,11 +738,6 @@ static int ntc_thermistor_probe(struct platform_device *pdev) ...@@ -707,11 +738,6 @@ static int ntc_thermistor_probe(struct platform_device *pdev)
dev_info(dev, "Thermistor type: %s successfully probed.\n", dev_info(dev, "Thermistor type: %s successfully probed.\n",
pdev_id->name); pdev_id->name);
tz = devm_thermal_zone_of_sensor_register(dev, 0, data,
&ntc_of_thermal_ops);
if (IS_ERR(tz))
dev_dbg(dev, "Failed to register to thermal fw.\n");
return 0; return 0;
} }
......
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0+
// Copyright IBM Corp 2019
#include <linux/device.h> #include <linux/device.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
......
/* SPDX-License-Identifier: GPL-2.0 */ /* SPDX-License-Identifier: GPL-2.0+ */
/* Copyright IBM Corp 2019 */
#ifndef OCC_COMMON_H #ifndef OCC_COMMON_H
#define OCC_COMMON_H #define OCC_COMMON_H
......
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0+
// Copyright IBM Corp 2019
#include <linux/device.h> #include <linux/device.h>
#include <linux/errno.h> #include <linux/errno.h>
......
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0+
// Copyright IBM Corp 2019
#include <linux/device.h> #include <linux/device.h>
#include <linux/errno.h> #include <linux/errno.h>
......
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0+
/* // Copyright IBM Corp 2019
* OCC hwmon driver sysfs interface
*
* Copyright (C) IBM Corporation 2018
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/device.h> #include <linux/device.h>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -80,7 +80,14 @@ static struct pmbus_driver_info tps53679_info = { ...@@ -80,7 +80,14 @@ static struct pmbus_driver_info tps53679_info = {
static int tps53679_probe(struct i2c_client *client, static int tps53679_probe(struct i2c_client *client,
const struct i2c_device_id *id) const struct i2c_device_id *id)
{ {
return pmbus_do_probe(client, id, &tps53679_info); struct pmbus_driver_info *info;
info = devm_kmemdup(&client->dev, &tps53679_info, sizeof(*info),
GFP_KERNEL);
if (!info)
return -ENOMEM;
return pmbus_do_probe(client, id, info);
} }
static const struct i2c_device_id tps53679_id[] = { static const struct i2c_device_id tps53679_id[] = {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -57,7 +57,7 @@ scmi_hwmon_is_visible(const void *drvdata, enum hwmon_sensor_types type, ...@@ -57,7 +57,7 @@ scmi_hwmon_is_visible(const void *drvdata, enum hwmon_sensor_types type,
sensor = *(scmi_sensors->info[type] + channel); sensor = *(scmi_sensors->info[type] + channel);
if (sensor) if (sensor)
return S_IRUGO; return 0444;
return 0; return 0;
} }
......
...@@ -226,11 +226,11 @@ static int scpi_hwmon_probe(struct platform_device *pdev) ...@@ -226,11 +226,11 @@ static int scpi_hwmon_probe(struct platform_device *pdev)
sensor->scale = scale[sensor->info.class]; sensor->scale = scale[sensor->info.class];
sensor->dev_attr_input.attr.mode = S_IRUGO; sensor->dev_attr_input.attr.mode = 0444;
sensor->dev_attr_input.show = scpi_show_sensor; sensor->dev_attr_input.show = scpi_show_sensor;
sensor->dev_attr_input.attr.name = sensor->input; sensor->dev_attr_input.attr.name = sensor->input;
sensor->dev_attr_label.attr.mode = S_IRUGO; sensor->dev_attr_label.attr.mode = 0444;
sensor->dev_attr_label.show = scpi_show_label; sensor->dev_attr_label.show = scpi_show_label;
sensor->dev_attr_label.attr.name = sensor->label; sensor->dev_attr_label.attr.name = sensor->label;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -141,10 +141,10 @@ static umode_t tmp102_is_visible(const void *data, enum hwmon_sensor_types type, ...@@ -141,10 +141,10 @@ static umode_t tmp102_is_visible(const void *data, enum hwmon_sensor_types type,
switch (attr) { switch (attr) {
case hwmon_temp_input: case hwmon_temp_input:
return S_IRUGO; return 0444;
case hwmon_temp_max_hyst: case hwmon_temp_max_hyst:
case hwmon_temp_max: case hwmon_temp_max:
return S_IRUGO | S_IWUSR; return 0644;
default: default:
return 0; return 0;
} }
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment