0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #include <linux/bitops.h>
0022 #include <linux/err.h>
0023 #include <linux/i2c.h>
0024 #include <linux/hwmon.h>
0025 #include <linux/init.h>
0026 #include <linux/module.h>
0027 #include <linux/mutex.h>
0028 #include <linux/regmap.h>
0029 #include <linux/slab.h>
0030
0031
0032 static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4c, 0x4d,
0033 0x4e, 0x4f, I2C_CLIENT_END };
0034
0035 enum chips { tmp401, tmp411, tmp431, tmp432, tmp435 };
0036
0037
0038
0039
0040
0041 #define TMP401_STATUS 0x02
0042 #define TMP401_CONFIG 0x03
0043 #define TMP401_CONVERSION_RATE 0x04
0044 #define TMP4XX_N_FACTOR_REG 0x18
0045 #define TMP43X_BETA_RANGE 0x25
0046 #define TMP401_TEMP_CRIT_HYST 0x21
0047 #define TMP401_MANUFACTURER_ID_REG 0xFE
0048 #define TMP401_DEVICE_ID_REG 0xFF
0049
0050 static const u8 TMP401_TEMP_MSB[7][3] = {
0051 { 0x00, 0x01, 0x23 },
0052 { 0x06, 0x08, 0x16 },
0053 { 0x05, 0x07, 0x15 },
0054 { 0x20, 0x19, 0x1a },
0055 { 0x30, 0x34, 0x00 },
0056 { 0x32, 0xf6, 0x00 },
0057 };
0058
0059
0060 static const u8 TMP432_STATUS_REG[] = {
0061 0x1b, 0x36, 0x35, 0x37 };
0062
0063
0064 #define TMP401_CONFIG_RANGE BIT(2)
0065 #define TMP401_CONFIG_SHUTDOWN BIT(6)
0066 #define TMP401_STATUS_LOCAL_CRIT BIT(0)
0067 #define TMP401_STATUS_REMOTE_CRIT BIT(1)
0068 #define TMP401_STATUS_REMOTE_OPEN BIT(2)
0069 #define TMP401_STATUS_REMOTE_LOW BIT(3)
0070 #define TMP401_STATUS_REMOTE_HIGH BIT(4)
0071 #define TMP401_STATUS_LOCAL_LOW BIT(5)
0072 #define TMP401_STATUS_LOCAL_HIGH BIT(6)
0073
0074
0075 #define TMP432_STATUS_LOCAL BIT(0)
0076 #define TMP432_STATUS_REMOTE1 BIT(1)
0077 #define TMP432_STATUS_REMOTE2 BIT(2)
0078
0079
0080 #define TMP401_MANUFACTURER_ID 0x55
0081 #define TMP401_DEVICE_ID 0x11
0082 #define TMP411A_DEVICE_ID 0x12
0083 #define TMP411B_DEVICE_ID 0x13
0084 #define TMP411C_DEVICE_ID 0x10
0085 #define TMP431_DEVICE_ID 0x31
0086 #define TMP432_DEVICE_ID 0x32
0087 #define TMP435_DEVICE_ID 0x35
0088
0089
0090
0091
0092
0093 static const struct i2c_device_id tmp401_id[] = {
0094 { "tmp401", tmp401 },
0095 { "tmp411", tmp411 },
0096 { "tmp431", tmp431 },
0097 { "tmp432", tmp432 },
0098 { "tmp435", tmp435 },
0099 { }
0100 };
0101 MODULE_DEVICE_TABLE(i2c, tmp401_id);
0102
0103
0104
0105
0106
0107 struct tmp401_data {
0108 struct i2c_client *client;
0109 struct regmap *regmap;
0110 struct mutex update_lock;
0111 enum chips kind;
0112
0113 bool extended_range;
0114
0115
0116 u32 chip_channel_config[4];
0117 struct hwmon_channel_info chip_info;
0118 u32 temp_channel_config[4];
0119 struct hwmon_channel_info temp_info;
0120 const struct hwmon_channel_info *info[3];
0121 struct hwmon_chip_info chip;
0122 };
0123
0124
0125
0126 static bool tmp401_regmap_is_volatile(struct device *dev, unsigned int reg)
0127 {
0128 switch (reg) {
0129 case 0:
0130 case 1:
0131 case 2:
0132 case 0x10:
0133 case 0x15:
0134 case 0x1b:
0135 case 0x23 ... 0x24:
0136 case 0x30 ... 0x37:
0137 return true;
0138 default:
0139 return false;
0140 }
0141 }
0142
0143 static int tmp401_reg_read(void *context, unsigned int reg, unsigned int *val)
0144 {
0145 struct tmp401_data *data = context;
0146 struct i2c_client *client = data->client;
0147 int regval;
0148
0149 switch (reg) {
0150 case 0:
0151 case 1:
0152 case 5:
0153 case 6:
0154 case 7:
0155 case 8:
0156 case 0x15:
0157 case 0x16:
0158 case 0x23:
0159 case 0x30:
0160 case 0x32:
0161 case 0x34:
0162 case 0xf6:
0163
0164 if (reg == 0xf6)
0165 reg = 0x36;
0166 regval = i2c_smbus_read_word_swapped(client, reg);
0167 if (regval < 0)
0168 return regval;
0169 *val = regval;
0170 break;
0171 case 0x19:
0172 case 0x1a:
0173 case 0x20:
0174 regval = i2c_smbus_read_byte_data(client, reg);
0175 if (regval < 0)
0176 return regval;
0177 *val = regval << 8;
0178 break;
0179 case 0x1b:
0180 case 0x35 ... 0x37:
0181 if (data->kind == tmp432) {
0182 regval = i2c_smbus_read_byte_data(client, reg);
0183 if (regval < 0)
0184 return regval;
0185 *val = regval;
0186 break;
0187 }
0188
0189 regval = i2c_smbus_read_byte_data(client, TMP401_STATUS);
0190 if (regval < 0)
0191 return regval;
0192 *val = 0;
0193 switch (reg) {
0194 case 0x1b:
0195 if (regval & TMP401_STATUS_REMOTE_OPEN)
0196 *val |= BIT(1);
0197 break;
0198 case 0x35:
0199 if (regval & TMP401_STATUS_LOCAL_HIGH)
0200 *val |= BIT(0);
0201 if (regval & TMP401_STATUS_REMOTE_HIGH)
0202 *val |= BIT(1);
0203 break;
0204 case 0x36:
0205 if (regval & TMP401_STATUS_LOCAL_LOW)
0206 *val |= BIT(0);
0207 if (regval & TMP401_STATUS_REMOTE_LOW)
0208 *val |= BIT(1);
0209 break;
0210 case 0x37:
0211 if (regval & TMP401_STATUS_LOCAL_CRIT)
0212 *val |= BIT(0);
0213 if (regval & TMP401_STATUS_REMOTE_CRIT)
0214 *val |= BIT(1);
0215 break;
0216 }
0217 break;
0218 default:
0219 regval = i2c_smbus_read_byte_data(client, reg);
0220 if (regval < 0)
0221 return regval;
0222 *val = regval;
0223 break;
0224 }
0225 return 0;
0226 }
0227
0228 static int tmp401_reg_write(void *context, unsigned int reg, unsigned int val)
0229 {
0230 struct tmp401_data *data = context;
0231 struct i2c_client *client = data->client;
0232
0233 switch (reg) {
0234 case 0x05:
0235 case 0x06:
0236 case 0x07:
0237 case 0x08:
0238 reg += 6;
0239 fallthrough;
0240 case 0x15:
0241 case 0x16:
0242 return i2c_smbus_write_word_swapped(client, reg, val);
0243 case 0x19:
0244 case 0x1a:
0245 case 0x20:
0246 return i2c_smbus_write_byte_data(client, reg, val >> 8);
0247 case TMP401_CONVERSION_RATE:
0248 case TMP401_CONFIG:
0249 reg += 6;
0250 fallthrough;
0251 default:
0252 return i2c_smbus_write_byte_data(client, reg, val);
0253 }
0254 }
0255
0256 static const struct regmap_config tmp401_regmap_config = {
0257 .reg_bits = 8,
0258 .val_bits = 16,
0259 .cache_type = REGCACHE_RBTREE,
0260 .volatile_reg = tmp401_regmap_is_volatile,
0261 .reg_read = tmp401_reg_read,
0262 .reg_write = tmp401_reg_write,
0263 };
0264
0265
0266
0267 static int tmp401_register_to_temp(u16 reg, bool extended)
0268 {
0269 int temp = reg;
0270
0271 if (extended)
0272 temp -= 64 * 256;
0273
0274 return DIV_ROUND_CLOSEST(temp * 125, 32);
0275 }
0276
0277 static u16 tmp401_temp_to_register(long temp, bool extended, int zbits)
0278 {
0279 if (extended) {
0280 temp = clamp_val(temp, -64000, 191000);
0281 temp += 64000;
0282 } else {
0283 temp = clamp_val(temp, 0, 127000);
0284 }
0285
0286 return DIV_ROUND_CLOSEST(temp * (1 << (8 - zbits)), 1000) << zbits;
0287 }
0288
0289
0290
0291 static const u8 tmp401_temp_reg_index[] = {
0292 [hwmon_temp_input] = 0,
0293 [hwmon_temp_min] = 1,
0294 [hwmon_temp_max] = 2,
0295 [hwmon_temp_crit] = 3,
0296 [hwmon_temp_lowest] = 4,
0297 [hwmon_temp_highest] = 5,
0298 };
0299
0300 static const u8 tmp401_status_reg_index[] = {
0301 [hwmon_temp_fault] = 0,
0302 [hwmon_temp_min_alarm] = 1,
0303 [hwmon_temp_max_alarm] = 2,
0304 [hwmon_temp_crit_alarm] = 3,
0305 };
0306
0307 static int tmp401_temp_read(struct device *dev, u32 attr, int channel, long *val)
0308 {
0309 struct tmp401_data *data = dev_get_drvdata(dev);
0310 struct regmap *regmap = data->regmap;
0311 unsigned int regval;
0312 int reg, ret;
0313
0314 switch (attr) {
0315 case hwmon_temp_input:
0316 case hwmon_temp_min:
0317 case hwmon_temp_max:
0318 case hwmon_temp_crit:
0319 case hwmon_temp_lowest:
0320 case hwmon_temp_highest:
0321 reg = TMP401_TEMP_MSB[tmp401_temp_reg_index[attr]][channel];
0322 ret = regmap_read(regmap, reg, ®val);
0323 if (ret < 0)
0324 return ret;
0325 *val = tmp401_register_to_temp(regval, data->extended_range);
0326 break;
0327 case hwmon_temp_crit_hyst:
0328 mutex_lock(&data->update_lock);
0329 reg = TMP401_TEMP_MSB[3][channel];
0330 ret = regmap_read(regmap, reg, ®val);
0331 if (ret < 0)
0332 goto unlock;
0333 *val = tmp401_register_to_temp(regval, data->extended_range);
0334 ret = regmap_read(regmap, TMP401_TEMP_CRIT_HYST, ®val);
0335 if (ret < 0)
0336 goto unlock;
0337 *val -= regval * 1000;
0338 unlock:
0339 mutex_unlock(&data->update_lock);
0340 if (ret < 0)
0341 return ret;
0342 break;
0343 case hwmon_temp_fault:
0344 case hwmon_temp_min_alarm:
0345 case hwmon_temp_max_alarm:
0346 case hwmon_temp_crit_alarm:
0347 reg = TMP432_STATUS_REG[tmp401_status_reg_index[attr]];
0348 ret = regmap_read(regmap, reg, ®val);
0349 if (ret < 0)
0350 return ret;
0351 *val = !!(regval & BIT(channel));
0352 break;
0353 default:
0354 return -EOPNOTSUPP;
0355 }
0356 return 0;
0357 }
0358
0359 static int tmp401_temp_write(struct device *dev, u32 attr, int channel,
0360 long val)
0361 {
0362 struct tmp401_data *data = dev_get_drvdata(dev);
0363 struct regmap *regmap = data->regmap;
0364 unsigned int regval;
0365 int reg, ret, temp;
0366
0367 mutex_lock(&data->update_lock);
0368 switch (attr) {
0369 case hwmon_temp_min:
0370 case hwmon_temp_max:
0371 case hwmon_temp_crit:
0372 reg = TMP401_TEMP_MSB[tmp401_temp_reg_index[attr]][channel];
0373 regval = tmp401_temp_to_register(val, data->extended_range,
0374 attr == hwmon_temp_crit ? 8 : 4);
0375 ret = regmap_write(regmap, reg, regval);
0376 break;
0377 case hwmon_temp_crit_hyst:
0378 if (data->extended_range)
0379 val = clamp_val(val, -64000, 191000);
0380 else
0381 val = clamp_val(val, 0, 127000);
0382
0383 reg = TMP401_TEMP_MSB[3][channel];
0384 ret = regmap_read(regmap, reg, ®val);
0385 if (ret < 0)
0386 break;
0387 temp = tmp401_register_to_temp(regval, data->extended_range);
0388 val = clamp_val(val, temp - 255000, temp);
0389 regval = ((temp - val) + 500) / 1000;
0390 ret = regmap_write(regmap, TMP401_TEMP_CRIT_HYST, regval);
0391 break;
0392 default:
0393 ret = -EOPNOTSUPP;
0394 break;
0395 }
0396 mutex_unlock(&data->update_lock);
0397 return ret;
0398 }
0399
0400 static int tmp401_chip_read(struct device *dev, u32 attr, int channel, long *val)
0401 {
0402 struct tmp401_data *data = dev_get_drvdata(dev);
0403 u32 regval;
0404 int ret;
0405
0406 switch (attr) {
0407 case hwmon_chip_update_interval:
0408 ret = regmap_read(data->regmap, TMP401_CONVERSION_RATE, ®val);
0409 if (ret < 0)
0410 return ret;
0411 *val = (1 << (7 - regval)) * 125;
0412 break;
0413 case hwmon_chip_temp_reset_history:
0414 *val = 0;
0415 break;
0416 default:
0417 return -EOPNOTSUPP;
0418 }
0419
0420 return 0;
0421 }
0422
0423 static int tmp401_set_convrate(struct regmap *regmap, long val)
0424 {
0425 int rate;
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435 val = clamp_val(val, 125, 16000);
0436 rate = 7 - __fls(val * 4 / (125 * 3));
0437 return regmap_write(regmap, TMP401_CONVERSION_RATE, rate);
0438 }
0439
0440 static int tmp401_chip_write(struct device *dev, u32 attr, int channel, long val)
0441 {
0442 struct tmp401_data *data = dev_get_drvdata(dev);
0443 struct regmap *regmap = data->regmap;
0444 int err;
0445
0446 mutex_lock(&data->update_lock);
0447 switch (attr) {
0448 case hwmon_chip_update_interval:
0449 err = tmp401_set_convrate(regmap, val);
0450 break;
0451 case hwmon_chip_temp_reset_history:
0452 if (val != 1) {
0453 err = -EINVAL;
0454 break;
0455 }
0456
0457
0458
0459
0460 err = regmap_write(regmap, 0x30, 0);
0461 break;
0462 default:
0463 err = -EOPNOTSUPP;
0464 break;
0465 }
0466 mutex_unlock(&data->update_lock);
0467
0468 return err;
0469 }
0470
0471 static int tmp401_read(struct device *dev, enum hwmon_sensor_types type,
0472 u32 attr, int channel, long *val)
0473 {
0474 switch (type) {
0475 case hwmon_chip:
0476 return tmp401_chip_read(dev, attr, channel, val);
0477 case hwmon_temp:
0478 return tmp401_temp_read(dev, attr, channel, val);
0479 default:
0480 return -EOPNOTSUPP;
0481 }
0482 }
0483
0484 static int tmp401_write(struct device *dev, enum hwmon_sensor_types type,
0485 u32 attr, int channel, long val)
0486 {
0487 switch (type) {
0488 case hwmon_chip:
0489 return tmp401_chip_write(dev, attr, channel, val);
0490 case hwmon_temp:
0491 return tmp401_temp_write(dev, attr, channel, val);
0492 default:
0493 return -EOPNOTSUPP;
0494 }
0495 }
0496
0497 static umode_t tmp401_is_visible(const void *data, enum hwmon_sensor_types type,
0498 u32 attr, int channel)
0499 {
0500 switch (type) {
0501 case hwmon_chip:
0502 switch (attr) {
0503 case hwmon_chip_update_interval:
0504 case hwmon_chip_temp_reset_history:
0505 return 0644;
0506 default:
0507 break;
0508 }
0509 break;
0510 case hwmon_temp:
0511 switch (attr) {
0512 case hwmon_temp_input:
0513 case hwmon_temp_min_alarm:
0514 case hwmon_temp_max_alarm:
0515 case hwmon_temp_crit_alarm:
0516 case hwmon_temp_fault:
0517 case hwmon_temp_lowest:
0518 case hwmon_temp_highest:
0519 return 0444;
0520 case hwmon_temp_min:
0521 case hwmon_temp_max:
0522 case hwmon_temp_crit:
0523 case hwmon_temp_crit_hyst:
0524 return 0644;
0525 default:
0526 break;
0527 }
0528 break;
0529 default:
0530 break;
0531 }
0532 return 0;
0533 }
0534
0535 static const struct hwmon_ops tmp401_ops = {
0536 .is_visible = tmp401_is_visible,
0537 .read = tmp401_read,
0538 .write = tmp401_write,
0539 };
0540
0541
0542
0543 static int tmp401_init_client(struct tmp401_data *data)
0544 {
0545 struct regmap *regmap = data->regmap;
0546 u32 config, config_orig;
0547 int ret;
0548 u32 val = 0;
0549 s32 nfactor = 0;
0550
0551
0552 ret = regmap_write(regmap, TMP401_CONVERSION_RATE, 5);
0553 if (ret < 0)
0554 return ret;
0555
0556
0557 ret = regmap_read(regmap, TMP401_CONFIG, &config);
0558 if (ret < 0)
0559 return ret;
0560
0561 config_orig = config;
0562 config &= ~TMP401_CONFIG_SHUTDOWN;
0563
0564 if (of_property_read_bool(data->client->dev.of_node, "ti,extended-range-enable")) {
0565
0566 config |= TMP401_CONFIG_RANGE;
0567 }
0568
0569 data->extended_range = !!(config & TMP401_CONFIG_RANGE);
0570
0571 if (config != config_orig) {
0572 ret = regmap_write(regmap, TMP401_CONFIG, config);
0573 if (ret < 0)
0574 return ret;
0575 }
0576
0577 ret = of_property_read_u32(data->client->dev.of_node, "ti,n-factor", &nfactor);
0578 if (!ret) {
0579 if (data->kind == tmp401) {
0580 dev_err(&data->client->dev, "ti,tmp401 does not support n-factor correction\n");
0581 return -EINVAL;
0582 }
0583 if (nfactor < -128 || nfactor > 127) {
0584 dev_err(&data->client->dev, "n-factor is invalid (%d)\n", nfactor);
0585 return -EINVAL;
0586 }
0587 ret = regmap_write(regmap, TMP4XX_N_FACTOR_REG, (unsigned int)nfactor);
0588 if (ret < 0)
0589 return ret;
0590 }
0591
0592 ret = of_property_read_u32(data->client->dev.of_node, "ti,beta-compensation", &val);
0593 if (!ret) {
0594 if (data->kind == tmp401 || data->kind == tmp411) {
0595 dev_err(&data->client->dev, "ti,tmp401 or ti,tmp411 does not support beta compensation\n");
0596 return -EINVAL;
0597 }
0598 if (val > 15) {
0599 dev_err(&data->client->dev, "beta-compensation is invalid (%u)\n", val);
0600 return -EINVAL;
0601 }
0602 ret = regmap_write(regmap, TMP43X_BETA_RANGE, val);
0603 if (ret < 0)
0604 return ret;
0605 }
0606
0607 return 0;
0608 }
0609
0610 static int tmp401_detect(struct i2c_client *client,
0611 struct i2c_board_info *info)
0612 {
0613 enum chips kind;
0614 struct i2c_adapter *adapter = client->adapter;
0615 u8 reg;
0616
0617 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
0618 return -ENODEV;
0619
0620
0621 reg = i2c_smbus_read_byte_data(client, TMP401_MANUFACTURER_ID_REG);
0622 if (reg != TMP401_MANUFACTURER_ID)
0623 return -ENODEV;
0624
0625 reg = i2c_smbus_read_byte_data(client, TMP401_DEVICE_ID_REG);
0626
0627 switch (reg) {
0628 case TMP401_DEVICE_ID:
0629 if (client->addr != 0x4c)
0630 return -ENODEV;
0631 kind = tmp401;
0632 break;
0633 case TMP411A_DEVICE_ID:
0634 if (client->addr != 0x4c)
0635 return -ENODEV;
0636 kind = tmp411;
0637 break;
0638 case TMP411B_DEVICE_ID:
0639 if (client->addr != 0x4d)
0640 return -ENODEV;
0641 kind = tmp411;
0642 break;
0643 case TMP411C_DEVICE_ID:
0644 if (client->addr != 0x4e)
0645 return -ENODEV;
0646 kind = tmp411;
0647 break;
0648 case TMP431_DEVICE_ID:
0649 if (client->addr != 0x4c && client->addr != 0x4d)
0650 return -ENODEV;
0651 kind = tmp431;
0652 break;
0653 case TMP432_DEVICE_ID:
0654 if (client->addr != 0x4c && client->addr != 0x4d)
0655 return -ENODEV;
0656 kind = tmp432;
0657 break;
0658 case TMP435_DEVICE_ID:
0659 kind = tmp435;
0660 break;
0661 default:
0662 return -ENODEV;
0663 }
0664
0665 reg = i2c_smbus_read_byte_data(client, TMP401_CONFIG);
0666 if (reg & 0x1b)
0667 return -ENODEV;
0668
0669 reg = i2c_smbus_read_byte_data(client, TMP401_CONVERSION_RATE);
0670
0671 if (reg > 15)
0672 return -ENODEV;
0673
0674 strlcpy(info->type, tmp401_id[kind].name, I2C_NAME_SIZE);
0675
0676 return 0;
0677 }
0678
0679 static int tmp401_probe(struct i2c_client *client)
0680 {
0681 static const char * const names[] = {
0682 "TMP401", "TMP411", "TMP431", "TMP432", "TMP435"
0683 };
0684 struct device *dev = &client->dev;
0685 struct hwmon_channel_info *info;
0686 struct device *hwmon_dev;
0687 struct tmp401_data *data;
0688 int status;
0689
0690 data = devm_kzalloc(dev, sizeof(struct tmp401_data), GFP_KERNEL);
0691 if (!data)
0692 return -ENOMEM;
0693
0694 data->client = client;
0695 mutex_init(&data->update_lock);
0696 data->kind = i2c_match_id(tmp401_id, client)->driver_data;
0697
0698 data->regmap = devm_regmap_init(dev, NULL, data, &tmp401_regmap_config);
0699 if (IS_ERR(data->regmap))
0700 return PTR_ERR(data->regmap);
0701
0702
0703 data->chip.ops = &tmp401_ops;
0704 data->chip.info = data->info;
0705
0706 data->info[0] = &data->chip_info;
0707 data->info[1] = &data->temp_info;
0708
0709 info = &data->chip_info;
0710 info->type = hwmon_chip;
0711 info->config = data->chip_channel_config;
0712
0713 data->chip_channel_config[0] = HWMON_C_UPDATE_INTERVAL;
0714
0715 info = &data->temp_info;
0716 info->type = hwmon_temp;
0717 info->config = data->temp_channel_config;
0718
0719 data->temp_channel_config[0] = HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX |
0720 HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_MIN_ALARM |
0721 HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM;
0722 data->temp_channel_config[1] = HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX |
0723 HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_MIN_ALARM |
0724 HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT;
0725
0726 if (data->kind == tmp411) {
0727 data->temp_channel_config[0] |= HWMON_T_HIGHEST | HWMON_T_LOWEST;
0728 data->temp_channel_config[1] |= HWMON_T_HIGHEST | HWMON_T_LOWEST;
0729 data->chip_channel_config[0] |= HWMON_C_TEMP_RESET_HISTORY;
0730 }
0731
0732 if (data->kind == tmp432) {
0733 data->temp_channel_config[2] = HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX |
0734 HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_MIN_ALARM |
0735 HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT;
0736 }
0737
0738
0739 status = tmp401_init_client(data);
0740 if (status < 0)
0741 return status;
0742
0743 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, data,
0744 &data->chip, NULL);
0745 if (IS_ERR(hwmon_dev))
0746 return PTR_ERR(hwmon_dev);
0747
0748 dev_info(dev, "Detected TI %s chip\n", names[data->kind]);
0749
0750 return 0;
0751 }
0752
0753 static const struct of_device_id __maybe_unused tmp4xx_of_match[] = {
0754 { .compatible = "ti,tmp401", },
0755 { .compatible = "ti,tmp411", },
0756 { .compatible = "ti,tmp431", },
0757 { .compatible = "ti,tmp432", },
0758 { .compatible = "ti,tmp435", },
0759 { },
0760 };
0761 MODULE_DEVICE_TABLE(of, tmp4xx_of_match);
0762
0763 static struct i2c_driver tmp401_driver = {
0764 .class = I2C_CLASS_HWMON,
0765 .driver = {
0766 .name = "tmp401",
0767 .of_match_table = of_match_ptr(tmp4xx_of_match),
0768 },
0769 .probe_new = tmp401_probe,
0770 .id_table = tmp401_id,
0771 .detect = tmp401_detect,
0772 .address_list = normal_i2c,
0773 };
0774
0775 module_i2c_driver(tmp401_driver);
0776
0777 MODULE_AUTHOR("Hans de Goede <hdegoede@redhat.com>");
0778 MODULE_DESCRIPTION("Texas Instruments TMP401 temperature sensor driver");
0779 MODULE_LICENSE("GPL");