tmp401.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /* tmp401.c
  3. *
  4. * Copyright (C) 2007,2008 Hans de Goede <hdegoede@redhat.com>
  5. * Preliminary tmp411 support by:
  6. * Gabriel Konat, Sander Leget, Wouter Willems
  7. * Copyright (C) 2009 Andre Prendel <andre.prendel@gmx.de>
  8. *
  9. * Cleanup and support for TMP431 and TMP432 by Guenter Roeck
  10. * Copyright (c) 2013 Guenter Roeck <linux@roeck-us.net>
  11. */
  12. /*
  13. * Driver for the Texas Instruments TMP401 SMBUS temperature sensor IC.
  14. *
  15. * Note this IC is in some aspect similar to the LM90, but it has quite a
  16. * few differences too, for example the local temp has a higher resolution
  17. * and thus has 16 bits registers for its value and limit instead of 8 bits.
  18. */
  19. #include <linux/bitops.h>
  20. #include <linux/err.h>
  21. #include <linux/i2c.h>
  22. #include <linux/hwmon.h>
  23. #include <linux/init.h>
  24. #include <linux/module.h>
  25. #include <linux/regmap.h>
  26. #include <linux/slab.h>
  27. /* Addresses to scan */
  28. static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4c, 0x4d,
  29. 0x4e, 0x4f, I2C_CLIENT_END };
  30. enum chips { tmp401, tmp411, tmp431, tmp432, tmp435 };
  31. /*
  32. * The TMP401 registers, note some registers have different addresses for
  33. * reading and writing
  34. */
  35. #define TMP401_STATUS 0x02
  36. #define TMP401_CONFIG 0x03
  37. #define TMP401_CONVERSION_RATE 0x04
  38. #define TMP4XX_N_FACTOR_REG 0x18
  39. #define TMP43X_BETA_RANGE 0x25
  40. #define TMP401_TEMP_CRIT_HYST 0x21
  41. #define TMP401_MANUFACTURER_ID_REG 0xFE
  42. #define TMP401_DEVICE_ID_REG 0xFF
  43. static const u8 TMP401_TEMP_MSB[7][3] = {
  44. { 0x00, 0x01, 0x23 }, /* temp */
  45. { 0x06, 0x08, 0x16 }, /* low limit */
  46. { 0x05, 0x07, 0x15 }, /* high limit */
  47. { 0x20, 0x19, 0x1a }, /* therm (crit) limit */
  48. { 0x30, 0x34, 0x00 }, /* lowest */
  49. { 0x32, 0xf6, 0x00 }, /* highest */
  50. };
  51. /* [0] = fault, [1] = low, [2] = high, [3] = therm/crit */
  52. static const u8 TMP432_STATUS_REG[] = {
  53. 0x1b, 0x36, 0x35, 0x37 };
  54. /* Flags */
  55. #define TMP401_CONFIG_RANGE BIT(2)
  56. #define TMP401_CONFIG_SHUTDOWN BIT(6)
  57. #define TMP401_STATUS_LOCAL_CRIT BIT(0)
  58. #define TMP401_STATUS_REMOTE_CRIT BIT(1)
  59. #define TMP401_STATUS_REMOTE_OPEN BIT(2)
  60. #define TMP401_STATUS_REMOTE_LOW BIT(3)
  61. #define TMP401_STATUS_REMOTE_HIGH BIT(4)
  62. #define TMP401_STATUS_LOCAL_LOW BIT(5)
  63. #define TMP401_STATUS_LOCAL_HIGH BIT(6)
  64. /* On TMP432, each status has its own register */
  65. #define TMP432_STATUS_LOCAL BIT(0)
  66. #define TMP432_STATUS_REMOTE1 BIT(1)
  67. #define TMP432_STATUS_REMOTE2 BIT(2)
  68. /* Manufacturer / Device ID's */
  69. #define TMP401_MANUFACTURER_ID 0x55
  70. #define TMP401_DEVICE_ID 0x11
  71. #define TMP411A_DEVICE_ID 0x12
  72. #define TMP411B_DEVICE_ID 0x13
  73. #define TMP411C_DEVICE_ID 0x10
  74. #define TMP431_DEVICE_ID 0x31
  75. #define TMP432_DEVICE_ID 0x32
  76. #define TMP435_DEVICE_ID 0x35
  77. /*
  78. * Driver data (common to all clients)
  79. */
  80. static const struct i2c_device_id tmp401_id[] = {
  81. { "tmp401", tmp401 },
  82. { "tmp411", tmp411 },
  83. { "tmp431", tmp431 },
  84. { "tmp432", tmp432 },
  85. { "tmp435", tmp435 },
  86. { }
  87. };
  88. MODULE_DEVICE_TABLE(i2c, tmp401_id);
  89. /*
  90. * Client data (each client gets its own)
  91. */
  92. struct tmp401_data {
  93. struct i2c_client *client;
  94. struct regmap *regmap;
  95. enum chips kind;
  96. bool extended_range;
  97. /* hwmon API configuration data */
  98. u32 chip_channel_config[4];
  99. struct hwmon_channel_info chip_info;
  100. u32 temp_channel_config[4];
  101. struct hwmon_channel_info temp_info;
  102. const struct hwmon_channel_info *info[3];
  103. struct hwmon_chip_info chip;
  104. };
  105. /* regmap */
  106. static bool tmp401_regmap_is_volatile(struct device *dev, unsigned int reg)
  107. {
  108. switch (reg) {
  109. case 0: /* local temp msb */
  110. case 1: /* remote temp msb */
  111. case 2: /* status */
  112. case 0x10: /* remote temp lsb */
  113. case 0x15: /* local temp lsb */
  114. case 0x1b: /* status (tmp432) */
  115. case 0x23 ... 0x24: /* remote temp 2 msb / lsb */
  116. case 0x30 ... 0x37: /* lowest/highest temp; status (tmp432) */
  117. return true;
  118. default:
  119. return false;
  120. }
  121. }
  122. static int tmp401_reg_read(void *context, unsigned int reg, unsigned int *val)
  123. {
  124. struct tmp401_data *data = context;
  125. struct i2c_client *client = data->client;
  126. int regval;
  127. switch (reg) {
  128. case 0: /* local temp msb */
  129. case 1: /* remote temp msb */
  130. case 5: /* local temp high limit msb */
  131. case 6: /* local temp low limit msb */
  132. case 7: /* remote temp ligh limit msb */
  133. case 8: /* remote temp low limit msb */
  134. case 0x15: /* remote temp 2 high limit msb */
  135. case 0x16: /* remote temp 2 low limit msb */
  136. case 0x23: /* remote temp 2 msb */
  137. case 0x30: /* local temp minimum, tmp411 */
  138. case 0x32: /* local temp maximum, tmp411 */
  139. case 0x34: /* remote temp minimum, tmp411 */
  140. case 0xf6: /* remote temp maximum, tmp411 (really 0x36) */
  141. /* work around register overlap between TMP411 and TMP432 */
  142. if (reg == 0xf6)
  143. reg = 0x36;
  144. regval = i2c_smbus_read_word_swapped(client, reg);
  145. if (regval < 0)
  146. return regval;
  147. *val = regval;
  148. break;
  149. case 0x19: /* critical limits, 8-bit registers */
  150. case 0x1a:
  151. case 0x20:
  152. regval = i2c_smbus_read_byte_data(client, reg);
  153. if (regval < 0)
  154. return regval;
  155. *val = regval << 8;
  156. break;
  157. case 0x1b:
  158. case 0x35 ... 0x37:
  159. if (data->kind == tmp432) {
  160. regval = i2c_smbus_read_byte_data(client, reg);
  161. if (regval < 0)
  162. return regval;
  163. *val = regval;
  164. break;
  165. }
  166. /* simulate TMP432 status registers */
  167. regval = i2c_smbus_read_byte_data(client, TMP401_STATUS);
  168. if (regval < 0)
  169. return regval;
  170. *val = 0;
  171. switch (reg) {
  172. case 0x1b: /* open / fault */
  173. if (regval & TMP401_STATUS_REMOTE_OPEN)
  174. *val |= BIT(1);
  175. break;
  176. case 0x35: /* high limit */
  177. if (regval & TMP401_STATUS_LOCAL_HIGH)
  178. *val |= BIT(0);
  179. if (regval & TMP401_STATUS_REMOTE_HIGH)
  180. *val |= BIT(1);
  181. break;
  182. case 0x36: /* low limit */
  183. if (regval & TMP401_STATUS_LOCAL_LOW)
  184. *val |= BIT(0);
  185. if (regval & TMP401_STATUS_REMOTE_LOW)
  186. *val |= BIT(1);
  187. break;
  188. case 0x37: /* therm / crit limit */
  189. if (regval & TMP401_STATUS_LOCAL_CRIT)
  190. *val |= BIT(0);
  191. if (regval & TMP401_STATUS_REMOTE_CRIT)
  192. *val |= BIT(1);
  193. break;
  194. }
  195. break;
  196. default:
  197. regval = i2c_smbus_read_byte_data(client, reg);
  198. if (regval < 0)
  199. return regval;
  200. *val = regval;
  201. break;
  202. }
  203. return 0;
  204. }
  205. static int tmp401_reg_write(void *context, unsigned int reg, unsigned int val)
  206. {
  207. struct tmp401_data *data = context;
  208. struct i2c_client *client = data->client;
  209. switch (reg) {
  210. case 0x05: /* local temp high limit msb */
  211. case 0x06: /* local temp low limit msb */
  212. case 0x07: /* remote temp ligh limit msb */
  213. case 0x08: /* remote temp low limit msb */
  214. reg += 6; /* adjust for register write address */
  215. fallthrough;
  216. case 0x15: /* remote temp 2 high limit msb */
  217. case 0x16: /* remote temp 2 low limit msb */
  218. return i2c_smbus_write_word_swapped(client, reg, val);
  219. case 0x19: /* critical limits, 8-bit registers */
  220. case 0x1a:
  221. case 0x20:
  222. return i2c_smbus_write_byte_data(client, reg, val >> 8);
  223. case TMP401_CONVERSION_RATE:
  224. case TMP401_CONFIG:
  225. reg += 6; /* adjust for register write address */
  226. fallthrough;
  227. default:
  228. return i2c_smbus_write_byte_data(client, reg, val);
  229. }
  230. }
  231. static const struct regmap_config tmp401_regmap_config = {
  232. .reg_bits = 8,
  233. .val_bits = 16,
  234. .cache_type = REGCACHE_MAPLE,
  235. .volatile_reg = tmp401_regmap_is_volatile,
  236. .reg_read = tmp401_reg_read,
  237. .reg_write = tmp401_reg_write,
  238. };
  239. /* temperature conversion */
  240. static int tmp401_register_to_temp(u16 reg, bool extended)
  241. {
  242. int temp = reg;
  243. if (extended)
  244. temp -= 64 * 256;
  245. return DIV_ROUND_CLOSEST(temp * 125, 32);
  246. }
  247. static u16 tmp401_temp_to_register(long temp, bool extended, int zbits)
  248. {
  249. if (extended) {
  250. temp = clamp_val(temp, -64000, 191000);
  251. temp += 64000;
  252. } else {
  253. temp = clamp_val(temp, 0, 127000);
  254. }
  255. return DIV_ROUND_CLOSEST(temp * (1 << (8 - zbits)), 1000) << zbits;
  256. }
  257. /* hwmon API functions */
  258. static const u8 tmp401_temp_reg_index[] = {
  259. [hwmon_temp_input] = 0,
  260. [hwmon_temp_min] = 1,
  261. [hwmon_temp_max] = 2,
  262. [hwmon_temp_crit] = 3,
  263. [hwmon_temp_lowest] = 4,
  264. [hwmon_temp_highest] = 5,
  265. };
  266. static const u8 tmp401_status_reg_index[] = {
  267. [hwmon_temp_fault] = 0,
  268. [hwmon_temp_min_alarm] = 1,
  269. [hwmon_temp_max_alarm] = 2,
  270. [hwmon_temp_crit_alarm] = 3,
  271. };
  272. static int tmp401_temp_read(struct device *dev, u32 attr, int channel, long *val)
  273. {
  274. struct tmp401_data *data = dev_get_drvdata(dev);
  275. struct regmap *regmap = data->regmap;
  276. unsigned int regs[2] = { TMP401_TEMP_MSB[3][channel], TMP401_TEMP_CRIT_HYST };
  277. unsigned int regval;
  278. u16 regvals[2];
  279. int reg, ret;
  280. switch (attr) {
  281. case hwmon_temp_input:
  282. case hwmon_temp_min:
  283. case hwmon_temp_max:
  284. case hwmon_temp_crit:
  285. case hwmon_temp_lowest:
  286. case hwmon_temp_highest:
  287. reg = TMP401_TEMP_MSB[tmp401_temp_reg_index[attr]][channel];
  288. ret = regmap_read(regmap, reg, &regval);
  289. if (ret < 0)
  290. return ret;
  291. *val = tmp401_register_to_temp(regval, data->extended_range);
  292. break;
  293. case hwmon_temp_crit_hyst:
  294. ret = regmap_multi_reg_read(regmap, regs, regvals, 2);
  295. if (ret < 0)
  296. return ret;
  297. *val = tmp401_register_to_temp(regvals[0], data->extended_range) -
  298. (regvals[1] * 1000);
  299. break;
  300. case hwmon_temp_fault:
  301. case hwmon_temp_min_alarm:
  302. case hwmon_temp_max_alarm:
  303. case hwmon_temp_crit_alarm:
  304. reg = TMP432_STATUS_REG[tmp401_status_reg_index[attr]];
  305. ret = regmap_read(regmap, reg, &regval);
  306. if (ret < 0)
  307. return ret;
  308. *val = !!(regval & BIT(channel));
  309. break;
  310. default:
  311. return -EOPNOTSUPP;
  312. }
  313. return 0;
  314. }
  315. static int tmp401_temp_write(struct device *dev, u32 attr, int channel,
  316. long val)
  317. {
  318. struct tmp401_data *data = dev_get_drvdata(dev);
  319. struct regmap *regmap = data->regmap;
  320. unsigned int regval;
  321. int reg, ret, temp;
  322. switch (attr) {
  323. case hwmon_temp_min:
  324. case hwmon_temp_max:
  325. case hwmon_temp_crit:
  326. reg = TMP401_TEMP_MSB[tmp401_temp_reg_index[attr]][channel];
  327. regval = tmp401_temp_to_register(val, data->extended_range,
  328. attr == hwmon_temp_crit ? 8 : 4);
  329. ret = regmap_write(regmap, reg, regval);
  330. break;
  331. case hwmon_temp_crit_hyst:
  332. if (data->extended_range)
  333. val = clamp_val(val, -64000, 191000);
  334. else
  335. val = clamp_val(val, 0, 127000);
  336. reg = TMP401_TEMP_MSB[3][channel];
  337. ret = regmap_read(regmap, reg, &regval);
  338. if (ret < 0)
  339. break;
  340. temp = tmp401_register_to_temp(regval, data->extended_range);
  341. val = clamp_val(val, temp - 255000, temp);
  342. regval = ((temp - val) + 500) / 1000;
  343. ret = regmap_write(regmap, TMP401_TEMP_CRIT_HYST, regval);
  344. break;
  345. default:
  346. ret = -EOPNOTSUPP;
  347. break;
  348. }
  349. return ret;
  350. }
  351. static int tmp401_chip_read(struct device *dev, u32 attr, int channel, long *val)
  352. {
  353. struct tmp401_data *data = dev_get_drvdata(dev);
  354. u32 regval;
  355. int ret;
  356. switch (attr) {
  357. case hwmon_chip_update_interval:
  358. ret = regmap_read(data->regmap, TMP401_CONVERSION_RATE, &regval);
  359. if (ret < 0)
  360. return ret;
  361. *val = (1 << (7 - min(regval, 7))) * 125;
  362. break;
  363. case hwmon_chip_temp_reset_history:
  364. *val = 0;
  365. break;
  366. default:
  367. return -EOPNOTSUPP;
  368. }
  369. return 0;
  370. }
  371. static int tmp401_set_convrate(struct regmap *regmap, long val)
  372. {
  373. int rate;
  374. /*
  375. * For valid rates, interval can be calculated as
  376. * interval = (1 << (7 - rate)) * 125;
  377. * Rounded rate is therefore
  378. * rate = 7 - __fls(interval * 4 / (125 * 3));
  379. * Use clamp_val() to avoid overflows, and to ensure valid input
  380. * for __fls.
  381. */
  382. val = clamp_val(val, 125, 16000);
  383. rate = 7 - __fls(val * 4 / (125 * 3));
  384. return regmap_write(regmap, TMP401_CONVERSION_RATE, rate);
  385. }
  386. static int tmp401_chip_write(struct device *dev, u32 attr, int channel, long val)
  387. {
  388. struct tmp401_data *data = dev_get_drvdata(dev);
  389. struct regmap *regmap = data->regmap;
  390. int err;
  391. switch (attr) {
  392. case hwmon_chip_update_interval:
  393. err = tmp401_set_convrate(regmap, val);
  394. break;
  395. case hwmon_chip_temp_reset_history:
  396. if (val != 1) {
  397. err = -EINVAL;
  398. break;
  399. }
  400. /*
  401. * Reset history by writing any value to any of the
  402. * minimum/maximum registers (0x30-0x37).
  403. */
  404. err = regmap_write(regmap, 0x30, 0);
  405. break;
  406. default:
  407. err = -EOPNOTSUPP;
  408. break;
  409. }
  410. return err;
  411. }
  412. static int tmp401_read(struct device *dev, enum hwmon_sensor_types type,
  413. u32 attr, int channel, long *val)
  414. {
  415. switch (type) {
  416. case hwmon_chip:
  417. return tmp401_chip_read(dev, attr, channel, val);
  418. case hwmon_temp:
  419. return tmp401_temp_read(dev, attr, channel, val);
  420. default:
  421. return -EOPNOTSUPP;
  422. }
  423. }
  424. static int tmp401_write(struct device *dev, enum hwmon_sensor_types type,
  425. u32 attr, int channel, long val)
  426. {
  427. switch (type) {
  428. case hwmon_chip:
  429. return tmp401_chip_write(dev, attr, channel, val);
  430. case hwmon_temp:
  431. return tmp401_temp_write(dev, attr, channel, val);
  432. default:
  433. return -EOPNOTSUPP;
  434. }
  435. }
  436. static umode_t tmp401_is_visible(const void *data, enum hwmon_sensor_types type,
  437. u32 attr, int channel)
  438. {
  439. switch (type) {
  440. case hwmon_chip:
  441. switch (attr) {
  442. case hwmon_chip_update_interval:
  443. case hwmon_chip_temp_reset_history:
  444. return 0644;
  445. default:
  446. break;
  447. }
  448. break;
  449. case hwmon_temp:
  450. switch (attr) {
  451. case hwmon_temp_input:
  452. case hwmon_temp_min_alarm:
  453. case hwmon_temp_max_alarm:
  454. case hwmon_temp_crit_alarm:
  455. case hwmon_temp_fault:
  456. case hwmon_temp_lowest:
  457. case hwmon_temp_highest:
  458. return 0444;
  459. case hwmon_temp_min:
  460. case hwmon_temp_max:
  461. case hwmon_temp_crit:
  462. case hwmon_temp_crit_hyst:
  463. return 0644;
  464. default:
  465. break;
  466. }
  467. break;
  468. default:
  469. break;
  470. }
  471. return 0;
  472. }
  473. static const struct hwmon_ops tmp401_ops = {
  474. .is_visible = tmp401_is_visible,
  475. .read = tmp401_read,
  476. .write = tmp401_write,
  477. };
  478. /* chip initialization, detect, probe */
  479. static int tmp401_init_client(struct tmp401_data *data)
  480. {
  481. struct regmap *regmap = data->regmap;
  482. u32 config, config_orig;
  483. int ret;
  484. u32 val = 0;
  485. s32 nfactor = 0;
  486. /* Set conversion rate to 2 Hz */
  487. ret = regmap_write(regmap, TMP401_CONVERSION_RATE, 5);
  488. if (ret < 0)
  489. return ret;
  490. /* Start conversions (disable shutdown if necessary) */
  491. ret = regmap_read(regmap, TMP401_CONFIG, &config);
  492. if (ret < 0)
  493. return ret;
  494. config_orig = config;
  495. config &= ~TMP401_CONFIG_SHUTDOWN;
  496. if (of_property_read_bool(data->client->dev.of_node, "ti,extended-range-enable")) {
  497. /* Enable measurement over extended temperature range */
  498. config |= TMP401_CONFIG_RANGE;
  499. }
  500. data->extended_range = !!(config & TMP401_CONFIG_RANGE);
  501. if (config != config_orig) {
  502. ret = regmap_write(regmap, TMP401_CONFIG, config);
  503. if (ret < 0)
  504. return ret;
  505. }
  506. ret = of_property_read_u32(data->client->dev.of_node, "ti,n-factor", &nfactor);
  507. if (!ret) {
  508. if (data->kind == tmp401) {
  509. dev_err(&data->client->dev, "ti,tmp401 does not support n-factor correction\n");
  510. return -EINVAL;
  511. }
  512. if (nfactor < -128 || nfactor > 127) {
  513. dev_err(&data->client->dev, "n-factor is invalid (%d)\n", nfactor);
  514. return -EINVAL;
  515. }
  516. ret = regmap_write(regmap, TMP4XX_N_FACTOR_REG, (unsigned int)nfactor);
  517. if (ret < 0)
  518. return ret;
  519. }
  520. ret = of_property_read_u32(data->client->dev.of_node, "ti,beta-compensation", &val);
  521. if (!ret) {
  522. if (data->kind == tmp401 || data->kind == tmp411) {
  523. dev_err(&data->client->dev, "ti,tmp401 or ti,tmp411 does not support beta compensation\n");
  524. return -EINVAL;
  525. }
  526. if (val > 15) {
  527. dev_err(&data->client->dev, "beta-compensation is invalid (%u)\n", val);
  528. return -EINVAL;
  529. }
  530. ret = regmap_write(regmap, TMP43X_BETA_RANGE, val);
  531. if (ret < 0)
  532. return ret;
  533. }
  534. return 0;
  535. }
  536. static int tmp401_detect(struct i2c_client *client,
  537. struct i2c_board_info *info)
  538. {
  539. enum chips kind;
  540. struct i2c_adapter *adapter = client->adapter;
  541. u8 reg;
  542. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  543. return -ENODEV;
  544. /* Detect and identify the chip */
  545. reg = i2c_smbus_read_byte_data(client, TMP401_MANUFACTURER_ID_REG);
  546. if (reg != TMP401_MANUFACTURER_ID)
  547. return -ENODEV;
  548. reg = i2c_smbus_read_byte_data(client, TMP401_DEVICE_ID_REG);
  549. switch (reg) {
  550. case TMP401_DEVICE_ID:
  551. if (client->addr != 0x4c)
  552. return -ENODEV;
  553. kind = tmp401;
  554. break;
  555. case TMP411A_DEVICE_ID:
  556. if (client->addr != 0x4c)
  557. return -ENODEV;
  558. kind = tmp411;
  559. break;
  560. case TMP411B_DEVICE_ID:
  561. if (client->addr != 0x4d)
  562. return -ENODEV;
  563. kind = tmp411;
  564. break;
  565. case TMP411C_DEVICE_ID:
  566. if (client->addr != 0x4e)
  567. return -ENODEV;
  568. kind = tmp411;
  569. break;
  570. case TMP431_DEVICE_ID:
  571. if (client->addr != 0x4c && client->addr != 0x4d)
  572. return -ENODEV;
  573. kind = tmp431;
  574. break;
  575. case TMP432_DEVICE_ID:
  576. if (client->addr != 0x4c && client->addr != 0x4d)
  577. return -ENODEV;
  578. kind = tmp432;
  579. break;
  580. case TMP435_DEVICE_ID:
  581. kind = tmp435;
  582. break;
  583. default:
  584. return -ENODEV;
  585. }
  586. reg = i2c_smbus_read_byte_data(client, TMP401_CONFIG);
  587. if (reg & 0x1b)
  588. return -ENODEV;
  589. reg = i2c_smbus_read_byte_data(client, TMP401_CONVERSION_RATE);
  590. /* Datasheet says: 0x1-0x6 */
  591. if (reg > 15)
  592. return -ENODEV;
  593. strscpy(info->type, tmp401_id[kind].name, I2C_NAME_SIZE);
  594. return 0;
  595. }
  596. static int tmp401_probe(struct i2c_client *client)
  597. {
  598. static const char * const names[] = {
  599. "TMP401", "TMP411", "TMP431", "TMP432", "TMP435"
  600. };
  601. struct device *dev = &client->dev;
  602. struct hwmon_channel_info *info;
  603. struct device *hwmon_dev;
  604. struct tmp401_data *data;
  605. int status;
  606. data = devm_kzalloc(dev, sizeof(struct tmp401_data), GFP_KERNEL);
  607. if (!data)
  608. return -ENOMEM;
  609. data->client = client;
  610. data->kind = (uintptr_t)i2c_get_match_data(client);
  611. data->regmap = devm_regmap_init(dev, NULL, data, &tmp401_regmap_config);
  612. if (IS_ERR(data->regmap))
  613. return PTR_ERR(data->regmap);
  614. /* initialize configuration data */
  615. data->chip.ops = &tmp401_ops;
  616. data->chip.info = data->info;
  617. data->info[0] = &data->chip_info;
  618. data->info[1] = &data->temp_info;
  619. info = &data->chip_info;
  620. info->type = hwmon_chip;
  621. info->config = data->chip_channel_config;
  622. data->chip_channel_config[0] = HWMON_C_UPDATE_INTERVAL;
  623. info = &data->temp_info;
  624. info->type = hwmon_temp;
  625. info->config = data->temp_channel_config;
  626. data->temp_channel_config[0] = HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX |
  627. HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_MIN_ALARM |
  628. HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM;
  629. data->temp_channel_config[1] = HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX |
  630. HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_MIN_ALARM |
  631. HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT;
  632. if (data->kind == tmp411) {
  633. data->temp_channel_config[0] |= HWMON_T_HIGHEST | HWMON_T_LOWEST;
  634. data->temp_channel_config[1] |= HWMON_T_HIGHEST | HWMON_T_LOWEST;
  635. data->chip_channel_config[0] |= HWMON_C_TEMP_RESET_HISTORY;
  636. }
  637. if (data->kind == tmp432) {
  638. data->temp_channel_config[2] = HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX |
  639. HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_MIN_ALARM |
  640. HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT;
  641. }
  642. /* Initialize the TMP401 chip */
  643. status = tmp401_init_client(data);
  644. if (status < 0)
  645. return status;
  646. hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, data,
  647. &data->chip, NULL);
  648. if (IS_ERR(hwmon_dev))
  649. return PTR_ERR(hwmon_dev);
  650. dev_info(dev, "Detected TI %s chip\n", names[data->kind]);
  651. return 0;
  652. }
  653. static const struct of_device_id __maybe_unused tmp4xx_of_match[] = {
  654. { .compatible = "ti,tmp401", },
  655. { .compatible = "ti,tmp411", },
  656. { .compatible = "ti,tmp431", },
  657. { .compatible = "ti,tmp432", },
  658. { .compatible = "ti,tmp435", },
  659. { },
  660. };
  661. MODULE_DEVICE_TABLE(of, tmp4xx_of_match);
  662. static struct i2c_driver tmp401_driver = {
  663. .class = I2C_CLASS_HWMON,
  664. .driver = {
  665. .name = "tmp401",
  666. .of_match_table = of_match_ptr(tmp4xx_of_match),
  667. },
  668. .probe = tmp401_probe,
  669. .id_table = tmp401_id,
  670. .detect = tmp401_detect,
  671. .address_list = normal_i2c,
  672. };
  673. module_i2c_driver(tmp401_driver);
  674. MODULE_AUTHOR("Hans de Goede <hdegoede@redhat.com>");
  675. MODULE_DESCRIPTION("Texas Instruments TMP401 temperature sensor driver");
  676. MODULE_LICENSE("GPL");