lm83.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * lm83.c - Part of lm_sensors, Linux kernel modules for hardware
  4. * monitoring
  5. * Copyright (C) 2003-2009 Jean Delvare <[email protected]>
  6. *
  7. * Heavily inspired from the lm78, lm75 and adm1021 drivers. The LM83 is
  8. * a sensor chip made by National Semiconductor. It reports up to four
  9. * temperatures (its own plus up to three external ones) with a 1 deg
  10. * resolution and a 3-4 deg accuracy. Complete datasheet can be obtained
  11. * from National's website at:
  12. * http://www.national.com/pf/LM/LM83.html
  13. * Since the datasheet omits to give the chip stepping code, I give it
  14. * here: 0x03 (at register 0xff).
  15. *
  16. * Also supports the LM82 temp sensor, which is basically a stripped down
  17. * model of the LM83. Datasheet is here:
  18. * http://www.national.com/pf/LM/LM82.html
  19. */
  20. #include <linux/bits.h>
  21. #include <linux/err.h>
  22. #include <linux/i2c.h>
  23. #include <linux/init.h>
  24. #include <linux/hwmon.h>
  25. #include <linux/module.h>
  26. #include <linux/regmap.h>
  27. #include <linux/slab.h>
  28. /*
  29. * Addresses to scan
  30. * Address is selected using 2 three-level pins, resulting in 9 possible
  31. * addresses.
  32. */
  33. static const unsigned short normal_i2c[] = {
  34. 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
  35. enum chips { lm83, lm82 };
  36. /*
  37. * The LM83 registers
  38. * Manufacturer ID is 0x01 for National Semiconductor.
  39. */
  40. #define LM83_REG_R_MAN_ID 0xFE
  41. #define LM83_REG_R_CHIP_ID 0xFF
  42. #define LM83_REG_R_CONFIG 0x03
  43. #define LM83_REG_W_CONFIG 0x09
  44. #define LM83_REG_R_STATUS1 0x02
  45. #define LM83_REG_R_STATUS2 0x35
  46. #define LM83_REG_R_LOCAL_TEMP 0x00
  47. #define LM83_REG_R_LOCAL_HIGH 0x05
  48. #define LM83_REG_W_LOCAL_HIGH 0x0B
  49. #define LM83_REG_R_REMOTE1_TEMP 0x30
  50. #define LM83_REG_R_REMOTE1_HIGH 0x38
  51. #define LM83_REG_W_REMOTE1_HIGH 0x50
  52. #define LM83_REG_R_REMOTE2_TEMP 0x01
  53. #define LM83_REG_R_REMOTE2_HIGH 0x07
  54. #define LM83_REG_W_REMOTE2_HIGH 0x0D
  55. #define LM83_REG_R_REMOTE3_TEMP 0x31
  56. #define LM83_REG_R_REMOTE3_HIGH 0x3A
  57. #define LM83_REG_W_REMOTE3_HIGH 0x52
  58. #define LM83_REG_R_TCRIT 0x42
  59. #define LM83_REG_W_TCRIT 0x5A
  60. static const u8 LM83_REG_TEMP[] = {
  61. LM83_REG_R_LOCAL_TEMP,
  62. LM83_REG_R_REMOTE1_TEMP,
  63. LM83_REG_R_REMOTE2_TEMP,
  64. LM83_REG_R_REMOTE3_TEMP,
  65. };
  66. static const u8 LM83_REG_MAX[] = {
  67. LM83_REG_R_LOCAL_HIGH,
  68. LM83_REG_R_REMOTE1_HIGH,
  69. LM83_REG_R_REMOTE2_HIGH,
  70. LM83_REG_R_REMOTE3_HIGH,
  71. };
  72. /* alarm and fault registers and bits, indexed by channel */
  73. static const u8 LM83_ALARM_REG[] = {
  74. LM83_REG_R_STATUS1, LM83_REG_R_STATUS2, LM83_REG_R_STATUS1, LM83_REG_R_STATUS2
  75. };
  76. static const u8 LM83_MAX_ALARM_BIT[] = {
  77. BIT(6), BIT(7), BIT(4), BIT(4)
  78. };
  79. static const u8 LM83_CRIT_ALARM_BIT[] = {
  80. BIT(0), BIT(0), BIT(1), BIT(1)
  81. };
  82. static const u8 LM83_FAULT_BIT[] = {
  83. 0, BIT(5), BIT(2), BIT(2)
  84. };
  85. /*
  86. * Client data (each client gets its own)
  87. */
  88. struct lm83_data {
  89. struct regmap *regmap;
  90. enum chips type;
  91. };
  92. /* regmap code */
  93. static int lm83_regmap_reg_read(void *context, unsigned int reg, unsigned int *val)
  94. {
  95. struct i2c_client *client = context;
  96. int ret;
  97. ret = i2c_smbus_read_byte_data(client, reg);
  98. if (ret < 0)
  99. return ret;
  100. *val = ret;
  101. return 0;
  102. }
  103. /*
  104. * The regmap write function maps read register addresses to write register
  105. * addresses. This is necessary for regmap register caching to work.
  106. * An alternative would be to clear the regmap cache whenever a register is
  107. * written, but that would be much more expensive.
  108. */
  109. static int lm83_regmap_reg_write(void *context, unsigned int reg, unsigned int val)
  110. {
  111. struct i2c_client *client = context;
  112. switch (reg) {
  113. case LM83_REG_R_CONFIG:
  114. case LM83_REG_R_LOCAL_HIGH:
  115. case LM83_REG_R_REMOTE2_HIGH:
  116. reg += 0x06;
  117. break;
  118. case LM83_REG_R_REMOTE1_HIGH:
  119. case LM83_REG_R_REMOTE3_HIGH:
  120. case LM83_REG_R_TCRIT:
  121. reg += 0x18;
  122. break;
  123. default:
  124. break;
  125. }
  126. return i2c_smbus_write_byte_data(client, reg, val);
  127. }
  128. static bool lm83_regmap_is_volatile(struct device *dev, unsigned int reg)
  129. {
  130. switch (reg) {
  131. case LM83_REG_R_LOCAL_TEMP:
  132. case LM83_REG_R_REMOTE1_TEMP:
  133. case LM83_REG_R_REMOTE2_TEMP:
  134. case LM83_REG_R_REMOTE3_TEMP:
  135. case LM83_REG_R_STATUS1:
  136. case LM83_REG_R_STATUS2:
  137. return true;
  138. default:
  139. return false;
  140. }
  141. }
  142. static const struct regmap_config lm83_regmap_config = {
  143. .reg_bits = 8,
  144. .val_bits = 8,
  145. .cache_type = REGCACHE_RBTREE,
  146. .volatile_reg = lm83_regmap_is_volatile,
  147. .reg_read = lm83_regmap_reg_read,
  148. .reg_write = lm83_regmap_reg_write,
  149. };
  150. /* hwmon API */
  151. static int lm83_temp_read(struct device *dev, u32 attr, int channel, long *val)
  152. {
  153. struct lm83_data *data = dev_get_drvdata(dev);
  154. unsigned int regval;
  155. int err;
  156. switch (attr) {
  157. case hwmon_temp_input:
  158. err = regmap_read(data->regmap, LM83_REG_TEMP[channel], &regval);
  159. if (err < 0)
  160. return err;
  161. *val = (s8)regval * 1000;
  162. break;
  163. case hwmon_temp_max:
  164. err = regmap_read(data->regmap, LM83_REG_MAX[channel], &regval);
  165. if (err < 0)
  166. return err;
  167. *val = (s8)regval * 1000;
  168. break;
  169. case hwmon_temp_crit:
  170. err = regmap_read(data->regmap, LM83_REG_R_TCRIT, &regval);
  171. if (err < 0)
  172. return err;
  173. *val = (s8)regval * 1000;
  174. break;
  175. case hwmon_temp_max_alarm:
  176. err = regmap_read(data->regmap, LM83_ALARM_REG[channel], &regval);
  177. if (err < 0)
  178. return err;
  179. *val = !!(regval & LM83_MAX_ALARM_BIT[channel]);
  180. break;
  181. case hwmon_temp_crit_alarm:
  182. err = regmap_read(data->regmap, LM83_ALARM_REG[channel], &regval);
  183. if (err < 0)
  184. return err;
  185. *val = !!(regval & LM83_CRIT_ALARM_BIT[channel]);
  186. break;
  187. case hwmon_temp_fault:
  188. err = regmap_read(data->regmap, LM83_ALARM_REG[channel], &regval);
  189. if (err < 0)
  190. return err;
  191. *val = !!(regval & LM83_FAULT_BIT[channel]);
  192. break;
  193. default:
  194. return -EOPNOTSUPP;
  195. }
  196. return 0;
  197. }
  198. static int lm83_temp_write(struct device *dev, u32 attr, int channel, long val)
  199. {
  200. struct lm83_data *data = dev_get_drvdata(dev);
  201. unsigned int regval;
  202. int err;
  203. regval = DIV_ROUND_CLOSEST(clamp_val(val, -128000, 127000), 1000);
  204. switch (attr) {
  205. case hwmon_temp_max:
  206. err = regmap_write(data->regmap, LM83_REG_MAX[channel], regval);
  207. if (err < 0)
  208. return err;
  209. break;
  210. case hwmon_temp_crit:
  211. err = regmap_write(data->regmap, LM83_REG_R_TCRIT, regval);
  212. if (err < 0)
  213. return err;
  214. break;
  215. default:
  216. return -EOPNOTSUPP;
  217. }
  218. return 0;
  219. }
  220. static int lm83_chip_read(struct device *dev, u32 attr, int channel, long *val)
  221. {
  222. struct lm83_data *data = dev_get_drvdata(dev);
  223. unsigned int regval;
  224. int err;
  225. switch (attr) {
  226. case hwmon_chip_alarms:
  227. err = regmap_read(data->regmap, LM83_REG_R_STATUS1, &regval);
  228. if (err < 0)
  229. return err;
  230. *val = regval;
  231. err = regmap_read(data->regmap, LM83_REG_R_STATUS2, &regval);
  232. if (err < 0)
  233. return err;
  234. *val |= regval << 8;
  235. return 0;
  236. default:
  237. return -EOPNOTSUPP;
  238. }
  239. return 0;
  240. }
  241. static int lm83_read(struct device *dev, enum hwmon_sensor_types type,
  242. u32 attr, int channel, long *val)
  243. {
  244. switch (type) {
  245. case hwmon_chip:
  246. return lm83_chip_read(dev, attr, channel, val);
  247. case hwmon_temp:
  248. return lm83_temp_read(dev, attr, channel, val);
  249. default:
  250. return -EOPNOTSUPP;
  251. }
  252. }
  253. static int lm83_write(struct device *dev, enum hwmon_sensor_types type,
  254. u32 attr, int channel, long val)
  255. {
  256. switch (type) {
  257. case hwmon_temp:
  258. return lm83_temp_write(dev, attr, channel, val);
  259. default:
  260. return -EOPNOTSUPP;
  261. }
  262. }
  263. static umode_t lm83_is_visible(const void *_data, enum hwmon_sensor_types type,
  264. u32 attr, int channel)
  265. {
  266. const struct lm83_data *data = _data;
  267. /*
  268. * LM82 only supports a single external channel, modeled as channel 2.
  269. */
  270. if (data->type == lm82 && (channel == 1 || channel == 3))
  271. return 0;
  272. switch (type) {
  273. case hwmon_chip:
  274. if (attr == hwmon_chip_alarms)
  275. return 0444;
  276. break;
  277. case hwmon_temp:
  278. switch (attr) {
  279. case hwmon_temp_input:
  280. case hwmon_temp_max_alarm:
  281. case hwmon_temp_crit_alarm:
  282. return 0444;
  283. case hwmon_temp_fault:
  284. if (channel)
  285. return 0444;
  286. break;
  287. case hwmon_temp_max:
  288. return 0644;
  289. case hwmon_temp_crit:
  290. if (channel == 2)
  291. return 0644;
  292. return 0444;
  293. default:
  294. break;
  295. }
  296. break;
  297. default:
  298. break;
  299. }
  300. return 0;
  301. }
  302. static const struct hwmon_channel_info *lm83_info[] = {
  303. HWMON_CHANNEL_INFO(chip, HWMON_C_ALARMS),
  304. HWMON_CHANNEL_INFO(temp,
  305. HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
  306. HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM,
  307. HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
  308. HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT,
  309. HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
  310. HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT,
  311. HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
  312. HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT
  313. ),
  314. NULL
  315. };
  316. static const struct hwmon_ops lm83_hwmon_ops = {
  317. .is_visible = lm83_is_visible,
  318. .read = lm83_read,
  319. .write = lm83_write,
  320. };
  321. static const struct hwmon_chip_info lm83_chip_info = {
  322. .ops = &lm83_hwmon_ops,
  323. .info = lm83_info,
  324. };
  325. /* Return 0 if detection is successful, -ENODEV otherwise */
  326. static int lm83_detect(struct i2c_client *client,
  327. struct i2c_board_info *info)
  328. {
  329. struct i2c_adapter *adapter = client->adapter;
  330. const char *name;
  331. u8 man_id, chip_id;
  332. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  333. return -ENODEV;
  334. /* Detection */
  335. if ((i2c_smbus_read_byte_data(client, LM83_REG_R_STATUS1) & 0xA8) ||
  336. (i2c_smbus_read_byte_data(client, LM83_REG_R_STATUS2) & 0x48) ||
  337. (i2c_smbus_read_byte_data(client, LM83_REG_R_CONFIG) & 0x41)) {
  338. dev_dbg(&adapter->dev, "LM83 detection failed at 0x%02x\n",
  339. client->addr);
  340. return -ENODEV;
  341. }
  342. /* Identification */
  343. man_id = i2c_smbus_read_byte_data(client, LM83_REG_R_MAN_ID);
  344. if (man_id != 0x01) /* National Semiconductor */
  345. return -ENODEV;
  346. chip_id = i2c_smbus_read_byte_data(client, LM83_REG_R_CHIP_ID);
  347. switch (chip_id) {
  348. case 0x03:
  349. /*
  350. * According to the LM82 datasheet dated March 2013, recent
  351. * revisions of LM82 have a die revision of 0x03. This was
  352. * confirmed with a real chip. Further details in this revision
  353. * of the LM82 datasheet strongly suggest that LM82 is just a
  354. * repackaged LM83. It is therefore impossible to distinguish
  355. * those chips from LM83, and they will be misdetected as LM83.
  356. */
  357. name = "lm83";
  358. break;
  359. case 0x01:
  360. name = "lm82";
  361. break;
  362. default:
  363. /* identification failed */
  364. dev_dbg(&adapter->dev,
  365. "Unsupported chip (man_id=0x%02X, chip_id=0x%02X)\n",
  366. man_id, chip_id);
  367. return -ENODEV;
  368. }
  369. strscpy(info->type, name, I2C_NAME_SIZE);
  370. return 0;
  371. }
  372. static const struct i2c_device_id lm83_id[] = {
  373. { "lm83", lm83 },
  374. { "lm82", lm82 },
  375. { }
  376. };
  377. MODULE_DEVICE_TABLE(i2c, lm83_id);
  378. static int lm83_probe(struct i2c_client *client)
  379. {
  380. struct device *dev = &client->dev;
  381. struct device *hwmon_dev;
  382. struct lm83_data *data;
  383. data = devm_kzalloc(dev, sizeof(struct lm83_data), GFP_KERNEL);
  384. if (!data)
  385. return -ENOMEM;
  386. data->regmap = devm_regmap_init(dev, NULL, client, &lm83_regmap_config);
  387. if (IS_ERR(data->regmap))
  388. return PTR_ERR(data->regmap);
  389. data->type = i2c_match_id(lm83_id, client)->driver_data;
  390. hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
  391. data, &lm83_chip_info, NULL);
  392. return PTR_ERR_OR_ZERO(hwmon_dev);
  393. }
  394. /*
  395. * Driver data (common to all clients)
  396. */
  397. static struct i2c_driver lm83_driver = {
  398. .class = I2C_CLASS_HWMON,
  399. .driver = {
  400. .name = "lm83",
  401. },
  402. .probe_new = lm83_probe,
  403. .id_table = lm83_id,
  404. .detect = lm83_detect,
  405. .address_list = normal_i2c,
  406. };
  407. module_i2c_driver(lm83_driver);
  408. MODULE_AUTHOR("Jean Delvare <[email protected]>");
  409. MODULE_DESCRIPTION("LM83 driver");
  410. MODULE_LICENSE("GPL");