smb5-lib.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef __SMB5_CHARGER_H
  7. #define __SMB5_CHARGER_H
  8. #include <linux/alarmtimer.h>
  9. #include <linux/ktime.h>
  10. #include <linux/types.h>
  11. #include <linux/timer.h>
  12. #include <linux/interrupt.h>
  13. #include <linux/irqreturn.h>
  14. #include <linux/regulator/driver.h>
  15. #include <linux/regulator/consumer.h>
  16. #include <linux/extcon-provider.h>
  17. #include <linux/usb/typec.h>
  18. #include <linux/qti_power_supply.h>
  19. #include "storm-watch.h"
  20. #include "battery.h"
  21. enum print_reason {
  22. PR_INTERRUPT = BIT(0),
  23. PR_REGISTER = BIT(1),
  24. PR_MISC = BIT(2),
  25. PR_PARALLEL = BIT(3),
  26. PR_OTG = BIT(4),
  27. PR_WLS = BIT(5),
  28. };
  29. #define DEFAULT_VOTER "DEFAULT_VOTER"
  30. #define USER_VOTER "USER_VOTER"
  31. #define PD_VOTER "PD_VOTER"
  32. #define DCP_VOTER "DCP_VOTER"
  33. #define QC_VOTER "QC_VOTER"
  34. #define USB_PSY_VOTER "USB_PSY_VOTER"
  35. #define PL_TAPER_WORK_RUNNING_VOTER "PL_TAPER_WORK_RUNNING_VOTER"
  36. #define USBIN_V_VOTER "USBIN_V_VOTER"
  37. #define CHG_STATE_VOTER "CHG_STATE_VOTER"
  38. #define TAPER_END_VOTER "TAPER_END_VOTER"
  39. #define THERMAL_DAEMON_VOTER "THERMAL_DAEMON_VOTER"
  40. #define DIE_TEMP_VOTER "DIE_TEMP_VOTER"
  41. #define BOOST_BACK_VOTER "BOOST_BACK_VOTER"
  42. #define MICRO_USB_VOTER "MICRO_USB_VOTER"
  43. #define DEBUG_BOARD_VOTER "DEBUG_BOARD_VOTER"
  44. #define PD_SUSPEND_SUPPORTED_VOTER "PD_SUSPEND_SUPPORTED_VOTER"
  45. #define PL_DELAY_VOTER "PL_DELAY_VOTER"
  46. #define CTM_VOTER "CTM_VOTER"
  47. #define SW_QC3_VOTER "SW_QC3_VOTER"
  48. #define AICL_RERUN_VOTER "AICL_RERUN_VOTER"
  49. #define SW_ICL_MAX_VOTER "SW_ICL_MAX_VOTER"
  50. #define PL_QNOVO_VOTER "PL_QNOVO_VOTER"
  51. #define QNOVO_VOTER "QNOVO_VOTER"
  52. #define BATT_PROFILE_VOTER "BATT_PROFILE_VOTER"
  53. #define OTG_DELAY_VOTER "OTG_DELAY_VOTER"
  54. #define USBIN_I_VOTER "USBIN_I_VOTER"
  55. #define WEAK_CHARGER_VOTER "WEAK_CHARGER_VOTER"
  56. #define PL_FCC_LOW_VOTER "PL_FCC_LOW_VOTER"
  57. #define WBC_VOTER "WBC_VOTER"
  58. #define HW_LIMIT_VOTER "HW_LIMIT_VOTER"
  59. #define PL_SMB_EN_VOTER "PL_SMB_EN_VOTER"
  60. #define FORCE_RECHARGE_VOTER "FORCE_RECHARGE_VOTER"
  61. #define LPD_VOTER "LPD_VOTER"
  62. #define FCC_STEPPER_VOTER "FCC_STEPPER_VOTER"
  63. #define SW_THERM_REGULATION_VOTER "SW_THERM_REGULATION_VOTER"
  64. #define JEITA_ARB_VOTER "JEITA_ARB_VOTER"
  65. #define MOISTURE_VOTER "MOISTURE_VOTER"
  66. #define HVDCP2_ICL_VOTER "HVDCP2_ICL_VOTER"
  67. #define AICL_THRESHOLD_VOTER "AICL_THRESHOLD_VOTER"
  68. #define USBOV_DBC_VOTER "USBOV_DBC_VOTER"
  69. #define CHG_TERMINATION_VOTER "CHG_TERMINATION_VOTER"
  70. #define THERMAL_THROTTLE_VOTER "THERMAL_THROTTLE_VOTER"
  71. #define VOUT_VOTER "VOUT_VOTER"
  72. #define USB_SUSPEND_VOTER "USB_SUSPEND_VOTER"
  73. #define CHARGER_TYPE_VOTER "CHARGER_TYPE_VOTER"
  74. #define HDC_IRQ_VOTER "HDC_IRQ_VOTER"
  75. #define DETACH_DETECT_VOTER "DETACH_DETECT_VOTER"
  76. #define CC_MODE_VOTER "CC_MODE_VOTER"
  77. #define MAIN_FCC_VOTER "MAIN_FCC_VOTER"
  78. #define DCIN_AICL_VOTER "DCIN_AICL_VOTER"
  79. #define WLS_PL_CHARGING_VOTER "WLS_PL_CHARGING_VOTER"
  80. #define ICL_CHANGE_VOTER "ICL_CHANGE_VOTER"
  81. #define OVERHEAT_LIMIT_VOTER "OVERHEAT_LIMIT_VOTER"
  82. #define TYPEC_SWAP_VOTER "TYPEC_SWAP_VOTER"
  83. #define BOOST_BACK_STORM_COUNT 3
  84. #define WEAK_CHG_STORM_COUNT 8
  85. #define VBAT_TO_VRAW_ADC(v) div_u64((u64)v * 1000000UL, 194637UL)
  86. #define ITERM_LIMITS_PMI632_MA 5000
  87. #define ITERM_LIMITS_PM8150B_MA 10000
  88. #define ADC_CHG_ITERM_MASK 32767
  89. #define SDP_100_MA 100000
  90. #define SDP_CURRENT_UA 500000
  91. #define CDP_CURRENT_UA 1500000
  92. #define DCP_CURRENT_UA 1500000
  93. #define HVDCP_CURRENT_UA 3000000
  94. #define TYPEC_DEFAULT_CURRENT_UA 900000
  95. #define TYPEC_MEDIUM_CURRENT_UA 1500000
  96. #define TYPEC_HIGH_CURRENT_UA 3000000
  97. #define DCIN_ICL_MIN_UA 100000
  98. #define DCIN_ICL_MAX_UA 1500000
  99. #define DCIN_ICL_STEP_UA 100000
  100. #define ROLE_REVERSAL_DELAY_MS 500
  101. enum smb_mode {
  102. PARALLEL_MASTER = 0,
  103. PARALLEL_SLAVE,
  104. NUM_MODES,
  105. };
  106. enum sink_src_mode {
  107. SINK_MODE,
  108. SRC_MODE,
  109. AUDIO_ACCESS_MODE,
  110. UNATTACHED_MODE,
  111. };
  112. enum qc2_non_comp_voltage {
  113. QC2_COMPLIANT,
  114. QC2_NON_COMPLIANT_9V,
  115. QC2_NON_COMPLIANT_12V
  116. };
  117. enum {
  118. BOOST_BACK_WA = BIT(0),
  119. SW_THERM_REGULATION_WA = BIT(1),
  120. WEAK_ADAPTER_WA = BIT(2),
  121. USBIN_OV_WA = BIT(3),
  122. CHG_TERMINATION_WA = BIT(4),
  123. USBIN_ADC_WA = BIT(5),
  124. SKIP_MISC_PBS_IRQ_WA = BIT(6),
  125. };
  126. enum jeita_cfg_stat {
  127. JEITA_CFG_NONE = 0,
  128. JEITA_CFG_FAILURE,
  129. JEITA_CFG_COMPLETE,
  130. };
  131. enum {
  132. RERUN_AICL = 0,
  133. RESTART_AICL,
  134. };
  135. enum smb_irq_index {
  136. /* CHGR */
  137. CHGR_ERROR_IRQ = 0,
  138. CHG_STATE_CHANGE_IRQ,
  139. STEP_CHG_STATE_CHANGE_IRQ,
  140. STEP_CHG_SOC_UPDATE_FAIL_IRQ,
  141. STEP_CHG_SOC_UPDATE_REQ_IRQ,
  142. FG_FVCAL_QUALIFIED_IRQ,
  143. VPH_ALARM_IRQ,
  144. VPH_DROP_PRECHG_IRQ,
  145. /* DCDC */
  146. OTG_FAIL_IRQ,
  147. OTG_OC_DISABLE_SW_IRQ,
  148. OTG_OC_HICCUP_IRQ,
  149. BSM_ACTIVE_IRQ,
  150. HIGH_DUTY_CYCLE_IRQ,
  151. INPUT_CURRENT_LIMITING_IRQ,
  152. CONCURRENT_MODE_DISABLE_IRQ,
  153. SWITCHER_POWER_OK_IRQ,
  154. /* BATIF */
  155. BAT_TEMP_IRQ,
  156. ALL_CHNL_CONV_DONE_IRQ,
  157. BAT_OV_IRQ,
  158. BAT_LOW_IRQ,
  159. BAT_THERM_OR_ID_MISSING_IRQ,
  160. BAT_TERMINAL_MISSING_IRQ,
  161. BUCK_OC_IRQ,
  162. VPH_OV_IRQ,
  163. /* USB */
  164. USBIN_COLLAPSE_IRQ,
  165. USBIN_VASHDN_IRQ,
  166. USBIN_UV_IRQ,
  167. USBIN_OV_IRQ,
  168. USBIN_PLUGIN_IRQ,
  169. USBIN_REVI_CHANGE_IRQ,
  170. USBIN_SRC_CHANGE_IRQ,
  171. USBIN_ICL_CHANGE_IRQ,
  172. /* DC */
  173. DCIN_VASHDN_IRQ,
  174. DCIN_UV_IRQ,
  175. DCIN_OV_IRQ,
  176. DCIN_PLUGIN_IRQ,
  177. DCIN_REVI_IRQ,
  178. DCIN_PON_IRQ,
  179. DCIN_EN_IRQ,
  180. /* TYPEC */
  181. TYPEC_OR_RID_DETECTION_CHANGE_IRQ,
  182. TYPEC_VPD_DETECT_IRQ,
  183. TYPEC_CC_STATE_CHANGE_IRQ,
  184. TYPEC_VCONN_OC_IRQ,
  185. TYPEC_VBUS_CHANGE_IRQ,
  186. TYPEC_ATTACH_DETACH_IRQ,
  187. TYPEC_LEGACY_CABLE_DETECT_IRQ,
  188. TYPEC_TRY_SNK_SRC_DETECT_IRQ,
  189. /* MISC */
  190. WDOG_SNARL_IRQ,
  191. WDOG_BARK_IRQ,
  192. AICL_FAIL_IRQ,
  193. AICL_DONE_IRQ,
  194. SMB_EN_IRQ,
  195. IMP_TRIGGER_IRQ,
  196. TEMP_CHANGE_IRQ,
  197. TEMP_CHANGE_SMB_IRQ,
  198. /* FLASH */
  199. VREG_OK_IRQ,
  200. ILIM_S2_IRQ,
  201. ILIM_S1_IRQ,
  202. VOUT_DOWN_IRQ,
  203. VOUT_UP_IRQ,
  204. FLASH_STATE_CHANGE_IRQ,
  205. TORCH_REQ_IRQ,
  206. FLASH_EN_IRQ,
  207. SDAM_STS_IRQ,
  208. /* END */
  209. SMB_IRQ_MAX,
  210. };
  211. enum float_options {
  212. FLOAT_DCP = 1,
  213. FLOAT_SDP = 2,
  214. DISABLE_CHARGING = 3,
  215. SUSPEND_INPUT = 4,
  216. };
  217. enum chg_term_config_src {
  218. ITERM_SRC_UNSPECIFIED,
  219. ITERM_SRC_ADC,
  220. ITERM_SRC_ANALOG
  221. };
  222. enum comp_clamp_levels {
  223. CLAMP_LEVEL_DEFAULT = 0,
  224. CLAMP_LEVEL_1,
  225. MAX_CLAMP_LEVEL,
  226. };
  227. struct clamp_config {
  228. u16 reg[3];
  229. u16 val[3];
  230. };
  231. struct smb_irq_info {
  232. const char *name;
  233. const irq_handler_t handler;
  234. const bool wake;
  235. const struct storm_watch storm_data;
  236. struct smb_irq_data *irq_data;
  237. int irq;
  238. bool enabled;
  239. };
  240. static const unsigned int smblib_extcon_cable[] = {
  241. EXTCON_USB,
  242. EXTCON_USB_HOST,
  243. EXTCON_NONE,
  244. };
  245. enum lpd_reason {
  246. LPD_NONE,
  247. LPD_MOISTURE_DETECTED,
  248. LPD_FLOATING_CABLE,
  249. };
  250. /* Following states are applicable only for floating cable during LPD */
  251. enum lpd_stage {
  252. /* initial stage */
  253. LPD_STAGE_NONE,
  254. /* started and ongoing */
  255. LPD_STAGE_FLOAT,
  256. /* cancel if started, or don't start */
  257. LPD_STAGE_FLOAT_CANCEL,
  258. /* confirmed and mitigation measures taken for 60 s */
  259. LPD_STAGE_COMMIT,
  260. };
  261. enum thermal_status_levels {
  262. TEMP_SHUT_DOWN = 0,
  263. TEMP_SHUT_DOWN_SMB,
  264. TEMP_ALERT_LEVEL,
  265. TEMP_ABOVE_RANGE,
  266. TEMP_WITHIN_RANGE,
  267. TEMP_BELOW_RANGE,
  268. };
  269. enum icl_override_mode {
  270. /* APSD/Type-C/QC auto */
  271. HW_AUTO_MODE,
  272. /* 100/150/500/900mA */
  273. SW_OVERRIDE_USB51_MODE,
  274. /* ICL other than USB51 */
  275. SW_OVERRIDE_HC_MODE,
  276. };
  277. /* EXTCON_USB and EXTCON_USB_HOST are mutually exclusive */
  278. static const u32 smblib_extcon_exclusive[] = {0x3, 0};
  279. struct smb_regulator {
  280. struct regulator_dev *rdev;
  281. struct regulator_desc rdesc;
  282. };
  283. struct smb_irq_data {
  284. void *parent_data;
  285. const char *name;
  286. struct storm_watch storm_data;
  287. };
  288. struct smb_chg_param {
  289. const char *name;
  290. u16 reg;
  291. int min_u;
  292. int max_u;
  293. int step_u;
  294. int (*get_proc)(struct smb_chg_param *param,
  295. u8 val_raw);
  296. int (*set_proc)(struct smb_chg_param *param,
  297. int val_u,
  298. u8 *val_raw);
  299. };
  300. struct buck_boost_freq {
  301. int freq_khz;
  302. u8 val;
  303. };
  304. struct smb_chg_freq {
  305. unsigned int freq_5V;
  306. unsigned int freq_6V_8V;
  307. unsigned int freq_9V;
  308. unsigned int freq_12V;
  309. unsigned int freq_removal;
  310. unsigned int freq_below_otg_threshold;
  311. unsigned int freq_above_otg_threshold;
  312. };
  313. struct smb_params {
  314. struct smb_chg_param fcc;
  315. struct smb_chg_param fv;
  316. struct smb_chg_param usb_icl;
  317. struct smb_chg_param icl_max_stat;
  318. struct smb_chg_param icl_stat;
  319. struct smb_chg_param otg_cl;
  320. struct smb_chg_param dc_icl;
  321. struct smb_chg_param jeita_cc_comp_hot;
  322. struct smb_chg_param jeita_cc_comp_cold;
  323. struct smb_chg_param freq_switcher;
  324. struct smb_chg_param aicl_5v_threshold;
  325. struct smb_chg_param aicl_cont_threshold;
  326. };
  327. struct parallel_params {
  328. struct power_supply *psy;
  329. };
  330. struct smb_iio {
  331. struct iio_channel *temp_chan;
  332. struct iio_channel *usbin_i_chan;
  333. struct iio_channel *usbin_v_chan;
  334. struct iio_channel *mid_chan;
  335. struct iio_channel *batt_i_chan;
  336. struct iio_channel *connector_temp_chan;
  337. struct iio_channel *sbux_chan;
  338. struct iio_channel *vph_v_chan;
  339. struct iio_channel *die_temp_chan;
  340. struct iio_channel *skin_temp_chan;
  341. struct iio_channel *smb_temp_chan;
  342. };
  343. enum pmic_type {
  344. PM8150B,
  345. PM7250B,
  346. PM6150,
  347. PMI632,
  348. };
  349. struct smb_charger {
  350. struct device *dev;
  351. char *name;
  352. struct regmap *regmap;
  353. struct smb_irq_info *irq_info;
  354. struct smb_params param;
  355. struct smb_iio iio;
  356. struct iio_channel *iio_chans;
  357. struct iio_channel **iio_chan_list_qg;
  358. struct iio_channel **iio_chan_list_cp;
  359. struct iio_channel **iio_chan_list_smb_parallel;
  360. int *debug_mask;
  361. int pd_disabled;
  362. enum smb_mode mode;
  363. struct smb_chg_freq chg_freq;
  364. int otg_delay_ms;
  365. int weak_chg_icl_ua;
  366. u32 sdam_base;
  367. bool pd_not_supported;
  368. /* locks */
  369. struct mutex smb_lock;
  370. struct mutex ps_change_lock;
  371. struct mutex irq_status_lock;
  372. struct mutex dcin_aicl_lock;
  373. spinlock_t typec_pr_lock;
  374. struct mutex adc_lock;
  375. struct mutex dpdm_lock;
  376. struct mutex typec_lock;
  377. /* power supplies */
  378. struct power_supply *batt_psy;
  379. struct power_supply *usb_psy;
  380. struct power_supply *dc_psy;
  381. struct power_supply *usb_port_psy;
  382. struct power_supply *wls_psy;
  383. /* notifiers */
  384. struct notifier_block nb;
  385. /* parallel charging */
  386. struct parallel_params pl;
  387. /* CC Mode */
  388. int adapter_cc_mode;
  389. int thermal_overheat;
  390. /* regulators */
  391. struct smb_regulator *vbus_vreg;
  392. struct smb_regulator *vconn_vreg;
  393. struct regulator *dpdm_reg;
  394. /* typec */
  395. struct typec_port *typec_port;
  396. struct typec_capability typec_caps;
  397. struct typec_partner *typec_partner;
  398. struct typec_partner_desc typec_partner_desc;
  399. /* votables */
  400. struct votable *dc_suspend_votable;
  401. struct votable *fcc_votable;
  402. struct votable *fcc_main_votable;
  403. struct votable *fv_votable;
  404. struct votable *usb_icl_votable;
  405. struct votable *awake_votable;
  406. struct votable *pl_disable_votable;
  407. struct votable *chg_disable_votable;
  408. struct votable *pl_enable_votable_indirect;
  409. struct votable *cp_disable_votable;
  410. struct votable *cp_ilim_votable;
  411. struct votable *smb_override_votable;
  412. struct votable *icl_irq_disable_votable;
  413. struct votable *limited_irq_disable_votable;
  414. struct votable *hdc_irq_disable_votable;
  415. struct votable *temp_change_irq_disable_votable;
  416. struct votable *bat_temp_irq_disable_votable;
  417. struct votable *qnovo_disable_votable;
  418. /* work */
  419. struct work_struct bms_update_work;
  420. struct work_struct pl_update_work;
  421. struct work_struct jeita_update_work;
  422. struct work_struct moisture_protection_work;
  423. struct work_struct chg_termination_work;
  424. struct work_struct dcin_aicl_work;
  425. struct work_struct cp_status_change_work;
  426. struct delayed_work ps_change_timeout_work;
  427. struct delayed_work clear_hdc_work;
  428. struct delayed_work icl_change_work;
  429. struct delayed_work pl_enable_work;
  430. struct delayed_work uusb_otg_work;
  431. struct delayed_work bb_removal_work;
  432. struct delayed_work lpd_ra_open_work;
  433. struct delayed_work lpd_detach_work;
  434. struct delayed_work thermal_regulation_work;
  435. struct delayed_work usbov_dbc_work;
  436. struct delayed_work pr_swap_detach_work;
  437. struct delayed_work pr_lock_clear_work;
  438. struct delayed_work role_reversal_check;
  439. struct alarm lpd_recheck_timer;
  440. struct alarm moisture_protection_alarm;
  441. struct alarm chg_termination_alarm;
  442. struct alarm dcin_aicl_alarm;
  443. struct timer_list apsd_timer;
  444. struct charger_param chg_param;
  445. /* secondary charger config */
  446. bool sec_pl_present;
  447. bool sec_cp_present;
  448. int sec_chg_selected;
  449. int cp_reason;
  450. int cp_topo;
  451. /* pd */
  452. int voltage_min_uv;
  453. int voltage_max_uv;
  454. int pd_active;
  455. bool pd_hard_reset;
  456. bool pr_lock_in_progress;
  457. bool pr_swap_in_progress;
  458. bool early_usb_attach;
  459. bool ok_to_pd;
  460. bool typec_legacy;
  461. bool typec_irq_en;
  462. bool typec_role_swap_failed;
  463. /* cached status */
  464. bool system_suspend_supported;
  465. int boost_threshold_ua;
  466. int system_temp_level;
  467. int thermal_levels;
  468. int *thermal_mitigation;
  469. int dcp_icl_ua;
  470. int fake_capacity;
  471. int fake_batt_status;
  472. bool step_chg_enabled;
  473. bool sw_jeita_enabled;
  474. bool jeita_arb_enable;
  475. bool typec_legacy_use_rp_icl;
  476. bool is_hdc;
  477. bool chg_done;
  478. int connector_type;
  479. bool otg_en;
  480. bool suspend_input_on_debug_batt;
  481. bool fake_chg_status_on_debug_batt;
  482. int default_icl_ua;
  483. int otg_cl_ua;
  484. bool uusb_apsd_rerun_done;
  485. bool typec_present;
  486. int fake_input_current_limited;
  487. int typec_mode;
  488. int dr_mode;
  489. int usb_icl_change_irq_enabled;
  490. u32 jeita_status;
  491. u8 float_cfg;
  492. bool jeita_arb_flag;
  493. bool use_extcon;
  494. bool otg_present;
  495. bool hvdcp_disable;
  496. int hw_max_icl_ua;
  497. int auto_recharge_soc;
  498. enum sink_src_mode sink_src_mode;
  499. enum power_supply_typec_power_role power_role;
  500. enum jeita_cfg_stat jeita_configured;
  501. int charger_temp_max;
  502. int smb_temp_max;
  503. u8 typec_try_mode;
  504. enum lpd_stage lpd_stage;
  505. bool lpd_disabled;
  506. enum lpd_reason lpd_reason;
  507. bool fcc_stepper_enable;
  508. int die_temp;
  509. int smb_temp;
  510. int skin_temp;
  511. int connector_temp;
  512. int thermal_status;
  513. int main_fcc_max;
  514. u32 jeita_soft_thlds[2];
  515. u32 jeita_soft_hys_thlds[2];
  516. int jeita_soft_fcc[2];
  517. int jeita_soft_fv[2];
  518. bool moisture_present;
  519. bool uusb_moisture_protection_capable;
  520. bool uusb_moisture_protection_enabled;
  521. bool hw_die_temp_mitigation;
  522. bool hw_connector_mitigation;
  523. bool hw_skin_temp_mitigation;
  524. bool en_skin_therm_mitigation;
  525. int connector_pull_up;
  526. int smb_pull_up;
  527. int aicl_5v_threshold_mv;
  528. int default_aicl_5v_threshold_mv;
  529. int aicl_cont_threshold_mv;
  530. int default_aicl_cont_threshold_mv;
  531. bool aicl_max_reached;
  532. int charge_full_cc;
  533. int cc_soc_ref;
  534. int last_cc_soc;
  535. int term_vbat_uv;
  536. int usbin_forced_max_uv;
  537. int init_thermal_ua;
  538. u32 comp_clamp_level;
  539. int wls_icl_ua;
  540. int cutoff_count;
  541. bool dcin_aicl_done;
  542. bool hvdcp3_standalone_config;
  543. bool dcin_icl_user_set;
  544. bool dpdm_enabled;
  545. bool apsd_ext_timeout;
  546. bool qc3p5_detected;
  547. int qc3p5_detected_mw;
  548. bool disable_suspend_on_collapse;
  549. /* workaround flag */
  550. int real_charger_type;
  551. u32 wa_flags;
  552. int boost_current_ua;
  553. int qc2_max_pulses;
  554. enum qc2_non_comp_voltage qc2_unsupported_voltage;
  555. bool dbc_usbov;
  556. /* extcon for VBUS / ID notification to USB for uUSB */
  557. struct extcon_dev *extcon;
  558. /* battery profile */
  559. int batt_profile_fcc_ua;
  560. int batt_profile_fv_uv;
  561. int usb_icl_delta_ua;
  562. int pulse_cnt;
  563. int die_health;
  564. int connector_health;
  565. /* flash */
  566. u32 flash_derating_soc;
  567. u32 flash_disable_soc;
  568. u32 headroom_mode;
  569. bool flash_init_done;
  570. bool flash_active;
  571. u32 irq_status;
  572. /* wireless */
  573. int dcin_uv_count;
  574. ktime_t dcin_uv_last_time;
  575. int last_wls_vout;
  576. };
  577. int smblib_read(struct smb_charger *chg, u16 addr, u8 *val);
  578. int smblib_masked_write(struct smb_charger *chg, u16 addr, u8 mask, u8 val);
  579. int smblib_write(struct smb_charger *chg, u16 addr, u8 val);
  580. int smblib_batch_write(struct smb_charger *chg, u16 addr, u8 *val, int count);
  581. int smblib_batch_read(struct smb_charger *chg, u16 addr, u8 *val, int count);
  582. int smblib_get_charge_param(struct smb_charger *chg,
  583. struct smb_chg_param *param, int *val_u);
  584. int smblib_get_aicl_cont_threshold(struct smb_chg_param *param, u8 val_raw);
  585. int smblib_enable_charging(struct smb_charger *chg, bool enable);
  586. int smblib_set_charge_param(struct smb_charger *chg,
  587. struct smb_chg_param *param, int val_u);
  588. int smblib_set_chg_freq(struct smb_chg_param *param,
  589. int val_u, u8 *val_raw);
  590. int smblib_set_aicl_cont_threshold(struct smb_chg_param *param,
  591. int val_u, u8 *val_raw);
  592. int smblib_vbus_regulator_enable(struct regulator_dev *rdev);
  593. int smblib_vbus_regulator_disable(struct regulator_dev *rdev);
  594. int smblib_vbus_regulator_is_enabled(struct regulator_dev *rdev);
  595. int smblib_vconn_regulator_enable(struct regulator_dev *rdev);
  596. int smblib_vconn_regulator_disable(struct regulator_dev *rdev);
  597. int smblib_vconn_regulator_is_enabled(struct regulator_dev *rdev);
  598. irqreturn_t smb5_default_irq_handler(int irq, void *data);
  599. irqreturn_t smb5_smb_en_irq_handler(int irq, void *data);
  600. irqreturn_t smb5_chg_state_change_irq_handler(int irq, void *data);
  601. irqreturn_t smb5_batt_temp_changed_irq_handler(int irq, void *data);
  602. irqreturn_t smb5_batt_psy_changed_irq_handler(int irq, void *data);
  603. irqreturn_t smb5_usbin_uv_irq_handler(int irq, void *data);
  604. irqreturn_t smb5_usb_plugin_irq_handler(int irq, void *data);
  605. irqreturn_t smb5_usb_source_change_irq_handler(int irq, void *data);
  606. irqreturn_t smb5_icl_change_irq_handler(int irq, void *data);
  607. irqreturn_t smb5_typec_state_change_irq_handler(int irq, void *data);
  608. irqreturn_t smb5_typec_attach_detach_irq_handler(int irq, void *data);
  609. irqreturn_t smb5_dcin_uv_irq_handler(int irq, void *data);
  610. irqreturn_t smb5_dc_plugin_irq_handler(int irq, void *data);
  611. irqreturn_t smb5_high_duty_cycle_irq_handler(int irq, void *data);
  612. irqreturn_t smb5_switcher_power_ok_irq_handler(int irq, void *data);
  613. irqreturn_t smb5_wdog_snarl_irq_handler(int irq, void *data);
  614. irqreturn_t smb5_wdog_bark_irq_handler(int irq, void *data);
  615. irqreturn_t smb5_typec_or_rid_detection_change_irq_handler(int irq, void *data);
  616. irqreturn_t smb5_temp_change_irq_handler(int irq, void *data);
  617. irqreturn_t smb5_usbin_ov_irq_handler(int irq, void *data);
  618. irqreturn_t smb5_sdam_sts_change_irq_handler(int irq, void *data);
  619. int smblib_get_prop_input_suspend(struct smb_charger *chg,
  620. union power_supply_propval *val);
  621. int smblib_get_prop_batt_present(struct smb_charger *chg,
  622. union power_supply_propval *val);
  623. int smblib_get_prop_batt_capacity(struct smb_charger *chg,
  624. union power_supply_propval *val);
  625. int smblib_get_prop_batt_status(struct smb_charger *chg,
  626. union power_supply_propval *val);
  627. int smblib_get_prop_batt_charge_type(struct smb_charger *chg,
  628. union power_supply_propval *val);
  629. int smblib_get_prop_batt_charge_done(struct smb_charger *chg,
  630. int *val);
  631. int smblib_get_batt_current_now(struct smb_charger *chg,
  632. union power_supply_propval *val);
  633. int smblib_get_prop_batt_health(struct smb_charger *chg,
  634. union power_supply_propval *val);
  635. int smblib_get_prop_system_temp_level(struct smb_charger *chg,
  636. union power_supply_propval *val);
  637. int smblib_get_prop_system_temp_level_max(struct smb_charger *chg,
  638. union power_supply_propval *val);
  639. int smblib_get_prop_input_current_limited(struct smb_charger *chg,
  640. int *val);
  641. int smblib_get_prop_batt_iterm(struct smb_charger *chg,
  642. union power_supply_propval *val);
  643. int smblib_set_prop_input_suspend(struct smb_charger *chg,
  644. const union power_supply_propval *val);
  645. int smblib_set_prop_batt_capacity(struct smb_charger *chg,
  646. const union power_supply_propval *val);
  647. int smblib_set_prop_batt_status(struct smb_charger *chg,
  648. const union power_supply_propval *val);
  649. int smblib_set_prop_system_temp_level(struct smb_charger *chg,
  650. const union power_supply_propval *val);
  651. int smblib_set_prop_input_current_limited(struct smb_charger *chg,
  652. int val);
  653. int smblib_get_prop_dc_present(struct smb_charger *chg,
  654. union power_supply_propval *val);
  655. int smblib_get_prop_dc_online(struct smb_charger *chg,
  656. union power_supply_propval *val);
  657. int smblib_get_prop_dc_current_max(struct smb_charger *chg,
  658. union power_supply_propval *val);
  659. int smblib_set_prop_dc_current_max(struct smb_charger *chg,
  660. const union power_supply_propval *val);
  661. int smblib_get_prop_dc_voltage_max(struct smb_charger *chg,
  662. union power_supply_propval *val);
  663. int smblib_set_prop_dc_reset(struct smb_charger *chg);
  664. int smblib_get_prop_usb_present(struct smb_charger *chg,
  665. union power_supply_propval *val);
  666. int smblib_get_prop_usb_online(struct smb_charger *chg,
  667. union power_supply_propval *val);
  668. int smblib_get_usb_online(struct smb_charger *chg,
  669. union power_supply_propval *val);
  670. int smblib_get_prop_usb_suspend(struct smb_charger *chg,
  671. union power_supply_propval *val);
  672. int smblib_get_prop_usb_voltage_max(struct smb_charger *chg,
  673. union power_supply_propval *val);
  674. int smblib_get_prop_usb_voltage_max_design(struct smb_charger *chg,
  675. union power_supply_propval *val);
  676. int smblib_set_prop_usb_voltage_max_limit(struct smb_charger *chg,
  677. int val);
  678. int smblib_get_prop_usb_voltage_now(struct smb_charger *chg,
  679. union power_supply_propval *val);
  680. int smblib_get_prop_low_power(struct smb_charger *chg,
  681. union power_supply_propval *val);
  682. int smblib_get_prop_usb_current_now(struct smb_charger *chg,
  683. union power_supply_propval *val);
  684. int smblib_get_usb_prop_typec_mode(struct smb_charger *chg,
  685. int *val);
  686. int smblib_get_usb_prop_typec_accessory_mode(struct smb_charger *chg,
  687. int *val);
  688. int smblib_get_prop_typec_cc_orientation(struct smb_charger *chg,
  689. int *val);
  690. int smblib_get_prop_scope(struct smb_charger *chg,
  691. union power_supply_propval *val);
  692. int smblib_get_prop_typec_select_rp(struct smb_charger *chg,
  693. int *val);
  694. int smblib_get_prop_typec_power_role(struct smb_charger *chg,
  695. int *val);
  696. int smblib_get_prop_input_current_settled(struct smb_charger *chg,
  697. union power_supply_propval *val);
  698. int smblib_get_prop_input_voltage_settled(struct smb_charger *chg,
  699. int *val);
  700. int smblib_get_prop_pd_in_hard_reset(struct smb_charger *chg,
  701. int *val);
  702. int smblib_get_pe_start(struct smb_charger *chg,
  703. int *val);
  704. int smblib_get_prop_charger_temp(struct smb_charger *chg,
  705. int *val);
  706. int smblib_get_die_health(struct smb_charger *chg,
  707. int *val);
  708. int smblib_get_prop_smb_health(struct smb_charger *chg);
  709. int smblib_get_prop_connector_health(struct smb_charger *chg);
  710. int smblib_get_prop_input_current_max(struct smb_charger *chg,
  711. union power_supply_propval *val);
  712. int smblib_set_prop_thermal_overheat(struct smb_charger *chg,
  713. int therm_overheat);
  714. int smblib_get_skin_temp_status(struct smb_charger *chg);
  715. int smblib_get_prop_vph_voltage_now(struct smb_charger *chg,
  716. int *val);
  717. int smb5_set_prop_comp_clamp_level(struct smb_charger *chg,
  718. int val);
  719. int smblib_set_prop_pd_current_max(struct smb_charger *chg,
  720. int val);
  721. int smblib_set_prop_sdp_current_max(struct smb_charger *chg,
  722. int val);
  723. int smblib_set_prop_pd_voltage_max(struct smb_charger *chg,
  724. int val);
  725. int smblib_set_prop_pd_voltage_min(struct smb_charger *chg,
  726. int val);
  727. int smblib_set_prop_typec_power_role(struct smb_charger *chg,
  728. int val);
  729. int smblib_set_prop_typec_select_rp(struct smb_charger *chg,
  730. int val);
  731. int smblib_set_prop_pd_active(struct smb_charger *chg,
  732. int val);
  733. int smblib_set_prop_pd_in_hard_reset(struct smb_charger *chg,
  734. int val);
  735. int smblib_set_prop_ship_mode(struct smb_charger *chg,
  736. int val);
  737. int smblib_set_prop_rechg_soc_thresh(struct smb_charger *chg,
  738. int val);
  739. void smblib_config_charger_on_debug_battery(struct smb_charger *chg);
  740. int smblib_rerun_apsd_if_required(struct smb_charger *chg);
  741. void smblib_rerun_apsd(struct smb_charger *chg);
  742. int smblib_get_prop_fcc_delta(struct smb_charger *chg,
  743. int *val);
  744. int smblib_get_thermal_threshold(struct smb_charger *chg, u16 addr, int *val);
  745. int smblib_dp_dm(struct smb_charger *chg, int val);
  746. int smblib_disable_hw_jeita(struct smb_charger *chg, bool disable);
  747. int smblib_run_aicl(struct smb_charger *chg, int type);
  748. int smblib_set_icl_current(struct smb_charger *chg, int icl_ua);
  749. int smblib_get_icl_current(struct smb_charger *chg, int *icl_ua);
  750. int smblib_get_charge_current(struct smb_charger *chg, int *total_current_ua);
  751. int smblib_get_prop_pr_swap_in_progress(struct smb_charger *chg,
  752. int *val);
  753. int smblib_set_prop_pr_swap_in_progress(struct smb_charger *chg,
  754. int val);
  755. int smblib_typec_port_type_set(const struct typec_capability *cap,
  756. enum typec_port_type type);
  757. int smblib_get_prop_from_bms(struct smb_charger *chg,
  758. int channel, int *val);
  759. int smblib_get_iio_channel(struct smb_charger *chg, const char *propname,
  760. struct iio_channel **chan);
  761. int smblib_configure_hvdcp_apsd(struct smb_charger *chg, bool enable);
  762. int smblib_icl_override(struct smb_charger *chg, enum icl_override_mode mode);
  763. enum alarmtimer_restart smblib_lpd_recheck_timer(struct alarm *alarm,
  764. ktime_t time);
  765. int smblib_toggle_smb_en(struct smb_charger *chg, int toggle);
  766. void smblib_hvdcp_detect_enable(struct smb_charger *chg, bool enable);
  767. void smblib_hvdcp_hw_inov_enable(struct smb_charger *chg, bool enable);
  768. void smblib_hvdcp_exit_config(struct smb_charger *chg);
  769. void smblib_apsd_enable(struct smb_charger *chg, bool enable);
  770. int smblib_force_vbus_voltage(struct smb_charger *chg, u8 val);
  771. int smblib_get_irq_status(struct smb_charger *chg,
  772. int *val);
  773. int smblib_get_qc3_main_icl_offset(struct smb_charger *chg, int *offset_ua);
  774. int smblib_init(struct smb_charger *chg);
  775. int smblib_deinit(struct smb_charger *chg);
  776. int smb5_iio_get_prop(struct smb_charger *chg, int channel, int *val);
  777. int smb5_iio_set_prop(struct smb_charger *chg, int channel, int val);
  778. int smblib_set_prop_voltage_wls_output(struct smb_charger *chg,
  779. union power_supply_propval *val);
  780. int smblib_get_prop_voltage_wls_output(struct smb_charger *chg,
  781. union power_supply_propval *val);
  782. int smblib_get_prop_dc_voltage_now(struct smb_charger *chg,
  783. union power_supply_propval *val);
  784. void smblib_moisture_detection_enable(struct smb_charger *chg, int pval);
  785. #endif /* __SMB5_CHARGER_H */