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,7 +254,10 @@ static int ad7418_probe(struct i2c_client *client, ...@@ -220,7 +254,10 @@ static int ad7418_probe(struct i2c_client *client,
mutex_init(&data->lock); mutex_init(&data->lock);
data->client = client; data->client = client;
data->type = id->driver_data; if (dev->of_node)
data->type = (enum chips)of_device_get_match_data(dev);
else
data->type = id->driver_data;
switch (data->type) { switch (data->type) {
case ad7416: case ad7416:
...@@ -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,
...@@ -327,10 +322,10 @@ static int adm1029_detect(struct i2c_client *client, ...@@ -327,10 +322,10 @@ static int adm1029_detect(struct i2c_client *client,
temp_devices_installed = i2c_smbus_read_byte_data(client, temp_devices_installed = i2c_smbus_read_byte_data(client,
ADM1029_REG_TEMP_DEVICES_INSTALLED); ADM1029_REG_TEMP_DEVICES_INSTALLED);
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); show_beep_enable, set_beep_enable);
static DEVICE_ATTR(in3_max, S_IWUSR|S_IRUGO, show_in_max3, set_in_max3); static DEVICE_ATTR(beep_mask, 0644,
static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); show_beep_mask, set_beep_mask);
static DEVICE_ATTR(beep_enable, S_IWUSR|S_IRUGO,
show_beep_enable, set_beep_enable); static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
static DEVICE_ATTR(beep_mask, S_IWUSR|S_IRUGO,
show_beep_mask, set_beep_mask);
static ssize_t show_alarm(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,24 +466,24 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, ...@@ -468,24 +466,24 @@ 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;
struct gl518_data *data = gl518_update_device(dev); struct gl518_data *data = gl518_update_device(dev);
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);
struct i2c_client *client = data->client; struct i2c_client *client = data->client;
...@@ -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,9 +230,9 @@ static u16 ina209_reg_from_interval(u16 config, long interval) ...@@ -230,9 +230,9 @@ 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)
{ {
struct ina209_data *data = ina209_update_device(dev); struct ina209_data *data = ina209_update_device(dev);
long val; long val;
...@@ -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_RO(in0_input_lowest, ina209_value,
static SENSOR_DEVICE_ATTR(in0_input_lowest, S_IRUGO, ina209_show_value, NULL, INA209_SHUNT_VOLTAGE_NEG_PEAK);
INA209_SHUNT_VOLTAGE_NEG_PEAK); static SENSOR_DEVICE_ATTR_WO(in0_reset_history, ina209_history,
static SENSOR_DEVICE_ATTR(in0_reset_history, S_IWUSR, NULL, (1 << 0) | (1 << 1));
ina209_reset_history, (1 << 0) | (1 << 1)); static SENSOR_DEVICE_ATTR_RW(in0_max, ina209_value,
static SENSOR_DEVICE_ATTR(in0_max, S_IRUGO | S_IWUSR, ina209_show_value, INA209_SHUNT_VOLTAGE_POS_WARN);
ina209_set_value, INA209_SHUNT_VOLTAGE_POS_WARN); static SENSOR_DEVICE_ATTR_RW(in0_min, ina209_value,
static SENSOR_DEVICE_ATTR(in0_min, S_IRUGO | S_IWUSR, ina209_show_value, INA209_SHUNT_VOLTAGE_NEG_WARN);
ina209_set_value, INA209_SHUNT_VOLTAGE_NEG_WARN); static SENSOR_DEVICE_ATTR_RW(in0_crit_max, ina209_value,
static SENSOR_DEVICE_ATTR(in0_crit_max, S_IRUGO | S_IWUSR, ina209_show_value, INA209_CRITICAL_DAC_POS);
ina209_set_value, INA209_CRITICAL_DAC_POS); static SENSOR_DEVICE_ATTR_RW(in0_crit_min, ina209_value,
static SENSOR_DEVICE_ATTR(in0_crit_min, S_IRUGO | S_IWUSR, ina209_show_value, INA209_CRITICAL_DAC_NEG);
ina209_set_value, INA209_CRITICAL_DAC_NEG);
static SENSOR_DEVICE_ATTR_RO(in0_min_alarm, ina209_alarm, 1 << 11);
static SENSOR_DEVICE_ATTR(in0_min_alarm, S_IRUGO, ina209_show_alarm, NULL, static SENSOR_DEVICE_ATTR_RO(in0_max_alarm, ina209_alarm, 1 << 12);
1 << 11); static SENSOR_DEVICE_ATTR_RO(in0_crit_min_alarm, ina209_alarm, 1 << 6);
static SENSOR_DEVICE_ATTR(in0_max_alarm, S_IRUGO, ina209_show_alarm, NULL, static SENSOR_DEVICE_ATTR_RO(in0_crit_max_alarm, ina209_alarm, 1 << 7);
1 << 12);
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_RO(in1_input_lowest, ina209_value,
static SENSOR_DEVICE_ATTR(in1_input_lowest, S_IRUGO, ina209_show_value, NULL, INA209_BUS_VOLTAGE_MIN_PEAK);
INA209_BUS_VOLTAGE_MIN_PEAK); static SENSOR_DEVICE_ATTR_WO(in1_reset_history, ina209_history,
static SENSOR_DEVICE_ATTR(in1_reset_history, S_IWUSR, NULL, (1 << 2) | (1 << 3));
ina209_reset_history, (1 << 2) | (1 << 3)); static SENSOR_DEVICE_ATTR_RW(in1_max, ina209_value,
static SENSOR_DEVICE_ATTR(in1_max, S_IRUGO | S_IWUSR, ina209_show_value, INA209_BUS_VOLTAGE_OVER_WARN);
ina209_set_value, INA209_BUS_VOLTAGE_OVER_WARN); static SENSOR_DEVICE_ATTR_RW(in1_min, ina209_value,
static SENSOR_DEVICE_ATTR(in1_min, S_IRUGO | S_IWUSR, ina209_show_value, INA209_BUS_VOLTAGE_UNDER_WARN);
ina209_set_value, INA209_BUS_VOLTAGE_UNDER_WARN); static SENSOR_DEVICE_ATTR_RW(in1_crit_max, ina209_value,
static SENSOR_DEVICE_ATTR(in1_crit_max, S_IRUGO | S_IWUSR, ina209_show_value, INA209_BUS_VOLTAGE_OVER_LIMIT);
ina209_set_value, INA209_BUS_VOLTAGE_OVER_LIMIT); static SENSOR_DEVICE_ATTR_RW(in1_crit_min, ina209_value,
static SENSOR_DEVICE_ATTR(in1_crit_min, S_IRUGO | S_IWUSR, ina209_show_value, INA209_BUS_VOLTAGE_UNDER_LIMIT);
ina209_set_value, INA209_BUS_VOLTAGE_UNDER_LIMIT);
static SENSOR_DEVICE_ATTR_RO(in1_min_alarm, ina209_alarm, 1 << 14);
static SENSOR_DEVICE_ATTR(in1_min_alarm, S_IRUGO, ina209_show_alarm, NULL, static SENSOR_DEVICE_ATTR_RO(in1_max_alarm, ina209_alarm, 1 << 15);
1 << 14); static SENSOR_DEVICE_ATTR_RO(in1_crit_min_alarm, ina209_alarm, 1 << 9);
static SENSOR_DEVICE_ATTR(in1_max_alarm, S_IRUGO, ina209_show_alarm, NULL, static SENSOR_DEVICE_ATTR_RO(in1_crit_max_alarm, ina209_alarm, 1 << 10);
1 << 15);
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,9 +523,9 @@ static ssize_t ina3221_show_shunt(struct device *dev, ...@@ -510,9 +523,9 @@ 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)
{ {
struct sensor_device_attribute *sd_attr = to_sensor_dev_attr(attr); struct sensor_device_attribute *sd_attr = to_sensor_dev_attr(attr);
struct ina3221_data *ina = dev_get_drvdata(dev); struct ina3221_data *ina = dev_get_drvdata(dev);
...@@ -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); ALRM1_VIN_OUT_LIMIT | ALRM1_PRIMARY_FAULT);
static SENSOR_DEVICE_ATTR_2(in2_alarm, S_IRUGO, pem_show_bool, NULL,
PEM_DATA_ALARM_1,
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,8 +62,8 @@ struct lm73_data { ...@@ -62,8 +62,8 @@ 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);
struct lm73_data *data = dev_get_drvdata(dev); struct lm73_data *data = dev_get_drvdata(dev);
...@@ -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,8 +98,8 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *da, ...@@ -98,8 +98,8 @@ 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);
unsigned long convrate; unsigned long convrate;
...@@ -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,9 +187,9 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, ...@@ -186,9 +187,9 @@ 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)
{ {
struct lm77_data *data = dev_get_drvdata(dev); struct lm77_data *data = dev_get_drvdata(dev);
struct i2c_client *client = data->client; struct i2c_client *client = data->client;
...@@ -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,8 +281,8 @@ static ssize_t show_in(struct device *dev, struct device_attribute *attr, ...@@ -281,8 +281,8 @@ 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);
struct i2c_client *client = data->client; struct i2c_client *client = data->client;
...@@ -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,8 +315,8 @@ static ssize_t show_fan(struct device *dev, struct device_attribute *attr, ...@@ -315,8 +315,8 @@ 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;
struct lm80_data *data = lm80_update_device(dev); struct lm80_data *data = lm80_update_device(dev);
...@@ -325,8 +325,8 @@ static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr, ...@@ -325,8 +325,8 @@ 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;
int nr = to_sensor_dev_attr_2(attr)->nr; int nr = to_sensor_dev_attr_2(attr)->nr;
...@@ -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,9 +193,9 @@ static ssize_t temp1_min_hyst_show(struct device *dev, ...@@ -192,9 +193,9 @@ 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)
{ {
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);
...@@ -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,9 +197,9 @@ static ssize_t show_temp_max(struct device *dev, ...@@ -197,9 +197,9 @@ 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)
{ {
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);
...@@ -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,9 +229,9 @@ static ssize_t show_temp_crit(struct device *dev, ...@@ -229,9 +229,9 @@ 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)
{ {
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);
...@@ -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,9 +262,9 @@ static ssize_t show_temp_emergency(struct device *dev, ...@@ -262,9 +262,9 @@ 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)
{ {
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);
...@@ -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;
ohm = ntc_thermistor_get_ohm(data); switch (type) {
if (ohm < 0) case hwmon_temp:
return ohm; switch (attr) {
case hwmon_temp_input:
*temp = get_temp_mc(data, ohm); ohm = ntc_thermistor_get_ohm(data);
if (ohm < 0)
return 0; return ohm;
*val = get_temp_mc(data, ohm);
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 SENSOR_DEVICE_ATTR_RO(temp1_type, ntc_type, 0); static const struct hwmon_channel_info ntc_temp = {
static SENSOR_DEVICE_ATTR_RO(temp1_input, ntc_temp, 0); .type = hwmon_temp,
.config = ntc_temp_config,
};
static struct attribute *ntc_attrs[] = { static const struct hwmon_channel_info *ntc_info[] = {
&sensor_dev_attr_temp1_type.dev_attr.attr, &ntc_chip,
&sensor_dev_attr_temp1_input.dev_attr.attr, &ntc_temp,
NULL, NULL
}; };
ATTRIBUTE_GROUPS(ntc);
static const struct thermal_zone_of_device_ops ntc_of_thermal_ops = { static const struct hwmon_ops ntc_hwmon_ops = {
.get_temp = ntc_read_temp, .is_visible = ntc_is_visible,
.read = ntc_read,
};
static const struct hwmon_chip_info ntc_chip_info = {
.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.
...@@ -28,6 +28,11 @@ ...@@ -28,6 +28,11 @@
#include <linux/pmbus.h> #include <linux/pmbus.h>
#include "pmbus.h" #include "pmbus.h"
struct pmbus_device_info {
int pages;
u32 flags;
};
/* /*
* Find sensor groups and status registers on each page. * Find sensor groups and status registers on each page.
*/ */
...@@ -172,13 +177,14 @@ static int pmbus_probe(struct i2c_client *client, ...@@ -172,13 +177,14 @@ static int pmbus_probe(struct i2c_client *client,
struct pmbus_driver_info *info; struct pmbus_driver_info *info;
struct pmbus_platform_data *pdata = NULL; struct pmbus_platform_data *pdata = NULL;
struct device *dev = &client->dev; struct device *dev = &client->dev;
struct pmbus_device_info *device_info;
info = devm_kzalloc(dev, sizeof(struct pmbus_driver_info), GFP_KERNEL); info = devm_kzalloc(dev, sizeof(struct pmbus_driver_info), GFP_KERNEL);
if (!info) if (!info)
return -ENOMEM; return -ENOMEM;
if (!strcmp(id->name, "dps460") || !strcmp(id->name, "dps800") || device_info = (struct pmbus_device_info *)id->driver_data;
!strcmp(id->name, "sgd009")) { if (device_info->flags & PMBUS_SKIP_STATUS_CHECK) {
pdata = devm_kzalloc(dev, sizeof(struct pmbus_platform_data), pdata = devm_kzalloc(dev, sizeof(struct pmbus_platform_data),
GFP_KERNEL); GFP_KERNEL);
if (!pdata) if (!pdata)
...@@ -187,36 +193,50 @@ static int pmbus_probe(struct i2c_client *client, ...@@ -187,36 +193,50 @@ static int pmbus_probe(struct i2c_client *client,
pdata->flags = PMBUS_SKIP_STATUS_CHECK; pdata->flags = PMBUS_SKIP_STATUS_CHECK;
} }
info->pages = id->driver_data; info->pages = device_info->pages;
info->identify = pmbus_identify; info->identify = pmbus_identify;
dev->platform_data = pdata; dev->platform_data = pdata;
return pmbus_do_probe(client, id, info); return pmbus_do_probe(client, id, info);
} }
static const struct pmbus_device_info pmbus_info_one = {
.pages = 1,
.flags = 0
};
static const struct pmbus_device_info pmbus_info_zero = {
.pages = 0,
.flags = 0
};
static const struct pmbus_device_info pmbus_info_one_skip = {
.pages = 1,
.flags = PMBUS_SKIP_STATUS_CHECK
};
/* /*
* Use driver_data to set the number of pages supported by the chip. * Use driver_data to set the number of pages supported by the chip.
*/ */
static const struct i2c_device_id pmbus_id[] = { static const struct i2c_device_id pmbus_id[] = {
{"adp4000", 1}, {"adp4000", (kernel_ulong_t)&pmbus_info_one},
{"bmr453", 1}, {"bmr453", (kernel_ulong_t)&pmbus_info_one},
{"bmr454", 1}, {"bmr454", (kernel_ulong_t)&pmbus_info_one},
{"dps460", 1}, {"dps460", (kernel_ulong_t)&pmbus_info_one_skip},
{"dps800", 1}, {"dps650ab", (kernel_ulong_t)&pmbus_info_one_skip},
{"mdt040", 1}, {"dps800", (kernel_ulong_t)&pmbus_info_one_skip},
{"ncp4200", 1}, {"mdt040", (kernel_ulong_t)&pmbus_info_one},
{"ncp4208", 1}, {"ncp4200", (kernel_ulong_t)&pmbus_info_one},
{"pdt003", 1}, {"ncp4208", (kernel_ulong_t)&pmbus_info_one},
{"pdt006", 1}, {"pdt003", (kernel_ulong_t)&pmbus_info_one},
{"pdt012", 1}, {"pdt006", (kernel_ulong_t)&pmbus_info_one},
{"pmbus", 0}, {"pdt012", (kernel_ulong_t)&pmbus_info_one},
{"sgd009", 1}, {"pmbus", (kernel_ulong_t)&pmbus_info_zero},
{"tps40400", 1}, {"sgd009", (kernel_ulong_t)&pmbus_info_one_skip},
{"tps544b20", 1}, {"tps40400", (kernel_ulong_t)&pmbus_info_one},
{"tps544b25", 1}, {"tps544b20", (kernel_ulong_t)&pmbus_info_one},
{"tps544c20", 1}, {"tps544b25", (kernel_ulong_t)&pmbus_info_one},
{"tps544c25", 1}, {"tps544c20", (kernel_ulong_t)&pmbus_info_one},
{"udt020", 1}, {"tps544c25", (kernel_ulong_t)&pmbus_info_one},
{"udt020", (kernel_ulong_t)&pmbus_info_one},
{} {}
}; };
......
...@@ -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[] = {
......
...@@ -177,8 +177,9 @@ static int powr1220_read_adc(struct device *dev, int ch_num) ...@@ -177,8 +177,9 @@ static int powr1220_read_adc(struct device *dev, int ch_num)
} }
/* Shows the voltage associated with the specified ADC channel */ /* Shows the voltage associated with the specified ADC channel */
static ssize_t powr1220_show_voltage(struct device *dev, static ssize_t powr1220_voltage_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);
int adc_val = powr1220_read_adc(dev, attr->index); int adc_val = powr1220_read_adc(dev, attr->index);
...@@ -190,8 +191,8 @@ static ssize_t powr1220_show_voltage(struct device *dev, ...@@ -190,8 +191,8 @@ static ssize_t powr1220_show_voltage(struct device *dev,
} }
/* Shows the maximum setting associated with the specified ADC channel */ /* Shows the maximum setting associated with the specified ADC channel */
static ssize_t powr1220_show_max(struct device *dev, static ssize_t powr1220_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);
struct powr1220_data *data = dev_get_drvdata(dev); struct powr1220_data *data = dev_get_drvdata(dev);
...@@ -200,100 +201,59 @@ static ssize_t powr1220_show_max(struct device *dev, ...@@ -200,100 +201,59 @@ static ssize_t powr1220_show_max(struct device *dev,
} }
/* Shows the label associated with the specified ADC channel */ /* Shows the label associated with the specified ADC channel */
static ssize_t powr1220_show_label(struct device *dev, static ssize_t powr1220_label_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);
return sprintf(buf, "%s\n", input_names[attr->index]); return sprintf(buf, "%s\n", input_names[attr->index]);
} }
static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in0_input, powr1220_voltage, VMON1);
VMON1); static SENSOR_DEVICE_ATTR_RO(in1_input, powr1220_voltage, VMON2);
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in2_input, powr1220_voltage, VMON3);
VMON2); static SENSOR_DEVICE_ATTR_RO(in3_input, powr1220_voltage, VMON4);
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in4_input, powr1220_voltage, VMON5);
VMON3); static SENSOR_DEVICE_ATTR_RO(in5_input, powr1220_voltage, VMON6);
static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in6_input, powr1220_voltage, VMON7);
VMON4); static SENSOR_DEVICE_ATTR_RO(in7_input, powr1220_voltage, VMON8);
static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in8_input, powr1220_voltage, VMON9);
VMON5); static SENSOR_DEVICE_ATTR_RO(in9_input, powr1220_voltage, VMON10);
static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in10_input, powr1220_voltage, VMON11);
VMON6); static SENSOR_DEVICE_ATTR_RO(in11_input, powr1220_voltage, VMON12);
static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in12_input, powr1220_voltage, VCCA);
VMON7); static SENSOR_DEVICE_ATTR_RO(in13_input, powr1220_voltage, VCCINP);
static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, powr1220_show_voltage, NULL,
VMON8); static SENSOR_DEVICE_ATTR_RO(in0_highest, powr1220_max, VMON1);
static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in1_highest, powr1220_max, VMON2);
VMON9); static SENSOR_DEVICE_ATTR_RO(in2_highest, powr1220_max, VMON3);
static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in3_highest, powr1220_max, VMON4);
VMON10); static SENSOR_DEVICE_ATTR_RO(in4_highest, powr1220_max, VMON5);
static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in5_highest, powr1220_max, VMON6);
VMON11); static SENSOR_DEVICE_ATTR_RO(in6_highest, powr1220_max, VMON7);
static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in7_highest, powr1220_max, VMON8);
VMON12); static SENSOR_DEVICE_ATTR_RO(in8_highest, powr1220_max, VMON9);
static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in9_highest, powr1220_max, VMON10);
VCCA); static SENSOR_DEVICE_ATTR_RO(in10_highest, powr1220_max, VMON11);
static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, powr1220_show_voltage, NULL, static SENSOR_DEVICE_ATTR_RO(in11_highest, powr1220_max, VMON12);
VCCINP); static SENSOR_DEVICE_ATTR_RO(in12_highest, powr1220_max, VCCA);
static SENSOR_DEVICE_ATTR_RO(in13_highest, powr1220_max, VCCINP);
static SENSOR_DEVICE_ATTR(in0_highest, S_IRUGO, powr1220_show_max, NULL,
VMON1); static SENSOR_DEVICE_ATTR_RO(in0_label, powr1220_label, VMON1);
static SENSOR_DEVICE_ATTR(in1_highest, S_IRUGO, powr1220_show_max, NULL, static SENSOR_DEVICE_ATTR_RO(in1_label, powr1220_label, VMON2);
VMON2); static SENSOR_DEVICE_ATTR_RO(in2_label, powr1220_label, VMON3);
static SENSOR_DEVICE_ATTR(in2_highest, S_IRUGO, powr1220_show_max, NULL, static SENSOR_DEVICE_ATTR_RO(in3_label, powr1220_label, VMON4);
VMON3); static SENSOR_DEVICE_ATTR_RO(in4_label, powr1220_label, VMON5);
static SENSOR_DEVICE_ATTR(in3_highest, S_IRUGO, powr1220_show_max, NULL, static SENSOR_DEVICE_ATTR_RO(in5_label, powr1220_label, VMON6);
VMON4); static SENSOR_DEVICE_ATTR_RO(in6_label, powr1220_label, VMON7);
static SENSOR_DEVICE_ATTR(in4_highest, S_IRUGO, powr1220_show_max, NULL, static SENSOR_DEVICE_ATTR_RO(in7_label, powr1220_label, VMON8);
VMON5); static SENSOR_DEVICE_ATTR_RO(in8_label, powr1220_label, VMON9);
static SENSOR_DEVICE_ATTR(in5_highest, S_IRUGO, powr1220_show_max, NULL, static SENSOR_DEVICE_ATTR_RO(in9_label, powr1220_label, VMON10);
VMON6); static SENSOR_DEVICE_ATTR_RO(in10_label, powr1220_label, VMON11);
static SENSOR_DEVICE_ATTR(in6_highest, S_IRUGO, powr1220_show_max, NULL, static SENSOR_DEVICE_ATTR_RO(in11_label, powr1220_label, VMON12);
VMON7); static SENSOR_DEVICE_ATTR_RO(in12_label, powr1220_label, VCCA);
static SENSOR_DEVICE_ATTR(in7_highest, S_IRUGO, powr1220_show_max, NULL, static SENSOR_DEVICE_ATTR_RO(in13_label, powr1220_label, VCCINP);
VMON8);
static SENSOR_DEVICE_ATTR(in8_highest, S_IRUGO, powr1220_show_max, NULL,
VMON9);
static SENSOR_DEVICE_ATTR(in9_highest, S_IRUGO, powr1220_show_max, NULL,
VMON10);
static SENSOR_DEVICE_ATTR(in10_highest, S_IRUGO, powr1220_show_max, NULL,
VMON11);
static SENSOR_DEVICE_ATTR(in11_highest, S_IRUGO, powr1220_show_max, NULL,
VMON12);
static SENSOR_DEVICE_ATTR(in12_highest, S_IRUGO, powr1220_show_max, NULL,
VCCA);
static SENSOR_DEVICE_ATTR(in13_highest, S_IRUGO, powr1220_show_max, NULL,
VCCINP);
static SENSOR_DEVICE_ATTR(in0_label, S_IRUGO, powr1220_show_label, NULL,
VMON1);
static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, powr1220_show_label, NULL,
VMON2);
static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, powr1220_show_label, NULL,
VMON3);
static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, powr1220_show_label, NULL,
VMON4);
static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, powr1220_show_label, NULL,
VMON5);
static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, powr1220_show_label, NULL,
VMON6);
static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, powr1220_show_label, NULL,
VMON7);
static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, powr1220_show_label, NULL,
VMON8);
static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, powr1220_show_label, NULL,
VMON9);
static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, powr1220_show_label, NULL,
VMON10);
static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, powr1220_show_label, NULL,
VMON11);
static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, powr1220_show_label, NULL,
VMON12);
static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, powr1220_show_label, NULL,
VCCA);
static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, powr1220_show_label, NULL,
VCCINP);
static struct attribute *powr1220_attrs[] = { static struct attribute *powr1220_attrs[] = {
&sensor_dev_attr_in0_input.dev_attr.attr, &sensor_dev_attr_in0_input.dev_attr.attr,
......
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.
...@@ -135,9 +135,9 @@ static int sht21_update_measurements(struct device *dev) ...@@ -135,9 +135,9 @@ static int sht21_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 sht21_show_temperature(struct device *dev, static ssize_t sht21_temperature_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
{ {
struct sht21 *sht21 = dev_get_drvdata(dev); struct sht21 *sht21 = dev_get_drvdata(dev);
int ret; int ret;
...@@ -157,9 +157,8 @@ static ssize_t sht21_show_temperature(struct device *dev, ...@@ -157,9 +157,8 @@ static ssize_t sht21_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 sht21_show_humidity(struct device *dev, static ssize_t sht21_humidity_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr, char *buf)
char *buf)
{ {
struct sht21 *sht21 = dev_get_drvdata(dev); struct sht21 *sht21 = dev_get_drvdata(dev);
int ret; int ret;
...@@ -251,10 +250,8 @@ static ssize_t eic_show(struct device *dev, ...@@ -251,10 +250,8 @@ static ssize_t eic_show(struct device *dev,
} }
/* sysfs attributes */ /* sysfs attributes */
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, sht21_show_temperature, static SENSOR_DEVICE_ATTR_RO(temp1_input, sht21_temperature, 0);
NULL, 0); static SENSOR_DEVICE_ATTR_RO(humidity1_input, sht21_humidity, 0);
static SENSOR_DEVICE_ATTR(humidity1_input, S_IRUGO, sht21_show_humidity,
NULL, 0);
static DEVICE_ATTR_RO(eic); static DEVICE_ATTR_RO(eic);
static struct attribute *sht21_attrs[] = { static struct attribute *sht21_attrs[] = {
......
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.
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