Lines Matching +full:temp +full:- +full:alarm
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * lm80.c - From lm_sensors, Linux kernel modules for hardware
17 #include <linux/hwmon-sysfs.h>
73 #define FAN_FROM_REG(val, div) ((val) == 0 ? -1 : \
77 #define TEMP_TO_REG(temp) (DIV_ROUND_CLOSEST(clamp_val((temp), \ argument
78 -128000, 127000), 1000) << 8)
126 s16 temp[t_num_temp]; /* Register values, normalized to 16 bit */ member
145 * This sets fan-divs to 2, among others. This makes most other in lm80_init_client()
149 /* Set 11-bit temperature resolution */ in lm80_init_client()
159 struct i2c_client *client = data->client; in lm80_update_device()
165 mutex_lock(&data->update_lock); in lm80_update_device()
167 if (data->error) in lm80_update_device()
170 if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) { in lm80_update_device()
176 data->in[i_input][i] = rv; in lm80_update_device()
181 data->in[i_min][i] = rv; in lm80_update_device()
186 data->in[i_max][i] = rv; in lm80_update_device()
192 data->fan[f_input][0] = rv; in lm80_update_device()
197 data->fan[f_min][0] = rv; in lm80_update_device()
202 data->fan[f_input][1] = rv; in lm80_update_device()
207 data->fan[f_min][1] = rv; in lm80_update_device()
215 data->temp[t_input] = (prev_rv << 8) | (rv & 0xf0); in lm80_update_device()
221 data->temp[i] = rv << 8; in lm80_update_device()
227 data->fan_div[0] = (rv >> 2) & 0x03; in lm80_update_device()
228 data->fan_div[1] = (rv >> 4) & 0x03; in lm80_update_device()
236 data->alarms = prev_rv + (rv << 8); in lm80_update_device()
238 data->last_updated = jiffies; in lm80_update_device()
239 data->valid = true; in lm80_update_device()
240 data->error = 0; in lm80_update_device()
246 data->valid = false; in lm80_update_device()
247 data->error = 1; in lm80_update_device()
250 mutex_unlock(&data->update_lock); in lm80_update_device()
263 int index = to_sensor_dev_attr_2(attr)->index; in in_show()
264 int nr = to_sensor_dev_attr_2(attr)->nr; in in_show()
268 return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr][index])); in in_show()
275 struct i2c_client *client = data->client; in in_store()
276 int index = to_sensor_dev_attr_2(attr)->index; in in_store()
277 int nr = to_sensor_dev_attr_2(attr)->nr; in in_store()
286 mutex_lock(&data->update_lock); in in_store()
287 data->in[nr][index] = IN_TO_REG(val); in in_store()
288 lm80_write_value(client, reg, data->in[nr][index]); in in_store()
289 mutex_unlock(&data->update_lock); in in_store()
296 int index = to_sensor_dev_attr_2(attr)->index; in fan_show()
297 int nr = to_sensor_dev_attr_2(attr)->nr; in fan_show()
301 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr][index], in fan_show()
302 DIV_FROM_REG(data->fan_div[index]))); in fan_show()
308 int nr = to_sensor_dev_attr(attr)->index; in fan_div_show()
312 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr])); in fan_div_show()
318 int index = to_sensor_dev_attr_2(attr)->index; in fan_store()
319 int nr = to_sensor_dev_attr_2(attr)->nr; in fan_store()
321 struct i2c_client *client = data->client; in fan_store()
327 mutex_lock(&data->update_lock); in fan_store()
328 data->fan[nr][index] = FAN_TO_REG(val, in fan_store()
329 DIV_FROM_REG(data->fan_div[index])); in fan_store()
331 data->fan[nr][index]); in fan_store()
332 mutex_unlock(&data->update_lock); in fan_store()
346 int nr = to_sensor_dev_attr(attr)->index; in fan_div_store()
348 struct i2c_client *client = data->client; in fan_div_store()
358 mutex_lock(&data->update_lock); in fan_div_store()
359 min = FAN_FROM_REG(data->fan[f_min][nr], in fan_div_store()
360 DIV_FROM_REG(data->fan_div[nr])); in fan_div_store()
364 data->fan_div[nr] = 0; in fan_div_store()
367 data->fan_div[nr] = 1; in fan_div_store()
370 data->fan_div[nr] = 2; in fan_div_store()
373 data->fan_div[nr] = 3; in fan_div_store()
379 mutex_unlock(&data->update_lock); in fan_div_store()
380 return -EINVAL; in fan_div_store()
385 mutex_unlock(&data->update_lock); in fan_div_store()
389 | (data->fan_div[nr] << (2 * (nr + 1))); in fan_div_store()
393 data->fan[f_min][nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr])); in fan_div_store()
395 data->fan[f_min][nr]); in fan_div_store()
396 mutex_unlock(&data->update_lock); in fan_div_store()
408 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index])); in temp_show()
417 struct i2c_client *client = data->client; in temp_store()
418 int nr = attr->index; in temp_store()
424 mutex_lock(&data->update_lock); in temp_store()
425 data->temp[nr] = TEMP_TO_REG(val); in temp_store()
426 lm80_write_value(client, temp_regs[nr], data->temp[nr] >> 8); in temp_store()
427 mutex_unlock(&data->update_lock); in temp_store()
437 return sprintf(buf, "%u\n", data->alarms); in alarms_show()
443 int bitnr = to_sensor_dev_attr(attr)->index; in alarm_show()
447 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); in alarm_show()
477 static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, t_input);
478 static SENSOR_DEVICE_ATTR_RW(temp1_max, temp, t_hot_max);
479 static SENSOR_DEVICE_ATTR_RW(temp1_max_hyst, temp, t_hot_hyst);
480 static SENSOR_DEVICE_ATTR_RW(temp1_crit, temp, t_os_max);
481 static SENSOR_DEVICE_ATTR_RW(temp1_crit_hyst, temp, t_os_hyst);
483 static SENSOR_DEVICE_ATTR_RO(in0_alarm, alarm, 0);
484 static SENSOR_DEVICE_ATTR_RO(in1_alarm, alarm, 1);
485 static SENSOR_DEVICE_ATTR_RO(in2_alarm, alarm, 2);
486 static SENSOR_DEVICE_ATTR_RO(in3_alarm, alarm, 3);
487 static SENSOR_DEVICE_ATTR_RO(in4_alarm, alarm, 4);
488 static SENSOR_DEVICE_ATTR_RO(in5_alarm, alarm, 5);
489 static SENSOR_DEVICE_ATTR_RO(in6_alarm, alarm, 6);
490 static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm, 10);
491 static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm, 11);
492 static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 8);
493 static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 13);
548 /* Return 0 if detection is successful, -ENODEV otherwise */
551 struct i2c_adapter *adapter = client->adapter; in lm80_detect()
556 return -ENODEV; in lm80_detect()
561 return -ENODEV; in lm80_detect()
573 return -ENODEV; in lm80_detect()
577 /* Check 6-bit addressing */ in lm80_detect()
583 return -ENODEV; in lm80_detect()
589 strscpy(info->type, name, I2C_NAME_SIZE); in lm80_detect()
596 struct device *dev = &client->dev; in lm80_probe()
602 return -ENOMEM; in lm80_probe()
604 data->client = client; in lm80_probe()
605 mutex_init(&data->update_lock); in lm80_probe()
611 data->fan[f_min][0] = lm80_read_value(client, LM80_REG_FAN_MIN(1)); in lm80_probe()
612 data->fan[f_min][1] = lm80_read_value(client, LM80_REG_FAN_MIN(2)); in lm80_probe()
614 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, in lm80_probe()