ltc2947-core.c 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Analog Devices LTC2947 high precision power and energy monitor
  4. *
  5. * Copyright 2019 Analog Devices Inc.
  6. */
  7. #include <linux/bitfield.h>
  8. #include <linux/bits.h>
  9. #include <linux/clk.h>
  10. #include <linux/device.h>
  11. #include <linux/hwmon.h>
  12. #include <linux/hwmon-sysfs.h>
  13. #include <linux/module.h>
  14. #include <linux/of.h>
  15. #include <linux/regmap.h>
  16. #include "ltc2947.h"
  17. /* register's */
  18. #define LTC2947_REG_PAGE_CTRL 0xFF
  19. #define LTC2947_REG_CTRL 0xF0
  20. #define LTC2947_REG_TBCTL 0xE9
  21. #define LTC2947_CONT_MODE_MASK BIT(3)
  22. #define LTC2947_CONT_MODE(x) FIELD_PREP(LTC2947_CONT_MODE_MASK, x)
  23. #define LTC2947_PRE_MASK GENMASK(2, 0)
  24. #define LTC2947_PRE(x) FIELD_PREP(LTC2947_PRE_MASK, x)
  25. #define LTC2947_DIV_MASK GENMASK(7, 3)
  26. #define LTC2947_DIV(x) FIELD_PREP(LTC2947_DIV_MASK, x)
  27. #define LTC2947_SHUTDOWN_MASK BIT(0)
  28. #define LTC2947_REG_ACCUM_POL 0xE1
  29. #define LTC2947_ACCUM_POL_1_MASK GENMASK(1, 0)
  30. #define LTC2947_ACCUM_POL_1(x) FIELD_PREP(LTC2947_ACCUM_POL_1_MASK, x)
  31. #define LTC2947_ACCUM_POL_2_MASK GENMASK(3, 2)
  32. #define LTC2947_ACCUM_POL_2(x) FIELD_PREP(LTC2947_ACCUM_POL_2_MASK, x)
  33. #define LTC2947_REG_ACCUM_DEADBAND 0xE4
  34. #define LTC2947_REG_GPIOSTATCTL 0x67
  35. #define LTC2947_GPIO_EN_MASK BIT(0)
  36. #define LTC2947_GPIO_EN(x) FIELD_PREP(LTC2947_GPIO_EN_MASK, x)
  37. #define LTC2947_GPIO_FAN_EN_MASK BIT(6)
  38. #define LTC2947_GPIO_FAN_EN(x) FIELD_PREP(LTC2947_GPIO_FAN_EN_MASK, x)
  39. #define LTC2947_GPIO_FAN_POL_MASK BIT(7)
  40. #define LTC2947_GPIO_FAN_POL(x) FIELD_PREP(LTC2947_GPIO_FAN_POL_MASK, x)
  41. #define LTC2947_REG_GPIO_ACCUM 0xE3
  42. /* 200Khz */
  43. #define LTC2947_CLK_MIN 200000
  44. /* 25Mhz */
  45. #define LTC2947_CLK_MAX 25000000
  46. #define LTC2947_PAGE0 0
  47. #define LTC2947_PAGE1 1
  48. /* Voltage registers */
  49. #define LTC2947_REG_VOLTAGE 0xA0
  50. #define LTC2947_REG_VOLTAGE_MAX 0x50
  51. #define LTC2947_REG_VOLTAGE_MIN 0x52
  52. #define LTC2947_REG_VOLTAGE_THRE_H 0x90
  53. #define LTC2947_REG_VOLTAGE_THRE_L 0x92
  54. #define LTC2947_REG_DVCC 0xA4
  55. #define LTC2947_REG_DVCC_MAX 0x58
  56. #define LTC2947_REG_DVCC_MIN 0x5A
  57. #define LTC2947_REG_DVCC_THRE_H 0x98
  58. #define LTC2947_REG_DVCC_THRE_L 0x9A
  59. #define LTC2947_VOLTAGE_GEN_CHAN 0
  60. #define LTC2947_VOLTAGE_DVCC_CHAN 1
  61. /* in mV */
  62. #define VOLTAGE_MAX 15500
  63. #define VOLTAGE_MIN -300
  64. #define VDVCC_MAX 15000
  65. #define VDVCC_MIN 4750
  66. /* Current registers */
  67. #define LTC2947_REG_CURRENT 0x90
  68. #define LTC2947_REG_CURRENT_MAX 0x40
  69. #define LTC2947_REG_CURRENT_MIN 0x42
  70. #define LTC2947_REG_CURRENT_THRE_H 0x80
  71. #define LTC2947_REG_CURRENT_THRE_L 0x82
  72. /* in mA */
  73. #define CURRENT_MAX 30000
  74. #define CURRENT_MIN -30000
  75. /* Power registers */
  76. #define LTC2947_REG_POWER 0x93
  77. #define LTC2947_REG_POWER_MAX 0x44
  78. #define LTC2947_REG_POWER_MIN 0x46
  79. #define LTC2947_REG_POWER_THRE_H 0x84
  80. #define LTC2947_REG_POWER_THRE_L 0x86
  81. /* in uW */
  82. #define POWER_MAX 450000000
  83. #define POWER_MIN -450000000
  84. /* Temperature registers */
  85. #define LTC2947_REG_TEMP 0xA2
  86. #define LTC2947_REG_TEMP_MAX 0x54
  87. #define LTC2947_REG_TEMP_MIN 0x56
  88. #define LTC2947_REG_TEMP_THRE_H 0x94
  89. #define LTC2947_REG_TEMP_THRE_L 0x96
  90. #define LTC2947_REG_TEMP_FAN_THRE_H 0x9C
  91. #define LTC2947_REG_TEMP_FAN_THRE_L 0x9E
  92. #define LTC2947_TEMP_FAN_CHAN 1
  93. /* in millidegress Celsius */
  94. #define TEMP_MAX 85000
  95. #define TEMP_MIN -40000
  96. /* Energy registers */
  97. #define LTC2947_REG_ENERGY1 0x06
  98. #define LTC2947_REG_ENERGY2 0x16
  99. /* Status/Alarm/Overflow registers */
  100. #define LTC2947_REG_STATUS 0x80
  101. #define LTC2947_REG_STATVT 0x81
  102. #define LTC2947_REG_STATIP 0x82
  103. #define LTC2947_REG_STATVDVCC 0x87
  104. #define LTC2947_ALERTS_SIZE (LTC2947_REG_STATVDVCC - LTC2947_REG_STATUS)
  105. #define LTC2947_MAX_VOLTAGE_MASK BIT(0)
  106. #define LTC2947_MIN_VOLTAGE_MASK BIT(1)
  107. #define LTC2947_MAX_CURRENT_MASK BIT(0)
  108. #define LTC2947_MIN_CURRENT_MASK BIT(1)
  109. #define LTC2947_MAX_POWER_MASK BIT(2)
  110. #define LTC2947_MIN_POWER_MASK BIT(3)
  111. #define LTC2947_MAX_TEMP_MASK BIT(2)
  112. #define LTC2947_MIN_TEMP_MASK BIT(3)
  113. #define LTC2947_MAX_TEMP_FAN_MASK BIT(4)
  114. #define LTC2947_MIN_TEMP_FAN_MASK BIT(5)
  115. struct ltc2947_data {
  116. struct regmap *map;
  117. struct device *dev;
  118. /*
  119. * The mutex is needed because the device has 2 memory pages. When
  120. * reading/writing the correct page needs to be set so that, the
  121. * complete sequence select_page->read/write needs to be protected.
  122. */
  123. struct mutex lock;
  124. u32 lsb_energy;
  125. bool gpio_out;
  126. };
  127. static int __ltc2947_val_read16(const struct ltc2947_data *st, const u8 reg,
  128. u64 *val)
  129. {
  130. __be16 __val = 0;
  131. int ret;
  132. ret = regmap_bulk_read(st->map, reg, &__val, 2);
  133. if (ret)
  134. return ret;
  135. *val = be16_to_cpu(__val);
  136. return 0;
  137. }
  138. static int __ltc2947_val_read24(const struct ltc2947_data *st, const u8 reg,
  139. u64 *val)
  140. {
  141. __be32 __val = 0;
  142. int ret;
  143. ret = regmap_bulk_read(st->map, reg, &__val, 3);
  144. if (ret)
  145. return ret;
  146. *val = be32_to_cpu(__val) >> 8;
  147. return 0;
  148. }
  149. static int __ltc2947_val_read64(const struct ltc2947_data *st, const u8 reg,
  150. u64 *val)
  151. {
  152. __be64 __val = 0;
  153. int ret;
  154. ret = regmap_bulk_read(st->map, reg, &__val, 6);
  155. if (ret)
  156. return ret;
  157. *val = be64_to_cpu(__val) >> 16;
  158. return 0;
  159. }
  160. static int ltc2947_val_read(struct ltc2947_data *st, const u8 reg,
  161. const u8 page, const size_t size, s64 *val)
  162. {
  163. int ret;
  164. u64 __val = 0;
  165. mutex_lock(&st->lock);
  166. ret = regmap_write(st->map, LTC2947_REG_PAGE_CTRL, page);
  167. if (ret) {
  168. mutex_unlock(&st->lock);
  169. return ret;
  170. }
  171. dev_dbg(st->dev, "Read val, reg:%02X, p:%d sz:%zu\n", reg, page,
  172. size);
  173. switch (size) {
  174. case 2:
  175. ret = __ltc2947_val_read16(st, reg, &__val);
  176. break;
  177. case 3:
  178. ret = __ltc2947_val_read24(st, reg, &__val);
  179. break;
  180. case 6:
  181. ret = __ltc2947_val_read64(st, reg, &__val);
  182. break;
  183. default:
  184. ret = -EINVAL;
  185. break;
  186. }
  187. mutex_unlock(&st->lock);
  188. if (ret)
  189. return ret;
  190. *val = sign_extend64(__val, (8 * size) - 1);
  191. dev_dbg(st->dev, "Got s:%lld, u:%016llX\n", *val, __val);
  192. return 0;
  193. }
  194. static int __ltc2947_val_write64(const struct ltc2947_data *st, const u8 reg,
  195. const u64 val)
  196. {
  197. __be64 __val;
  198. __val = cpu_to_be64(val << 16);
  199. return regmap_bulk_write(st->map, reg, &__val, 6);
  200. }
  201. static int __ltc2947_val_write16(const struct ltc2947_data *st, const u8 reg,
  202. const u16 val)
  203. {
  204. __be16 __val;
  205. __val = cpu_to_be16(val);
  206. return regmap_bulk_write(st->map, reg, &__val, 2);
  207. }
  208. static int ltc2947_val_write(struct ltc2947_data *st, const u8 reg,
  209. const u8 page, const size_t size, const u64 val)
  210. {
  211. int ret;
  212. mutex_lock(&st->lock);
  213. /* set device on correct page */
  214. ret = regmap_write(st->map, LTC2947_REG_PAGE_CTRL, page);
  215. if (ret) {
  216. mutex_unlock(&st->lock);
  217. return ret;
  218. }
  219. dev_dbg(st->dev, "Write val, r:%02X, p:%d, sz:%zu, val:%016llX\n",
  220. reg, page, size, val);
  221. switch (size) {
  222. case 2:
  223. ret = __ltc2947_val_write16(st, reg, val);
  224. break;
  225. case 6:
  226. ret = __ltc2947_val_write64(st, reg, val);
  227. break;
  228. default:
  229. ret = -EINVAL;
  230. break;
  231. }
  232. mutex_unlock(&st->lock);
  233. return ret;
  234. }
  235. static int ltc2947_reset_history(struct ltc2947_data *st, const u8 reg_h,
  236. const u8 reg_l)
  237. {
  238. int ret;
  239. /*
  240. * let's reset the tracking register's. Tracking register's have all
  241. * 2 bytes size
  242. */
  243. ret = ltc2947_val_write(st, reg_h, LTC2947_PAGE0, 2, 0x8000U);
  244. if (ret)
  245. return ret;
  246. return ltc2947_val_write(st, reg_l, LTC2947_PAGE0, 2, 0x7FFFU);
  247. }
  248. static int ltc2947_alarm_read(struct ltc2947_data *st, const u8 reg,
  249. const u32 mask, long *val)
  250. {
  251. u8 offset = reg - LTC2947_REG_STATUS;
  252. /* +1 to include status reg */
  253. char alarms[LTC2947_ALERTS_SIZE + 1];
  254. int ret = 0;
  255. memset(alarms, 0, sizeof(alarms));
  256. mutex_lock(&st->lock);
  257. ret = regmap_write(st->map, LTC2947_REG_PAGE_CTRL, LTC2947_PAGE0);
  258. if (ret)
  259. goto unlock;
  260. dev_dbg(st->dev, "Read alarm, reg:%02X, mask:%02X\n", reg, mask);
  261. /*
  262. * As stated in the datasheet, when Threshold and Overflow registers
  263. * are used, the status and all alert registers must be read in one
  264. * multi-byte transaction.
  265. */
  266. ret = regmap_bulk_read(st->map, LTC2947_REG_STATUS, alarms,
  267. sizeof(alarms));
  268. if (ret)
  269. goto unlock;
  270. /* get the alarm */
  271. *val = !!(alarms[offset] & mask);
  272. unlock:
  273. mutex_unlock(&st->lock);
  274. return ret;
  275. }
  276. static ssize_t ltc2947_show_value(struct device *dev,
  277. struct device_attribute *da, char *buf)
  278. {
  279. struct ltc2947_data *st = dev_get_drvdata(dev);
  280. struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
  281. int ret;
  282. s64 val = 0;
  283. ret = ltc2947_val_read(st, attr->index, LTC2947_PAGE0, 6, &val);
  284. if (ret)
  285. return ret;
  286. /* value in microJoule. st->lsb_energy was multiplied by 10E9 */
  287. val = div_s64(val * st->lsb_energy, 1000);
  288. return sprintf(buf, "%lld\n", val);
  289. }
  290. static int ltc2947_read_temp(struct device *dev, const u32 attr, long *val,
  291. const int channel)
  292. {
  293. int ret;
  294. struct ltc2947_data *st = dev_get_drvdata(dev);
  295. s64 __val = 0;
  296. switch (attr) {
  297. case hwmon_temp_input:
  298. ret = ltc2947_val_read(st, LTC2947_REG_TEMP, LTC2947_PAGE0,
  299. 2, &__val);
  300. break;
  301. case hwmon_temp_highest:
  302. ret = ltc2947_val_read(st, LTC2947_REG_TEMP_MAX, LTC2947_PAGE0,
  303. 2, &__val);
  304. break;
  305. case hwmon_temp_lowest:
  306. ret = ltc2947_val_read(st, LTC2947_REG_TEMP_MIN, LTC2947_PAGE0,
  307. 2, &__val);
  308. break;
  309. case hwmon_temp_max_alarm:
  310. if (channel == LTC2947_TEMP_FAN_CHAN)
  311. return ltc2947_alarm_read(st, LTC2947_REG_STATVT,
  312. LTC2947_MAX_TEMP_FAN_MASK,
  313. val);
  314. return ltc2947_alarm_read(st, LTC2947_REG_STATVT,
  315. LTC2947_MAX_TEMP_MASK, val);
  316. case hwmon_temp_min_alarm:
  317. if (channel == LTC2947_TEMP_FAN_CHAN)
  318. return ltc2947_alarm_read(st, LTC2947_REG_STATVT,
  319. LTC2947_MIN_TEMP_FAN_MASK,
  320. val);
  321. return ltc2947_alarm_read(st, LTC2947_REG_STATVT,
  322. LTC2947_MIN_TEMP_MASK, val);
  323. case hwmon_temp_max:
  324. if (channel == LTC2947_TEMP_FAN_CHAN)
  325. ret = ltc2947_val_read(st, LTC2947_REG_TEMP_FAN_THRE_H,
  326. LTC2947_PAGE1, 2, &__val);
  327. else
  328. ret = ltc2947_val_read(st, LTC2947_REG_TEMP_THRE_H,
  329. LTC2947_PAGE1, 2, &__val);
  330. break;
  331. case hwmon_temp_min:
  332. if (channel == LTC2947_TEMP_FAN_CHAN)
  333. ret = ltc2947_val_read(st, LTC2947_REG_TEMP_FAN_THRE_L,
  334. LTC2947_PAGE1, 2, &__val);
  335. else
  336. ret = ltc2947_val_read(st, LTC2947_REG_TEMP_THRE_L,
  337. LTC2947_PAGE1, 2, &__val);
  338. break;
  339. default:
  340. return -ENOTSUPP;
  341. }
  342. if (ret)
  343. return ret;
  344. /* in milidegrees celcius, temp is given by: */
  345. *val = (__val * 204) + 5500;
  346. return 0;
  347. }
  348. static int ltc2947_read_power(struct device *dev, const u32 attr, long *val)
  349. {
  350. struct ltc2947_data *st = dev_get_drvdata(dev);
  351. int ret;
  352. u32 lsb = 200000; /* in uW */
  353. s64 __val = 0;
  354. switch (attr) {
  355. case hwmon_power_input:
  356. ret = ltc2947_val_read(st, LTC2947_REG_POWER, LTC2947_PAGE0,
  357. 3, &__val);
  358. lsb = 50000;
  359. break;
  360. case hwmon_power_input_highest:
  361. ret = ltc2947_val_read(st, LTC2947_REG_POWER_MAX, LTC2947_PAGE0,
  362. 2, &__val);
  363. break;
  364. case hwmon_power_input_lowest:
  365. ret = ltc2947_val_read(st, LTC2947_REG_POWER_MIN, LTC2947_PAGE0,
  366. 2, &__val);
  367. break;
  368. case hwmon_power_max_alarm:
  369. return ltc2947_alarm_read(st, LTC2947_REG_STATIP,
  370. LTC2947_MAX_POWER_MASK, val);
  371. case hwmon_power_min_alarm:
  372. return ltc2947_alarm_read(st, LTC2947_REG_STATIP,
  373. LTC2947_MIN_POWER_MASK, val);
  374. case hwmon_power_max:
  375. ret = ltc2947_val_read(st, LTC2947_REG_POWER_THRE_H,
  376. LTC2947_PAGE1, 2, &__val);
  377. break;
  378. case hwmon_power_min:
  379. ret = ltc2947_val_read(st, LTC2947_REG_POWER_THRE_L,
  380. LTC2947_PAGE1, 2, &__val);
  381. break;
  382. default:
  383. return -ENOTSUPP;
  384. }
  385. if (ret)
  386. return ret;
  387. *val = __val * lsb;
  388. return 0;
  389. }
  390. static int ltc2947_read_curr(struct device *dev, const u32 attr, long *val)
  391. {
  392. struct ltc2947_data *st = dev_get_drvdata(dev);
  393. int ret;
  394. u8 lsb = 12; /* in mA */
  395. s64 __val = 0;
  396. switch (attr) {
  397. case hwmon_curr_input:
  398. ret = ltc2947_val_read(st, LTC2947_REG_CURRENT,
  399. LTC2947_PAGE0, 3, &__val);
  400. lsb = 3;
  401. break;
  402. case hwmon_curr_highest:
  403. ret = ltc2947_val_read(st, LTC2947_REG_CURRENT_MAX,
  404. LTC2947_PAGE0, 2, &__val);
  405. break;
  406. case hwmon_curr_lowest:
  407. ret = ltc2947_val_read(st, LTC2947_REG_CURRENT_MIN,
  408. LTC2947_PAGE0, 2, &__val);
  409. break;
  410. case hwmon_curr_max_alarm:
  411. return ltc2947_alarm_read(st, LTC2947_REG_STATIP,
  412. LTC2947_MAX_CURRENT_MASK, val);
  413. case hwmon_curr_min_alarm:
  414. return ltc2947_alarm_read(st, LTC2947_REG_STATIP,
  415. LTC2947_MIN_CURRENT_MASK, val);
  416. case hwmon_curr_max:
  417. ret = ltc2947_val_read(st, LTC2947_REG_CURRENT_THRE_H,
  418. LTC2947_PAGE1, 2, &__val);
  419. break;
  420. case hwmon_curr_min:
  421. ret = ltc2947_val_read(st, LTC2947_REG_CURRENT_THRE_L,
  422. LTC2947_PAGE1, 2, &__val);
  423. break;
  424. default:
  425. return -ENOTSUPP;
  426. }
  427. if (ret)
  428. return ret;
  429. *val = __val * lsb;
  430. return 0;
  431. }
  432. static int ltc2947_read_in(struct device *dev, const u32 attr, long *val,
  433. const int channel)
  434. {
  435. struct ltc2947_data *st = dev_get_drvdata(dev);
  436. int ret;
  437. u8 lsb = 2; /* in mV */
  438. s64 __val = 0;
  439. if (channel < 0 || channel > LTC2947_VOLTAGE_DVCC_CHAN) {
  440. dev_err(st->dev, "Invalid chan%d for voltage", channel);
  441. return -EINVAL;
  442. }
  443. switch (attr) {
  444. case hwmon_in_input:
  445. if (channel == LTC2947_VOLTAGE_DVCC_CHAN) {
  446. ret = ltc2947_val_read(st, LTC2947_REG_DVCC,
  447. LTC2947_PAGE0, 2, &__val);
  448. lsb = 145;
  449. } else {
  450. ret = ltc2947_val_read(st, LTC2947_REG_VOLTAGE,
  451. LTC2947_PAGE0, 2, &__val);
  452. }
  453. break;
  454. case hwmon_in_highest:
  455. if (channel == LTC2947_VOLTAGE_DVCC_CHAN) {
  456. ret = ltc2947_val_read(st, LTC2947_REG_DVCC_MAX,
  457. LTC2947_PAGE0, 2, &__val);
  458. lsb = 145;
  459. } else {
  460. ret = ltc2947_val_read(st, LTC2947_REG_VOLTAGE_MAX,
  461. LTC2947_PAGE0, 2, &__val);
  462. }
  463. break;
  464. case hwmon_in_lowest:
  465. if (channel == LTC2947_VOLTAGE_DVCC_CHAN) {
  466. ret = ltc2947_val_read(st, LTC2947_REG_DVCC_MIN,
  467. LTC2947_PAGE0, 2, &__val);
  468. lsb = 145;
  469. } else {
  470. ret = ltc2947_val_read(st, LTC2947_REG_VOLTAGE_MIN,
  471. LTC2947_PAGE0, 2, &__val);
  472. }
  473. break;
  474. case hwmon_in_max_alarm:
  475. if (channel == LTC2947_VOLTAGE_DVCC_CHAN)
  476. return ltc2947_alarm_read(st, LTC2947_REG_STATVDVCC,
  477. LTC2947_MAX_VOLTAGE_MASK,
  478. val);
  479. return ltc2947_alarm_read(st, LTC2947_REG_STATVT,
  480. LTC2947_MAX_VOLTAGE_MASK, val);
  481. case hwmon_in_min_alarm:
  482. if (channel == LTC2947_VOLTAGE_DVCC_CHAN)
  483. return ltc2947_alarm_read(st, LTC2947_REG_STATVDVCC,
  484. LTC2947_MIN_VOLTAGE_MASK,
  485. val);
  486. return ltc2947_alarm_read(st, LTC2947_REG_STATVT,
  487. LTC2947_MIN_VOLTAGE_MASK, val);
  488. case hwmon_in_max:
  489. if (channel == LTC2947_VOLTAGE_DVCC_CHAN) {
  490. ret = ltc2947_val_read(st, LTC2947_REG_DVCC_THRE_H,
  491. LTC2947_PAGE1, 2, &__val);
  492. lsb = 145;
  493. } else {
  494. ret = ltc2947_val_read(st, LTC2947_REG_VOLTAGE_THRE_H,
  495. LTC2947_PAGE1, 2, &__val);
  496. }
  497. break;
  498. case hwmon_in_min:
  499. if (channel == LTC2947_VOLTAGE_DVCC_CHAN) {
  500. ret = ltc2947_val_read(st, LTC2947_REG_DVCC_THRE_L,
  501. LTC2947_PAGE1, 2, &__val);
  502. lsb = 145;
  503. } else {
  504. ret = ltc2947_val_read(st, LTC2947_REG_VOLTAGE_THRE_L,
  505. LTC2947_PAGE1, 2, &__val);
  506. }
  507. break;
  508. default:
  509. return -ENOTSUPP;
  510. }
  511. if (ret)
  512. return ret;
  513. *val = __val * lsb;
  514. return 0;
  515. }
  516. static int ltc2947_read(struct device *dev, enum hwmon_sensor_types type,
  517. u32 attr, int channel, long *val)
  518. {
  519. switch (type) {
  520. case hwmon_in:
  521. return ltc2947_read_in(dev, attr, val, channel);
  522. case hwmon_curr:
  523. return ltc2947_read_curr(dev, attr, val);
  524. case hwmon_power:
  525. return ltc2947_read_power(dev, attr, val);
  526. case hwmon_temp:
  527. return ltc2947_read_temp(dev, attr, val, channel);
  528. default:
  529. return -ENOTSUPP;
  530. }
  531. }
  532. static int ltc2947_write_temp(struct device *dev, const u32 attr,
  533. long val, const int channel)
  534. {
  535. struct ltc2947_data *st = dev_get_drvdata(dev);
  536. if (channel < 0 || channel > LTC2947_TEMP_FAN_CHAN) {
  537. dev_err(st->dev, "Invalid chan%d for temperature", channel);
  538. return -EINVAL;
  539. }
  540. switch (attr) {
  541. case hwmon_temp_reset_history:
  542. if (val != 1)
  543. return -EINVAL;
  544. return ltc2947_reset_history(st, LTC2947_REG_TEMP_MAX,
  545. LTC2947_REG_TEMP_MIN);
  546. case hwmon_temp_max:
  547. val = clamp_val(val, TEMP_MIN, TEMP_MAX);
  548. if (channel == LTC2947_TEMP_FAN_CHAN) {
  549. if (!st->gpio_out)
  550. return -ENOTSUPP;
  551. return ltc2947_val_write(st,
  552. LTC2947_REG_TEMP_FAN_THRE_H,
  553. LTC2947_PAGE1, 2,
  554. DIV_ROUND_CLOSEST(val - 550, 204));
  555. }
  556. return ltc2947_val_write(st, LTC2947_REG_TEMP_THRE_H,
  557. LTC2947_PAGE1, 2,
  558. DIV_ROUND_CLOSEST(val - 550, 204));
  559. case hwmon_temp_min:
  560. val = clamp_val(val, TEMP_MIN, TEMP_MAX);
  561. if (channel == LTC2947_TEMP_FAN_CHAN) {
  562. if (!st->gpio_out)
  563. return -ENOTSUPP;
  564. return ltc2947_val_write(st,
  565. LTC2947_REG_TEMP_FAN_THRE_L,
  566. LTC2947_PAGE1, 2,
  567. DIV_ROUND_CLOSEST(val - 550, 204));
  568. }
  569. return ltc2947_val_write(st, LTC2947_REG_TEMP_THRE_L,
  570. LTC2947_PAGE1, 2,
  571. DIV_ROUND_CLOSEST(val - 550, 204));
  572. default:
  573. return -ENOTSUPP;
  574. }
  575. }
  576. static int ltc2947_write_power(struct device *dev, const u32 attr,
  577. long val)
  578. {
  579. struct ltc2947_data *st = dev_get_drvdata(dev);
  580. switch (attr) {
  581. case hwmon_power_reset_history:
  582. if (val != 1)
  583. return -EINVAL;
  584. return ltc2947_reset_history(st, LTC2947_REG_POWER_MAX,
  585. LTC2947_REG_POWER_MIN);
  586. case hwmon_power_max:
  587. val = clamp_val(val, POWER_MIN, POWER_MAX);
  588. return ltc2947_val_write(st, LTC2947_REG_POWER_THRE_H,
  589. LTC2947_PAGE1, 2,
  590. DIV_ROUND_CLOSEST(val, 200000));
  591. case hwmon_power_min:
  592. val = clamp_val(val, POWER_MIN, POWER_MAX);
  593. return ltc2947_val_write(st, LTC2947_REG_POWER_THRE_L,
  594. LTC2947_PAGE1, 2,
  595. DIV_ROUND_CLOSEST(val, 200000));
  596. default:
  597. return -ENOTSUPP;
  598. }
  599. }
  600. static int ltc2947_write_curr(struct device *dev, const u32 attr,
  601. long val)
  602. {
  603. struct ltc2947_data *st = dev_get_drvdata(dev);
  604. switch (attr) {
  605. case hwmon_curr_reset_history:
  606. if (val != 1)
  607. return -EINVAL;
  608. return ltc2947_reset_history(st, LTC2947_REG_CURRENT_MAX,
  609. LTC2947_REG_CURRENT_MIN);
  610. case hwmon_curr_max:
  611. val = clamp_val(val, CURRENT_MIN, CURRENT_MAX);
  612. return ltc2947_val_write(st, LTC2947_REG_CURRENT_THRE_H,
  613. LTC2947_PAGE1, 2,
  614. DIV_ROUND_CLOSEST(val, 12));
  615. case hwmon_curr_min:
  616. val = clamp_val(val, CURRENT_MIN, CURRENT_MAX);
  617. return ltc2947_val_write(st, LTC2947_REG_CURRENT_THRE_L,
  618. LTC2947_PAGE1, 2,
  619. DIV_ROUND_CLOSEST(val, 12));
  620. default:
  621. return -ENOTSUPP;
  622. }
  623. }
  624. static int ltc2947_write_in(struct device *dev, const u32 attr, long val,
  625. const int channel)
  626. {
  627. struct ltc2947_data *st = dev_get_drvdata(dev);
  628. if (channel > LTC2947_VOLTAGE_DVCC_CHAN) {
  629. dev_err(st->dev, "Invalid chan%d for voltage", channel);
  630. return -EINVAL;
  631. }
  632. switch (attr) {
  633. case hwmon_in_reset_history:
  634. if (val != 1)
  635. return -EINVAL;
  636. if (channel == LTC2947_VOLTAGE_DVCC_CHAN)
  637. return ltc2947_reset_history(st, LTC2947_REG_DVCC_MAX,
  638. LTC2947_REG_DVCC_MIN);
  639. return ltc2947_reset_history(st, LTC2947_REG_VOLTAGE_MAX,
  640. LTC2947_REG_VOLTAGE_MIN);
  641. case hwmon_in_max:
  642. if (channel == LTC2947_VOLTAGE_DVCC_CHAN) {
  643. val = clamp_val(val, VDVCC_MIN, VDVCC_MAX);
  644. return ltc2947_val_write(st, LTC2947_REG_DVCC_THRE_H,
  645. LTC2947_PAGE1, 2,
  646. DIV_ROUND_CLOSEST(val, 145));
  647. }
  648. val = clamp_val(val, VOLTAGE_MIN, VOLTAGE_MAX);
  649. return ltc2947_val_write(st, LTC2947_REG_VOLTAGE_THRE_H,
  650. LTC2947_PAGE1, 2,
  651. DIV_ROUND_CLOSEST(val, 2));
  652. case hwmon_in_min:
  653. if (channel == LTC2947_VOLTAGE_DVCC_CHAN) {
  654. val = clamp_val(val, VDVCC_MIN, VDVCC_MAX);
  655. return ltc2947_val_write(st, LTC2947_REG_DVCC_THRE_L,
  656. LTC2947_PAGE1, 2,
  657. DIV_ROUND_CLOSEST(val, 145));
  658. }
  659. val = clamp_val(val, VOLTAGE_MIN, VOLTAGE_MAX);
  660. return ltc2947_val_write(st, LTC2947_REG_VOLTAGE_THRE_L,
  661. LTC2947_PAGE1, 2,
  662. DIV_ROUND_CLOSEST(val, 2));
  663. default:
  664. return -ENOTSUPP;
  665. }
  666. }
  667. static int ltc2947_write(struct device *dev,
  668. enum hwmon_sensor_types type,
  669. u32 attr, int channel, long val)
  670. {
  671. switch (type) {
  672. case hwmon_in:
  673. return ltc2947_write_in(dev, attr, val, channel);
  674. case hwmon_curr:
  675. return ltc2947_write_curr(dev, attr, val);
  676. case hwmon_power:
  677. return ltc2947_write_power(dev, attr, val);
  678. case hwmon_temp:
  679. return ltc2947_write_temp(dev, attr, val, channel);
  680. default:
  681. return -ENOTSUPP;
  682. }
  683. }
  684. static int ltc2947_read_labels(struct device *dev,
  685. enum hwmon_sensor_types type,
  686. u32 attr, int channel, const char **str)
  687. {
  688. switch (type) {
  689. case hwmon_in:
  690. if (channel == LTC2947_VOLTAGE_DVCC_CHAN)
  691. *str = "DVCC";
  692. else
  693. *str = "VP-VM";
  694. return 0;
  695. case hwmon_curr:
  696. *str = "IP-IM";
  697. return 0;
  698. case hwmon_temp:
  699. if (channel == LTC2947_TEMP_FAN_CHAN)
  700. *str = "TEMPFAN";
  701. else
  702. *str = "Ambient";
  703. return 0;
  704. case hwmon_power:
  705. *str = "Power";
  706. return 0;
  707. default:
  708. return -ENOTSUPP;
  709. }
  710. }
  711. static int ltc2947_in_is_visible(const u32 attr)
  712. {
  713. switch (attr) {
  714. case hwmon_in_input:
  715. case hwmon_in_highest:
  716. case hwmon_in_lowest:
  717. case hwmon_in_max_alarm:
  718. case hwmon_in_min_alarm:
  719. case hwmon_in_label:
  720. return 0444;
  721. case hwmon_in_reset_history:
  722. return 0200;
  723. case hwmon_in_max:
  724. case hwmon_in_min:
  725. return 0644;
  726. default:
  727. return 0;
  728. }
  729. }
  730. static int ltc2947_curr_is_visible(const u32 attr)
  731. {
  732. switch (attr) {
  733. case hwmon_curr_input:
  734. case hwmon_curr_highest:
  735. case hwmon_curr_lowest:
  736. case hwmon_curr_max_alarm:
  737. case hwmon_curr_min_alarm:
  738. case hwmon_curr_label:
  739. return 0444;
  740. case hwmon_curr_reset_history:
  741. return 0200;
  742. case hwmon_curr_max:
  743. case hwmon_curr_min:
  744. return 0644;
  745. default:
  746. return 0;
  747. }
  748. }
  749. static int ltc2947_power_is_visible(const u32 attr)
  750. {
  751. switch (attr) {
  752. case hwmon_power_input:
  753. case hwmon_power_input_highest:
  754. case hwmon_power_input_lowest:
  755. case hwmon_power_label:
  756. case hwmon_power_max_alarm:
  757. case hwmon_power_min_alarm:
  758. return 0444;
  759. case hwmon_power_reset_history:
  760. return 0200;
  761. case hwmon_power_max:
  762. case hwmon_power_min:
  763. return 0644;
  764. default:
  765. return 0;
  766. }
  767. }
  768. static int ltc2947_temp_is_visible(const u32 attr)
  769. {
  770. switch (attr) {
  771. case hwmon_temp_input:
  772. case hwmon_temp_highest:
  773. case hwmon_temp_lowest:
  774. case hwmon_temp_max_alarm:
  775. case hwmon_temp_min_alarm:
  776. case hwmon_temp_label:
  777. return 0444;
  778. case hwmon_temp_reset_history:
  779. return 0200;
  780. case hwmon_temp_max:
  781. case hwmon_temp_min:
  782. return 0644;
  783. default:
  784. return 0;
  785. }
  786. }
  787. static umode_t ltc2947_is_visible(const void *data,
  788. enum hwmon_sensor_types type,
  789. u32 attr, int channel)
  790. {
  791. switch (type) {
  792. case hwmon_in:
  793. return ltc2947_in_is_visible(attr);
  794. case hwmon_curr:
  795. return ltc2947_curr_is_visible(attr);
  796. case hwmon_power:
  797. return ltc2947_power_is_visible(attr);
  798. case hwmon_temp:
  799. return ltc2947_temp_is_visible(attr);
  800. default:
  801. return 0;
  802. }
  803. }
  804. static const struct hwmon_channel_info *ltc2947_info[] = {
  805. HWMON_CHANNEL_INFO(in,
  806. HWMON_I_INPUT | HWMON_I_LOWEST | HWMON_I_HIGHEST |
  807. HWMON_I_MAX | HWMON_I_MIN | HWMON_I_RESET_HISTORY |
  808. HWMON_I_MIN_ALARM | HWMON_I_MAX_ALARM |
  809. HWMON_I_LABEL,
  810. HWMON_I_INPUT | HWMON_I_LOWEST | HWMON_I_HIGHEST |
  811. HWMON_I_MAX | HWMON_I_MIN | HWMON_I_RESET_HISTORY |
  812. HWMON_I_MIN_ALARM | HWMON_I_MAX_ALARM |
  813. HWMON_I_LABEL),
  814. HWMON_CHANNEL_INFO(curr,
  815. HWMON_C_INPUT | HWMON_C_LOWEST | HWMON_C_HIGHEST |
  816. HWMON_C_MAX | HWMON_C_MIN | HWMON_C_RESET_HISTORY |
  817. HWMON_C_MIN_ALARM | HWMON_C_MAX_ALARM |
  818. HWMON_C_LABEL),
  819. HWMON_CHANNEL_INFO(power,
  820. HWMON_P_INPUT | HWMON_P_INPUT_LOWEST |
  821. HWMON_P_INPUT_HIGHEST | HWMON_P_MAX | HWMON_P_MIN |
  822. HWMON_P_RESET_HISTORY | HWMON_P_MAX_ALARM |
  823. HWMON_P_MIN_ALARM | HWMON_P_LABEL),
  824. HWMON_CHANNEL_INFO(temp,
  825. HWMON_T_INPUT | HWMON_T_LOWEST | HWMON_T_HIGHEST |
  826. HWMON_T_MAX | HWMON_T_MIN | HWMON_T_RESET_HISTORY |
  827. HWMON_T_MIN_ALARM | HWMON_T_MAX_ALARM |
  828. HWMON_T_LABEL,
  829. HWMON_T_MAX_ALARM | HWMON_T_MIN_ALARM | HWMON_T_MAX |
  830. HWMON_T_MIN | HWMON_T_LABEL),
  831. NULL
  832. };
  833. static const struct hwmon_ops ltc2947_hwmon_ops = {
  834. .is_visible = ltc2947_is_visible,
  835. .read = ltc2947_read,
  836. .write = ltc2947_write,
  837. .read_string = ltc2947_read_labels,
  838. };
  839. static const struct hwmon_chip_info ltc2947_chip_info = {
  840. .ops = &ltc2947_hwmon_ops,
  841. .info = ltc2947_info,
  842. };
  843. /* energy attributes are 6bytes wide so we need u64 */
  844. static SENSOR_DEVICE_ATTR(energy1_input, 0444, ltc2947_show_value, NULL,
  845. LTC2947_REG_ENERGY1);
  846. static SENSOR_DEVICE_ATTR(energy2_input, 0444, ltc2947_show_value, NULL,
  847. LTC2947_REG_ENERGY2);
  848. static struct attribute *ltc2947_attrs[] = {
  849. &sensor_dev_attr_energy1_input.dev_attr.attr,
  850. &sensor_dev_attr_energy2_input.dev_attr.attr,
  851. NULL,
  852. };
  853. ATTRIBUTE_GROUPS(ltc2947);
  854. static int ltc2947_setup(struct ltc2947_data *st)
  855. {
  856. int ret;
  857. struct clk *extclk;
  858. u32 dummy, deadband, pol;
  859. u32 accum[2];
  860. /* clear status register by reading it */
  861. ret = regmap_read(st->map, LTC2947_REG_STATUS, &dummy);
  862. if (ret)
  863. return ret;
  864. /*
  865. * Set max/min for power here since the default values x scale
  866. * would overflow on 32bit arch
  867. */
  868. ret = ltc2947_val_write(st, LTC2947_REG_POWER_THRE_H, LTC2947_PAGE1, 2,
  869. POWER_MAX / 200000);
  870. if (ret)
  871. return ret;
  872. ret = ltc2947_val_write(st, LTC2947_REG_POWER_THRE_L, LTC2947_PAGE1, 2,
  873. POWER_MIN / 200000);
  874. if (ret)
  875. return ret;
  876. /* check external clock presence */
  877. extclk = devm_clk_get_optional_enabled(st->dev, NULL);
  878. if (IS_ERR(extclk))
  879. return dev_err_probe(st->dev, PTR_ERR(extclk),
  880. "Failed to get external clock\n");
  881. if (extclk) {
  882. unsigned long rate_hz;
  883. u8 pre = 0, div, tbctl;
  884. u64 aux;
  885. /* let's calculate and set the right valus in TBCTL */
  886. rate_hz = clk_get_rate(extclk);
  887. if (rate_hz < LTC2947_CLK_MIN || rate_hz > LTC2947_CLK_MAX) {
  888. dev_err(st->dev, "Invalid rate:%lu for external clock",
  889. rate_hz);
  890. return -EINVAL;
  891. }
  892. /* as in table 1 of the datasheet */
  893. if (rate_hz >= LTC2947_CLK_MIN && rate_hz <= 1000000)
  894. pre = 0;
  895. else if (rate_hz > 1000000 && rate_hz <= 2000000)
  896. pre = 1;
  897. else if (rate_hz > 2000000 && rate_hz <= 4000000)
  898. pre = 2;
  899. else if (rate_hz > 4000000 && rate_hz <= 8000000)
  900. pre = 3;
  901. else if (rate_hz > 8000000 && rate_hz <= 16000000)
  902. pre = 4;
  903. else if (rate_hz > 16000000 && rate_hz <= LTC2947_CLK_MAX)
  904. pre = 5;
  905. /*
  906. * Div is given by:
  907. * floor(fref / (2^PRE * 32768))
  908. */
  909. div = rate_hz / ((1 << pre) * 32768);
  910. tbctl = LTC2947_PRE(pre) | LTC2947_DIV(div);
  911. ret = regmap_write(st->map, LTC2947_REG_TBCTL, tbctl);
  912. if (ret)
  913. return ret;
  914. /*
  915. * The energy lsb is given by (in W*s):
  916. * 06416 * (1/fref) * 2^PRE * (DIV + 1)
  917. * The value is multiplied by 10E9
  918. */
  919. aux = (div + 1) * ((1 << pre) * 641600000ULL);
  920. st->lsb_energy = DIV_ROUND_CLOSEST_ULL(aux, rate_hz);
  921. } else {
  922. /* 19.89E-6 * 10E9 */
  923. st->lsb_energy = 19890;
  924. }
  925. ret = of_property_read_u32_array(st->dev->of_node,
  926. "adi,accumulator-ctl-pol", accum,
  927. ARRAY_SIZE(accum));
  928. if (!ret) {
  929. u32 accum_reg = LTC2947_ACCUM_POL_1(accum[0]) |
  930. LTC2947_ACCUM_POL_2(accum[1]);
  931. ret = regmap_write(st->map, LTC2947_REG_ACCUM_POL, accum_reg);
  932. if (ret)
  933. return ret;
  934. }
  935. ret = of_property_read_u32(st->dev->of_node,
  936. "adi,accumulation-deadband-microamp",
  937. &deadband);
  938. if (!ret) {
  939. /* the LSB is the same as the current, so 3mA */
  940. ret = regmap_write(st->map, LTC2947_REG_ACCUM_DEADBAND,
  941. deadband / (1000 * 3));
  942. if (ret)
  943. return ret;
  944. }
  945. /* check gpio cfg */
  946. ret = of_property_read_u32(st->dev->of_node, "adi,gpio-out-pol", &pol);
  947. if (!ret) {
  948. /* setup GPIO as output */
  949. u32 gpio_ctl = LTC2947_GPIO_EN(1) | LTC2947_GPIO_FAN_EN(1) |
  950. LTC2947_GPIO_FAN_POL(pol);
  951. st->gpio_out = true;
  952. ret = regmap_write(st->map, LTC2947_REG_GPIOSTATCTL, gpio_ctl);
  953. if (ret)
  954. return ret;
  955. }
  956. ret = of_property_read_u32_array(st->dev->of_node, "adi,gpio-in-accum",
  957. accum, ARRAY_SIZE(accum));
  958. if (!ret) {
  959. /*
  960. * Setup the accum options. The gpioctl is already defined as
  961. * input by default.
  962. */
  963. u32 accum_val = LTC2947_ACCUM_POL_1(accum[0]) |
  964. LTC2947_ACCUM_POL_2(accum[1]);
  965. if (st->gpio_out) {
  966. dev_err(st->dev,
  967. "Cannot have input gpio config if already configured as output");
  968. return -EINVAL;
  969. }
  970. ret = regmap_write(st->map, LTC2947_REG_GPIO_ACCUM, accum_val);
  971. if (ret)
  972. return ret;
  973. }
  974. /* set continuos mode */
  975. return regmap_update_bits(st->map, LTC2947_REG_CTRL,
  976. LTC2947_CONT_MODE_MASK, LTC2947_CONT_MODE(1));
  977. }
  978. int ltc2947_core_probe(struct regmap *map, const char *name)
  979. {
  980. struct ltc2947_data *st;
  981. struct device *dev = regmap_get_device(map);
  982. struct device *hwmon;
  983. int ret;
  984. st = devm_kzalloc(dev, sizeof(*st), GFP_KERNEL);
  985. if (!st)
  986. return -ENOMEM;
  987. st->map = map;
  988. st->dev = dev;
  989. dev_set_drvdata(dev, st);
  990. mutex_init(&st->lock);
  991. ret = ltc2947_setup(st);
  992. if (ret)
  993. return ret;
  994. hwmon = devm_hwmon_device_register_with_info(dev, name, st,
  995. &ltc2947_chip_info,
  996. ltc2947_groups);
  997. return PTR_ERR_OR_ZERO(hwmon);
  998. }
  999. EXPORT_SYMBOL_GPL(ltc2947_core_probe);
  1000. static int ltc2947_resume(struct device *dev)
  1001. {
  1002. struct ltc2947_data *st = dev_get_drvdata(dev);
  1003. u32 ctrl = 0;
  1004. int ret;
  1005. /* dummy read to wake the device */
  1006. ret = regmap_read(st->map, LTC2947_REG_CTRL, &ctrl);
  1007. if (ret)
  1008. return ret;
  1009. /*
  1010. * Wait for the device. It takes 100ms to wake up so, 10ms extra
  1011. * should be enough.
  1012. */
  1013. msleep(110);
  1014. ret = regmap_read(st->map, LTC2947_REG_CTRL, &ctrl);
  1015. if (ret)
  1016. return ret;
  1017. /* ctrl should be 0 */
  1018. if (ctrl != 0) {
  1019. dev_err(st->dev, "Device failed to wake up, ctl:%02X\n", ctrl);
  1020. return -ETIMEDOUT;
  1021. }
  1022. /* set continuous mode */
  1023. return regmap_update_bits(st->map, LTC2947_REG_CTRL,
  1024. LTC2947_CONT_MODE_MASK, LTC2947_CONT_MODE(1));
  1025. }
  1026. static int ltc2947_suspend(struct device *dev)
  1027. {
  1028. struct ltc2947_data *st = dev_get_drvdata(dev);
  1029. return regmap_update_bits(st->map, LTC2947_REG_CTRL,
  1030. LTC2947_SHUTDOWN_MASK, 1);
  1031. }
  1032. EXPORT_SIMPLE_DEV_PM_OPS(ltc2947_pm_ops, ltc2947_suspend, ltc2947_resume);
  1033. const struct of_device_id ltc2947_of_match[] = {
  1034. { .compatible = "adi,ltc2947" },
  1035. {}
  1036. };
  1037. EXPORT_SYMBOL_GPL(ltc2947_of_match);
  1038. MODULE_DEVICE_TABLE(of, ltc2947_of_match);
  1039. MODULE_AUTHOR("Nuno Sa <[email protected]>");
  1040. MODULE_DESCRIPTION("LTC2947 power and energy monitor core driver");
  1041. MODULE_LICENSE("GPL");