Lines Matching +full:max31827 +full:- +full:max31829
1 // SPDX-License-Identifier: GPL-2.0
3 * max31827.c - Support for Maxim Low-Power Switch
55 enum chips { max31827 = 1, max31828, max31829 };
130 mutex_lock(&st->lock);
132 if (!st->enable) {
134 ret = regmap_write(st->regmap, reg, val);
136 ret = regmap_update_bits(st->regmap, reg, mask, val);
140 ret = regmap_read(st->regmap, MAX31827_CONFIGURATION_REG, &cfg);
147 ret = regmap_write(st->regmap, MAX31827_CONFIGURATION_REG, cfg);
152 ret = regmap_write(st->regmap, reg, val);
154 ret = regmap_update_bits(st->regmap, reg, mask, val);
159 ret = regmap_update_bits(st->regmap, MAX31827_CONFIGURATION_REG,
164 mutex_unlock(&st->lock);
214 ret = regmap_read(st->regmap,
226 mutex_lock(&st->lock);
228 if (!st->enable) {
235 ret = regmap_update_bits(st->regmap,
240 mutex_unlock(&st->lock);
243 msleep(max31827_conv_times[st->resolution]);
247 * For 12-bit resolution the conversion time is 140 ms,
251 if (max31827_resolutions[st->resolution] == 12 &&
252 st->update_interval == 125)
255 ret = regmap_read(st->regmap, MAX31827_T_REG, &uval);
257 mutex_unlock(&st->lock);
266 ret = regmap_read(st->regmap, MAX31827_TH_REG, &uval);
273 ret = regmap_read(st->regmap, MAX31827_TH_HYST_REG,
281 ret = regmap_read(st->regmap,
290 ret = regmap_read(st->regmap, MAX31827_TL_REG, &uval);
297 ret = regmap_read(st->regmap, MAX31827_TL_HYST_REG,
305 ret = regmap_read(st->regmap,
314 ret = -EOPNOTSUPP;
322 ret = regmap_read(st->regmap,
334 ret = -EOPNOTSUPP;
353 return -EINVAL;
355 mutex_lock(&st->lock);
362 st->enable = val;
364 ret = regmap_update_bits(st->regmap,
370 mutex_unlock(&st->lock);
387 return -EOPNOTSUPP;
393 if (!st->enable)
394 return -EINVAL;
407 res = ARRAY_SIZE(max31827_conversions) - 1;
412 ret = regmap_update_bits(st->regmap,
419 st->update_interval = val;
423 return regmap_update_bits(st->regmap, MAX31827_CONFIGURATION_REG,
427 return -EOPNOTSUPP;
430 return -EOPNOTSUPP;
442 ret = regmap_read(st->regmap, MAX31827_CONFIGURATION_REG, &val);
475 idx = ARRAY_SIZE(max31827_resolutions) - 1;
477 st->resolution = idx;
493 ATTRIBUTE_GROUPS(max31827);
496 { "max31827", max31827 },
498 { "max31829", max31829 },
515 st->enable = true;
520 prop = fwnode_property_read_bool(fwnode, "adi,comp-int");
523 prop = fwnode_property_read_bool(fwnode, "adi,timeout-enable");
528 if (fwnode_property_present(fwnode, "adi,alarm-pol")) {
529 ret = fwnode_property_read_u32(fwnode, "adi,alarm-pol", &data);
539 case max31827:
544 case max31829:
549 return -EOPNOTSUPP;
553 if (fwnode_property_present(fwnode, "adi,fault-q")) {
554 ret = fwnode_property_read_u32(fwnode, "adi,fault-q", &data);
565 dev_err(dev, "Invalid data in adi,fault-q\n");
566 return -EINVAL;
575 case max31827:
580 case max31829:
585 return -EOPNOTSUPP;
589 return regmap_write(st->regmap, MAX31827_CONFIGURATION_REG, res);
614 struct device *dev = &client->dev;
619 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA))
620 return -EOPNOTSUPP;
624 return -ENOMEM;
626 mutex_init(&st->lock);
628 st->regmap = devm_regmap_init_i2c(client, &max31827_regmap);
629 if (IS_ERR(st->regmap))
630 return dev_err_probe(dev, PTR_ERR(st->regmap),
641 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, st,
650 .compatible = "adi,max31827",
651 .data = (void *)max31827
658 .compatible = "adi,max31829",
659 .data = (void *)max31829
667 .name = "max31827",
676 MODULE_DESCRIPTION("Maxim MAX31827 low-power temperature switch driver");