qcom-spmi-rradc.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020
  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 <caleb.connolly@linaro.org>
  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 <linux/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_set_bits(chip->regmap, chip->base + RR_ADC_LOG,
  311. 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_clear_bits(chip->regmap, chip->base + RR_ADC_LOG,
  317. RR_ADC_LOG_CLR_CTRL);
  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_set_bits(chip->regmap, chip->base + RR_ADC_CTL,
  325. RR_ADC_CTL_CONTINUOUS_SEL);
  326. if (ret < 0)
  327. dev_err(chip->dev, "Update to continuous mode failed:%d\n",
  328. ret);
  329. return ret;
  330. }
  331. static int rradc_disable_continuous_mode(struct rradc_chip *chip)
  332. {
  333. int ret;
  334. /* Switch to non continuous mode */
  335. ret = regmap_clear_bits(chip->regmap, chip->base + RR_ADC_CTL,
  336. RR_ADC_CTL_CONTINUOUS_SEL);
  337. if (ret < 0)
  338. dev_err(chip->dev, "Update to non-continuous mode failed:%d\n",
  339. ret);
  340. return ret;
  341. }
  342. static bool rradc_is_ready(struct rradc_chip *chip,
  343. enum rradc_channel_id chan_address)
  344. {
  345. const struct rradc_channel *chan = &rradc_chans[chan_address];
  346. int ret;
  347. unsigned int status, mask;
  348. /* BATT_ID STS bit does not get set initially */
  349. switch (chan_address) {
  350. case RR_ADC_BATT_ID:
  351. mask = RR_ADC_STS_CHANNEL_STS;
  352. break;
  353. default:
  354. mask = RR_ADC_STS_CHANNEL_READING_MASK;
  355. break;
  356. }
  357. ret = regmap_read(chip->regmap, chip->base + chan->status, &status);
  358. if (ret < 0 || !(status & mask))
  359. return false;
  360. return true;
  361. }
  362. static int rradc_read_status_in_cont_mode(struct rradc_chip *chip,
  363. enum rradc_channel_id chan_address)
  364. {
  365. const struct rradc_channel *chan = &rradc_chans[chan_address];
  366. const struct iio_chan_spec *iio_chan = &rradc_iio_chans[chan_address];
  367. int ret, i;
  368. if (chan->trigger_mask == 0) {
  369. dev_err(chip->dev, "Channel doesn't have a trigger mask\n");
  370. return -EINVAL;
  371. }
  372. ret = regmap_set_bits(chip->regmap, chip->base + chan->trigger_addr,
  373. chan->trigger_mask);
  374. if (ret < 0) {
  375. dev_err(chip->dev,
  376. "Failed to apply trigger for channel '%s' ret=%d\n",
  377. iio_chan->extend_name, ret);
  378. return ret;
  379. }
  380. ret = rradc_enable_continuous_mode(chip);
  381. if (ret < 0) {
  382. dev_err(chip->dev, "Failed to switch to continuous mode\n");
  383. goto disable_trigger;
  384. }
  385. /*
  386. * The wait/sleep values were found through trial and error,
  387. * this is mostly for the battery ID channel which takes some
  388. * time to settle.
  389. */
  390. for (i = 0; i < 5; i++) {
  391. if (rradc_is_ready(chip, chan_address))
  392. break;
  393. usleep_range(50000, 50000 + 500);
  394. }
  395. if (i == 5) {
  396. dev_err(chip->dev, "Channel '%s' is not ready\n",
  397. iio_chan->extend_name);
  398. ret = -ETIMEDOUT;
  399. }
  400. rradc_disable_continuous_mode(chip);
  401. disable_trigger:
  402. regmap_clear_bits(chip->regmap, chip->base + chan->trigger_addr,
  403. chan->trigger_mask);
  404. return ret;
  405. }
  406. static int rradc_prepare_batt_id_conversion(struct rradc_chip *chip,
  407. enum rradc_channel_id chan_address,
  408. u16 *data)
  409. {
  410. int ret;
  411. ret = regmap_set_bits(chip->regmap, chip->base + RR_ADC_BATT_ID_CTRL,
  412. RR_ADC_BATT_ID_CTRL_CHANNEL_CONV);
  413. if (ret < 0) {
  414. dev_err(chip->dev, "Enabling BATT ID channel failed:%d\n", ret);
  415. return ret;
  416. }
  417. ret = regmap_set_bits(chip->regmap,
  418. chip->base + RR_ADC_BATT_ID_TRIGGER,
  419. RR_ADC_TRIGGER_CTL);
  420. if (ret < 0) {
  421. dev_err(chip->dev, "BATT_ID trigger set failed:%d\n", ret);
  422. goto out_disable_batt_id;
  423. }
  424. ret = rradc_read_status_in_cont_mode(chip, chan_address);
  425. /* Reset registers back to default values */
  426. regmap_clear_bits(chip->regmap, chip->base + RR_ADC_BATT_ID_TRIGGER,
  427. RR_ADC_TRIGGER_CTL);
  428. out_disable_batt_id:
  429. regmap_clear_bits(chip->regmap, chip->base + RR_ADC_BATT_ID_CTRL,
  430. RR_ADC_BATT_ID_CTRL_CHANNEL_CONV);
  431. return ret;
  432. }
  433. static int rradc_do_conversion(struct rradc_chip *chip,
  434. enum rradc_channel_id chan_address, u16 *data)
  435. {
  436. const struct rradc_channel *chan = &rradc_chans[chan_address];
  437. const struct iio_chan_spec *iio_chan = &rradc_iio_chans[chan_address];
  438. int ret;
  439. __le16 buf[3];
  440. mutex_lock(&chip->conversion_lock);
  441. switch (chan_address) {
  442. case RR_ADC_BATT_ID:
  443. ret = rradc_prepare_batt_id_conversion(chip, chan_address, data);
  444. if (ret < 0) {
  445. dev_err(chip->dev, "Battery ID conversion failed:%d\n",
  446. ret);
  447. goto unlock_out;
  448. }
  449. break;
  450. case RR_ADC_USBIN_V:
  451. case RR_ADC_DIE_TEMP:
  452. ret = rradc_read_status_in_cont_mode(chip, chan_address);
  453. if (ret < 0) {
  454. dev_err(chip->dev,
  455. "Error reading in continuous mode:%d\n", ret);
  456. goto unlock_out;
  457. }
  458. break;
  459. default:
  460. if (!rradc_is_ready(chip, chan_address)) {
  461. /*
  462. * Usually this means the channel isn't attached, for example
  463. * the in_voltage_usbin_v_input channel will not be ready if
  464. * no USB cable is attached
  465. */
  466. dev_dbg(chip->dev, "channel '%s' is not ready\n",
  467. iio_chan->extend_name);
  468. ret = -ENODATA;
  469. goto unlock_out;
  470. }
  471. break;
  472. }
  473. ret = rradc_read(chip, chan->lsb, buf, chan->size);
  474. if (ret) {
  475. dev_err(chip->dev, "read data failed\n");
  476. goto unlock_out;
  477. }
  478. /*
  479. * For the battery ID we read the register for every ID ADC and then
  480. * see which one is actually connected.
  481. */
  482. if (chan_address == RR_ADC_BATT_ID) {
  483. u16 batt_id_150 = le16_to_cpu(buf[2]);
  484. u16 batt_id_15 = le16_to_cpu(buf[1]);
  485. u16 batt_id_5 = le16_to_cpu(buf[0]);
  486. if (!batt_id_150 && !batt_id_15 && !batt_id_5) {
  487. dev_err(chip->dev,
  488. "Invalid batt_id values with all zeros\n");
  489. ret = -EINVAL;
  490. goto unlock_out;
  491. }
  492. if (batt_id_150 <= RR_ADC_BATT_ID_RANGE) {
  493. *data = batt_id_150;
  494. chip->batt_id_data = 150;
  495. } else if (batt_id_15 <= RR_ADC_BATT_ID_RANGE) {
  496. *data = batt_id_15;
  497. chip->batt_id_data = 15;
  498. } else {
  499. *data = batt_id_5;
  500. chip->batt_id_data = 5;
  501. }
  502. } else {
  503. /*
  504. * All of the other channels are either 1 or 2 bytes.
  505. * We can rely on the second byte being 0 for 1-byte channels.
  506. */
  507. *data = le16_to_cpu(buf[0]);
  508. }
  509. unlock_out:
  510. mutex_unlock(&chip->conversion_lock);
  511. return ret;
  512. }
  513. static int rradc_read_scale(struct rradc_chip *chip, int chan_address, int *val,
  514. int *val2)
  515. {
  516. int64_t fab_offset, fab_slope;
  517. int ret;
  518. ret = rradc_get_fab_coeff(chip, &fab_offset, &fab_slope);
  519. if (ret < 0) {
  520. dev_err(chip->dev, "Unable to get fab id coefficients\n");
  521. return -EINVAL;
  522. }
  523. switch (chan_address) {
  524. case RR_ADC_SKIN_TEMP:
  525. *val = MILLI;
  526. *val2 = RR_ADC_BATT_THERM_LSB_K;
  527. return IIO_VAL_FRACTIONAL;
  528. case RR_ADC_USBIN_I:
  529. *val = RR_ADC_CURR_USBIN_INPUT_FACTOR_MIL *
  530. RR_ADC_FS_VOLTAGE_MV;
  531. *val2 = RR_ADC_CHAN_MSB;
  532. return IIO_VAL_FRACTIONAL;
  533. case RR_ADC_DCIN_I:
  534. *val = RR_ADC_CURR_INPUT_FACTOR * RR_ADC_FS_VOLTAGE_MV;
  535. *val2 = RR_ADC_CHAN_MSB;
  536. return IIO_VAL_FRACTIONAL;
  537. case RR_ADC_USBIN_V:
  538. case RR_ADC_DCIN_V:
  539. *val = RR_ADC_VOLT_INPUT_FACTOR * RR_ADC_FS_VOLTAGE_MV * MILLI;
  540. *val2 = RR_ADC_CHAN_MSB;
  541. return IIO_VAL_FRACTIONAL;
  542. case RR_ADC_GPIO:
  543. *val = RR_ADC_GPIO_FS_RANGE;
  544. *val2 = RR_ADC_CHAN_MSB;
  545. return IIO_VAL_FRACTIONAL;
  546. case RR_ADC_CHG_TEMP:
  547. /*
  548. * We divide val2 by MILLI instead of multiplying val
  549. * to avoid an integer overflow.
  550. */
  551. *val = -RR_ADC_TEMP_FS_VOLTAGE_NUM;
  552. *val2 = div64_s64(RR_ADC_TEMP_FS_VOLTAGE_DEN * RR_ADC_CHAN_MSB *
  553. fab_slope,
  554. MILLI);
  555. return IIO_VAL_FRACTIONAL;
  556. case RR_ADC_DIE_TEMP:
  557. *val = RR_ADC_TEMP_FS_VOLTAGE_NUM;
  558. *val2 = RR_ADC_TEMP_FS_VOLTAGE_DEN * RR_ADC_CHAN_MSB *
  559. RR_ADC_DIE_TEMP_SLOPE;
  560. return IIO_VAL_FRACTIONAL;
  561. default:
  562. return -EINVAL;
  563. }
  564. }
  565. static int rradc_read_offset(struct rradc_chip *chip, int chan_address, int *val)
  566. {
  567. int64_t fab_offset, fab_slope;
  568. int64_t offset1, offset2;
  569. int ret;
  570. switch (chan_address) {
  571. case RR_ADC_SKIN_TEMP:
  572. /*
  573. * Offset from kelvin to degC, divided by the
  574. * scale factor (250). We lose some precision here.
  575. * 273150 / 250 = 1092.6
  576. */
  577. *val = div64_s64(ABSOLUTE_ZERO_MILLICELSIUS,
  578. (MILLI / RR_ADC_BATT_THERM_LSB_K));
  579. return IIO_VAL_INT;
  580. case RR_ADC_CHG_TEMP:
  581. ret = rradc_get_fab_coeff(chip, &fab_offset, &fab_slope);
  582. if (ret < 0) {
  583. dev_err(chip->dev,
  584. "Unable to get fab id coefficients\n");
  585. return -EINVAL;
  586. }
  587. offset1 = -(fab_offset * RR_ADC_TEMP_FS_VOLTAGE_DEN *
  588. RR_ADC_CHAN_MSB);
  589. offset1 += (int64_t)RR_ADC_TEMP_FS_VOLTAGE_NUM / 2ULL;
  590. offset1 = div64_s64(offset1,
  591. (int64_t)(RR_ADC_TEMP_FS_VOLTAGE_NUM));
  592. offset2 = (int64_t)RR_ADC_CHG_TEMP_OFFSET_MILLI_DEGC *
  593. RR_ADC_TEMP_FS_VOLTAGE_DEN * RR_ADC_CHAN_MSB *
  594. (int64_t)fab_slope;
  595. offset2 += ((int64_t)MILLI * RR_ADC_TEMP_FS_VOLTAGE_NUM) / 2;
  596. offset2 = div64_s64(
  597. offset2, ((int64_t)MILLI * RR_ADC_TEMP_FS_VOLTAGE_NUM));
  598. /*
  599. * The -1 is to compensate for lost precision.
  600. * It should actually be -0.7906976744186046.
  601. * This works out to every value being off
  602. * by about +0.091 degrees C after applying offset and scale.
  603. */
  604. *val = (int)(offset1 - offset2 - 1);
  605. return IIO_VAL_INT;
  606. case RR_ADC_DIE_TEMP:
  607. offset1 = -RR_ADC_DIE_TEMP_OFFSET *
  608. (int64_t)RR_ADC_TEMP_FS_VOLTAGE_DEN *
  609. (int64_t)RR_ADC_CHAN_MSB;
  610. offset1 = div64_s64(offset1, RR_ADC_TEMP_FS_VOLTAGE_NUM);
  611. offset2 = -(int64_t)RR_ADC_CHG_TEMP_OFFSET_MILLI_DEGC *
  612. RR_ADC_TEMP_FS_VOLTAGE_DEN * RR_ADC_CHAN_MSB *
  613. RR_ADC_DIE_TEMP_SLOPE;
  614. offset2 = div64_s64(offset2,
  615. ((int64_t)RR_ADC_TEMP_FS_VOLTAGE_NUM));
  616. /*
  617. * The result is -339, it should be -338.69789, this results
  618. * in the calculated die temp being off by
  619. * -0.004 - -0.0175 degrees C
  620. */
  621. *val = (int)(offset1 - offset2);
  622. return IIO_VAL_INT;
  623. default:
  624. break;
  625. }
  626. return -EINVAL;
  627. }
  628. static int rradc_read_raw(struct iio_dev *indio_dev,
  629. struct iio_chan_spec const *chan_spec, int *val,
  630. int *val2, long mask)
  631. {
  632. struct rradc_chip *chip = iio_priv(indio_dev);
  633. const struct rradc_channel *chan;
  634. int ret;
  635. u16 adc_code;
  636. if (chan_spec->address >= RR_ADC_CHAN_MAX) {
  637. dev_err(chip->dev, "Invalid channel index:%lu\n",
  638. chan_spec->address);
  639. return -EINVAL;
  640. }
  641. switch (mask) {
  642. case IIO_CHAN_INFO_SCALE:
  643. return rradc_read_scale(chip, chan_spec->address, val, val2);
  644. case IIO_CHAN_INFO_OFFSET:
  645. return rradc_read_offset(chip, chan_spec->address, val);
  646. case IIO_CHAN_INFO_RAW:
  647. ret = rradc_do_conversion(chip, chan_spec->address, &adc_code);
  648. if (ret < 0)
  649. return ret;
  650. *val = adc_code;
  651. return IIO_VAL_INT;
  652. case IIO_CHAN_INFO_PROCESSED:
  653. chan = &rradc_chans[chan_spec->address];
  654. if (!chan->scale_fn)
  655. return -EINVAL;
  656. ret = rradc_do_conversion(chip, chan_spec->address, &adc_code);
  657. if (ret < 0)
  658. return ret;
  659. *val = chan->scale_fn(chip, adc_code, val);
  660. return IIO_VAL_INT;
  661. default:
  662. return -EINVAL;
  663. }
  664. }
  665. static int rradc_read_label(struct iio_dev *indio_dev,
  666. struct iio_chan_spec const *chan, char *label)
  667. {
  668. return snprintf(label, PAGE_SIZE, "%s\n",
  669. rradc_chans[chan->address].label);
  670. }
  671. static const struct iio_info rradc_info = {
  672. .read_raw = rradc_read_raw,
  673. .read_label = rradc_read_label,
  674. };
  675. static const struct rradc_channel rradc_chans[RR_ADC_CHAN_MAX] = {
  676. {
  677. .label = "batt_id",
  678. .scale_fn = rradc_post_process_batt_id,
  679. .lsb = RR_ADC_BATT_ID_5_LSB,
  680. .status = RR_ADC_BATT_ID_STS,
  681. .size = 6,
  682. .trigger_addr = RR_ADC_BATT_ID_TRIGGER,
  683. .trigger_mask = BIT(0),
  684. }, {
  685. .label = "batt",
  686. .lsb = RR_ADC_BATT_THERM_LSB,
  687. .status = RR_ADC_BATT_THERM_STS,
  688. .size = 2,
  689. .trigger_addr = RR_ADC_BATT_THERM_TRIGGER,
  690. }, {
  691. .label = "pmi8998_skin",
  692. .lsb = RR_ADC_SKIN_TEMP_LSB,
  693. .status = RR_ADC_AUX_THERM_STS,
  694. .size = 2,
  695. .trigger_addr = RR_ADC_AUX_THERM_TRIGGER,
  696. }, {
  697. .label = "usbin_i",
  698. .lsb = RR_ADC_USB_IN_I_LSB,
  699. .status = RR_ADC_USB_IN_I_STS,
  700. .size = 2,
  701. .trigger_addr = RR_ADC_USB_IN_I_TRIGGER,
  702. }, {
  703. .label = "usbin_v",
  704. .lsb = RR_ADC_USB_IN_V_LSB,
  705. .status = RR_ADC_USB_IN_V_STS,
  706. .size = 2,
  707. .trigger_addr = RR_ADC_USB_IN_V_TRIGGER,
  708. .trigger_mask = BIT(7),
  709. }, {
  710. .label = "dcin_i",
  711. .lsb = RR_ADC_DC_IN_I_LSB,
  712. .status = RR_ADC_DC_IN_I_STS,
  713. .size = 2,
  714. .trigger_addr = RR_ADC_DC_IN_I_TRIGGER,
  715. }, {
  716. .label = "dcin_v",
  717. .lsb = RR_ADC_DC_IN_V_LSB,
  718. .status = RR_ADC_DC_IN_V_STS,
  719. .size = 2,
  720. .trigger_addr = RR_ADC_DC_IN_V_TRIGGER,
  721. }, {
  722. .label = "pmi8998_die",
  723. .lsb = RR_ADC_PMI_DIE_TEMP_LSB,
  724. .status = RR_ADC_PMI_DIE_TEMP_STS,
  725. .size = 2,
  726. .trigger_addr = RR_ADC_PMI_DIE_TEMP_TRIGGER,
  727. .trigger_mask = RR_ADC_TRIGGER_EVERY_CYCLE,
  728. }, {
  729. .label = "chg",
  730. .lsb = RR_ADC_CHARGER_TEMP_LSB,
  731. .status = RR_ADC_CHARGER_TEMP_STS,
  732. .size = 2,
  733. .trigger_addr = RR_ADC_CHARGER_TEMP_TRIGGER,
  734. }, {
  735. .label = "gpio",
  736. .lsb = RR_ADC_GPIO_LSB,
  737. .status = RR_ADC_GPIO_STS,
  738. .size = 2,
  739. .trigger_addr = RR_ADC_GPIO_TRIGGER,
  740. },
  741. };
  742. static const struct iio_chan_spec rradc_iio_chans[RR_ADC_CHAN_MAX] = {
  743. {
  744. .type = IIO_RESISTANCE,
  745. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
  746. .address = RR_ADC_BATT_ID,
  747. .channel = 0,
  748. .indexed = 1,
  749. }, {
  750. .type = IIO_TEMP,
  751. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
  752. .address = RR_ADC_BATT_THERM,
  753. .channel = 0,
  754. .indexed = 1,
  755. }, {
  756. .type = IIO_TEMP,
  757. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  758. BIT(IIO_CHAN_INFO_SCALE) |
  759. BIT(IIO_CHAN_INFO_OFFSET),
  760. .address = RR_ADC_SKIN_TEMP,
  761. .channel = 1,
  762. .indexed = 1,
  763. }, {
  764. .type = IIO_CURRENT,
  765. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  766. BIT(IIO_CHAN_INFO_SCALE),
  767. .address = RR_ADC_USBIN_I,
  768. .channel = 0,
  769. .indexed = 1,
  770. }, {
  771. .type = IIO_VOLTAGE,
  772. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  773. BIT(IIO_CHAN_INFO_SCALE),
  774. .address = RR_ADC_USBIN_V,
  775. .channel = 0,
  776. .indexed = 1,
  777. }, {
  778. .type = IIO_CURRENT,
  779. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  780. BIT(IIO_CHAN_INFO_SCALE),
  781. .address = RR_ADC_DCIN_I,
  782. .channel = 1,
  783. .indexed = 1,
  784. }, {
  785. .type = IIO_VOLTAGE,
  786. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  787. BIT(IIO_CHAN_INFO_SCALE),
  788. .address = RR_ADC_DCIN_V,
  789. .channel = 1,
  790. .indexed = 1,
  791. }, {
  792. .type = IIO_TEMP,
  793. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  794. BIT(IIO_CHAN_INFO_SCALE) |
  795. BIT(IIO_CHAN_INFO_OFFSET),
  796. .address = RR_ADC_DIE_TEMP,
  797. .channel = 2,
  798. .indexed = 1,
  799. }, {
  800. .type = IIO_TEMP,
  801. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  802. BIT(IIO_CHAN_INFO_OFFSET) |
  803. BIT(IIO_CHAN_INFO_SCALE),
  804. .address = RR_ADC_CHG_TEMP,
  805. .channel = 3,
  806. .indexed = 1,
  807. }, {
  808. .type = IIO_VOLTAGE,
  809. .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
  810. BIT(IIO_CHAN_INFO_SCALE),
  811. .address = RR_ADC_GPIO,
  812. .channel = 2,
  813. .indexed = 1,
  814. },
  815. };
  816. static int rradc_probe(struct platform_device *pdev)
  817. {
  818. struct device *dev = &pdev->dev;
  819. struct iio_dev *indio_dev;
  820. struct rradc_chip *chip;
  821. int ret, i, batt_id_delay;
  822. indio_dev = devm_iio_device_alloc(dev, sizeof(*chip));
  823. if (!indio_dev)
  824. return -ENOMEM;
  825. chip = iio_priv(indio_dev);
  826. chip->regmap = dev_get_regmap(pdev->dev.parent, NULL);
  827. if (!chip->regmap) {
  828. dev_err(dev, "Couldn't get parent's regmap\n");
  829. return -EINVAL;
  830. }
  831. chip->dev = dev;
  832. mutex_init(&chip->conversion_lock);
  833. ret = device_property_read_u32(dev, "reg", &chip->base);
  834. if (ret < 0) {
  835. dev_err(chip->dev, "Couldn't find reg address, ret = %d\n",
  836. ret);
  837. return ret;
  838. }
  839. batt_id_delay = -1;
  840. ret = device_property_read_u32(dev, "qcom,batt-id-delay-ms",
  841. &batt_id_delay);
  842. if (!ret) {
  843. for (i = 0; i < RRADC_BATT_ID_DELAY_MAX; i++) {
  844. if (batt_id_delay == batt_id_delays[i])
  845. break;
  846. }
  847. if (i == RRADC_BATT_ID_DELAY_MAX)
  848. batt_id_delay = -1;
  849. }
  850. if (batt_id_delay >= 0) {
  851. batt_id_delay = FIELD_PREP(BATT_ID_SETTLE_MASK, batt_id_delay);
  852. ret = regmap_set_bits(chip->regmap,
  853. chip->base + RR_ADC_BATT_ID_CFG,
  854. batt_id_delay);
  855. if (ret < 0) {
  856. dev_err(chip->dev,
  857. "BATT_ID settling time config failed:%d\n",
  858. ret);
  859. }
  860. }
  861. /* Get the PMIC revision, we need it to handle some varying coefficients */
  862. chip->pmic = qcom_pmic_get(chip->dev);
  863. if (IS_ERR(chip->pmic)) {
  864. dev_err(chip->dev, "Unable to get reference to PMIC device\n");
  865. return PTR_ERR(chip->pmic);
  866. }
  867. switch (chip->pmic->subtype) {
  868. case PMI8998_SUBTYPE:
  869. indio_dev->name = "pmi8998-rradc";
  870. break;
  871. case PM660_SUBTYPE:
  872. indio_dev->name = "pm660-rradc";
  873. break;
  874. default:
  875. indio_dev->name = DRIVER_NAME;
  876. break;
  877. }
  878. indio_dev->modes = INDIO_DIRECT_MODE;
  879. indio_dev->info = &rradc_info;
  880. indio_dev->channels = rradc_iio_chans;
  881. indio_dev->num_channels = ARRAY_SIZE(rradc_iio_chans);
  882. return devm_iio_device_register(dev, indio_dev);
  883. }
  884. static const struct of_device_id rradc_match_table[] = {
  885. { .compatible = "qcom,pm660-rradc" },
  886. { .compatible = "qcom,pmi8998-rradc" },
  887. { }
  888. };
  889. MODULE_DEVICE_TABLE(of, rradc_match_table);
  890. static struct platform_driver rradc_driver = {
  891. .driver = {
  892. .name = DRIVER_NAME,
  893. .of_match_table = rradc_match_table,
  894. },
  895. .probe = rradc_probe,
  896. };
  897. module_platform_driver(rradc_driver);
  898. MODULE_DESCRIPTION("QCOM SPMI PMIC RR ADC driver");
  899. MODULE_AUTHOR("Caleb Connolly <caleb.connolly@linaro.org>");
  900. MODULE_LICENSE("GPL");