qcom-spmi-rradc.c 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2016-2017, 2019, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022 Linaro Limited.
  5. * Author: Caleb Connolly <[email protected]>
  6. *
  7. * This driver is for the Round Robin ADC found in the pmi8998 and pm660 PMICs.
  8. */
  9. #include <linux/bitfield.h>
  10. #include <linux/delay.h>
  11. #include <linux/kernel.h>
  12. #include <linux/math64.h>
  13. #include <linux/module.h>
  14. #include <linux/mod_devicetable.h>
  15. #include <linux/platform_device.h>
  16. #include <linux/property.h>
  17. #include <linux/regmap.h>
  18. #include <linux/spmi.h>
  19. #include <linux/types.h>
  20. #include <linux/units.h>
  21. #include <asm/unaligned.h>
  22. #include <linux/iio/iio.h>
  23. #include <linux/iio/types.h>
  24. #include <soc/qcom/qcom-spmi-pmic.h>
  25. #define DRIVER_NAME "qcom-spmi-rradc"
  26. #define RR_ADC_EN_CTL 0x46
  27. #define RR_ADC_SKIN_TEMP_LSB 0x50
  28. #define RR_ADC_SKIN_TEMP_MSB 0x51
  29. #define RR_ADC_CTL 0x52
  30. #define RR_ADC_CTL_CONTINUOUS_SEL BIT(3)
  31. #define RR_ADC_LOG 0x53
  32. #define RR_ADC_LOG_CLR_CTRL BIT(0)
  33. #define RR_ADC_FAKE_BATT_LOW_LSB 0x58
  34. #define RR_ADC_FAKE_BATT_LOW_MSB 0x59
  35. #define RR_ADC_FAKE_BATT_HIGH_LSB 0x5A
  36. #define RR_ADC_FAKE_BATT_HIGH_MSB 0x5B
  37. #define RR_ADC_BATT_ID_CTRL 0x60
  38. #define RR_ADC_BATT_ID_CTRL_CHANNEL_CONV BIT(0)
  39. #define RR_ADC_BATT_ID_TRIGGER 0x61
  40. #define RR_ADC_BATT_ID_STS 0x62
  41. #define RR_ADC_BATT_ID_CFG 0x63
  42. #define BATT_ID_SETTLE_MASK GENMASK(7, 5)
  43. #define RR_ADC_BATT_ID_5_LSB 0x66
  44. #define RR_ADC_BATT_ID_5_MSB 0x67
  45. #define RR_ADC_BATT_ID_15_LSB 0x68
  46. #define RR_ADC_BATT_ID_15_MSB 0x69
  47. #define RR_ADC_BATT_ID_150_LSB 0x6A
  48. #define RR_ADC_BATT_ID_150_MSB 0x6B
  49. #define RR_ADC_BATT_THERM_CTRL 0x70
  50. #define RR_ADC_BATT_THERM_TRIGGER 0x71
  51. #define RR_ADC_BATT_THERM_STS 0x72
  52. #define RR_ADC_BATT_THERM_CFG 0x73
  53. #define RR_ADC_BATT_THERM_LSB 0x74
  54. #define RR_ADC_BATT_THERM_MSB 0x75
  55. #define RR_ADC_BATT_THERM_FREQ 0x76
  56. #define RR_ADC_AUX_THERM_CTRL 0x80
  57. #define RR_ADC_AUX_THERM_TRIGGER 0x81
  58. #define RR_ADC_AUX_THERM_STS 0x82
  59. #define RR_ADC_AUX_THERM_CFG 0x83
  60. #define RR_ADC_AUX_THERM_LSB 0x84
  61. #define RR_ADC_AUX_THERM_MSB 0x85
  62. #define RR_ADC_SKIN_HOT 0x86
  63. #define RR_ADC_SKIN_TOO_HOT 0x87
  64. #define RR_ADC_AUX_THERM_C1 0x88
  65. #define RR_ADC_AUX_THERM_C2 0x89
  66. #define RR_ADC_AUX_THERM_C3 0x8A
  67. #define RR_ADC_AUX_THERM_HALF_RANGE 0x8B
  68. #define RR_ADC_USB_IN_V_CTRL 0x90
  69. #define RR_ADC_USB_IN_V_TRIGGER 0x91
  70. #define RR_ADC_USB_IN_V_STS 0x92
  71. #define RR_ADC_USB_IN_V_LSB 0x94
  72. #define RR_ADC_USB_IN_V_MSB 0x95
  73. #define RR_ADC_USB_IN_I_CTRL 0x98
  74. #define RR_ADC_USB_IN_I_TRIGGER 0x99
  75. #define RR_ADC_USB_IN_I_STS 0x9A
  76. #define RR_ADC_USB_IN_I_LSB 0x9C
  77. #define RR_ADC_USB_IN_I_MSB 0x9D
  78. #define RR_ADC_DC_IN_V_CTRL 0xA0
  79. #define RR_ADC_DC_IN_V_TRIGGER 0xA1
  80. #define RR_ADC_DC_IN_V_STS 0xA2
  81. #define RR_ADC_DC_IN_V_LSB 0xA4
  82. #define RR_ADC_DC_IN_V_MSB 0xA5
  83. #define RR_ADC_DC_IN_I_CTRL 0xA8
  84. #define RR_ADC_DC_IN_I_TRIGGER 0xA9
  85. #define RR_ADC_DC_IN_I_STS 0xAA
  86. #define RR_ADC_DC_IN_I_LSB 0xAC
  87. #define RR_ADC_DC_IN_I_MSB 0xAD
  88. #define RR_ADC_PMI_DIE_TEMP_CTRL 0xB0
  89. #define RR_ADC_PMI_DIE_TEMP_TRIGGER 0xB1
  90. #define RR_ADC_PMI_DIE_TEMP_STS 0xB2
  91. #define RR_ADC_PMI_DIE_TEMP_CFG 0xB3
  92. #define RR_ADC_PMI_DIE_TEMP_LSB 0xB4
  93. #define RR_ADC_PMI_DIE_TEMP_MSB 0xB5
  94. #define RR_ADC_CHARGER_TEMP_CTRL 0xB8
  95. #define RR_ADC_CHARGER_TEMP_TRIGGER 0xB9
  96. #define RR_ADC_CHARGER_TEMP_STS 0xBA
  97. #define RR_ADC_CHARGER_TEMP_CFG 0xBB
  98. #define RR_ADC_CHARGER_TEMP_LSB 0xBC
  99. #define RR_ADC_CHARGER_TEMP_MSB 0xBD
  100. #define RR_ADC_CHARGER_HOT 0xBE
  101. #define RR_ADC_CHARGER_TOO_HOT 0xBF
  102. #define RR_ADC_GPIO_CTRL 0xC0
  103. #define RR_ADC_GPIO_TRIGGER 0xC1
  104. #define RR_ADC_GPIO_STS 0xC2
  105. #define RR_ADC_GPIO_LSB 0xC4
  106. #define RR_ADC_GPIO_MSB 0xC5
  107. #define RR_ADC_ATEST_CTRL 0xC8
  108. #define RR_ADC_ATEST_TRIGGER 0xC9
  109. #define RR_ADC_ATEST_STS 0xCA
  110. #define RR_ADC_ATEST_LSB 0xCC
  111. #define RR_ADC_ATEST_MSB 0xCD
  112. #define RR_ADC_SEC_ACCESS 0xD0
  113. #define RR_ADC_PERPH_RESET_CTL2 0xD9
  114. #define RR_ADC_PERPH_RESET_CTL3 0xDA
  115. #define RR_ADC_PERPH_RESET_CTL4 0xDB
  116. #define RR_ADC_INT_TEST1 0xE0
  117. #define RR_ADC_INT_TEST_VAL 0xE1
  118. #define RR_ADC_TM_TRIGGER_CTRLS 0xE2
  119. #define RR_ADC_TM_ADC_CTRLS 0xE3
  120. #define RR_ADC_TM_CNL_CTRL 0xE4
  121. #define RR_ADC_TM_BATT_ID_CTRL 0xE5
  122. #define RR_ADC_TM_THERM_CTRL 0xE6
  123. #define RR_ADC_TM_CONV_STS 0xE7
  124. #define RR_ADC_TM_ADC_READ_LSB 0xE8
  125. #define RR_ADC_TM_ADC_READ_MSB 0xE9
  126. #define RR_ADC_TM_ATEST_MUX_1 0xEA
  127. #define RR_ADC_TM_ATEST_MUX_2 0xEB
  128. #define RR_ADC_TM_REFERENCES 0xED
  129. #define RR_ADC_TM_MISC_CTL 0xEE
  130. #define RR_ADC_TM_RR_CTRL 0xEF
  131. #define RR_ADC_TRIGGER_EVERY_CYCLE BIT(7)
  132. #define RR_ADC_TRIGGER_CTL BIT(0)
  133. #define RR_ADC_BATT_ID_RANGE 820
  134. #define RR_ADC_BITS 10
  135. #define RR_ADC_CHAN_MSB (1 << RR_ADC_BITS)
  136. #define RR_ADC_FS_VOLTAGE_MV 2500
  137. /* BATT_THERM 0.25K/LSB */
  138. #define RR_ADC_BATT_THERM_LSB_K 4
  139. #define RR_ADC_TEMP_FS_VOLTAGE_NUM 5000000
  140. #define RR_ADC_TEMP_FS_VOLTAGE_DEN 3
  141. #define RR_ADC_DIE_TEMP_OFFSET 601400
  142. #define RR_ADC_DIE_TEMP_SLOPE 2
  143. #define RR_ADC_DIE_TEMP_OFFSET_MILLI_DEGC 25000
  144. #define RR_ADC_CHG_TEMP_GF_OFFSET_UV 1303168
  145. #define RR_ADC_CHG_TEMP_GF_SLOPE_UV_PER_C 3784
  146. #define RR_ADC_CHG_TEMP_SMIC_OFFSET_UV 1338433
  147. #define RR_ADC_CHG_TEMP_SMIC_SLOPE_UV_PER_C 3655
  148. #define RR_ADC_CHG_TEMP_660_GF_OFFSET_UV 1309001
  149. #define RR_ADC_CHG_TEMP_660_GF_SLOPE_UV_PER_C 3403
  150. #define RR_ADC_CHG_TEMP_660_SMIC_OFFSET_UV 1295898
  151. #define RR_ADC_CHG_TEMP_660_SMIC_SLOPE_UV_PER_C 3596
  152. #define RR_ADC_CHG_TEMP_660_MGNA_OFFSET_UV 1314779
  153. #define RR_ADC_CHG_TEMP_660_MGNA_SLOPE_UV_PER_C 3496
  154. #define RR_ADC_CHG_TEMP_OFFSET_MILLI_DEGC 25000
  155. #define RR_ADC_CHG_THRESHOLD_SCALE 4
  156. #define RR_ADC_VOLT_INPUT_FACTOR 8
  157. #define RR_ADC_CURR_INPUT_FACTOR 2000
  158. #define RR_ADC_CURR_USBIN_INPUT_FACTOR_MIL 1886
  159. #define RR_ADC_CURR_USBIN_660_FACTOR_MIL 9
  160. #define RR_ADC_CURR_USBIN_660_UV_VAL 579500
  161. #define RR_ADC_GPIO_FS_RANGE 5000
  162. #define RR_ADC_COHERENT_CHECK_RETRY 5
  163. #define RR_ADC_CHAN_MAX_CONTINUOUS_BUFFER_LEN 16
  164. #define RR_ADC_STS_CHANNEL_READING_MASK GENMASK(1, 0)
  165. #define RR_ADC_STS_CHANNEL_STS BIT(1)
  166. #define RR_ADC_TP_REV_VERSION1 21
  167. #define RR_ADC_TP_REV_VERSION2 29
  168. #define RR_ADC_TP_REV_VERSION3 32
  169. #define RRADC_BATT_ID_DELAY_MAX 8
  170. enum rradc_channel_id {
  171. RR_ADC_BATT_ID = 0,
  172. RR_ADC_BATT_THERM,
  173. RR_ADC_SKIN_TEMP,
  174. RR_ADC_USBIN_I,
  175. RR_ADC_USBIN_V,
  176. RR_ADC_DCIN_I,
  177. RR_ADC_DCIN_V,
  178. RR_ADC_DIE_TEMP,
  179. RR_ADC_CHG_TEMP,
  180. RR_ADC_GPIO,
  181. RR_ADC_CHAN_MAX
  182. };
  183. struct rradc_chip;
  184. /**
  185. * struct rradc_channel - rradc channel data
  186. * @label: channel label
  187. * @lsb: Channel least significant byte
  188. * @status: Channel status address
  189. * @size: number of bytes to read
  190. * @trigger_addr: Trigger address, trigger is only used on some channels
  191. * @trigger_mask: Trigger mask
  192. * @scale_fn: Post process callback for channels which can't be exposed
  193. * as offset + scale.
  194. */
  195. struct rradc_channel {
  196. const char *label;
  197. u8 lsb;
  198. u8 status;
  199. int size;
  200. int trigger_addr;
  201. int trigger_mask;
  202. int (*scale_fn)(struct rradc_chip *chip, u16 adc_code, int *result);
  203. };
  204. struct rradc_chip {
  205. struct device *dev;
  206. const struct qcom_spmi_pmic *pmic;
  207. /*
  208. * Lock held while doing channel conversion
  209. * involving multiple register read/writes
  210. */
  211. struct mutex conversion_lock;
  212. struct regmap *regmap;
  213. u32 base;
  214. int batt_id_delay;
  215. u16 batt_id_data;
  216. };
  217. static const int batt_id_delays[] = { 0, 1, 4, 12, 20, 40, 60, 80 };
  218. static const struct rradc_channel rradc_chans[RR_ADC_CHAN_MAX];
  219. static const struct iio_chan_spec rradc_iio_chans[RR_ADC_CHAN_MAX];
  220. static int rradc_read(struct rradc_chip *chip, u16 addr, __le16 *buf, int len)
  221. {
  222. int ret, retry_cnt = 0;
  223. __le16 data_check[RR_ADC_CHAN_MAX_CONTINUOUS_BUFFER_LEN / 2];
  224. if (len > RR_ADC_CHAN_MAX_CONTINUOUS_BUFFER_LEN) {
  225. dev_err(chip->dev,
  226. "Can't read more than %d bytes, but asked to read %d bytes.\n",
  227. RR_ADC_CHAN_MAX_CONTINUOUS_BUFFER_LEN, len);
  228. return -EINVAL;
  229. }
  230. while (retry_cnt < RR_ADC_COHERENT_CHECK_RETRY) {
  231. ret = regmap_bulk_read(chip->regmap, chip->base + addr, buf,
  232. len);
  233. if (ret < 0) {
  234. dev_err(chip->dev, "rr_adc reg 0x%x failed :%d\n", addr,
  235. ret);
  236. return ret;
  237. }
  238. ret = regmap_bulk_read(chip->regmap, chip->base + addr,
  239. data_check, len);
  240. if (ret < 0) {
  241. dev_err(chip->dev, "rr_adc reg 0x%x failed :%d\n", addr,
  242. ret);
  243. return ret;
  244. }
  245. if (memcmp(buf, data_check, len) != 0) {
  246. retry_cnt++;
  247. dev_dbg(chip->dev,
  248. "coherent read error, retry_cnt:%d\n",
  249. retry_cnt);
  250. continue;
  251. }
  252. break;
  253. }
  254. if (retry_cnt == RR_ADC_COHERENT_CHECK_RETRY)
  255. dev_err(chip->dev, "Retry exceeded for coherency check\n");
  256. return ret;
  257. }
  258. static int rradc_get_fab_coeff(struct rradc_chip *chip, int64_t *offset,
  259. int64_t *slope)
  260. {
  261. if (chip->pmic->subtype == PM660_SUBTYPE) {
  262. switch (chip->pmic->fab_id) {
  263. case PM660_FAB_ID_GF:
  264. *offset = RR_ADC_CHG_TEMP_660_GF_OFFSET_UV;
  265. *slope = RR_ADC_CHG_TEMP_660_GF_SLOPE_UV_PER_C;
  266. return 0;
  267. case PM660_FAB_ID_TSMC:
  268. *offset = RR_ADC_CHG_TEMP_660_SMIC_OFFSET_UV;
  269. *slope = RR_ADC_CHG_TEMP_660_SMIC_SLOPE_UV_PER_C;
  270. return 0;
  271. default:
  272. *offset = RR_ADC_CHG_TEMP_660_MGNA_OFFSET_UV;
  273. *slope = RR_ADC_CHG_TEMP_660_MGNA_SLOPE_UV_PER_C;
  274. }
  275. } else if (chip->pmic->subtype == PMI8998_SUBTYPE) {
  276. switch (chip->pmic->fab_id) {
  277. case PMI8998_FAB_ID_GF:
  278. *offset = RR_ADC_CHG_TEMP_GF_OFFSET_UV;
  279. *slope = RR_ADC_CHG_TEMP_GF_SLOPE_UV_PER_C;
  280. return 0;
  281. case PMI8998_FAB_ID_SMIC:
  282. *offset = RR_ADC_CHG_TEMP_SMIC_OFFSET_UV;
  283. *slope = RR_ADC_CHG_TEMP_SMIC_SLOPE_UV_PER_C;
  284. return 0;
  285. default:
  286. return -EINVAL;
  287. }
  288. }
  289. return -EINVAL;
  290. }
  291. /*
  292. * These functions explicitly cast int64_t to int.
  293. * They will never overflow, as the values are small enough.
  294. */
  295. static int rradc_post_process_batt_id(struct rradc_chip *chip, u16 adc_code,
  296. int *result_ohms)
  297. {
  298. uint32_t current_value;
  299. int64_t r_id;
  300. current_value = chip->batt_id_data;
  301. r_id = ((int64_t)adc_code * RR_ADC_FS_VOLTAGE_MV);
  302. r_id = div64_s64(r_id, (RR_ADC_CHAN_MSB * current_value));
  303. *result_ohms = (int)(r_id * MILLI);
  304. return 0;
  305. }
  306. static int rradc_enable_continuous_mode(struct rradc_chip *chip)
  307. {
  308. int ret;
  309. /* Clear channel log */
  310. ret = regmap_update_bits(chip->regmap, chip->base + RR_ADC_LOG,
  311. RR_ADC_LOG_CLR_CTRL, RR_ADC_LOG_CLR_CTRL);
  312. if (ret < 0) {
  313. dev_err(chip->dev, "log ctrl update to clear failed:%d\n", ret);
  314. return ret;
  315. }
  316. ret = regmap_update_bits(chip->regmap, chip->base + RR_ADC_LOG,
  317. RR_ADC_LOG_CLR_CTRL, 0);
  318. if (ret < 0) {
  319. dev_err(chip->dev, "log ctrl update to not clear failed:%d\n",
  320. ret);
  321. return ret;
  322. }
  323. /* Switch to continuous mode */
  324. ret = regmap_update_bits(chip->regmap, chip->base + RR_ADC_CTL,
  325. RR_ADC_CTL_CONTINUOUS_SEL,
  326. RR_ADC_CTL_CONTINUOUS_SEL);
  327. if (ret < 0)
  328. dev_err(chip->dev, "Update to continuous mode failed:%d\n",
  329. ret);
  330. return ret;
  331. }
  332. static int rradc_disable_continuous_mode(struct rradc_chip *chip)
  333. {
  334. int ret;
  335. /* Switch to non continuous mode */
  336. ret = regmap_update_bits(chip->regmap, chip->base + RR_ADC_CTL,
  337. RR_ADC_CTL_CONTINUOUS_SEL, 0);
  338. if (ret < 0)
  339. dev_err(chip->dev, "Update to non-continuous mode failed:%d\n",
  340. ret);
  341. return ret;
  342. }
  343. static bool rradc_is_ready(struct rradc_chip *chip,
  344. enum rradc_channel_id chan_address)
  345. {
  346. const struct rradc_channel *chan = &rradc_chans[chan_address];
  347. int ret;
  348. unsigned int status, mask;
  349. /* BATT_ID STS bit does not get set initially */
  350. switch (chan_address) {
  351. case RR_ADC_BATT_ID:
  352. mask = RR_ADC_STS_CHANNEL_STS;
  353. break;
  354. default:
  355. mask = RR_ADC_STS_CHANNEL_READING_MASK;
  356. break;
  357. }
  358. ret = regmap_read(chip->regmap, chip->base + chan->status, &status);
  359. if (ret < 0 || !(status & mask))
  360. return false;
  361. return true;
  362. }
  363. static int rradc_read_status_in_cont_mode(struct rradc_chip *chip,
  364. enum rradc_channel_id chan_address)
  365. {
  366. const struct rradc_channel *chan = &rradc_chans[chan_address];
  367. const struct iio_chan_spec *iio_chan = &rradc_iio_chans[chan_address];
  368. int ret, i;
  369. if (chan->trigger_mask == 0) {
  370. dev_err(chip->dev, "Channel doesn't have a trigger mask\n");
  371. return -EINVAL;
  372. }
  373. ret = regmap_update_bits(chip->regmap, chip->base + chan->trigger_addr,
  374. chan->trigger_mask, chan->trigger_mask);
  375. if (ret < 0) {
  376. dev_err(chip->dev,
  377. "Failed to apply trigger for channel '%s' ret=%d\n",
  378. iio_chan->extend_name, ret);
  379. return ret;
  380. }
  381. ret = rradc_enable_continuous_mode(chip);
  382. if (ret < 0) {
  383. dev_err(chip->dev, "Failed to switch to continuous mode\n");
  384. goto disable_trigger;
  385. }
  386. /*
  387. * The wait/sleep values were found through trial and error,
  388. * this is mostly for the battery ID channel which takes some
  389. * time to settle.
  390. */
  391. for (i = 0; i < 5; i++) {
  392. if (rradc_is_ready(chip, chan_address))
  393. break;
  394. usleep_range(50000, 50000 + 500);
  395. }
  396. if (i == 5) {
  397. dev_err(chip->dev, "Channel '%s' is not ready\n",
  398. iio_chan->extend_name);
  399. ret = -ETIMEDOUT;
  400. }
  401. rradc_disable_continuous_mode(chip);
  402. disable_trigger:
  403. regmap_update_bits(chip->regmap, chip->base + chan->trigger_addr,
  404. chan->trigger_mask, 0);
  405. return ret;
  406. }
  407. static int rradc_prepare_batt_id_conversion(struct rradc_chip *chip,
  408. enum rradc_channel_id chan_address,
  409. u16 *data)
  410. {
  411. int ret;
  412. ret = regmap_update_bits(chip->regmap, chip->base + RR_ADC_BATT_ID_CTRL,
  413. RR_ADC_BATT_ID_CTRL_CHANNEL_CONV,
  414. RR_ADC_BATT_ID_CTRL_CHANNEL_CONV);
  415. if (ret < 0) {
  416. dev_err(chip->dev, "Enabling BATT ID channel failed:%d\n", ret);
  417. return ret;
  418. }
  419. ret = regmap_update_bits(chip->regmap,
  420. chip->base + RR_ADC_BATT_ID_TRIGGER,
  421. RR_ADC_TRIGGER_CTL, RR_ADC_TRIGGER_CTL);
  422. if (ret < 0) {
  423. dev_err(chip->dev, "BATT_ID trigger set failed:%d\n", ret);
  424. goto out_disable_batt_id;
  425. }
  426. ret = rradc_read_status_in_cont_mode(chip, chan_address);
  427. /* Reset registers back to default values */
  428. regmap_update_bits(chip->regmap, chip->base + RR_ADC_BATT_ID_TRIGGER,
  429. RR_ADC_TRIGGER_CTL, 0);
  430. out_disable_batt_id:
  431. regmap_update_bits(chip->regmap, chip->base + RR_ADC_BATT_ID_CTRL,
  432. RR_ADC_BATT_ID_CTRL_CHANNEL_CONV, 0);
  433. return ret;
  434. }
  435. static int rradc_do_conversion(struct rradc_chip *chip,
  436. enum rradc_channel_id chan_address, u16 *data)
  437. {
  438. const struct rradc_channel *chan = &rradc_chans[chan_address];
  439. const struct iio_chan_spec *iio_chan = &rradc_iio_chans[chan_address];
  440. int ret;
  441. __le16 buf[3];
  442. mutex_lock(&chip->conversion_lock);
  443. switch (chan_address) {
  444. case RR_ADC_BATT_ID:
  445. ret = rradc_prepare_batt_id_conversion(chip, chan_address, data);
  446. if (ret < 0) {
  447. dev_err(chip->dev, "Battery ID conversion failed:%d\n",
  448. ret);
  449. goto unlock_out;
  450. }
  451. break;
  452. case RR_ADC_USBIN_V:
  453. case RR_ADC_DIE_TEMP:
  454. ret = rradc_read_status_in_cont_mode(chip, chan_address);
  455. if (ret < 0) {
  456. dev_err(chip->dev,
  457. "Error reading in continuous mode:%d\n", ret);
  458. goto unlock_out;
  459. }
  460. break;
  461. default:
  462. if (!rradc_is_ready(chip, chan_address)) {
  463. /*
  464. * Usually this means the channel isn't attached, for example
  465. * the in_voltage_usbin_v_input channel will not be ready if
  466. * no USB cable is attached
  467. */
  468. dev_dbg(chip->dev, "channel '%s' is not ready\n",
  469. iio_chan->extend_name);
  470. ret = -ENODATA;
  471. goto unlock_out;
  472. }
  473. break;
  474. }
  475. ret = rradc_read(chip, chan->lsb, buf, chan->size);
  476. if (ret) {
  477. dev_err(chip->dev, "read data failed\n");
  478. goto unlock_out;
  479. }
  480. /*
  481. * For the battery ID we read the register for every ID ADC and then
  482. * see which one is actually connected.
  483. */
  484. if (chan_address == RR_ADC_BATT_ID) {
  485. u16 batt_id_150 = le16_to_cpu(buf[2]);
  486. u16 batt_id_15 = le16_to_cpu(buf[1]);
  487. u16 batt_id_5 = le16_to_cpu(buf[0]);
  488. if (!batt_id_150 && !batt_id_15 && !batt_id_5) {
  489. dev_err(chip->dev,
  490. "Invalid batt_id values with all zeros\n");
  491. ret = -EINVAL;
  492. goto unlock_out;
  493. }
  494. if (batt_id_150 <= RR_ADC_BATT_ID_RANGE) {
  495. *data = batt_id_150;
  496. chip->batt_id_data = 150;
  497. } else if (batt_id_15 <= RR_ADC_BATT_ID_RANGE) {
  498. *data = batt_id_15;
  499. chip->batt_id_data = 15;
  500. } else {
  501. *data = batt_id_5;
  502. chip->batt_id_data = 5;
  503. }
  504. } else {
  505. /*
  506. * All of the other channels are either 1 or 2 bytes.
  507. * We can rely on the second byte being 0 for 1-byte channels.
  508. */
  509. *data = le16_to_cpu(buf[0]);
  510. }
  511. unlock_out:
  512. mutex_unlock(&chip->conversion_lock);
  513. return ret;
  514. }
  515. static int rradc_read_scale(struct rradc_chip *chip, int chan_address, int *val,
  516. int *val2)
  517. {
  518. int64_t fab_offset, fab_slope;
  519. int ret;
  520. ret = rradc_get_fab_coeff(chip, &fab_offset, &fab_slope);
  521. if (ret < 0) {
  522. dev_err(chip->dev, "Unable to get fab id coefficients\n");
  523. return -EINVAL;
  524. }
  525. switch (chan_address) {
  526. case RR_ADC_SKIN_TEMP:
  527. *val = MILLI;
  528. *val2 = RR_ADC_BATT_THERM_LSB_K;
  529. return IIO_VAL_FRACTIONAL;
  530. case RR_ADC_USBIN_I:
  531. *val = RR_ADC_CURR_USBIN_INPUT_FACTOR_MIL *
  532. RR_ADC_FS_VOLTAGE_MV;
  533. *val2 = RR_ADC_CHAN_MSB;
  534. return IIO_VAL_FRACTIONAL;
  535. case RR_ADC_DCIN_I:
  536. *val = RR_ADC_CURR_INPUT_FACTOR * RR_ADC_FS_VOLTAGE_MV;
  537. *val2 = RR_ADC_CHAN_MSB;
  538. return IIO_VAL_FRACTIONAL;
  539. case RR_ADC_USBIN_V:
  540. case RR_ADC_DCIN_V:
  541. *val = RR_ADC_VOLT_INPUT_FACTOR * RR_ADC_FS_VOLTAGE_MV * MILLI;
  542. *val2 = RR_ADC_CHAN_MSB;
  543. return IIO_VAL_FRACTIONAL;
  544. case RR_ADC_GPIO:
  545. *val = RR_ADC_GPIO_FS_RANGE;
  546. *val2 = RR_ADC_CHAN_MSB;
  547. return IIO_VAL_FRACTIONAL;
  548. case RR_ADC_CHG_TEMP:
  549. /*
  550. * We divide val2 by MILLI instead of multiplying val
  551. * to avoid an integer overflow.
  552. */
  553. *val = -RR_ADC_TEMP_FS_VOLTAGE_NUM;
  554. *val2 = div64_s64(RR_ADC_TEMP_FS_VOLTAGE_DEN * RR_ADC_CHAN_MSB *
  555. fab_slope,
  556. MILLI);
  557. return IIO_VAL_FRACTIONAL;
  558. case RR_ADC_DIE_TEMP:
  559. *val = RR_ADC_TEMP_FS_VOLTAGE_NUM;
  560. *val2 = RR_ADC_TEMP_FS_VOLTAGE_DEN * RR_ADC_CHAN_MSB *
  561. RR_ADC_DIE_TEMP_SLOPE;
  562. return IIO_VAL_FRACTIONAL;
  563. default:
  564. return -EINVAL;
  565. }
  566. }
  567. static int rradc_read_offset(struct rradc_chip *chip, int chan_address, int *val)
  568. {
  569. int64_t fab_offset, fab_slope;
  570. int64_t offset1, offset2;
  571. int ret;
  572. switch (chan_address) {
  573. case RR_ADC_SKIN_TEMP:
  574. /*
  575. * Offset from kelvin to degC, divided by the
  576. * scale factor (250). We lose some precision here.
  577. * 273150 / 250 = 1092.6
  578. */
  579. *val = div64_s64(ABSOLUTE_ZERO_MILLICELSIUS,
  580. (MILLI / RR_ADC_BATT_THERM_LSB_K));
  581. return IIO_VAL_INT;
  582. case RR_ADC_CHG_TEMP:
  583. ret = rradc_get_fab_coeff(chip, &fab_offset, &fab_slope);
  584. if (ret < 0) {
  585. dev_err(chip->dev,
  586. "Unable to get fab id coefficients\n");
  587. return -EINVAL;
  588. }
  589. offset1 = -(fab_offset * RR_ADC_TEMP_FS_VOLTAGE_DEN *
  590. RR_ADC_CHAN_MSB);
  591. offset1 += (int64_t)RR_ADC_TEMP_FS_VOLTAGE_NUM / 2ULL;
  592. offset1 = div64_s64(offset1,
  593. (int64_t)(RR_ADC_TEMP_FS_VOLTAGE_NUM));
  594. offset2 = (int64_t)RR_ADC_CHG_TEMP_OFFSET_MILLI_DEGC *
  595. RR_ADC_TEMP_FS_VOLTAGE_DEN * RR_ADC_CHAN_MSB *
  596. (int64_t)fab_slope;
  597. offset2 += ((int64_t)MILLI * RR_ADC_TEMP_FS_VOLTAGE_NUM) / 2;
  598. offset2 = div64_s64(
  599. offset2, ((int64_t)MILLI * RR_ADC_TEMP_FS_VOLTAGE_NUM));
  600. /*
  601. * The -1 is to compensate for lost precision.
  602. * It should actually be -0.7906976744186046.
  603. * This works out to every value being off
  604. * by about +0.091 degrees C after applying offset and scale.
  605. */
  606. *val = (int)(offset1 - offset2 - 1);
  607. return IIO_VAL_INT;
  608. case RR_ADC_DIE_TEMP:
  609. offset1 = -RR_ADC_DIE_TEMP_OFFSET *
  610. (int64_t)RR_ADC_TEMP_FS_VOLTAGE_DEN *
  611. (int64_t)RR_ADC_CHAN_MSB;
  612. offset1 = div64_s64(offset1, RR_ADC_TEMP_FS_VOLTAGE_NUM);
  613. offset2 = -(int64_t)RR_ADC_CHG_TEMP_OFFSET_MILLI_DEGC *
  614. RR_ADC_TEMP_FS_VOLTAGE_DEN * RR_ADC_CHAN_MSB *
  615. RR_ADC_DIE_TEMP_SLOPE;
  616. offset2 = div64_s64(offset2,
  617. ((int64_t)RR_ADC_TEMP_FS_VOLTAGE_NUM));
  618. /*
  619. * The result is -339, it should be -338.69789, this results
  620. * in the calculated die temp being off by
  621. * -0.004 - -0.0175 degrees C
  622. */
  623. *val = (int)(offset1 - offset2);
  624. return IIO_VAL_INT;
  625. default:
  626. break;
  627. }
  628. return -EINVAL;
  629. }
  630. static int rradc_read_raw(struct iio_dev *indio_dev,
  631. struct iio_chan_spec const *chan_spec, int *val,
  632. int *val2, long mask)
  633. {
  634. struct rradc_chip *chip = iio_priv(indio_dev);
  635. const struct rradc_channel *chan;
  636. int ret;
  637. u16 adc_code;
  638. if (chan_spec->address >= RR_ADC_CHAN_MAX) {
  639. dev_err(chip->dev, "Invalid channel index:%lu\n",
  640. chan_spec->address);
  641. return -EINVAL;
  642. }
  643. switch (mask) {
  644. case IIO_CHAN_INFO_SCALE:
  645. return rradc_read_scale(chip, chan_spec->address, val, val2);
  646. case IIO_CHAN_INFO_OFFSET:
  647. return rradc_read_offset(chip, chan_spec->address, val);
  648. case IIO_CHAN_INFO_RAW:
  649. ret = rradc_do_conversion(chip, chan_spec->address, &adc_code);
  650. if (ret < 0)
  651. return ret;
  652. *val = adc_code;
  653. return IIO_VAL_INT;
  654. case IIO_CHAN_INFO_PROCESSED:
  655. chan = &rradc_chans[chan_spec->address];
  656. if (!chan->scale_fn)
  657. return -EINVAL;
  658. ret = rradc_do_conversion(chip, chan_spec->address, &adc_code);
  659. if (ret < 0)
  660. return ret;
  661. *val = chan->scale_fn(chip, adc_code, val);
  662. return IIO_VAL_INT;
  663. default:
  664. return -EINVAL;
  665. }
  666. }
  667. static int rradc_read_label(struct iio_dev *indio_dev,
  668. struct iio_chan_spec const *chan, char *label)
  669. {
  670. return snprintf(label, PAGE_SIZE, "%s\n",
  671. rradc_chans[chan->address].label);
  672. }
  673. static const struct iio_info rradc_info = {
  674. .read_raw = rradc_read_raw,
  675. .read_label = rradc_read_label,
  676. };
  677. static const struct rradc_channel rradc_chans[RR_ADC_CHAN_MAX] = {
  678. {
  679. .label = "batt_id",
  680. .scale_fn = rradc_post_process_batt_id,
  681. .lsb = RR_ADC_BATT_ID_5_LSB,
  682. .status = RR_ADC_BATT_ID_STS,
  683. .size = 6,
  684. .trigger_addr = RR_ADC_BATT_ID_TRIGGER,
  685. .trigger_mask = BIT(0),
  686. }, {
  687. .label = "batt",
  688. .lsb = RR_ADC_BATT_THERM_LSB,
  689. .status = RR_ADC_BATT_THERM_STS,
  690. .size = 2,
  691. .trigger_addr = RR_ADC_BATT_THERM_TRIGGER,
  692. }, {
  693. .label = "pmi8998_skin",
  694. .lsb = RR_ADC_SKIN_TEMP_LSB,
  695. .status = RR_ADC_AUX_THERM_STS,
  696. .size = 2,
  697. .trigger_addr = RR_ADC_AUX_THERM_TRIGGER,
  698. }, {
  699. .label = "usbin_i",
  700. .lsb = RR_ADC_USB_IN_I_LSB,
  701. .status = RR_ADC_USB_IN_I_STS,
  702. .size = 2,
  703. .trigger_addr = RR_ADC_USB_IN_I_TRIGGER,
  704. }, {
  705. .label = "usbin_v",
  706. .lsb = RR_ADC_USB_IN_V_LSB,
  707. .status = RR_ADC_USB_IN_V_STS,
  708. .size = 2,
  709. .trigger_addr = RR_ADC_USB_IN_V_TRIGGER,
  710. .trigger_mask = BIT(7),
  711. }, {
  712. .label = "dcin_i",
  713. .lsb = RR_ADC_DC_IN_I_LSB,
  714. .status = RR_ADC_DC_IN_I_STS,
  715. .size = 2,
  716. .trigger_addr = RR_ADC_DC_IN_I_TRIGGER,
  717. }, {
  718. .label = "dcin_v",
  719. .lsb = RR_ADC_DC_IN_V_LSB,
  720. .status = RR_ADC_DC_IN_V_STS,
  721. .size = 2,
  722. .trigger_addr = RR_ADC_DC_IN_V_TRIGGER,
  723. }, {
  724. .label = "pmi8998_die",
  725. .lsb = RR_ADC_PMI_DIE_TEMP_LSB,
  726. .status = RR_ADC_PMI_DIE_TEMP_STS,
  727. .size = 2,
  728. .trigger_addr = RR_ADC_PMI_DIE_TEMP_TRIGGER,
  729. .trigger_mask = RR_ADC_TRIGGER_EVERY_CYCLE,
  730. }, {
  731. .label = "chg",
  732. .lsb = RR_ADC_CHARGER_TEMP_LSB,
  733. .status = RR_ADC_CHARGER_TEMP_STS,
  734. .size = 2,
  735. .trigger_addr = RR_ADC_CHARGER_TEMP_TRIGGER,
  736. }, {
  737. .label = "gpio",
  738. .lsb = RR_ADC_GPIO_LSB,
  739. .status = RR_ADC_GPIO_STS,
  740. .size = 2,
  741. .trigger_addr = RR_ADC_GPIO_TRIGGER,
  742. },
  743. };
  744. static const struct iio_chan_spec rradc_iio_chans[RR_ADC_CHAN_MAX] = {
  745. {
  746. .type = IIO_RESISTANCE,
  747. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
  748. .address = RR_ADC_BATT_ID,
  749. .channel = 0,
  750. .indexed = 1,
  751. }, {
  752. .type = IIO_TEMP,
  753. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
  754. .address = RR_ADC_BATT_THERM,
  755. .channel = 0,
  756. .indexed = 1,
  757. }, {
  758. .type = IIO_TEMP,
  759. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  760. BIT(IIO_CHAN_INFO_SCALE) |
  761. BIT(IIO_CHAN_INFO_OFFSET),
  762. .address = RR_ADC_SKIN_TEMP,
  763. .channel = 1,
  764. .indexed = 1,
  765. }, {
  766. .type = IIO_CURRENT,
  767. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  768. BIT(IIO_CHAN_INFO_SCALE),
  769. .address = RR_ADC_USBIN_I,
  770. .channel = 0,
  771. .indexed = 1,
  772. }, {
  773. .type = IIO_VOLTAGE,
  774. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  775. BIT(IIO_CHAN_INFO_SCALE),
  776. .address = RR_ADC_USBIN_V,
  777. .channel = 0,
  778. .indexed = 1,
  779. }, {
  780. .type = IIO_CURRENT,
  781. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  782. BIT(IIO_CHAN_INFO_SCALE),
  783. .address = RR_ADC_DCIN_I,
  784. .channel = 1,
  785. .indexed = 1,
  786. }, {
  787. .type = IIO_VOLTAGE,
  788. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  789. BIT(IIO_CHAN_INFO_SCALE),
  790. .address = RR_ADC_DCIN_V,
  791. .channel = 1,
  792. .indexed = 1,
  793. }, {
  794. .type = IIO_TEMP,
  795. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  796. BIT(IIO_CHAN_INFO_SCALE) |
  797. BIT(IIO_CHAN_INFO_OFFSET),
  798. .address = RR_ADC_DIE_TEMP,
  799. .channel = 2,
  800. .indexed = 1,
  801. }, {
  802. .type = IIO_TEMP,
  803. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  804. BIT(IIO_CHAN_INFO_OFFSET) |
  805. BIT(IIO_CHAN_INFO_SCALE),
  806. .address = RR_ADC_CHG_TEMP,
  807. .channel = 3,
  808. .indexed = 1,
  809. }, {
  810. .type = IIO_VOLTAGE,
  811. .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
  812. BIT(IIO_CHAN_INFO_SCALE),
  813. .address = RR_ADC_GPIO,
  814. .channel = 2,
  815. .indexed = 1,
  816. },
  817. };
  818. static int rradc_probe(struct platform_device *pdev)
  819. {
  820. struct device *dev = &pdev->dev;
  821. struct iio_dev *indio_dev;
  822. struct rradc_chip *chip;
  823. int ret, i, batt_id_delay;
  824. indio_dev = devm_iio_device_alloc(dev, sizeof(*chip));
  825. if (!indio_dev)
  826. return -ENOMEM;
  827. chip = iio_priv(indio_dev);
  828. chip->regmap = dev_get_regmap(pdev->dev.parent, NULL);
  829. if (!chip->regmap) {
  830. dev_err(dev, "Couldn't get parent's regmap\n");
  831. return -EINVAL;
  832. }
  833. chip->dev = dev;
  834. mutex_init(&chip->conversion_lock);
  835. ret = device_property_read_u32(dev, "reg", &chip->base);
  836. if (ret < 0) {
  837. dev_err(chip->dev, "Couldn't find reg address, ret = %d\n",
  838. ret);
  839. return ret;
  840. }
  841. batt_id_delay = -1;
  842. ret = device_property_read_u32(dev, "qcom,batt-id-delay-ms",
  843. &batt_id_delay);
  844. if (!ret) {
  845. for (i = 0; i < RRADC_BATT_ID_DELAY_MAX; i++) {
  846. if (batt_id_delay == batt_id_delays[i])
  847. break;
  848. }
  849. if (i == RRADC_BATT_ID_DELAY_MAX)
  850. batt_id_delay = -1;
  851. }
  852. if (batt_id_delay >= 0) {
  853. batt_id_delay = FIELD_PREP(BATT_ID_SETTLE_MASK, batt_id_delay);
  854. ret = regmap_update_bits(chip->regmap,
  855. chip->base + RR_ADC_BATT_ID_CFG,
  856. batt_id_delay, batt_id_delay);
  857. if (ret < 0) {
  858. dev_err(chip->dev,
  859. "BATT_ID settling time config failed:%d\n",
  860. ret);
  861. }
  862. }
  863. /* Get the PMIC revision, we need it to handle some varying coefficients */
  864. chip->pmic = qcom_pmic_get(chip->dev);
  865. if (IS_ERR(chip->pmic)) {
  866. dev_err(chip->dev, "Unable to get reference to PMIC device\n");
  867. return PTR_ERR(chip->pmic);
  868. }
  869. switch (chip->pmic->subtype) {
  870. case PMI8998_SUBTYPE:
  871. indio_dev->name = "pmi8998-rradc";
  872. break;
  873. case PM660_SUBTYPE:
  874. indio_dev->name = "pm660-rradc";
  875. break;
  876. default:
  877. indio_dev->name = DRIVER_NAME;
  878. break;
  879. }
  880. indio_dev->modes = INDIO_DIRECT_MODE;
  881. indio_dev->info = &rradc_info;
  882. indio_dev->channels = rradc_iio_chans;
  883. indio_dev->num_channels = ARRAY_SIZE(rradc_iio_chans);
  884. return devm_iio_device_register(dev, indio_dev);
  885. }
  886. static const struct of_device_id rradc_match_table[] = {
  887. { .compatible = "qcom,pm660-rradc" },
  888. { .compatible = "qcom,pmi8998-rradc" },
  889. {}
  890. };
  891. MODULE_DEVICE_TABLE(of, rradc_match_table);
  892. static struct platform_driver rradc_driver = {
  893. .driver = {
  894. .name = DRIVER_NAME,
  895. .of_match_table = rradc_match_table,
  896. },
  897. .probe = rradc_probe,
  898. };
  899. module_platform_driver(rradc_driver);
  900. MODULE_DESCRIPTION("QCOM SPMI PMIC RR ADC driver");
  901. MODULE_AUTHOR("Caleb Connolly <[email protected]>");
  902. MODULE_LICENSE("GPL");