• Home
  • Raw
  • Download

Lines Matching +full:cold +full:- +full:temp

1 // SPDX-License-Identifier: GPL-2.0-or-later
21 * Alarms 16-bit map of active alarms
26 * Test hardware: Intel SE440BX-2 desktop motherboard --Grant
28 * LM81 extended temp reading not implemented
36 #include <linux/hwmon-sysfs.h>
38 #include <linux/hwmon-vid.h>
74 return (val * mul - div / 2) / div; in SCALE()
93 /* temperature range: -40..125, 127 disables temperature alarm */
96 val = clamp_val(val, -40000, 127000); in TEMP_TO_REG()
104 return -1; in FAN_FROM_REG()
130 u8 fan_div[2]; /* rw fan1_div, read-only accessor */
131 u8 vrm; /* -- vrm set on startup, no accessor */
134 /* write new fan div, callers must hold data->update_lock */
140 err = regmap_read(data->regmap, ADM9240_REG_VID_FAN_DIV, &reg); in adm9240_write_fan_div()
146 err = regmap_write(data->regmap, ADM9240_REG_VID_FAN_DIV, reg); in adm9240_write_fan_div()
149 dev_dbg(data->dev, in adm9240_write_fan_div()
159 * - value is zero: disable fan speed low limit alarm
161 * - value is below fan speed measurement range: enable fan speed low
164 * - otherwise: select fan clock divider to suit fan speed low limit,
173 mutex_lock(&data->update_lock); in adm9240_fan_min_write()
177 new_div = data->fan_div[channel]; in adm9240_fan_min_write()
179 dev_dbg(data->dev, "fan%u low limit set disabled\n", channel + 1); in adm9240_fan_min_write()
184 dev_dbg(data->dev, "fan%u low limit set minimum %u\n", in adm9240_fan_min_write()
199 dev_dbg(data->dev, "fan%u low limit set fan speed %u\n", in adm9240_fan_min_write()
203 if (new_div != data->fan_div[channel]) { in adm9240_fan_min_write()
204 data->fan_div[channel] = new_div; in adm9240_fan_min_write()
207 err = regmap_write(data->regmap, ADM9240_REG_FAN_MIN(channel), fan_min); in adm9240_fan_min_write()
209 mutex_unlock(&data->update_lock); in adm9240_fan_min_write()
222 err = regmap_read(data->regmap, ADM9240_REG_VID_FAN_DIV, &regval); in cpu0_vid_show()
226 err = regmap_read(data->regmap, ADM9240_REG_VID4, &regval); in cpu0_vid_show()
230 return sprintf(buf, "%d\n", vid_from_reg(vid, data->vrm)); in cpu0_vid_show()
241 err = regmap_read(data->regmap, ADM9240_REG_ANALOG_OUT, &regval); in aout_output_show()
260 err = regmap_write(data->regmap, ADM9240_REG_ANALOG_OUT, AOUT_TO_REG(val)); in aout_output_store()
275 /* Return 0 if detection is successful, -ENODEV otherwise */
279 struct i2c_adapter *adapter = new_client->adapter; in adm9240_detect()
281 int address = new_client->addr; in adm9240_detect()
285 return -ENODEV; in adm9240_detect()
289 return -ENODEV; in adm9240_detect()
300 return -ENODEV; in adm9240_detect()
304 dev_info(&adapter->dev, "found %s revision %u\n", in adm9240_detect()
308 strscpy(info->type, name, I2C_NAME_SIZE); in adm9240_detect()
319 err = regmap_raw_read(data->regmap, ADM9240_REG_CONFIG, &conf, 1); in adm9240_init_client()
322 err = regmap_raw_read(data->regmap, ADM9240_REG_TEMP_CONF, &mode, 1); in adm9240_init_client()
327 data->vrm = vid_which_vrm(); /* need this to report vid as mV */ in adm9240_init_client()
329 dev_info(data->dev, "Using VRM: %d.%d\n", data->vrm / 10, in adm9240_init_client()
330 data->vrm % 10); in adm9240_init_client()
334 dev_info(data->dev, "status: config 0x%02x mode %u\n", in adm9240_init_client()
337 } else { /* cold start: open limits before starting chip */ in adm9240_init_client()
341 err = regmap_write(data->regmap, in adm9240_init_client()
345 err = regmap_write(data->regmap, in adm9240_init_client()
351 err = regmap_write(data->regmap, in adm9240_init_client()
357 err = regmap_write(data->regmap, in adm9240_init_client()
364 err = regmap_write(data->regmap, ADM9240_REG_CONFIG, 1); in adm9240_init_client()
368 dev_info(data->dev, in adm9240_init_client()
369 "cold start: config was 0x%02x mode %u\n", conf, mode); in adm9240_init_client()
373 err = regmap_read(data->regmap, ADM9240_REG_VID_FAN_DIV, &regval); in adm9240_init_client()
376 data->fan_div[0] = (regval >> 4) & 3; in adm9240_init_client()
377 data->fan_div[1] = (regval >> 6) & 3; in adm9240_init_client()
389 err = regmap_bulk_read(data->regmap, ADM9240_REG_INT(0), &regs, 2); in adm9240_chip_read()
395 return -EOPNOTSUPP; in adm9240_chip_read()
408 err = regmap_read(data->regmap, ADM9240_REG_INT(1), &regval); in adm9240_intrusion_read()
414 return -EOPNOTSUPP; in adm9240_intrusion_read()
427 return -EINVAL; in adm9240_intrusion_write()
428 err = regmap_write(data->regmap, ADM9240_REG_CHASSIS_CLEAR, 0x80); in adm9240_intrusion_write()
431 dev_dbg(data->dev, "chassis intrusion latch cleared\n"); in adm9240_intrusion_write()
434 return -EOPNOTSUPP; in adm9240_intrusion_write()
461 channel -= 4; in adm9240_in_read()
463 err = regmap_read(data->regmap, reg, &regval); in adm9240_in_read()
469 return -EOPNOTSUPP; in adm9240_in_read()
471 err = regmap_read(data->regmap, reg, &regval); in adm9240_in_read()
491 return -EOPNOTSUPP; in adm9240_in_write()
493 return regmap_write(data->regmap, reg, IN_TO_REG(val, channel)); in adm9240_in_write()
504 mutex_lock(&data->update_lock); in adm9240_fan_read()
505 err = regmap_read(data->regmap, ADM9240_REG_FAN(channel), &regval); in adm9240_fan_read()
507 mutex_unlock(&data->update_lock); in adm9240_fan_read()
510 if (regval == 255 && data->fan_div[channel] < 3) { in adm9240_fan_read()
513 ++data->fan_div[channel]); in adm9240_fan_read()
515 mutex_unlock(&data->update_lock); in adm9240_fan_read()
519 *val = FAN_FROM_REG(regval, BIT(data->fan_div[channel])); in adm9240_fan_read()
520 mutex_unlock(&data->update_lock); in adm9240_fan_read()
523 *val = BIT(data->fan_div[channel]); in adm9240_fan_read()
526 err = regmap_read(data->regmap, ADM9240_REG_FAN_MIN(channel), &regval); in adm9240_fan_read()
529 *val = FAN_FROM_REG(regval, BIT(data->fan_div[channel])); in adm9240_fan_read()
532 err = regmap_read(data->regmap, ADM9240_REG_INT(0), &regval); in adm9240_fan_read()
538 return -EOPNOTSUPP; in adm9240_fan_read()
555 return -EOPNOTSUPP; in adm9240_fan_write()
564 int err, temp; in adm9240_temp_read() local
568 err = regmap_read(data->regmap, ADM9240_REG_TEMP, &regval); in adm9240_temp_read()
571 temp = regval << 1; in adm9240_temp_read()
572 err = regmap_read(data->regmap, ADM9240_REG_TEMP_CONF, &regval); in adm9240_temp_read()
575 temp |= regval >> 7; in adm9240_temp_read()
576 *val = sign_extend32(temp, 8) * 500; in adm9240_temp_read()
579 err = regmap_read(data->regmap, ADM9240_REG_TEMP_MAX(0), &regval); in adm9240_temp_read()
585 err = regmap_read(data->regmap, ADM9240_REG_TEMP_MAX(1), &regval); in adm9240_temp_read()
591 err = regmap_read(data->regmap, ADM9240_REG_INT(0), &regval); in adm9240_temp_read()
597 return -EOPNOTSUPP; in adm9240_temp_read()
615 return -EOPNOTSUPP; in adm9240_temp_write()
617 return regmap_write(data->regmap, reg, TEMP_TO_REG(val)); in adm9240_temp_write()
635 return -EOPNOTSUPP; in adm9240_read()
652 return -EOPNOTSUPP; in adm9240_write()
737 HWMON_CHANNEL_INFO(temp,
784 struct device *dev = &client->dev; in adm9240_probe()
791 return -ENOMEM; in adm9240_probe()
793 data->dev = dev; in adm9240_probe()
794 mutex_init(&data->update_lock); in adm9240_probe()
795 data->regmap = devm_regmap_init_i2c(client, &adm9240_regmap_config); in adm9240_probe()
796 if (IS_ERR(data->regmap)) in adm9240_probe()
797 return PTR_ERR(data->regmap); in adm9240_probe()
803 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, data, in adm9240_probe()