blob: c00db850b43e02ca345c5df735d63c682c4b4e59 [file] [log] [blame]
Harry Yang4b7db0f2017-11-27 10:50:44 -08001/* Copyright (c) 2018 The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#ifndef __SMB5_CHARGER_H
14#define __SMB5_CHARGER_H
15#include <linux/types.h>
16#include <linux/interrupt.h>
17#include <linux/irqreturn.h>
18#include <linux/regulator/driver.h>
19#include <linux/regulator/consumer.h>
20#include <linux/extcon.h>
Umang Agrawal461e9ea2018-07-05 18:50:13 +053021#include <linux/alarmtimer.h>
Harry Yang4b7db0f2017-11-27 10:50:44 -080022#include "storm-watch.h"
23
24enum print_reason {
25 PR_INTERRUPT = BIT(0),
26 PR_REGISTER = BIT(1),
27 PR_MISC = BIT(2),
28 PR_PARALLEL = BIT(3),
29 PR_OTG = BIT(4),
30};
31
32#define DEFAULT_VOTER "DEFAULT_VOTER"
33#define USER_VOTER "USER_VOTER"
34#define PD_VOTER "PD_VOTER"
35#define DCP_VOTER "DCP_VOTER"
36#define QC_VOTER "QC_VOTER"
37#define PL_USBIN_USBIN_VOTER "PL_USBIN_USBIN_VOTER"
38#define USB_PSY_VOTER "USB_PSY_VOTER"
39#define PL_TAPER_WORK_RUNNING_VOTER "PL_TAPER_WORK_RUNNING_VOTER"
40#define PL_QNOVO_VOTER "PL_QNOVO_VOTER"
41#define USBIN_V_VOTER "USBIN_V_VOTER"
42#define CHG_STATE_VOTER "CHG_STATE_VOTER"
43#define TYPEC_SRC_VOTER "TYPEC_SRC_VOTER"
44#define TAPER_END_VOTER "TAPER_END_VOTER"
45#define THERMAL_DAEMON_VOTER "THERMAL_DAEMON_VOTER"
46#define CC_DETACHED_VOTER "CC_DETACHED_VOTER"
47#define APSD_VOTER "APSD_VOTER"
48#define PD_DISALLOWED_INDIRECT_VOTER "PD_DISALLOWED_INDIRECT_VOTER"
49#define VBUS_CC_SHORT_VOTER "VBUS_CC_SHORT_VOTER"
50#define PD_INACTIVE_VOTER "PD_INACTIVE_VOTER"
51#define BOOST_BACK_VOTER "BOOST_BACK_VOTER"
52#define USBIN_USBIN_BOOST_VOTER "USBIN_USBIN_BOOST_VOTER"
53#define MICRO_USB_VOTER "MICRO_USB_VOTER"
54#define DEBUG_BOARD_VOTER "DEBUG_BOARD_VOTER"
55#define PD_SUSPEND_SUPPORTED_VOTER "PD_SUSPEND_SUPPORTED_VOTER"
56#define PL_DELAY_VOTER "PL_DELAY_VOTER"
57#define CTM_VOTER "CTM_VOTER"
58#define SW_QC3_VOTER "SW_QC3_VOTER"
59#define AICL_RERUN_VOTER "AICL_RERUN_VOTER"
Harry Yangf7b89902018-03-13 22:37:53 -070060#define SW_ICL_MAX_VOTER "SW_ICL_MAX_VOTER"
Harry Yang4b7db0f2017-11-27 10:50:44 -080061#define QNOVO_VOTER "QNOVO_VOTER"
62#define BATT_PROFILE_VOTER "BATT_PROFILE_VOTER"
63#define OTG_DELAY_VOTER "OTG_DELAY_VOTER"
64#define USBIN_I_VOTER "USBIN_I_VOTER"
65#define WEAK_CHARGER_VOTER "WEAK_CHARGER_VOTER"
66#define OTG_VOTER "OTG_VOTER"
67#define PL_FCC_LOW_VOTER "PL_FCC_LOW_VOTER"
68#define WBC_VOTER "WBC_VOTER"
69#define HW_LIMIT_VOTER "HW_LIMIT_VOTER"
Anirudh Ghayaldfdb8412018-04-21 10:37:18 +053070#define FORCE_RECHARGE_VOTER "FORCE_RECHARGE_VOTER"
Ashay Jaiswale0b3c472018-06-20 23:39:41 +053071#define AICL_THRESHOLD_VOTER "AICL_THRESHOLD_VOTER"
Umang Agrawal461e9ea2018-07-05 18:50:13 +053072#define MOISTURE_VOTER "MOISTURE_VOTER"
Ashay Jaiswal43107092018-08-20 18:59:28 +053073#define USBOV_DBC_VOTER "USBOV_DBC_VOTER"
Umang Agrawal238086f2018-05-28 12:29:31 +053074#define FCC_STEPPER_VOTER "FCC_STEPPER_VOTER"
Umang Agrawal37092142019-01-03 17:08:43 +053075#define CHG_TERMINATION_VOTER "CHG_TERMINATION_VOTER"
Harry Yang4b7db0f2017-11-27 10:50:44 -080076
77#define BOOST_BACK_STORM_COUNT 3
78#define WEAK_CHG_STORM_COUNT 8
79
Anirudh Ghayal1380d312018-02-23 00:01:43 +053080#define VBAT_TO_VRAW_ADC(v) div_u64((u64)v * 1000000UL, 194637UL)
81
Anirudh Ghayal4d5cddc2018-06-28 15:19:39 +053082#define SDP_100_MA 100000
83#define SDP_CURRENT_UA 500000
84#define CDP_CURRENT_UA 1500000
85#define DCP_CURRENT_UA 1500000
86#define HVDCP_CURRENT_UA 3000000
87#define TYPEC_DEFAULT_CURRENT_UA 900000
88#define TYPEC_MEDIUM_CURRENT_UA 1500000
89#define TYPEC_HIGH_CURRENT_UA 3000000
90
Harry Yang4b7db0f2017-11-27 10:50:44 -080091enum smb_mode {
92 PARALLEL_MASTER = 0,
93 PARALLEL_SLAVE,
94 NUM_MODES,
95};
96
Harry Yang6afaea22018-03-26 19:11:07 -070097enum sink_src_mode {
98 SINK_MODE,
99 SRC_MODE,
100 UNATTACHED_MODE,
101};
102
Harry Yang4b7db0f2017-11-27 10:50:44 -0800103enum {
104 BOOST_BACK_WA = BIT(0),
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530105 WEAK_ADAPTER_WA = BIT(1),
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530106 MOISTURE_PROTECTION_WA = BIT(2),
Ashay Jaiswal43107092018-08-20 18:59:28 +0530107 USBIN_OV_WA = BIT(3),
Umang Agrawal37092142019-01-03 17:08:43 +0530108 CHG_TERMINATION_WA = BIT(4),
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530109};
110
111enum {
112 RERUN_AICL = BIT(0),
113 RESTART_AICL = BIT(1),
Harry Yang4b7db0f2017-11-27 10:50:44 -0800114};
115
116enum smb_irq_index {
117 /* CHGR */
118 CHGR_ERROR_IRQ = 0,
119 CHG_STATE_CHANGE_IRQ,
120 STEP_CHG_STATE_CHANGE_IRQ,
121 STEP_CHG_SOC_UPDATE_FAIL_IRQ,
122 STEP_CHG_SOC_UPDATE_REQ_IRQ,
123 FG_FVCAL_QUALIFIED_IRQ,
124 VPH_ALARM_IRQ,
125 VPH_DROP_PRECHG_IRQ,
126 /* DCDC */
127 OTG_FAIL_IRQ,
128 OTG_OC_DISABLE_SW_IRQ,
129 OTG_OC_HICCUP_IRQ,
130 BSM_ACTIVE_IRQ,
131 HIGH_DUTY_CYCLE_IRQ,
132 INPUT_CURRENT_LIMITING_IRQ,
133 CONCURRENT_MODE_DISABLE_IRQ,
134 SWITCHER_POWER_OK_IRQ,
135 /* BATIF */
136 BAT_TEMP_IRQ,
137 ALL_CHNL_CONV_DONE_IRQ,
138 BAT_OV_IRQ,
139 BAT_LOW_IRQ,
140 BAT_THERM_OR_ID_MISSING_IRQ,
141 BAT_TERMINAL_MISSING_IRQ,
142 BUCK_OC_IRQ,
143 VPH_OV_IRQ,
144 /* USB */
145 USBIN_COLLAPSE_IRQ,
146 USBIN_VASHDN_IRQ,
147 USBIN_UV_IRQ,
148 USBIN_OV_IRQ,
149 USBIN_PLUGIN_IRQ,
150 USBIN_REVI_CHANGE_IRQ,
151 USBIN_SRC_CHANGE_IRQ,
152 USBIN_ICL_CHANGE_IRQ,
153 /* DC */
154 DCIN_VASHDN_IRQ,
155 DCIN_UV_IRQ,
156 DCIN_OV_IRQ,
157 DCIN_PLUGIN_IRQ,
158 DCIN_REVI_IRQ,
159 DCIN_PON_IRQ,
160 DCIN_EN_IRQ,
161 /* TYPEC */
162 TYPEC_OR_RID_DETECTION_CHANGE_IRQ,
163 TYPEC_VPD_DETECT_IRQ,
164 TYPEC_CC_STATE_CHANGE_IRQ,
165 TYPEC_VCONN_OC_IRQ,
166 TYPEC_VBUS_CHANGE_IRQ,
167 TYPEC_ATTACH_DETACH_IRQ,
168 TYPEC_LEGACY_CABLE_DETECT_IRQ,
169 TYPEC_TRY_SNK_SRC_DETECT_IRQ,
170 /* MISC */
171 WDOG_SNARL_IRQ,
172 WDOG_BARK_IRQ,
173 AICL_FAIL_IRQ,
174 AICL_DONE_IRQ,
175 SMB_EN_IRQ,
176 IMP_TRIGGER_IRQ,
177 TEMP_CHANGE_IRQ,
178 TEMP_CHANGE_SMB_IRQ,
Ashay Jaiswal09feab82018-02-12 12:33:18 +0530179 /* FLASH */
180 VREG_OK_IRQ,
181 ILIM_S2_IRQ,
182 ILIM_S1_IRQ,
183 VOUT_DOWN_IRQ,
184 VOUT_UP_IRQ,
185 FLASH_STATE_CHANGE_IRQ,
186 TORCH_REQ_IRQ,
187 FLASH_EN_IRQ,
Harry Yang4b7db0f2017-11-27 10:50:44 -0800188 /* END */
189 SMB_IRQ_MAX,
190};
191
192enum float_options {
193 FLOAT_DCP = 1,
194 FLOAT_SDP = 2,
195 DISABLE_CHARGING = 3,
196 SUSPEND_INPUT = 4,
197};
198
Guru Das Srinagesh3ca14372018-06-01 11:30:56 -0700199enum chg_term_config_src {
200 ITERM_SRC_UNSPECIFIED,
201 ITERM_SRC_ADC,
202 ITERM_SRC_ANALOG
203};
204
Harry Yang4b7db0f2017-11-27 10:50:44 -0800205struct smb_irq_info {
206 const char *name;
207 const irq_handler_t handler;
208 const bool wake;
209 const struct storm_watch storm_data;
210 struct smb_irq_data *irq_data;
211 int irq;
212};
213
214static const unsigned int smblib_extcon_cable[] = {
215 EXTCON_USB,
216 EXTCON_USB_HOST,
217 EXTCON_NONE,
218};
219
220/* EXTCON_USB and EXTCON_USB_HOST are mutually exclusive */
221static const u32 smblib_extcon_exclusive[] = {0x3, 0};
222
223struct smb_regulator {
224 struct regulator_dev *rdev;
225 struct regulator_desc rdesc;
226};
227
228struct smb_irq_data {
229 void *parent_data;
230 const char *name;
231 struct storm_watch storm_data;
232};
233
234struct smb_chg_param {
235 const char *name;
236 u16 reg;
237 int min_u;
238 int max_u;
239 int step_u;
240 int (*get_proc)(struct smb_chg_param *param,
241 u8 val_raw);
242 int (*set_proc)(struct smb_chg_param *param,
243 int val_u,
244 u8 *val_raw);
245};
246
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530247struct buck_boost_freq {
248 int freq_khz;
249 u8 val;
250};
251
Harry Yang4b7db0f2017-11-27 10:50:44 -0800252struct smb_chg_freq {
253 unsigned int freq_5V;
254 unsigned int freq_6V_8V;
255 unsigned int freq_9V;
256 unsigned int freq_12V;
257 unsigned int freq_removal;
258 unsigned int freq_below_otg_threshold;
259 unsigned int freq_above_otg_threshold;
260};
261
262struct smb_params {
263 struct smb_chg_param fcc;
264 struct smb_chg_param fv;
265 struct smb_chg_param usb_icl;
Harry Yangf7b89902018-03-13 22:37:53 -0700266 struct smb_chg_param icl_max_stat;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800267 struct smb_chg_param icl_stat;
268 struct smb_chg_param otg_cl;
269 struct smb_chg_param jeita_cc_comp_hot;
270 struct smb_chg_param jeita_cc_comp_cold;
271 struct smb_chg_param freq_switcher;
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530272 struct smb_chg_param aicl_5v_threshold;
273 struct smb_chg_param aicl_cont_threshold;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800274};
275
276struct parallel_params {
277 struct power_supply *psy;
278};
279
280struct smb_iio {
281 struct iio_channel *temp_chan;
282 struct iio_channel *temp_max_chan;
283 struct iio_channel *usbin_i_chan;
284 struct iio_channel *usbin_v_chan;
285 struct iio_channel *batt_i_chan;
286 struct iio_channel *connector_temp_chan;
287 struct iio_channel *connector_temp_thr1_chan;
288 struct iio_channel *connector_temp_thr2_chan;
289 struct iio_channel *connector_temp_thr3_chan;
290};
291
292struct smb_charger {
293 struct device *dev;
294 char *name;
295 struct regmap *regmap;
296 struct smb_irq_info *irq_info;
297 struct smb_params param;
298 struct smb_iio iio;
299 int *debug_mask;
Harry Yang6afaea22018-03-26 19:11:07 -0700300 int *pd_disabled;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800301 enum smb_mode mode;
302 struct smb_chg_freq chg_freq;
303 int smb_version;
304 int otg_delay_ms;
305 int *weak_chg_icl_ua;
Ashay Jaiswal20688262018-04-25 11:45:34 +0530306 struct qpnp_vadc_chip *vadc_dev;
Ashay Jaiswalf2ca7092018-05-22 21:33:15 +0530307 bool pd_not_supported;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800308
309 /* locks */
310 struct mutex lock;
311 struct mutex ps_change_lock;
Anirudh Ghayal75f8f812018-07-09 16:48:47 +0530312 struct mutex vadc_lock;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800313
314 /* power supplies */
315 struct power_supply *batt_psy;
316 struct power_supply *usb_psy;
317 struct power_supply *dc_psy;
318 struct power_supply *bms_psy;
319 struct power_supply *usb_main_psy;
320 struct power_supply *usb_port_psy;
321 enum power_supply_type real_charger_type;
322
323 /* notifiers */
324 struct notifier_block nb;
325
326 /* parallel charging */
327 struct parallel_params pl;
328
329 /* regulators */
330 struct smb_regulator *vbus_vreg;
331 struct smb_regulator *vconn_vreg;
332 struct regulator *dpdm_reg;
333
334 /* votables */
335 struct votable *dc_suspend_votable;
336 struct votable *fcc_votable;
337 struct votable *fv_votable;
338 struct votable *usb_icl_votable;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800339 struct votable *awake_votable;
340 struct votable *pl_disable_votable;
341 struct votable *chg_disable_votable;
342 struct votable *pl_enable_votable_indirect;
343 struct votable *usb_irq_enable_votable;
jessicatseng240bd292020-04-27 19:09:56 +0800344//<2020/04/28-JessicaTseng, Setting jeita fv re-charge voltage for warm temp
345 struct votable *rechg_vol_votable;
346//>2020/04/28-JessicaTseng
Harry Yang4b7db0f2017-11-27 10:50:44 -0800347
348 /* work */
349 struct work_struct bms_update_work;
350 struct work_struct pl_update_work;
Ashay Jaiswalf05bd552018-04-12 18:11:00 +0530351 struct work_struct jeita_update_work;
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530352 struct work_struct moisture_protection_work;
Umang Agrawal37092142019-01-03 17:08:43 +0530353 struct work_struct chg_termination_work;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800354 struct delayed_work ps_change_timeout_work;
355 struct delayed_work clear_hdc_work;
356 struct delayed_work icl_change_work;
357 struct delayed_work pl_enable_work;
358 struct delayed_work uusb_otg_work;
359 struct delayed_work bb_removal_work;
Ashay Jaiswal43107092018-08-20 18:59:28 +0530360 struct delayed_work usbov_dbc_work;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800361
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530362 /* alarm */
363 struct alarm moisture_protection_alarm;
Umang Agrawal37092142019-01-03 17:08:43 +0530364 struct alarm chg_termination_alarm;
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530365
Harry Yang6afaea22018-03-26 19:11:07 -0700366 /* pd */
Harry Yang4b7db0f2017-11-27 10:50:44 -0800367 int voltage_min_uv;
368 int voltage_max_uv;
369 int pd_active;
Harry Yang6afaea22018-03-26 19:11:07 -0700370 bool pd_hard_reset;
371 bool pr_swap_in_progress;
372 bool early_usb_attach;
373 bool ok_to_pd;
374 bool typec_legacy;
375
376 /* cached status */
Harry Yang4b7db0f2017-11-27 10:50:44 -0800377 bool system_suspend_supported;
378 int boost_threshold_ua;
379 int system_temp_level;
380 int thermal_levels;
381 int *thermal_mitigation;
382 int dcp_icl_ua;
383 int fake_capacity;
384 int fake_batt_status;
385 bool step_chg_enabled;
386 bool sw_jeita_enabled;
387 bool is_hdc;
388 bool chg_done;
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530389 int connector_type;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800390 bool otg_en;
391 bool suspend_input_on_debug_batt;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800392 int default_icl_ua;
393 int otg_cl_ua;
394 bool uusb_apsd_rerun_done;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800395 int fake_input_current_limited;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800396 int typec_mode;
397 int usb_icl_change_irq_enabled;
398 u32 jeita_status;
399 u8 float_cfg;
400 bool use_extcon;
401 bool otg_present;
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530402 int hw_max_icl_ua;
Anirudh Ghayal1380d312018-02-23 00:01:43 +0530403 int auto_recharge_soc;
Ashay Jaiswalf05bd552018-04-12 18:11:00 +0530404 bool jeita_configured;
Harry Yang6afaea22018-03-26 19:11:07 -0700405 enum sink_src_mode sink_src_mode;
Ashay Jaiswal0de6fb92018-06-12 17:23:45 +0530406 bool hw_die_temp_mitigation;
407 bool hw_connector_mitigation;
408 int connector_pull_up;
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530409 int aicl_5v_threshold_mv;
410 int default_aicl_5v_threshold_mv;
411 int aicl_cont_threshold_mv;
412 int default_aicl_cont_threshold_mv;
413 bool aicl_max_reached;
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530414 bool moisture_present;
415 bool moisture_protection_enabled;
Umang Agrawal238086f2018-05-28 12:29:31 +0530416 bool fcc_stepper_enable;
Umang Agrawal37092142019-01-03 17:08:43 +0530417 int charge_full_cc;
418 int cc_soc_ref;
Anirudh Ghayal76c1f762019-05-23 14:22:25 +0530419 int last_cc_soc;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800420
421 /* workaround flag */
422 u32 wa_flags;
423 int boost_current_ua;
Ashay Jaiswal43107092018-08-20 18:59:28 +0530424 bool dbc_usbov;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800425
426 /* extcon for VBUS / ID notification to USB for uUSB */
427 struct extcon_dev *extcon;
428
429 /* battery profile */
430 int batt_profile_fcc_ua;
431 int batt_profile_fv_uv;
432
433 int usb_icl_delta_ua;
434 int pulse_cnt;
435
436 int die_health;
Ashay Jaiswal09feab82018-02-12 12:33:18 +0530437
438 /* flash */
439 u32 flash_derating_soc;
440 u32 flash_disable_soc;
441 u32 headroom_mode;
442 bool flash_init_done;
443 bool flash_active;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800444};
445
446int smblib_read(struct smb_charger *chg, u16 addr, u8 *val);
447int smblib_masked_write(struct smb_charger *chg, u16 addr, u8 mask, u8 val);
448int smblib_write(struct smb_charger *chg, u16 addr, u8 val);
Anirudh Ghayal1380d312018-02-23 00:01:43 +0530449int smblib_batch_write(struct smb_charger *chg, u16 addr, u8 *val, int count);
450int smblib_batch_read(struct smb_charger *chg, u16 addr, u8 *val, int count);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800451
452int smblib_get_charge_param(struct smb_charger *chg,
453 struct smb_chg_param *param, int *val_u);
454int smblib_get_usb_suspend(struct smb_charger *chg, int *suspend);
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530455int smblib_get_aicl_cont_threshold(struct smb_chg_param *param, u8 val_raw);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800456int smblib_enable_charging(struct smb_charger *chg, bool enable);
457int smblib_set_charge_param(struct smb_charger *chg,
458 struct smb_chg_param *param, int val_u);
459int smblib_set_usb_suspend(struct smb_charger *chg, bool suspend);
460int smblib_set_dc_suspend(struct smb_charger *chg, bool suspend);
461
462int smblib_mapping_soc_from_field_value(struct smb_chg_param *param,
463 int val_u, u8 *val_raw);
464int smblib_mapping_cc_delta_to_field_value(struct smb_chg_param *param,
465 u8 val_raw);
466int smblib_mapping_cc_delta_from_field_value(struct smb_chg_param *param,
467 int val_u, u8 *val_raw);
468int smblib_set_chg_freq(struct smb_chg_param *param,
469 int val_u, u8 *val_raw);
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530470int smblib_set_prop_boost_current(struct smb_charger *chg,
471 const union power_supply_propval *val);
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530472int smblib_set_aicl_cont_threshold(struct smb_chg_param *param,
473 int val_u, u8 *val_raw);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800474int smblib_vbus_regulator_enable(struct regulator_dev *rdev);
475int smblib_vbus_regulator_disable(struct regulator_dev *rdev);
476int smblib_vbus_regulator_is_enabled(struct regulator_dev *rdev);
477
478int smblib_vconn_regulator_enable(struct regulator_dev *rdev);
479int smblib_vconn_regulator_disable(struct regulator_dev *rdev);
480int smblib_vconn_regulator_is_enabled(struct regulator_dev *rdev);
481
482irqreturn_t default_irq_handler(int irq, void *data);
483irqreturn_t chg_state_change_irq_handler(int irq, void *data);
484irqreturn_t batt_temp_changed_irq_handler(int irq, void *data);
485irqreturn_t batt_psy_changed_irq_handler(int irq, void *data);
486irqreturn_t usbin_uv_irq_handler(int irq, void *data);
487irqreturn_t usb_plugin_irq_handler(int irq, void *data);
488irqreturn_t usb_source_change_irq_handler(int irq, void *data);
489irqreturn_t icl_change_irq_handler(int irq, void *data);
490irqreturn_t typec_state_change_irq_handler(int irq, void *data);
Harry Yang6afaea22018-03-26 19:11:07 -0700491irqreturn_t typec_attach_detach_irq_handler(int irq, void *data);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800492irqreturn_t dc_plugin_irq_handler(int irq, void *data);
493irqreturn_t high_duty_cycle_irq_handler(int irq, void *data);
494irqreturn_t switcher_power_ok_irq_handler(int irq, void *data);
495irqreturn_t wdog_bark_irq_handler(int irq, void *data);
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530496irqreturn_t typec_or_rid_detection_change_irq_handler(int irq, void *data);
Ashay Jaiswal43107092018-08-20 18:59:28 +0530497irqreturn_t usbin_ov_irq_handler(int irq, void *data);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800498
499int smblib_get_prop_input_suspend(struct smb_charger *chg,
500 union power_supply_propval *val);
501int smblib_get_prop_batt_present(struct smb_charger *chg,
502 union power_supply_propval *val);
503int smblib_get_prop_batt_capacity(struct smb_charger *chg,
504 union power_supply_propval *val);
505int smblib_get_prop_batt_status(struct smb_charger *chg,
506 union power_supply_propval *val);
507int smblib_get_prop_batt_charge_type(struct smb_charger *chg,
508 union power_supply_propval *val);
509int smblib_get_prop_batt_charge_done(struct smb_charger *chg,
510 union power_supply_propval *val);
511int smblib_get_prop_batt_health(struct smb_charger *chg,
512 union power_supply_propval *val);
513int smblib_get_prop_system_temp_level(struct smb_charger *chg,
514 union power_supply_propval *val);
515int smblib_get_prop_system_temp_level_max(struct smb_charger *chg,
516 union power_supply_propval *val);
517int smblib_get_prop_input_current_limited(struct smb_charger *chg,
518 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800519int smblib_set_prop_input_suspend(struct smb_charger *chg,
520 const union power_supply_propval *val);
521int smblib_set_prop_batt_capacity(struct smb_charger *chg,
522 const union power_supply_propval *val);
523int smblib_set_prop_batt_status(struct smb_charger *chg,
524 const union power_supply_propval *val);
525int smblib_set_prop_system_temp_level(struct smb_charger *chg,
526 const union power_supply_propval *val);
527int smblib_set_prop_input_current_limited(struct smb_charger *chg,
528 const union power_supply_propval *val);
529
530int smblib_get_prop_dc_present(struct smb_charger *chg,
531 union power_supply_propval *val);
532int smblib_get_prop_dc_online(struct smb_charger *chg,
533 union power_supply_propval *val);
534int smblib_get_prop_dc_current_max(struct smb_charger *chg,
535 union power_supply_propval *val);
536int smblib_set_prop_dc_current_max(struct smb_charger *chg,
537 const union power_supply_propval *val);
538int smblib_get_prop_usb_present(struct smb_charger *chg,
539 union power_supply_propval *val);
540int smblib_get_prop_usb_online(struct smb_charger *chg,
541 union power_supply_propval *val);
542int smblib_get_prop_usb_suspend(struct smb_charger *chg,
543 union power_supply_propval *val);
544int smblib_get_prop_usb_voltage_max(struct smb_charger *chg,
545 union power_supply_propval *val);
Umang Agrawal9fb865a2018-06-25 16:24:00 +0530546int smblib_get_prop_usb_voltage_max_design(struct smb_charger *chg,
547 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800548int smblib_get_prop_typec_cc_orientation(struct smb_charger *chg,
549 union power_supply_propval *val);
550int smblib_get_prop_typec_power_role(struct smb_charger *chg,
551 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800552int smblib_get_prop_input_current_settled(struct smb_charger *chg,
553 union power_supply_propval *val);
554int smblib_get_prop_input_voltage_settled(struct smb_charger *chg,
555 union power_supply_propval *val);
556int smblib_get_prop_pd_in_hard_reset(struct smb_charger *chg,
557 union power_supply_propval *val);
558int smblib_get_pe_start(struct smb_charger *chg,
559 union power_supply_propval *val);
560int smblib_get_prop_die_health(struct smb_charger *chg,
561 union power_supply_propval *val);
562int smblib_set_prop_pd_current_max(struct smb_charger *chg,
563 const union power_supply_propval *val);
564int smblib_set_prop_sdp_current_max(struct smb_charger *chg,
565 const union power_supply_propval *val);
566int smblib_set_prop_pd_voltage_max(struct smb_charger *chg,
567 const union power_supply_propval *val);
568int smblib_set_prop_pd_voltage_min(struct smb_charger *chg,
569 const union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800570int smblib_set_prop_typec_power_role(struct smb_charger *chg,
571 const union power_supply_propval *val);
572int smblib_set_prop_pd_active(struct smb_charger *chg,
573 const union power_supply_propval *val);
574int smblib_set_prop_pd_in_hard_reset(struct smb_charger *chg,
575 const union power_supply_propval *val);
576int smblib_set_prop_ship_mode(struct smb_charger *chg,
577 const union power_supply_propval *val);
578void smblib_suspend_on_debug_battery(struct smb_charger *chg);
579int smblib_rerun_apsd_if_required(struct smb_charger *chg);
580int smblib_get_prop_fcc_delta(struct smb_charger *chg,
581 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800582int smblib_dp_dm(struct smb_charger *chg, int val);
583int smblib_disable_hw_jeita(struct smb_charger *chg, bool disable);
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530584int smblib_run_aicl(struct smb_charger *chg, int type);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800585int smblib_set_icl_current(struct smb_charger *chg, int icl_ua);
586int smblib_get_icl_current(struct smb_charger *chg, int *icl_ua);
587int smblib_get_charge_current(struct smb_charger *chg, int *total_current_ua);
588int smblib_get_prop_pr_swap_in_progress(struct smb_charger *chg,
589 union power_supply_propval *val);
590int smblib_set_prop_pr_swap_in_progress(struct smb_charger *chg,
591 const union power_supply_propval *val);
Ashay Jaiswal5c5ba272018-07-23 14:54:20 +0530592int smblib_get_prop_from_bms(struct smb_charger *chg,
593 enum power_supply_property psp,
594 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800595int smblib_stat_sw_override_cfg(struct smb_charger *chg, bool override);
Ashay Jaiswala55b7ed2018-03-23 17:23:48 +0530596int smblib_configure_wdog(struct smb_charger *chg, bool enable);
Ashay Jaiswal4d334f42018-04-25 10:58:49 +0530597int smblib_force_vbus_voltage(struct smb_charger *chg, u8 val);
Ashay Jaiswalc96380de2018-05-16 12:02:36 +0530598int smblib_configure_hvdcp_apsd(struct smb_charger *chg, bool enable);
Ashay Jaiswalcbdf2e82018-05-27 23:59:01 +0530599int smblib_icl_override(struct smb_charger *chg, bool override);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800600
601int smblib_init(struct smb_charger *chg);
602int smblib_deinit(struct smb_charger *chg);
603#endif /* __SMB5_CHARGER_H */