smb1355-charger.c 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #define pr_fmt(fmt) "SMB1355: %s: " fmt, __func__
  7. #include <linux/device.h>
  8. #include <linux/regmap.h>
  9. #include <linux/interrupt.h>
  10. #include <linux/module.h>
  11. #include <linux/iio/consumer.h>
  12. #include <linux/iio/iio.h>
  13. #include <linux/platform_device.h>
  14. #include <linux/of.h>
  15. #include <linux/of_device.h>
  16. #include <linux/of_irq.h>
  17. #include <linux/regulator/driver.h>
  18. #include <linux/regulator/machine.h>
  19. #include <linux/regulator/of_regulator.h>
  20. #include <linux/power_supply.h>
  21. #include <linux/qti_power_supply.h>
  22. #include <linux/workqueue.h>
  23. #include <linux/pmic-voter.h>
  24. #include <linux/string.h>
  25. #include <dt-bindings/iio/qti_power_supply_iio.h>
  26. /* SMB1355 registers, different than mentioned in smb-reg.h */
  27. #define REVID_BASE 0x0100
  28. #define I2C_SS_DIG_BASE 0x0E00
  29. #define CHGR_BASE 0x1000
  30. #define ANA2_BASE 0x1100
  31. #define BATIF_BASE 0x1200
  32. #define USBIN_BASE 0x1300
  33. #define ANA1_BASE 0x1400
  34. #define MISC_BASE 0x1600
  35. #define REVID_MFG_ID_SPARE_REG (REVID_BASE + 0xFF)
  36. #define I2C_SS_DIG_PMIC_SID_REG (I2C_SS_DIG_BASE + 0x45)
  37. #define PMIC_SID_MASK GENMASK(3, 0)
  38. #define PMIC_SID0_BIT BIT(0)
  39. #define BATTERY_STATUS_2_REG (CHGR_BASE + 0x0B)
  40. #define DISABLE_CHARGING_BIT BIT(3)
  41. #define BATTERY_STATUS_3_REG (CHGR_BASE + 0x0C)
  42. #define BATT_GT_PRE_TO_FAST_BIT BIT(4)
  43. #define ENABLE_CHARGING_BIT BIT(3)
  44. #define CHGR_CHARGING_ENABLE_CMD_REG (CHGR_BASE + 0x42)
  45. #define CHARGING_ENABLE_CMD_BIT BIT(0)
  46. #define CHGR_CFG2_REG (CHGR_BASE + 0x51)
  47. #define CHG_EN_SRC_BIT BIT(7)
  48. #define CHG_EN_POLARITY_BIT BIT(6)
  49. #define CFG_REG (CHGR_BASE + 0x53)
  50. #define CHG_OPTION_PIN_TRIM_BIT BIT(7)
  51. #define BATN_SNS_CFG_BIT BIT(4)
  52. #define CFG_TAPER_DIS_AFVC_BIT BIT(3)
  53. #define BATFET_SHUTDOWN_CFG_BIT BIT(2)
  54. #define VDISCHG_EN_CFG_BIT BIT(1)
  55. #define VCHG_EN_CFG_BIT BIT(0)
  56. #define FAST_CHARGE_CURRENT_CFG_REG (CHGR_BASE + 0x61)
  57. #define FAST_CHARGE_CURRENT_SETTING_MASK GENMASK(7, 0)
  58. #define CHGR_BATTOV_CFG_REG (CHGR_BASE + 0x70)
  59. #define BATTOV_SETTING_MASK GENMASK(7, 0)
  60. #define CHGR_PRE_TO_FAST_THRESHOLD_CFG_REG (CHGR_BASE + 0x74)
  61. #define PRE_TO_FAST_CHARGE_THRESHOLD_MASK GENMASK(2, 0)
  62. #define ANA2_TR_SBQ_ICL_1X_REF_OFFSET_REG (ANA2_BASE + 0xF5)
  63. #define TR_SBQ_ICL_1X_REF_OFFSET GENMASK(4, 0)
  64. #define POWER_MODE_HICCUP_CFG (BATIF_BASE + 0x72)
  65. #define MAX_HICCUP_DUETO_BATDIS_MASK GENMASK(5, 2)
  66. #define HICCUP_TIMEOUT_CFG_MASK GENMASK(1, 0)
  67. #define BATIF_CFG_SMISC_BATID_REG (BATIF_BASE + 0x73)
  68. #define CFG_SMISC_RBIAS_EXT_CTRL_BIT BIT(2)
  69. #define SMB2CHG_BATIF_ENG_SMISC_DIETEMP (BATIF_BASE + 0xC0)
  70. #define TDIE_COMPARATOR_THRESHOLD GENMASK(5, 0)
  71. #define DIE_LOW_RANGE_BASE_DEGC 34
  72. #define DIE_LOW_RANGE_DELTA 16
  73. #define DIE_LOW_RANGE_MAX_DEGC 97
  74. #define DIE_LOW_RANGE_SHIFT 4
  75. #define BATIF_ENG_SCMISC_SPARE1_REG (BATIF_BASE + 0xC2)
  76. #define EXT_BIAS_PIN_BIT BIT(2)
  77. #define DIE_TEMP_COMP_HYST_BIT BIT(1)
  78. #define ANA1_ENG_SREFGEN_CFG2_REG (ANA1_BASE + 0xC1)
  79. #define VALLEY_COMPARATOR_EN_BIT BIT(0)
  80. #define TEMP_COMP_STATUS_REG (MISC_BASE + 0x07)
  81. #define TEMP_RST_HOT_BIT BIT(2)
  82. #define TEMP_UB_HOT_BIT BIT(1)
  83. #define TEMP_LB_HOT_BIT BIT(0)
  84. #define SKIN_TEMP_SHIFT 4
  85. #define MISC_RT_STS_REG (MISC_BASE + 0x10)
  86. #define HARD_ILIMIT_RT_STS_BIT BIT(5)
  87. #define BANDGAP_ENABLE_REG (MISC_BASE + 0x42)
  88. #define BANDGAP_ENABLE_CMD_BIT BIT(0)
  89. #define BARK_BITE_WDOG_PET_REG (MISC_BASE + 0x43)
  90. #define BARK_BITE_WDOG_PET_BIT BIT(0)
  91. #define CLOCK_REQUEST_REG (MISC_BASE + 0x44)
  92. #define CLOCK_REQUEST_CMD_BIT BIT(0)
  93. #define WD_CFG_REG (MISC_BASE + 0x51)
  94. #define WATCHDOG_TRIGGER_AFP_EN_BIT BIT(7)
  95. #define BARK_WDOG_INT_EN_BIT BIT(6)
  96. #define BITE_WDOG_INT_EN_BIT BIT(5)
  97. #define WDOG_IRQ_SFT_BIT BIT(2)
  98. #define WDOG_TIMER_EN_ON_PLUGIN_BIT BIT(1)
  99. #define WDOG_TIMER_EN_BIT BIT(0)
  100. #define MISC_CUST_SDCDC_CLK_CFG_REG (MISC_BASE + 0xA0)
  101. #define SWITCHER_CLK_FREQ_MASK GENMASK(3, 0)
  102. #define MISC_CUST_SDCDC_ILIMIT_CFG_REG (MISC_BASE + 0xA1)
  103. #define LS_VALLEY_THRESH_PCT_BIT BIT(3)
  104. #define PCL_LIMIT_MASK GENMASK(1, 0)
  105. #define SNARL_BARK_BITE_WD_CFG_REG (MISC_BASE + 0x53)
  106. #define BITE_WDOG_DISABLE_CHARGING_CFG_BIT BIT(7)
  107. #define SNARL_WDOG_TIMEOUT_MASK GENMASK(6, 4)
  108. #define BARK_WDOG_TIMEOUT_MASK GENMASK(3, 2)
  109. #define BITE_WDOG_TIMEOUT_MASK GENMASK(1, 0)
  110. #define MISC_THERMREG_SRC_CFG_REG (MISC_BASE + 0x70)
  111. #define BYP_THERM_CHG_CURR_ADJUST_BIT BIT(2)
  112. #define THERMREG_SKIN_CMP_SRC_EN_BIT BIT(1)
  113. #define THERMREG_DIE_CMP_SRC_EN_BIT BIT(0)
  114. #define MISC_CHGR_TRIM_OPTIONS_REG (MISC_BASE + 0x55)
  115. #define CMD_RBIAS_EN_BIT BIT(2)
  116. #define MISC_ENG_SDCDC_RESERVE1_REG (MISC_BASE + 0xC4)
  117. #define MINOFF_TIME_MASK BIT(6)
  118. #define MISC_ENG_SDCDC_CFG8_REG (MISC_BASE + 0xC7)
  119. #define DEAD_TIME_MASK GENMASK(2, 0)
  120. #define DEAD_TIME_32NS 0x4
  121. #define MISC_ENG_SDCDC_INPUT_CURRENT_CFG1_REG (MISC_BASE + 0xC8)
  122. #define PROLONG_ISENSE_MASK GENMASK(7, 6)
  123. #define PROLONG_ISENSEM_SHIFT 6
  124. #define SAMPLE_HOLD_DELAY_MASK GENMASK(5, 2)
  125. #define SAMPLE_HOLD_DELAY_SHIFT 2
  126. #define DISABLE_ILIMIT_BIT BIT(0)
  127. #define MISC_ENG_SDCDC_INPUT_CURRENT_CFG2_REG (MISC_BASE + 0xC9)
  128. #define INPUT_CURRENT_LIMIT_SOURCE_BIT BIT(7)
  129. #define TC_ISENSE_AMPLIFIER_MASK GENMASK(6, 4)
  130. #define TC_ISENSE_AMPLIFIER_SHIFT 4
  131. #define HS_II_CORRECTION_MASK GENMASK(3, 0)
  132. #define MISC_ENG_SDCDC_RESERVE3_REG (MISC_BASE + 0xCB)
  133. #define VDDCAP_SHORT_DISABLE_TRISTATE_BIT BIT(7)
  134. #define PCL_SHUTDOWN_BUCK_BIT BIT(6)
  135. #define ISENSE_TC_CORRECTION_BIT BIT(5)
  136. #define II_SOURCE_BIT BIT(4)
  137. #define SCALE_SLOPE_COMP_MASK GENMASK(3, 0)
  138. #define USBIN_CURRENT_LIMIT_CFG_REG (USBIN_BASE + 0x70)
  139. #define USB_TR_SCPATH_ICL_1X_GAIN_REG (USBIN_BASE + 0xF2)
  140. #define TR_SCPATH_ICL_1X_GAIN_MASK GENMASK(5, 0)
  141. #define IS_USBIN(mode) \
  142. ((mode == QTI_POWER_SUPPLY_PL_USBIN_USBIN) \
  143. || (mode == QTI_POWER_SUPPLY_PL_USBIN_USBIN_EXT))
  144. #define PARALLEL_ENABLE_VOTER "PARALLEL_ENABLE_VOTER"
  145. struct smb_chg_param {
  146. const char *name;
  147. u16 reg;
  148. int min_u;
  149. int max_u;
  150. int step_u;
  151. };
  152. struct smb_params {
  153. struct smb_chg_param fcc;
  154. struct smb_chg_param ov;
  155. struct smb_chg_param usb_icl;
  156. };
  157. static struct smb_params v1_params = {
  158. .fcc = {
  159. .name = "fast charge current",
  160. .reg = FAST_CHARGE_CURRENT_CFG_REG,
  161. .min_u = 0,
  162. .max_u = 6000000,
  163. .step_u = 25000,
  164. },
  165. .ov = {
  166. .name = "battery over voltage",
  167. .reg = CHGR_BATTOV_CFG_REG,
  168. .min_u = 2450000,
  169. .max_u = 5000000,
  170. .step_u = 10000,
  171. },
  172. .usb_icl = {
  173. .name = "usb input current limit",
  174. .reg = USBIN_CURRENT_LIMIT_CFG_REG,
  175. .min_u = 100000,
  176. .max_u = 5000000,
  177. .step_u = 30000,
  178. },
  179. };
  180. struct smb_irq_info {
  181. const char *name;
  182. const irq_handler_t handler;
  183. const bool wake;
  184. int irq;
  185. };
  186. struct smb_dt_props {
  187. bool disable_ctm;
  188. int pl_mode;
  189. int pl_batfet_mode;
  190. bool hw_die_temp_mitigation;
  191. u32 die_temp_threshold;
  192. };
  193. struct smb1355 {
  194. struct device *dev;
  195. char *name;
  196. struct regmap *regmap;
  197. int max_fcc;
  198. struct smb_dt_props dt;
  199. struct smb_params param;
  200. struct mutex write_lock;
  201. struct mutex suspend_lock;
  202. struct power_supply *parallel_psy;
  203. struct iio_dev *indio_dev;
  204. struct iio_chan_spec *iio_chan;
  205. int d_health;
  206. int c_health;
  207. int c_charger_temp_max;
  208. int die_temp_deciDegC;
  209. int suspended_usb_icl;
  210. int charge_type;
  211. int vbatt_uv;
  212. int fcc_ua;
  213. bool exit_die_temp;
  214. struct delayed_work die_temp_work;
  215. bool disabled;
  216. bool suspended;
  217. bool charging_enabled;
  218. bool pin_status;
  219. struct votable *irq_disable_votable;
  220. struct votable *fcc_votable;
  221. struct votable *fv_votable;
  222. };
  223. enum {
  224. CONNECTOR_TEMP = 0,
  225. DIE_TEMP,
  226. };
  227. struct smb1355_iio_channel {
  228. const char *datasheet_name;
  229. int channel_num;
  230. enum iio_chan_type type;
  231. long info_mask;
  232. };
  233. #define PL_IIO_CHAN(_name, _num, _type, _mask) \
  234. { \
  235. .datasheet_name = _name, \
  236. .channel_num = _num, \
  237. .type = _type, \
  238. .info_mask = _mask, \
  239. },
  240. #define PL_CHAN_ENERGY(_name, _num) \
  241. PL_IIO_CHAN(_name, _num, IIO_ENERGY, \
  242. BIT(IIO_CHAN_INFO_PROCESSED))
  243. #define PL_CHAN_INDEX(_name, _num) \
  244. PL_IIO_CHAN(_name, _num, IIO_INDEX, \
  245. BIT(IIO_CHAN_INFO_PROCESSED))
  246. #define PL_CHAN_TEMP(_name, _num) \
  247. PL_IIO_CHAN(_name, _num, IIO_TEMP, \
  248. BIT(IIO_CHAN_INFO_PROCESSED))
  249. #define PL_CHAN_VOLT(_name, _num) \
  250. PL_IIO_CHAN(_name, _num, IIO_VOLTAGE, \
  251. BIT(IIO_CHAN_INFO_PROCESSED))
  252. #define PL_CHAN_CURR(_name, _num) \
  253. PL_IIO_CHAN(_name, _num, IIO_CURRENT, \
  254. BIT(IIO_CHAN_INFO_PROCESSED))
  255. static const struct smb1355_iio_channel smb1355_iio_channels[] = {
  256. PL_CHAN_ENERGY("charge_type", PSY_IIO_CHARGE_TYPE)
  257. PL_CHAN_INDEX("online", PSY_IIO_ONLINE)
  258. PL_CHAN_INDEX("charging_enabled", PSY_IIO_CHARGING_ENABLED)
  259. PL_CHAN_INDEX("pin_enabled", PSY_IIO_PIN_ENABLED)
  260. PL_CHAN_INDEX("input_suspend", PSY_IIO_INPUT_SUSPEND)
  261. PL_CHAN_TEMP("charger_temp", PSY_IIO_CHARGER_TEMP)
  262. PL_CHAN_TEMP("charger_temp_max", PSY_IIO_CHARGER_TEMP_MAX)
  263. PL_CHAN_VOLT("voltage_max", PSY_IIO_VOLTAGE_MAX)
  264. PL_CHAN_CURR("constant_charge_current_max",
  265. PSY_IIO_CONSTANT_CHARGE_CURRENT_MAX)
  266. PL_CHAN_INDEX("parallel_mode", PSY_IIO_PARALLEL_MODE)
  267. PL_CHAN_INDEX("connector_health", PSY_IIO_CONNECTOR_HEALTH)
  268. PL_CHAN_INDEX("parallel_batfet_mode", PSY_IIO_PARALLEL_BATFET_MODE)
  269. PL_CHAN_CURR("parallel_fcc_max", PSY_IIO_PARALLEL_FCC_MAX)
  270. PL_CHAN_CURR("input_current_limited", PSY_IIO_INPUT_CURRENT_LIMITED)
  271. PL_CHAN_CURR("min_icl", PSY_IIO_MIN_ICL)
  272. PL_CHAN_CURR("current_max", PSY_IIO_CURRENT_MAX)
  273. PL_CHAN_INDEX("set_ship_mode", PSY_IIO_SET_SHIP_MODE)
  274. PL_CHAN_INDEX("die_health", PSY_IIO_DIE_HEALTH)
  275. };
  276. static bool is_secure(struct smb1355 *chip, int addr)
  277. {
  278. if (addr == CLOCK_REQUEST_REG || addr == I2C_SS_DIG_PMIC_SID_REG)
  279. return true;
  280. /* assume everything above 0xA0 is secure */
  281. return (addr & 0xFF) >= 0xA0;
  282. }
  283. static bool is_voter_available(struct smb1355 *chip)
  284. {
  285. if (!chip->fcc_votable) {
  286. chip->fcc_votable = find_votable("FCC");
  287. if (!chip->fcc_votable) {
  288. pr_debug("Couldn't find FCC votable\n");
  289. return false;
  290. }
  291. }
  292. if (!chip->fv_votable) {
  293. chip->fv_votable = find_votable("FV");
  294. if (!chip->fv_votable) {
  295. pr_debug("Couldn't find FV votable\n");
  296. return false;
  297. }
  298. }
  299. return true;
  300. }
  301. static int smb1355_read(struct smb1355 *chip, u16 addr, u8 *val)
  302. {
  303. unsigned int temp;
  304. int rc;
  305. rc = regmap_read(chip->regmap, addr, &temp);
  306. if (rc >= 0)
  307. *val = (u8)temp;
  308. return rc;
  309. }
  310. static int smb1355_masked_force_write(struct smb1355 *chip, u16 addr, u8 mask,
  311. u8 val)
  312. {
  313. int rc;
  314. mutex_lock(&chip->write_lock);
  315. if (is_secure(chip, addr)) {
  316. rc = regmap_write(chip->regmap, (addr & 0xFF00) | 0xD0, 0xA5);
  317. if (rc < 0)
  318. goto unlock;
  319. }
  320. rc = regmap_write_bits(chip->regmap, addr, mask, val);
  321. unlock:
  322. mutex_unlock(&chip->write_lock);
  323. return rc;
  324. }
  325. static int smb1355_masked_write(struct smb1355 *chip, u16 addr, u8 mask, u8 val)
  326. {
  327. int rc;
  328. mutex_lock(&chip->write_lock);
  329. if (is_secure(chip, addr)) {
  330. rc = regmap_write(chip->regmap, (addr & 0xFF00) | 0xD0, 0xA5);
  331. if (rc < 0)
  332. goto unlock;
  333. }
  334. rc = regmap_update_bits(chip->regmap, addr, mask, val);
  335. unlock:
  336. mutex_unlock(&chip->write_lock);
  337. return rc;
  338. }
  339. static int smb1355_write(struct smb1355 *chip, u16 addr, u8 val)
  340. {
  341. int rc;
  342. mutex_lock(&chip->write_lock);
  343. if (is_secure(chip, addr)) {
  344. rc = regmap_write(chip->regmap, (addr & ~(0xFF)) | 0xD0, 0xA5);
  345. if (rc < 0)
  346. goto unlock;
  347. }
  348. rc = regmap_write(chip->regmap, addr, val);
  349. unlock:
  350. mutex_unlock(&chip->write_lock);
  351. return rc;
  352. }
  353. static int smb1355_set_charge_param(struct smb1355 *chip,
  354. struct smb_chg_param *param, int val_u)
  355. {
  356. int rc;
  357. u8 val_raw;
  358. if (val_u > param->max_u || val_u < param->min_u) {
  359. pr_err("%s: %d is out of range [%d, %d]\n",
  360. param->name, val_u, param->min_u, param->max_u);
  361. return -EINVAL;
  362. }
  363. val_raw = (val_u - param->min_u) / param->step_u;
  364. rc = smb1355_write(chip, param->reg, val_raw);
  365. if (rc < 0) {
  366. pr_err("%s: Couldn't write 0x%02x to 0x%04x rc=%d\n",
  367. param->name, val_raw, param->reg, rc);
  368. return rc;
  369. }
  370. return rc;
  371. }
  372. static int smb1355_get_charge_param(struct smb1355 *chip,
  373. struct smb_chg_param *param, int *val_u)
  374. {
  375. int rc;
  376. u8 val_raw;
  377. rc = smb1355_read(chip, param->reg, &val_raw);
  378. if (rc < 0) {
  379. pr_err("%s: Couldn't read from 0x%04x rc=%d\n",
  380. param->name, param->reg, rc);
  381. return rc;
  382. }
  383. *val_u = val_raw * param->step_u + param->min_u;
  384. return rc;
  385. }
  386. #define UB_COMP_OFFSET_DEGC 34
  387. #define DIE_TEMP_MEAS_PERIOD_MS 10000
  388. static void die_temp_work(struct work_struct *work)
  389. {
  390. struct smb1355 *chip = container_of(work, struct smb1355,
  391. die_temp_work.work);
  392. int rc, i;
  393. u8 temp_stat;
  394. for (i = 0; i < BIT(5); i++) {
  395. rc = smb1355_masked_write(chip, SMB2CHG_BATIF_ENG_SMISC_DIETEMP,
  396. TDIE_COMPARATOR_THRESHOLD, i);
  397. if (rc < 0) {
  398. pr_err("Couldn't set temp comp threshold rc=%d\n", rc);
  399. continue;
  400. }
  401. if (chip->exit_die_temp)
  402. return;
  403. /* wait for the comparator output to deglitch */
  404. msleep(100);
  405. rc = smb1355_read(chip, TEMP_COMP_STATUS_REG, &temp_stat);
  406. if (rc < 0) {
  407. pr_err("Couldn't read temp comp status rc=%d\n", rc);
  408. continue;
  409. }
  410. if (!(temp_stat & TEMP_UB_HOT_BIT)) {
  411. /* found the temp */
  412. break;
  413. }
  414. }
  415. chip->die_temp_deciDegC = 10 * (i + UB_COMP_OFFSET_DEGC);
  416. schedule_delayed_work(&chip->die_temp_work,
  417. msecs_to_jiffies(DIE_TEMP_MEAS_PERIOD_MS));
  418. }
  419. static int smb1355_get_prop_input_current_limited(struct smb1355 *chip,
  420. int *val)
  421. {
  422. int rc;
  423. u8 stat = 0;
  424. rc = smb1355_read(chip, MISC_RT_STS_REG, &stat);
  425. if (rc < 0)
  426. pr_err("Couldn't read SMB1355_BATTERY_STATUS_3 rc=%d\n", rc);
  427. *val = !!(stat & HARD_ILIMIT_RT_STS_BIT);
  428. return 0;
  429. }
  430. static irqreturn_t smb1355_handle_chg_state_change(int irq, void *data)
  431. {
  432. struct smb1355 *chip = data;
  433. if (chip->parallel_psy)
  434. power_supply_changed(chip->parallel_psy);
  435. return IRQ_HANDLED;
  436. }
  437. static irqreturn_t smb1355_handle_wdog_bark(int irq, void *data)
  438. {
  439. struct smb1355 *chip = data;
  440. int rc;
  441. rc = smb1355_write(chip, BARK_BITE_WDOG_PET_REG,
  442. BARK_BITE_WDOG_PET_BIT);
  443. if (rc < 0)
  444. pr_err("Couldn't pet the dog rc=%d\n", rc);
  445. return IRQ_HANDLED;
  446. }
  447. static irqreturn_t smb1355_handle_temperature_change(int irq, void *data)
  448. {
  449. struct smb1355 *chip = data;
  450. if (chip->parallel_psy)
  451. power_supply_changed(chip->parallel_psy);
  452. return IRQ_HANDLED;
  453. }
  454. static int smb1355_determine_initial_status(struct smb1355 *chip)
  455. {
  456. smb1355_handle_temperature_change(0, chip);
  457. return 0;
  458. }
  459. #define DEFAULT_DIE_TEMP_LOW_THRESHOLD 90
  460. static int smb1355_parse_dt(struct smb1355 *chip)
  461. {
  462. struct device_node *node = chip->dev->of_node;
  463. int rc = 0;
  464. if (!node) {
  465. pr_err("device tree node missing\n");
  466. return -EINVAL;
  467. }
  468. chip->dt.disable_ctm =
  469. of_property_read_bool(node, "qcom,disable-ctm");
  470. /*
  471. * If parallel-mode property is not present default
  472. * parallel configuration is USBMID-USBMID.
  473. */
  474. rc = of_property_read_u32(node,
  475. "qcom,parallel-mode", &chip->dt.pl_mode);
  476. if (rc < 0)
  477. chip->dt.pl_mode = QTI_POWER_SUPPLY_PL_USBMID_USBMID;
  478. /*
  479. * If stacked-batfet property is not present default
  480. * configuration is NON-STACKED-BATFET.
  481. */
  482. chip->dt.pl_batfet_mode = QTI_POWER_SUPPLY_PL_NON_STACKED_BATFET;
  483. if (of_property_read_bool(node, "qcom,stacked-batfet"))
  484. chip->dt.pl_batfet_mode = QTI_POWER_SUPPLY_PL_STACKED_BATFET;
  485. chip->dt.hw_die_temp_mitigation = of_property_read_bool(node,
  486. "qcom,hw-die-temp-mitigation");
  487. chip->dt.die_temp_threshold = DEFAULT_DIE_TEMP_LOW_THRESHOLD;
  488. of_property_read_u32(node, "qcom,die-temp-threshold-degc",
  489. &chip->dt.die_temp_threshold);
  490. if (chip->dt.die_temp_threshold > DIE_LOW_RANGE_MAX_DEGC)
  491. chip->dt.die_temp_threshold = DIE_LOW_RANGE_MAX_DEGC;
  492. return 0;
  493. }
  494. static int smb1355_get_prop_batt_charge_type(struct smb1355 *chip,
  495. int *val)
  496. {
  497. int rc;
  498. u8 stat;
  499. rc = smb1355_read(chip, BATTERY_STATUS_3_REG, &stat);
  500. if (rc < 0) {
  501. pr_err("Couldn't read SMB1355_BATTERY_STATUS_3 rc=%d\n", rc);
  502. return rc;
  503. }
  504. if (stat & ENABLE_CHARGING_BIT) {
  505. if (stat & BATT_GT_PRE_TO_FAST_BIT)
  506. *val = POWER_SUPPLY_CHARGE_TYPE_FAST;
  507. else
  508. *val = POWER_SUPPLY_CHARGE_TYPE_TRICKLE;
  509. } else {
  510. *val = POWER_SUPPLY_CHARGE_TYPE_NONE;
  511. }
  512. return rc;
  513. }
  514. static int smb1355_get_prop_health(struct smb1355 *chip, int type)
  515. {
  516. u8 temp;
  517. int rc, shift;
  518. /* Connector-temp uses skin-temp configuration */
  519. shift = (type == CONNECTOR_TEMP) ? SKIN_TEMP_SHIFT : 0;
  520. rc = smb1355_read(chip, TEMP_COMP_STATUS_REG, &temp);
  521. if (rc < 0) {
  522. pr_err("Couldn't read comp stat reg rc = %d\n", rc);
  523. return POWER_SUPPLY_HEALTH_UNKNOWN;
  524. }
  525. if (temp & (TEMP_RST_HOT_BIT << shift))
  526. return POWER_SUPPLY_HEALTH_OVERHEAT;
  527. if (temp & (TEMP_UB_HOT_BIT << shift))
  528. return POWER_SUPPLY_HEALTH_HOT;
  529. if (temp & (TEMP_LB_HOT_BIT << shift))
  530. return POWER_SUPPLY_HEALTH_WARM;
  531. return POWER_SUPPLY_HEALTH_COOL;
  532. }
  533. static int smb1355_get_prop_voltage_max(struct smb1355 *chip, int *val)
  534. {
  535. int rc = 0;
  536. mutex_lock(&chip->suspend_lock);
  537. if (chip->suspended) {
  538. *val = chip->vbatt_uv;
  539. goto done;
  540. }
  541. rc = smb1355_get_charge_param(chip, &chip->param.ov, val);
  542. if (rc < 0)
  543. pr_err("failed to read vbatt rc=%d\n", rc);
  544. else
  545. chip->vbatt_uv = *val;
  546. done:
  547. mutex_unlock(&chip->suspend_lock);
  548. return rc;
  549. }
  550. static int smb1355_get_prop_constant_charge_current_max(struct smb1355 *chip,
  551. int *val)
  552. {
  553. int rc = 0;
  554. mutex_lock(&chip->suspend_lock);
  555. if (chip->suspended) {
  556. *val = chip->fcc_ua;
  557. goto done;
  558. }
  559. rc = smb1355_get_charge_param(chip, &chip->param.fcc, val);
  560. if (rc < 0)
  561. pr_err("failed to read fcc rc=%d\n", rc);
  562. else
  563. chip->fcc_ua = *val;
  564. done:
  565. mutex_unlock(&chip->suspend_lock);
  566. return rc;
  567. }
  568. static int smb1355_get_prop_health_value(struct smb1355 *chip,
  569. int *val, int type)
  570. {
  571. mutex_lock(&chip->suspend_lock);
  572. if (chip->suspended) {
  573. *val = (type == DIE_TEMP) ? chip->d_health :
  574. chip->c_health;
  575. } else {
  576. *val = smb1355_get_prop_health(chip, (type == DIE_TEMP) ?
  577. DIE_TEMP : CONNECTOR_TEMP);
  578. if (type == DIE_TEMP)
  579. chip->d_health = *val;
  580. else
  581. chip->c_health = *val;
  582. }
  583. mutex_unlock(&chip->suspend_lock);
  584. return 0;
  585. }
  586. static int smb1355_get_prop_online(struct smb1355 *chip, int *val)
  587. {
  588. int rc = 0;
  589. u8 stat;
  590. mutex_lock(&chip->suspend_lock);
  591. if (chip->suspended) {
  592. *val = chip->charging_enabled;
  593. goto done;
  594. }
  595. rc = smb1355_read(chip, BATTERY_STATUS_3_REG, &stat);
  596. if (rc < 0) {
  597. pr_err("failed to read BATTERY_STATUS_3_REG %d\n", rc);
  598. } else {
  599. *val = (bool)(stat & ENABLE_CHARGING_BIT);
  600. chip->charging_enabled = *val;
  601. }
  602. done:
  603. mutex_unlock(&chip->suspend_lock);
  604. return rc;
  605. }
  606. static int smb1355_get_prop_pin_enabled(struct smb1355 *chip, int *val)
  607. {
  608. int rc = 0;
  609. u8 stat;
  610. mutex_lock(&chip->suspend_lock);
  611. if (chip->suspended) {
  612. *val = chip->pin_status;
  613. goto done;
  614. }
  615. rc = smb1355_read(chip, BATTERY_STATUS_2_REG, &stat);
  616. if (rc < 0) {
  617. pr_err("failed to read BATTERY_STATUS_2_REG %d\n", rc);
  618. } else {
  619. *val = !(stat & DISABLE_CHARGING_BIT);
  620. chip->pin_status = *val;
  621. }
  622. done:
  623. mutex_unlock(&chip->suspend_lock);
  624. return rc;
  625. }
  626. static int smb1355_get_prop_charge_type(struct smb1355 *chip, int *val)
  627. {
  628. int rc = 0;
  629. /*
  630. * In case of system suspend we should not allow
  631. * register reads and writes to the device as it
  632. * leads to i2c transaction failures.
  633. */
  634. mutex_lock(&chip->suspend_lock);
  635. if (chip->suspended) {
  636. *val = chip->charge_type;
  637. goto done;
  638. }
  639. rc = smb1355_get_prop_batt_charge_type(chip, val);
  640. if (rc < 0)
  641. pr_err("failed to read batt_charge_type %d\n", rc);
  642. else
  643. chip->charge_type = *val;
  644. done:
  645. mutex_unlock(&chip->suspend_lock);
  646. return rc;
  647. }
  648. #define MIN_PARALLEL_ICL_UA 250000
  649. #define SUSPEND_CURRENT_UA 2000
  650. static int smb1355_set_parallel_charging(struct smb1355 *chip, bool disable)
  651. {
  652. int rc;
  653. if (chip->disabled == disable)
  654. return 0;
  655. if (IS_USBIN(chip->dt.pl_mode)) {
  656. /*
  657. * Initialize ICL configuration to minimum value while
  658. * depending upon the set icl configuration method to properly
  659. * configure the ICL value. At the same time, cache the value
  660. * of ICL to be reported as 2mA.
  661. */
  662. chip->suspended_usb_icl = SUSPEND_CURRENT_UA;
  663. smb1355_set_charge_param(chip,
  664. &chip->param.usb_icl, MIN_PARALLEL_ICL_UA);
  665. }
  666. rc = smb1355_masked_write(chip, WD_CFG_REG, WDOG_TIMER_EN_BIT,
  667. disable ? 0 : WDOG_TIMER_EN_BIT);
  668. if (rc < 0) {
  669. pr_err("Couldn't %s watchdog rc=%d\n",
  670. disable ? "disable" : "enable", rc);
  671. disable = true;
  672. }
  673. /*
  674. * Configure charge enable for high polarity and
  675. * When disabling charging set it to cmd register control(cmd bit=0)
  676. * When enabling charging set it to pin control
  677. */
  678. rc = smb1355_masked_write(chip, CHGR_CFG2_REG,
  679. CHG_EN_POLARITY_BIT | CHG_EN_SRC_BIT,
  680. disable ? 0 : CHG_EN_SRC_BIT);
  681. if (rc < 0) {
  682. pr_err("Couldn't configure charge enable source rc=%d\n", rc);
  683. disable = true;
  684. }
  685. chip->die_temp_deciDegC = -EINVAL;
  686. /* Only enable temperature measurement for s/w based mitigation */
  687. if (!chip->dt.hw_die_temp_mitigation) {
  688. if (disable) {
  689. chip->exit_die_temp = true;
  690. cancel_delayed_work_sync(&chip->die_temp_work);
  691. } else {
  692. /* start the work to measure temperature */
  693. chip->exit_die_temp = false;
  694. schedule_delayed_work(&chip->die_temp_work, 0);
  695. }
  696. }
  697. if (chip->irq_disable_votable)
  698. vote(chip->irq_disable_votable, PARALLEL_ENABLE_VOTER,
  699. disable, 0);
  700. rc = smb1355_masked_write(chip, BANDGAP_ENABLE_REG,
  701. BANDGAP_ENABLE_CMD_BIT,
  702. disable ? 0 : BANDGAP_ENABLE_CMD_BIT);
  703. if (rc < 0) {
  704. pr_err("Couldn't configure bandgap enable rc=%d\n", rc);
  705. return rc;
  706. }
  707. chip->disabled = disable;
  708. return 0;
  709. }
  710. static int smb1355_set_current_max(struct smb1355 *chip, int curr)
  711. {
  712. int rc = 0;
  713. if (!IS_USBIN(chip->dt.pl_mode))
  714. return 0;
  715. if ((curr / 1000) < 100) {
  716. /* disable parallel path (ICL < 100mA) */
  717. rc = smb1355_set_parallel_charging(chip, true);
  718. } else {
  719. rc = smb1355_set_parallel_charging(chip, false);
  720. if (rc < 0)
  721. return rc;
  722. rc = smb1355_set_charge_param(chip,
  723. &chip->param.usb_icl, curr);
  724. chip->suspended_usb_icl = 0;
  725. }
  726. return rc;
  727. }
  728. static int smb1355_clk_request(struct smb1355 *chip, bool enable)
  729. {
  730. int rc;
  731. rc = smb1355_masked_force_write(chip, CLOCK_REQUEST_REG,
  732. CLOCK_REQUEST_CMD_BIT,
  733. enable ? CLOCK_REQUEST_CMD_BIT : 0);
  734. if (rc < 0)
  735. pr_err("Couldn't %s clock rc=%d\n",
  736. enable ? "enable" : "disable", rc);
  737. return rc;
  738. }
  739. static int smb1355_parallel_get_prop(struct power_supply *psy,
  740. enum power_supply_property prop,
  741. union power_supply_propval *pval)
  742. {
  743. struct smb1355 *chip = power_supply_get_drvdata(psy);
  744. switch (prop) {
  745. case POWER_SUPPLY_PROP_MODEL_NAME:
  746. pval->strval = chip->name;
  747. break;
  748. default:
  749. pr_err_ratelimited("parallel psy get prop %d not supported\n",
  750. prop);
  751. return -EINVAL;
  752. }
  753. return 0;
  754. }
  755. /*****************************
  756. * PARALLEL PSY REGISTRATION *
  757. *****************************/
  758. static enum power_supply_property smb1355_parallel_props[] = {
  759. POWER_SUPPLY_PROP_MODEL_NAME,
  760. };
  761. static struct power_supply_desc parallel_psy_desc = {
  762. .name = "parallel",
  763. .type = POWER_SUPPLY_TYPE_MAINS,
  764. .properties = smb1355_parallel_props,
  765. .num_properties = ARRAY_SIZE(smb1355_parallel_props),
  766. .get_property = smb1355_parallel_get_prop,
  767. };
  768. static int smb1355_init_parallel_psy(struct smb1355 *chip)
  769. {
  770. struct power_supply_config parallel_cfg = {};
  771. parallel_cfg.drv_data = chip;
  772. parallel_cfg.of_node = chip->dev->of_node;
  773. /* change to smb1355's property list */
  774. parallel_psy_desc.properties = smb1355_parallel_props;
  775. parallel_psy_desc.num_properties = ARRAY_SIZE(smb1355_parallel_props);
  776. chip->parallel_psy = devm_power_supply_register(chip->dev,
  777. &parallel_psy_desc,
  778. &parallel_cfg);
  779. if (IS_ERR(chip->parallel_psy)) {
  780. pr_err("Couldn't register parallel power supply\n");
  781. return PTR_ERR(chip->parallel_psy);
  782. }
  783. return 0;
  784. }
  785. static int smb1355_iio_read_raw(struct iio_dev *indio_dev,
  786. struct iio_chan_spec const *chan,
  787. int *val1, int *val2, long mask)
  788. {
  789. struct smb1355 *chip = iio_priv(indio_dev);
  790. int rc = 0;
  791. *val1 = 0;
  792. switch (chan->channel) {
  793. case PSY_IIO_CHARGE_TYPE:
  794. rc = smb1355_get_prop_charge_type(chip, val1);
  795. break;
  796. case PSY_IIO_CHARGING_ENABLED:
  797. case PSY_IIO_ONLINE:
  798. rc = smb1355_get_prop_online(chip, val1);
  799. break;
  800. case PSY_IIO_PIN_ENABLED:
  801. rc = smb1355_get_prop_pin_enabled(chip, val1);
  802. break;
  803. case PSY_IIO_CHARGER_TEMP:
  804. *val1 = chip->die_temp_deciDegC;
  805. break;
  806. case PSY_IIO_CHARGER_TEMP_MAX:
  807. /*
  808. * In case of h/w controlled die_temp mitigation,
  809. * die_temp/die_temp_max can not be reported as this
  810. * requires run time manipulation of DIE_TEMP low
  811. * threshold which will interfere with h/w mitigation
  812. * scheme.
  813. */
  814. if (chip->dt.hw_die_temp_mitigation)
  815. *val1 = -EINVAL;
  816. else
  817. *val1 = chip->c_charger_temp_max;
  818. break;
  819. case PSY_IIO_INPUT_SUSPEND:
  820. *val1 = chip->disabled;
  821. break;
  822. case PSY_IIO_VOLTAGE_MAX:
  823. rc = smb1355_get_prop_voltage_max(chip, val1);
  824. break;
  825. case PSY_IIO_CONSTANT_CHARGE_CURRENT_MAX:
  826. rc = smb1355_get_prop_constant_charge_current_max(chip, val1);
  827. break;
  828. case PSY_IIO_PARALLEL_MODE:
  829. *val1 = chip->dt.pl_mode;
  830. break;
  831. case PSY_IIO_CONNECTOR_HEALTH:
  832. if (chip->c_health == -EINVAL)
  833. rc = smb1355_get_prop_health_value(chip, val1,
  834. CONNECTOR_TEMP);
  835. else
  836. *val1 = chip->c_health;
  837. break;
  838. case PSY_IIO_DIE_HEALTH:
  839. rc = smb1355_get_prop_health_value(chip, val1, DIE_TEMP);
  840. break;
  841. case PSY_IIO_PARALLEL_BATFET_MODE:
  842. *val1 = chip->dt.pl_batfet_mode;
  843. break;
  844. case PSY_IIO_INPUT_CURRENT_LIMITED:
  845. if (IS_USBIN(chip->dt.pl_mode))
  846. rc = smb1355_get_prop_input_current_limited(
  847. chip, val1);
  848. else
  849. *val1 = 0;
  850. break;
  851. case PSY_IIO_CURRENT_MAX:
  852. if (IS_USBIN(chip->dt.pl_mode)) {
  853. /* Report cached ICL until its configured correctly */
  854. if (chip->suspended_usb_icl)
  855. *val1 = chip->suspended_usb_icl;
  856. else
  857. rc = smb1355_get_charge_param(chip,
  858. &chip->param.usb_icl, val1);
  859. } else {
  860. *val1 = 0;
  861. }
  862. break;
  863. case PSY_IIO_MIN_ICL:
  864. *val1 = MIN_PARALLEL_ICL_UA;
  865. break;
  866. case PSY_IIO_PARALLEL_FCC_MAX:
  867. *val1 = chip->max_fcc;
  868. break;
  869. case PSY_IIO_SET_SHIP_MODE:
  870. /* Not in ship mode as long as device is active */
  871. *val1 = 0;
  872. break;
  873. default:
  874. pr_err_ratelimited("SMB1355 IIO channel %x not supported\n",
  875. chan->channel);
  876. return -EINVAL;
  877. }
  878. if (rc < 0) {
  879. pr_debug("Couldn't read channel %x rc = %d\n",
  880. chan->channel, rc);
  881. return -ENODATA;
  882. }
  883. return IIO_VAL_INT;
  884. }
  885. static int smb1355_iio_write_raw(struct iio_dev *indio_dev,
  886. struct iio_chan_spec const *chan,
  887. int val1, int val2, long mask)
  888. {
  889. struct smb1355 *chip = iio_priv(indio_dev);
  890. int rc = 0;
  891. mutex_lock(&chip->suspend_lock);
  892. if (chip->suspended) {
  893. pr_debug("SMB1355 IIO write channel %d\n",
  894. chan->channel);
  895. goto done;
  896. }
  897. switch (chan->channel) {
  898. case PSY_IIO_INPUT_SUSPEND:
  899. rc = smb1355_set_parallel_charging(chip, (bool)val1);
  900. break;
  901. case PSY_IIO_CURRENT_MAX:
  902. rc = smb1355_set_current_max(chip, val1);
  903. break;
  904. case PSY_IIO_VOLTAGE_MAX:
  905. rc = smb1355_set_charge_param(chip, &chip->param.ov,
  906. val1);
  907. break;
  908. case PSY_IIO_CONSTANT_CHARGE_CURRENT_MAX:
  909. rc = smb1355_set_charge_param(chip, &chip->param.fcc,
  910. val1);
  911. break;
  912. case PSY_IIO_CONNECTOR_HEALTH:
  913. chip->c_health = val1;
  914. power_supply_changed(chip->parallel_psy);
  915. break;
  916. case PSY_IIO_CHARGER_TEMP_MAX:
  917. chip->c_charger_temp_max = val1;
  918. break;
  919. case PSY_IIO_SET_SHIP_MODE:
  920. if (!val1)
  921. break;
  922. rc = smb1355_clk_request(chip, false);
  923. break;
  924. default:
  925. rc = -EINVAL;
  926. }
  927. if (rc < 0)
  928. pr_debug("Couldn't write to channel %x rc = %d\n",
  929. chan->channel, rc);
  930. done:
  931. mutex_unlock(&chip->suspend_lock);
  932. return rc;
  933. }
  934. static int smb1355_iio_fwnode_xlate(struct iio_dev *indio_dev,
  935. const struct fwnode_reference_args *iiospec)
  936. {
  937. struct smb1355 *chip = iio_priv(indio_dev);
  938. struct iio_chan_spec *iio_chan = chip->iio_chan;
  939. int i;
  940. for (i = 0; i < ARRAY_SIZE(smb1355_iio_channels);
  941. i++, iio_chan++)
  942. if (iio_chan->channel == iiospec->args[0])
  943. return i;
  944. return -EINVAL;
  945. }
  946. static const struct iio_info smb1355_iio_info = {
  947. .read_raw = smb1355_iio_read_raw,
  948. .write_raw = smb1355_iio_write_raw,
  949. .fwnode_xlate = smb1355_iio_fwnode_xlate,
  950. };
  951. static int smb1355_init_iio_psy(struct smb1355 *chip)
  952. {
  953. struct iio_dev *indio_dev = chip->indio_dev;
  954. struct iio_chan_spec *chan;
  955. int smb1355_num_iio_channels = ARRAY_SIZE(smb1355_iio_channels);
  956. int rc, i;
  957. chip->iio_chan = devm_kcalloc(chip->dev,
  958. smb1355_num_iio_channels,
  959. sizeof(*chip->iio_chan),
  960. GFP_KERNEL);
  961. if (!chip->iio_chan)
  962. return -ENOMEM;
  963. indio_dev->info = &smb1355_iio_info;
  964. indio_dev->dev.parent = chip->dev;
  965. indio_dev->dev.of_node = chip->dev->of_node;
  966. indio_dev->modes = INDIO_DIRECT_MODE;
  967. indio_dev->channels = chip->iio_chan;
  968. indio_dev->num_channels = smb1355_num_iio_channels;
  969. indio_dev->name = "smb1355-charger";
  970. for (i = 0; i < smb1355_num_iio_channels; i++) {
  971. chan = &chip->iio_chan[i];
  972. chan->address = i;
  973. chan->channel = smb1355_iio_channels[i].channel_num;
  974. chan->type = smb1355_iio_channels[i].type;
  975. chan->datasheet_name =
  976. smb1355_iio_channels[i].datasheet_name;
  977. chan->extend_name =
  978. smb1355_iio_channels[i].datasheet_name;
  979. chan->info_mask_separate =
  980. smb1355_iio_channels[i].info_mask;
  981. }
  982. rc = devm_iio_device_register(chip->dev, indio_dev);
  983. if (rc) {
  984. pr_err("Failed to register SMB1355 Parallel IIO device, rc=%d\n",
  985. rc);
  986. return rc;
  987. }
  988. return rc;
  989. }
  990. /***************************
  991. * HARDWARE INITIALIZATION *
  992. ***************************/
  993. #define MFG_ID_SMB1354 0x01
  994. #define MFG_ID_SMB1355 0xFF
  995. #define SMB1354_MAX_PARALLEL_FCC_UA 2500000
  996. #define SMB1355_MAX_PARALLEL_FCC_UA 6000000
  997. static int smb1355_detect_version(struct smb1355 *chip)
  998. {
  999. int rc;
  1000. u8 val;
  1001. rc = smb1355_read(chip, REVID_MFG_ID_SPARE_REG, &val);
  1002. if (rc < 0) {
  1003. pr_err("Unable to read REVID rc=%d\n", rc);
  1004. return rc;
  1005. }
  1006. switch (val) {
  1007. case MFG_ID_SMB1354:
  1008. chip->name = "smb1354";
  1009. chip->max_fcc = SMB1354_MAX_PARALLEL_FCC_UA;
  1010. break;
  1011. case MFG_ID_SMB1355:
  1012. chip->name = "smb1355";
  1013. chip->max_fcc = SMB1355_MAX_PARALLEL_FCC_UA;
  1014. break;
  1015. default:
  1016. pr_err("Invalid value of REVID val=%d\n", val);
  1017. return -EINVAL;
  1018. }
  1019. return rc;
  1020. }
  1021. static int smb1355_tskin_sensor_config(struct smb1355 *chip)
  1022. {
  1023. int rc;
  1024. if (chip->dt.disable_ctm) {
  1025. /*
  1026. * the TSKIN sensor with external resistor needs a bias,
  1027. * disable it here.
  1028. */
  1029. rc = smb1355_masked_write(chip, BATIF_ENG_SCMISC_SPARE1_REG,
  1030. EXT_BIAS_PIN_BIT, 0);
  1031. if (rc < 0) {
  1032. pr_err("Couldn't enable ext bias pin path rc=%d\n",
  1033. rc);
  1034. return rc;
  1035. }
  1036. rc = smb1355_masked_write(chip, BATIF_CFG_SMISC_BATID_REG,
  1037. CFG_SMISC_RBIAS_EXT_CTRL_BIT, 0);
  1038. if (rc < 0) {
  1039. pr_err("Couldn't set BATIF_CFG_SMISC_BATID rc=%d\n",
  1040. rc);
  1041. return rc;
  1042. }
  1043. rc = smb1355_masked_write(chip, MISC_CHGR_TRIM_OPTIONS_REG,
  1044. CMD_RBIAS_EN_BIT, 0);
  1045. if (rc < 0) {
  1046. pr_err("Couldn't set MISC_CHGR_TRIM_OPTIONS rc=%d\n",
  1047. rc);
  1048. return rc;
  1049. }
  1050. /* disable skin temperature comparator source */
  1051. rc = smb1355_masked_write(chip, MISC_THERMREG_SRC_CFG_REG,
  1052. THERMREG_SKIN_CMP_SRC_EN_BIT, 0);
  1053. if (rc < 0) {
  1054. pr_err("Couldn't set Skin temp comparator src rc=%d\n",
  1055. rc);
  1056. return rc;
  1057. }
  1058. } else {
  1059. /*
  1060. * the TSKIN sensor with external resistor needs a bias,
  1061. * enable it here.
  1062. */
  1063. rc = smb1355_masked_write(chip, BATIF_ENG_SCMISC_SPARE1_REG,
  1064. EXT_BIAS_PIN_BIT, EXT_BIAS_PIN_BIT);
  1065. if (rc < 0) {
  1066. pr_err("Couldn't enable ext bias pin path rc=%d\n",
  1067. rc);
  1068. return rc;
  1069. }
  1070. rc = smb1355_masked_write(chip, BATIF_CFG_SMISC_BATID_REG,
  1071. CFG_SMISC_RBIAS_EXT_CTRL_BIT,
  1072. CFG_SMISC_RBIAS_EXT_CTRL_BIT);
  1073. if (rc < 0) {
  1074. pr_err("Couldn't set BATIF_CFG_SMISC_BATID rc=%d\n",
  1075. rc);
  1076. return rc;
  1077. }
  1078. rc = smb1355_masked_write(chip, MISC_CHGR_TRIM_OPTIONS_REG,
  1079. CMD_RBIAS_EN_BIT,
  1080. CMD_RBIAS_EN_BIT);
  1081. if (rc < 0) {
  1082. pr_err("Couldn't set MISC_CHGR_TRIM_OPTIONS rc=%d\n",
  1083. rc);
  1084. return rc;
  1085. }
  1086. /* Enable skin temperature comparator source */
  1087. rc = smb1355_masked_write(chip, MISC_THERMREG_SRC_CFG_REG,
  1088. THERMREG_SKIN_CMP_SRC_EN_BIT,
  1089. THERMREG_SKIN_CMP_SRC_EN_BIT);
  1090. if (rc < 0) {
  1091. pr_err("Couldn't set Skin temp comparator src rc=%d\n",
  1092. rc);
  1093. return rc;
  1094. }
  1095. }
  1096. return rc;
  1097. }
  1098. static int smb1355_init_hw(struct smb1355 *chip)
  1099. {
  1100. int rc;
  1101. u8 val, range;
  1102. /* request clock always on */
  1103. rc = smb1355_clk_request(chip, true);
  1104. if (rc < 0)
  1105. return rc;
  1106. /* Change to let SMB1355 only respond to address 0x0C */
  1107. rc = smb1355_masked_write(chip, I2C_SS_DIG_PMIC_SID_REG,
  1108. PMIC_SID_MASK, PMIC_SID0_BIT);
  1109. if (rc < 0) {
  1110. pr_err("Couldn't configure the I2C_SS_DIG_PMIC_SID_REG rc=%d\n",
  1111. rc);
  1112. return rc;
  1113. }
  1114. /* disable charging when watchdog bites & set bite-timeout to 8secs */
  1115. val = BITE_WDOG_DISABLE_CHARGING_CFG_BIT | 0x3;
  1116. rc = smb1355_masked_write(chip, SNARL_BARK_BITE_WD_CFG_REG,
  1117. BITE_WDOG_DISABLE_CHARGING_CFG_BIT |
  1118. BITE_WDOG_TIMEOUT_MASK, val);
  1119. if (rc < 0) {
  1120. pr_err("Couldn't configure the watchdog bite rc=%d\n", rc);
  1121. return rc;
  1122. }
  1123. /* enable watchdog bark and bite interrupts, and disable the watchdog */
  1124. rc = smb1355_masked_write(chip, WD_CFG_REG, WDOG_TIMER_EN_BIT
  1125. | WDOG_TIMER_EN_ON_PLUGIN_BIT | BITE_WDOG_INT_EN_BIT
  1126. | BARK_WDOG_INT_EN_BIT,
  1127. BITE_WDOG_INT_EN_BIT | BARK_WDOG_INT_EN_BIT);
  1128. if (rc < 0) {
  1129. pr_err("Couldn't configure the watchdog rc=%d\n", rc);
  1130. return rc;
  1131. }
  1132. /*
  1133. * Disable command based SMB1355 enablement and disable parallel
  1134. * charging path by switching to command based mode.
  1135. */
  1136. rc = smb1355_masked_write(chip, CHGR_CHARGING_ENABLE_CMD_REG,
  1137. CHARGING_ENABLE_CMD_BIT, 0);
  1138. if (rc < 0) {
  1139. pr_err("Coudln't configure command bit, rc=%d\n", rc);
  1140. return rc;
  1141. }
  1142. rc = smb1355_set_parallel_charging(chip, true);
  1143. if (rc < 0) {
  1144. pr_err("Couldn't disable parallel path rc=%d\n", rc);
  1145. return rc;
  1146. }
  1147. /* initialize FCC to 0 */
  1148. rc = smb1355_set_charge_param(chip, &chip->param.fcc, 0);
  1149. if (rc < 0) {
  1150. pr_err("Couldn't set 0 FCC rc=%d\n", rc);
  1151. return rc;
  1152. }
  1153. /* HICCUP setting, unlimited retry with 250ms interval */
  1154. rc = smb1355_masked_write(chip, POWER_MODE_HICCUP_CFG,
  1155. HICCUP_TIMEOUT_CFG_MASK | MAX_HICCUP_DUETO_BATDIS_MASK,
  1156. 0);
  1157. if (rc < 0) {
  1158. pr_err("Couldn't set HICCUP interval rc=%d\n",
  1159. rc);
  1160. return rc;
  1161. }
  1162. /* enable parallel current sensing */
  1163. rc = smb1355_masked_write(chip, CFG_REG,
  1164. VCHG_EN_CFG_BIT, VCHG_EN_CFG_BIT);
  1165. if (rc < 0) {
  1166. pr_err("Couldn't enable parallel current sensing rc=%d\n",
  1167. rc);
  1168. return rc;
  1169. }
  1170. /* set Pre-to-Fast Charging Threshold 2.6V */
  1171. rc = smb1355_masked_write(chip, CHGR_PRE_TO_FAST_THRESHOLD_CFG_REG,
  1172. PRE_TO_FAST_CHARGE_THRESHOLD_MASK, 0);
  1173. if (rc < 0) {
  1174. pr_err("Couldn't set PRE_TO_FAST_CHARGE_THRESHOLD rc=%d\n",
  1175. rc);
  1176. return rc;
  1177. }
  1178. /* Extend min-offtime same as blanking time */
  1179. rc = smb1355_masked_write(chip, MISC_ENG_SDCDC_RESERVE1_REG,
  1180. MINOFF_TIME_MASK, 0);
  1181. if (rc < 0) {
  1182. pr_err("Couldn't set MINOFF_TIME rc=%d\n", rc);
  1183. return rc;
  1184. }
  1185. /* Set dead-time to 32ns */
  1186. rc = smb1355_masked_write(chip, MISC_ENG_SDCDC_CFG8_REG,
  1187. DEAD_TIME_MASK, DEAD_TIME_32NS);
  1188. if (rc < 0) {
  1189. pr_err("Couldn't set DEAD_TIME to 32ns rc=%d\n", rc);
  1190. return rc;
  1191. }
  1192. /* Configure DIE temp Low threshold */
  1193. if (chip->dt.hw_die_temp_mitigation) {
  1194. range = (chip->dt.die_temp_threshold - DIE_LOW_RANGE_BASE_DEGC)
  1195. / (DIE_LOW_RANGE_DELTA);
  1196. val = (chip->dt.die_temp_threshold
  1197. - ((range * DIE_LOW_RANGE_DELTA)
  1198. + DIE_LOW_RANGE_BASE_DEGC))
  1199. % DIE_LOW_RANGE_DELTA;
  1200. rc = smb1355_masked_write(chip, SMB2CHG_BATIF_ENG_SMISC_DIETEMP,
  1201. TDIE_COMPARATOR_THRESHOLD,
  1202. (range << DIE_LOW_RANGE_SHIFT) | val);
  1203. if (rc < 0) {
  1204. pr_err("Couldn't set temp comp threshold rc=%d\n", rc);
  1205. return rc;
  1206. }
  1207. }
  1208. /*
  1209. * Enable thermal Die temperature comparator source and
  1210. * enable hardware controlled current adjustment for die temp
  1211. * if charger is configured in h/w controlled die temp mitigation.
  1212. */
  1213. val = THERMREG_DIE_CMP_SRC_EN_BIT;
  1214. if (!chip->dt.hw_die_temp_mitigation)
  1215. val |= BYP_THERM_CHG_CURR_ADJUST_BIT;
  1216. rc = smb1355_masked_write(chip, MISC_THERMREG_SRC_CFG_REG,
  1217. THERMREG_DIE_CMP_SRC_EN_BIT | BYP_THERM_CHG_CURR_ADJUST_BIT,
  1218. val);
  1219. if (rc < 0) {
  1220. pr_err("Couldn't set Skin temperature comparator src rc=%d\n",
  1221. rc);
  1222. return rc;
  1223. }
  1224. /*
  1225. * Disable hysterisis for die temperature. This is so that sw can run
  1226. * stepping scheme quickly
  1227. */
  1228. val = chip->dt.hw_die_temp_mitigation ? DIE_TEMP_COMP_HYST_BIT : 0;
  1229. rc = smb1355_masked_write(chip, BATIF_ENG_SCMISC_SPARE1_REG,
  1230. DIE_TEMP_COMP_HYST_BIT, val);
  1231. if (rc < 0) {
  1232. pr_err("Couldn't disable hyst. for die rc=%d\n", rc);
  1233. return rc;
  1234. }
  1235. /* Enable valley current comparator all the time */
  1236. rc = smb1355_masked_write(chip, ANA1_ENG_SREFGEN_CFG2_REG,
  1237. VALLEY_COMPARATOR_EN_BIT, VALLEY_COMPARATOR_EN_BIT);
  1238. if (rc < 0) {
  1239. pr_err("Couldn't enable valley current comparator rc=%d\n", rc);
  1240. return rc;
  1241. }
  1242. /* Set LS_VALLEY threshold to 85% */
  1243. rc = smb1355_masked_write(chip, MISC_CUST_SDCDC_ILIMIT_CFG_REG,
  1244. LS_VALLEY_THRESH_PCT_BIT, LS_VALLEY_THRESH_PCT_BIT);
  1245. if (rc < 0) {
  1246. pr_err("Couldn't set LS valley threshold to 85pc rc=%d\n", rc);
  1247. return rc;
  1248. }
  1249. /* For SMB1354, set PCL to 8.6 A */
  1250. if (!strcmp(chip->name, "smb1354")) {
  1251. rc = smb1355_masked_write(chip, MISC_CUST_SDCDC_ILIMIT_CFG_REG,
  1252. PCL_LIMIT_MASK, PCL_LIMIT_MASK);
  1253. if (rc < 0) {
  1254. pr_err("Couldn't set PCL limit to 8.6A rc=%d\n", rc);
  1255. return rc;
  1256. }
  1257. }
  1258. rc = smb1355_tskin_sensor_config(chip);
  1259. if (rc < 0) {
  1260. pr_err("Couldn't configure tskin regs rc=%d\n", rc);
  1261. return rc;
  1262. }
  1263. /* USBIN-USBIN configuration */
  1264. if (IS_USBIN(chip->dt.pl_mode)) {
  1265. /* set swicther clock frequency to 700kHz */
  1266. rc = smb1355_masked_write(chip, MISC_CUST_SDCDC_CLK_CFG_REG,
  1267. SWITCHER_CLK_FREQ_MASK, 0x03);
  1268. if (rc < 0) {
  1269. pr_err("Couldn't set MISC_CUST_SDCDC_CLK_CFG rc=%d\n",
  1270. rc);
  1271. return rc;
  1272. }
  1273. /*
  1274. * configure compensation for input current limit (ICL) loop
  1275. * accuracy, scale slope compensation using 30k resistor.
  1276. */
  1277. rc = smb1355_masked_write(chip, MISC_ENG_SDCDC_RESERVE3_REG,
  1278. II_SOURCE_BIT | SCALE_SLOPE_COMP_MASK,
  1279. II_SOURCE_BIT);
  1280. if (rc < 0) {
  1281. pr_err("Couldn't set MISC_ENG_SDCDC_RESERVE3_REG rc=%d\n",
  1282. rc);
  1283. return rc;
  1284. }
  1285. /* configuration to improve ICL accuracy */
  1286. rc = smb1355_masked_write(chip,
  1287. MISC_ENG_SDCDC_INPUT_CURRENT_CFG1_REG,
  1288. PROLONG_ISENSE_MASK | SAMPLE_HOLD_DELAY_MASK,
  1289. ((uint8_t)0x0C << SAMPLE_HOLD_DELAY_SHIFT));
  1290. if (rc < 0) {
  1291. pr_err("Couldn't set MISC_ENG_SDCDC_INPUT_CURRENT_CFG1_REG rc=%d\n",
  1292. rc);
  1293. return rc;
  1294. }
  1295. rc = smb1355_masked_write(chip,
  1296. MISC_ENG_SDCDC_INPUT_CURRENT_CFG2_REG,
  1297. INPUT_CURRENT_LIMIT_SOURCE_BIT
  1298. | HS_II_CORRECTION_MASK,
  1299. INPUT_CURRENT_LIMIT_SOURCE_BIT | 0xC);
  1300. if (rc < 0) {
  1301. pr_err("Couldn't set MISC_ENG_SDCDC_INPUT_CURRENT_CFG2_REG rc=%d\n",
  1302. rc);
  1303. return rc;
  1304. }
  1305. /* configure DAC offset */
  1306. rc = smb1355_masked_write(chip,
  1307. ANA2_TR_SBQ_ICL_1X_REF_OFFSET_REG,
  1308. TR_SBQ_ICL_1X_REF_OFFSET, 0x00);
  1309. if (rc < 0) {
  1310. pr_err("Couldn't set ANA2_TR_SBQ_ICL_1X_REF_OFFSET_REG rc=%d\n",
  1311. rc);
  1312. return rc;
  1313. }
  1314. /* configure DAC gain */
  1315. rc = smb1355_masked_write(chip, USB_TR_SCPATH_ICL_1X_GAIN_REG,
  1316. TR_SCPATH_ICL_1X_GAIN_MASK, 0x22);
  1317. if (rc < 0) {
  1318. pr_err("Couldn't set USB_TR_SCPATH_ICL_1X_GAIN_REG rc=%d\n",
  1319. rc);
  1320. return rc;
  1321. }
  1322. }
  1323. return 0;
  1324. }
  1325. /**************************
  1326. * INTERRUPT REGISTRATION *
  1327. **************************/
  1328. static struct smb_irq_info smb1355_irqs[] = {
  1329. [0] = {
  1330. .name = "wdog-bark",
  1331. .handler = smb1355_handle_wdog_bark,
  1332. .wake = true,
  1333. },
  1334. [1] = {
  1335. .name = "chg-state-change",
  1336. .handler = smb1355_handle_chg_state_change,
  1337. .wake = true,
  1338. },
  1339. [2] = {
  1340. .name = "temperature-change",
  1341. .handler = smb1355_handle_temperature_change,
  1342. },
  1343. };
  1344. static int smb1355_get_irq_index_byname(const char *irq_name)
  1345. {
  1346. int i;
  1347. for (i = 0; i < ARRAY_SIZE(smb1355_irqs); i++) {
  1348. if (strcmp(smb1355_irqs[i].name, irq_name) == 0)
  1349. return i;
  1350. }
  1351. return -ENOENT;
  1352. }
  1353. static int smb1355_request_interrupt(struct smb1355 *chip,
  1354. struct device_node *node,
  1355. const char *irq_name)
  1356. {
  1357. int rc = 0, irq, irq_index;
  1358. irq = of_irq_get_byname(node, irq_name);
  1359. if (irq < 0) {
  1360. pr_err("Couldn't get irq %s byname\n", irq_name);
  1361. return irq;
  1362. }
  1363. irq_index = smb1355_get_irq_index_byname(irq_name);
  1364. if (irq_index < 0) {
  1365. pr_err("%s is not a defined irq\n", irq_name);
  1366. return irq_index;
  1367. }
  1368. if (!smb1355_irqs[irq_index].handler)
  1369. return 0;
  1370. rc = devm_request_threaded_irq(chip->dev, irq, NULL,
  1371. smb1355_irqs[irq_index].handler,
  1372. IRQF_ONESHOT, irq_name, chip);
  1373. if (rc < 0) {
  1374. pr_err("Couldn't request irq %d rc=%d\n", irq, rc);
  1375. return rc;
  1376. }
  1377. smb1355_irqs[irq_index].irq = irq;
  1378. if (smb1355_irqs[irq_index].wake)
  1379. enable_irq_wake(irq);
  1380. return rc;
  1381. }
  1382. static int smb1355_request_interrupts(struct smb1355 *chip)
  1383. {
  1384. struct device_node *node = chip->dev->of_node;
  1385. struct device_node *child;
  1386. int rc = 0;
  1387. const char *name;
  1388. struct property *prop;
  1389. for_each_available_child_of_node(node, child) {
  1390. of_property_for_each_string(child, "interrupt-names",
  1391. prop, name) {
  1392. rc = smb1355_request_interrupt(chip, child, name);
  1393. if (rc < 0) {
  1394. pr_err("Couldn't request interrupt %s rc=%d\n",
  1395. name, rc);
  1396. return rc;
  1397. }
  1398. }
  1399. }
  1400. return rc;
  1401. }
  1402. static int smb1355_irq_disable_callback(struct votable *votable, void *data,
  1403. int disable, const char *client)
  1404. {
  1405. int i;
  1406. for (i = 0; i < ARRAY_SIZE(smb1355_irqs); i++) {
  1407. if (smb1355_irqs[i].irq) {
  1408. if (disable)
  1409. disable_irq(smb1355_irqs[i].irq);
  1410. else
  1411. enable_irq(smb1355_irqs[i].irq);
  1412. }
  1413. }
  1414. return 0;
  1415. }
  1416. /*********
  1417. * PROBE *
  1418. *********/
  1419. static const struct of_device_id match_table[] = {
  1420. {
  1421. .compatible = "qcom,smb1355",
  1422. },
  1423. { },
  1424. };
  1425. static int smb1355_probe(struct platform_device *pdev)
  1426. {
  1427. struct smb1355 *chip;
  1428. const struct of_device_id *id;
  1429. struct iio_dev *indio_dev;
  1430. int rc = 0;
  1431. indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*chip));
  1432. if (!indio_dev)
  1433. return -ENOMEM;
  1434. chip = iio_priv(indio_dev);
  1435. chip->indio_dev = indio_dev;
  1436. chip->dev = &pdev->dev;
  1437. chip->param = v1_params;
  1438. chip->c_health = -EINVAL;
  1439. chip->d_health = -EINVAL;
  1440. chip->c_charger_temp_max = -EINVAL;
  1441. mutex_init(&chip->write_lock);
  1442. mutex_init(&chip->suspend_lock);
  1443. INIT_DELAYED_WORK(&chip->die_temp_work, die_temp_work);
  1444. chip->disabled = false;
  1445. chip->die_temp_deciDegC = -EINVAL;
  1446. chip->regmap = dev_get_regmap(chip->dev->parent, NULL);
  1447. if (!chip->regmap) {
  1448. pr_err("parent regmap is missing\n");
  1449. return -EINVAL;
  1450. }
  1451. id = of_match_device(of_match_ptr(match_table), chip->dev);
  1452. if (!id) {
  1453. pr_err("Couldn't find a matching device\n");
  1454. return -ENODEV;
  1455. }
  1456. rc = smb1355_detect_version(chip);
  1457. if (rc < 0) {
  1458. pr_err("Couldn't detect SMB1355/1354 chip type rc=%d\n", rc);
  1459. goto cleanup;
  1460. }
  1461. platform_set_drvdata(pdev, chip);
  1462. rc = smb1355_parse_dt(chip);
  1463. if (rc < 0) {
  1464. pr_err("Couldn't parse device tree rc=%d\n", rc);
  1465. goto cleanup;
  1466. }
  1467. rc = smb1355_init_hw(chip);
  1468. if (rc < 0) {
  1469. pr_err("Couldn't initialize hardware rc=%d\n", rc);
  1470. goto cleanup;
  1471. }
  1472. rc = smb1355_init_parallel_psy(chip);
  1473. if (rc < 0) {
  1474. pr_err("Couldn't initialize parallel psy rc=%d\n", rc);
  1475. goto cleanup;
  1476. }
  1477. rc = smb1355_init_iio_psy(chip);
  1478. if (rc < 0) {
  1479. pr_err("Couldn't initialize parallel IIO device rc=%d\n", rc);
  1480. goto cleanup;
  1481. }
  1482. rc = smb1355_determine_initial_status(chip);
  1483. if (rc < 0) {
  1484. pr_err("Couldn't determine initial status rc=%d\n",
  1485. rc);
  1486. goto cleanup;
  1487. }
  1488. rc = smb1355_request_interrupts(chip);
  1489. if (rc < 0) {
  1490. pr_err("Couldn't request interrupts rc=%d\n", rc);
  1491. goto cleanup;
  1492. }
  1493. chip->irq_disable_votable = create_votable("SMB1355_IRQ_DISABLE",
  1494. VOTE_SET_ANY, smb1355_irq_disable_callback, chip);
  1495. if (IS_ERR(chip->irq_disable_votable)) {
  1496. rc = PTR_ERR(chip->irq_disable_votable);
  1497. goto cleanup;
  1498. }
  1499. /* keep IRQ's disabled until parallel is enabled */
  1500. vote(chip->irq_disable_votable, PARALLEL_ENABLE_VOTER, true, 0);
  1501. pr_info("%s probed successfully pl_mode=%s batfet_mode=%s\n",
  1502. chip->name,
  1503. IS_USBIN(chip->dt.pl_mode) ? "USBIN-USBIN" : "USBMID-USBMID",
  1504. (chip->dt.pl_batfet_mode == QTI_POWER_SUPPLY_PL_STACKED_BATFET)
  1505. ? "STACKED_BATFET" : "NON-STACKED_BATFET");
  1506. return rc;
  1507. cleanup:
  1508. platform_set_drvdata(pdev, NULL);
  1509. return rc;
  1510. }
  1511. static int smb1355_remove(struct platform_device *pdev)
  1512. {
  1513. platform_set_drvdata(pdev, NULL);
  1514. return 0;
  1515. }
  1516. static void smb1355_shutdown(struct platform_device *pdev)
  1517. {
  1518. struct smb1355 *chip = platform_get_drvdata(pdev);
  1519. int rc;
  1520. /* disable parallel charging path */
  1521. rc = smb1355_set_parallel_charging(chip, true);
  1522. if (rc < 0)
  1523. pr_err("Couldn't disable parallel path rc=%d\n", rc);
  1524. smb1355_clk_request(chip, false);
  1525. }
  1526. #ifdef CONFIG_PM_SLEEP
  1527. static int smb1355_suspend(struct device *dev)
  1528. {
  1529. struct smb1355 *chip = dev_get_drvdata(dev);
  1530. cancel_delayed_work_sync(&chip->die_temp_work);
  1531. mutex_lock(&chip->suspend_lock);
  1532. chip->suspended = true;
  1533. mutex_unlock(&chip->suspend_lock);
  1534. return 0;
  1535. }
  1536. static int smb1355_resume(struct device *dev)
  1537. {
  1538. struct smb1355 *chip = dev_get_drvdata(dev);
  1539. mutex_lock(&chip->suspend_lock);
  1540. chip->suspended = false;
  1541. mutex_unlock(&chip->suspend_lock);
  1542. /*
  1543. * During suspend i2c failures are fixed by reporting cached
  1544. * chip state, to report correct values we need to invoke
  1545. * callbacks for the fcc and fv votables. To avoid excessive
  1546. * invokes to callbacks invoke only when smb1355 is enabled.
  1547. */
  1548. if (is_voter_available(chip) && chip->charging_enabled) {
  1549. rerun_election(chip->fcc_votable);
  1550. rerun_election(chip->fv_votable);
  1551. }
  1552. return 0;
  1553. }
  1554. #endif
  1555. static SIMPLE_DEV_PM_OPS(smb1355_pm_ops, smb1355_suspend, smb1355_resume);
  1556. static struct platform_driver smb1355_driver = {
  1557. .driver = {
  1558. .name = "qcom,smb1355-charger",
  1559. .pm = &smb1355_pm_ops,
  1560. .of_match_table = match_table,
  1561. },
  1562. .probe = smb1355_probe,
  1563. .remove = smb1355_remove,
  1564. .shutdown = smb1355_shutdown,
  1565. };
  1566. module_platform_driver(smb1355_driver);
  1567. MODULE_DESCRIPTION("QPNP SMB1355 Charger Driver");
  1568. MODULE_LICENSE("GPL");