blob: c252ef008a3b7a8c69f6ade10338b4a9bebe33ff [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"
Harry Yang4b7db0f2017-11-27 10:50:44 -080073
74#define BOOST_BACK_STORM_COUNT 3
75#define WEAK_CHG_STORM_COUNT 8
76
Anirudh Ghayal1380d312018-02-23 00:01:43 +053077#define VBAT_TO_VRAW_ADC(v) div_u64((u64)v * 1000000UL, 194637UL)
78
Anirudh Ghayal4d5cddc2018-06-28 15:19:39 +053079#define SDP_100_MA 100000
80#define SDP_CURRENT_UA 500000
81#define CDP_CURRENT_UA 1500000
82#define DCP_CURRENT_UA 1500000
83#define HVDCP_CURRENT_UA 3000000
84#define TYPEC_DEFAULT_CURRENT_UA 900000
85#define TYPEC_MEDIUM_CURRENT_UA 1500000
86#define TYPEC_HIGH_CURRENT_UA 3000000
Guru Das Srinagesh3ca14372018-06-01 11:30:56 -070087#define ADC_CHG_TERM_MASK 32767
Anirudh Ghayal4d5cddc2018-06-28 15:19:39 +053088
Harry Yang4b7db0f2017-11-27 10:50:44 -080089enum smb_mode {
90 PARALLEL_MASTER = 0,
91 PARALLEL_SLAVE,
92 NUM_MODES,
93};
94
Harry Yang6afaea22018-03-26 19:11:07 -070095enum sink_src_mode {
96 SINK_MODE,
97 SRC_MODE,
98 UNATTACHED_MODE,
99};
100
Harry Yang4b7db0f2017-11-27 10:50:44 -0800101enum {
102 BOOST_BACK_WA = BIT(0),
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530103 WEAK_ADAPTER_WA = BIT(1),
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530104 MOISTURE_PROTECTION_WA = BIT(2),
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530105};
106
107enum {
108 RERUN_AICL = BIT(0),
109 RESTART_AICL = BIT(1),
Harry Yang4b7db0f2017-11-27 10:50:44 -0800110};
111
112enum smb_irq_index {
113 /* CHGR */
114 CHGR_ERROR_IRQ = 0,
115 CHG_STATE_CHANGE_IRQ,
116 STEP_CHG_STATE_CHANGE_IRQ,
117 STEP_CHG_SOC_UPDATE_FAIL_IRQ,
118 STEP_CHG_SOC_UPDATE_REQ_IRQ,
119 FG_FVCAL_QUALIFIED_IRQ,
120 VPH_ALARM_IRQ,
121 VPH_DROP_PRECHG_IRQ,
122 /* DCDC */
123 OTG_FAIL_IRQ,
124 OTG_OC_DISABLE_SW_IRQ,
125 OTG_OC_HICCUP_IRQ,
126 BSM_ACTIVE_IRQ,
127 HIGH_DUTY_CYCLE_IRQ,
128 INPUT_CURRENT_LIMITING_IRQ,
129 CONCURRENT_MODE_DISABLE_IRQ,
130 SWITCHER_POWER_OK_IRQ,
131 /* BATIF */
132 BAT_TEMP_IRQ,
133 ALL_CHNL_CONV_DONE_IRQ,
134 BAT_OV_IRQ,
135 BAT_LOW_IRQ,
136 BAT_THERM_OR_ID_MISSING_IRQ,
137 BAT_TERMINAL_MISSING_IRQ,
138 BUCK_OC_IRQ,
139 VPH_OV_IRQ,
140 /* USB */
141 USBIN_COLLAPSE_IRQ,
142 USBIN_VASHDN_IRQ,
143 USBIN_UV_IRQ,
144 USBIN_OV_IRQ,
145 USBIN_PLUGIN_IRQ,
146 USBIN_REVI_CHANGE_IRQ,
147 USBIN_SRC_CHANGE_IRQ,
148 USBIN_ICL_CHANGE_IRQ,
149 /* DC */
150 DCIN_VASHDN_IRQ,
151 DCIN_UV_IRQ,
152 DCIN_OV_IRQ,
153 DCIN_PLUGIN_IRQ,
154 DCIN_REVI_IRQ,
155 DCIN_PON_IRQ,
156 DCIN_EN_IRQ,
157 /* TYPEC */
158 TYPEC_OR_RID_DETECTION_CHANGE_IRQ,
159 TYPEC_VPD_DETECT_IRQ,
160 TYPEC_CC_STATE_CHANGE_IRQ,
161 TYPEC_VCONN_OC_IRQ,
162 TYPEC_VBUS_CHANGE_IRQ,
163 TYPEC_ATTACH_DETACH_IRQ,
164 TYPEC_LEGACY_CABLE_DETECT_IRQ,
165 TYPEC_TRY_SNK_SRC_DETECT_IRQ,
166 /* MISC */
167 WDOG_SNARL_IRQ,
168 WDOG_BARK_IRQ,
169 AICL_FAIL_IRQ,
170 AICL_DONE_IRQ,
171 SMB_EN_IRQ,
172 IMP_TRIGGER_IRQ,
173 TEMP_CHANGE_IRQ,
174 TEMP_CHANGE_SMB_IRQ,
Ashay Jaiswal09feab82018-02-12 12:33:18 +0530175 /* FLASH */
176 VREG_OK_IRQ,
177 ILIM_S2_IRQ,
178 ILIM_S1_IRQ,
179 VOUT_DOWN_IRQ,
180 VOUT_UP_IRQ,
181 FLASH_STATE_CHANGE_IRQ,
182 TORCH_REQ_IRQ,
183 FLASH_EN_IRQ,
Harry Yang4b7db0f2017-11-27 10:50:44 -0800184 /* END */
185 SMB_IRQ_MAX,
186};
187
188enum float_options {
189 FLOAT_DCP = 1,
190 FLOAT_SDP = 2,
191 DISABLE_CHARGING = 3,
192 SUSPEND_INPUT = 4,
193};
194
Guru Das Srinagesh3ca14372018-06-01 11:30:56 -0700195enum chg_term_config_src {
196 ITERM_SRC_UNSPECIFIED,
197 ITERM_SRC_ADC,
198 ITERM_SRC_ANALOG
199};
200
Harry Yang4b7db0f2017-11-27 10:50:44 -0800201struct smb_irq_info {
202 const char *name;
203 const irq_handler_t handler;
204 const bool wake;
205 const struct storm_watch storm_data;
206 struct smb_irq_data *irq_data;
207 int irq;
208};
209
210static const unsigned int smblib_extcon_cable[] = {
211 EXTCON_USB,
212 EXTCON_USB_HOST,
213 EXTCON_NONE,
214};
215
216/* EXTCON_USB and EXTCON_USB_HOST are mutually exclusive */
217static const u32 smblib_extcon_exclusive[] = {0x3, 0};
218
219struct smb_regulator {
220 struct regulator_dev *rdev;
221 struct regulator_desc rdesc;
222};
223
224struct smb_irq_data {
225 void *parent_data;
226 const char *name;
227 struct storm_watch storm_data;
228};
229
230struct smb_chg_param {
231 const char *name;
232 u16 reg;
233 int min_u;
234 int max_u;
235 int step_u;
236 int (*get_proc)(struct smb_chg_param *param,
237 u8 val_raw);
238 int (*set_proc)(struct smb_chg_param *param,
239 int val_u,
240 u8 *val_raw);
241};
242
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530243struct buck_boost_freq {
244 int freq_khz;
245 u8 val;
246};
247
Harry Yang4b7db0f2017-11-27 10:50:44 -0800248struct smb_chg_freq {
249 unsigned int freq_5V;
250 unsigned int freq_6V_8V;
251 unsigned int freq_9V;
252 unsigned int freq_12V;
253 unsigned int freq_removal;
254 unsigned int freq_below_otg_threshold;
255 unsigned int freq_above_otg_threshold;
256};
257
258struct smb_params {
259 struct smb_chg_param fcc;
260 struct smb_chg_param fv;
261 struct smb_chg_param usb_icl;
Harry Yangf7b89902018-03-13 22:37:53 -0700262 struct smb_chg_param icl_max_stat;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800263 struct smb_chg_param icl_stat;
264 struct smb_chg_param otg_cl;
265 struct smb_chg_param jeita_cc_comp_hot;
266 struct smb_chg_param jeita_cc_comp_cold;
267 struct smb_chg_param freq_switcher;
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530268 struct smb_chg_param aicl_5v_threshold;
269 struct smb_chg_param aicl_cont_threshold;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800270};
271
272struct parallel_params {
273 struct power_supply *psy;
274};
275
276struct smb_iio {
277 struct iio_channel *temp_chan;
278 struct iio_channel *temp_max_chan;
279 struct iio_channel *usbin_i_chan;
280 struct iio_channel *usbin_v_chan;
281 struct iio_channel *batt_i_chan;
282 struct iio_channel *connector_temp_chan;
283 struct iio_channel *connector_temp_thr1_chan;
284 struct iio_channel *connector_temp_thr2_chan;
285 struct iio_channel *connector_temp_thr3_chan;
286};
287
288struct smb_charger {
289 struct device *dev;
290 char *name;
291 struct regmap *regmap;
292 struct smb_irq_info *irq_info;
293 struct smb_params param;
294 struct smb_iio iio;
295 int *debug_mask;
Harry Yang6afaea22018-03-26 19:11:07 -0700296 int *pd_disabled;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800297 enum smb_mode mode;
298 struct smb_chg_freq chg_freq;
299 int smb_version;
300 int otg_delay_ms;
301 int *weak_chg_icl_ua;
Ashay Jaiswal20688262018-04-25 11:45:34 +0530302 struct qpnp_vadc_chip *vadc_dev;
Ashay Jaiswalf2ca7092018-05-22 21:33:15 +0530303 bool pd_not_supported;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800304
305 /* locks */
306 struct mutex lock;
307 struct mutex ps_change_lock;
Anirudh Ghayal75f8f812018-07-09 16:48:47 +0530308 struct mutex vadc_lock;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800309
310 /* power supplies */
311 struct power_supply *batt_psy;
312 struct power_supply *usb_psy;
313 struct power_supply *dc_psy;
314 struct power_supply *bms_psy;
315 struct power_supply *usb_main_psy;
316 struct power_supply *usb_port_psy;
317 enum power_supply_type real_charger_type;
318
319 /* notifiers */
320 struct notifier_block nb;
321
322 /* parallel charging */
323 struct parallel_params pl;
324
325 /* regulators */
326 struct smb_regulator *vbus_vreg;
327 struct smb_regulator *vconn_vreg;
328 struct regulator *dpdm_reg;
329
330 /* votables */
331 struct votable *dc_suspend_votable;
332 struct votable *fcc_votable;
333 struct votable *fv_votable;
334 struct votable *usb_icl_votable;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800335 struct votable *awake_votable;
336 struct votable *pl_disable_votable;
337 struct votable *chg_disable_votable;
338 struct votable *pl_enable_votable_indirect;
339 struct votable *usb_irq_enable_votable;
340
341 /* work */
342 struct work_struct bms_update_work;
343 struct work_struct pl_update_work;
Ashay Jaiswalf05bd552018-04-12 18:11:00 +0530344 struct work_struct jeita_update_work;
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530345 struct work_struct moisture_protection_work;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800346 struct delayed_work ps_change_timeout_work;
347 struct delayed_work clear_hdc_work;
348 struct delayed_work icl_change_work;
349 struct delayed_work pl_enable_work;
350 struct delayed_work uusb_otg_work;
351 struct delayed_work bb_removal_work;
352
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530353 /* alarm */
354 struct alarm moisture_protection_alarm;
355
Harry Yang6afaea22018-03-26 19:11:07 -0700356 /* pd */
Harry Yang4b7db0f2017-11-27 10:50:44 -0800357 int voltage_min_uv;
358 int voltage_max_uv;
359 int pd_active;
Harry Yang6afaea22018-03-26 19:11:07 -0700360 bool pd_hard_reset;
361 bool pr_swap_in_progress;
362 bool early_usb_attach;
363 bool ok_to_pd;
364 bool typec_legacy;
365
366 /* cached status */
Harry Yang4b7db0f2017-11-27 10:50:44 -0800367 bool system_suspend_supported;
368 int boost_threshold_ua;
369 int system_temp_level;
370 int thermal_levels;
371 int *thermal_mitigation;
372 int dcp_icl_ua;
373 int fake_capacity;
374 int fake_batt_status;
375 bool step_chg_enabled;
376 bool sw_jeita_enabled;
377 bool is_hdc;
378 bool chg_done;
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530379 int connector_type;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800380 bool otg_en;
381 bool suspend_input_on_debug_batt;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800382 int default_icl_ua;
383 int otg_cl_ua;
384 bool uusb_apsd_rerun_done;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800385 int fake_input_current_limited;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800386 int typec_mode;
387 int usb_icl_change_irq_enabled;
388 u32 jeita_status;
389 u8 float_cfg;
390 bool use_extcon;
391 bool otg_present;
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530392 int hw_max_icl_ua;
Anirudh Ghayal1380d312018-02-23 00:01:43 +0530393 int auto_recharge_soc;
Ashay Jaiswalf05bd552018-04-12 18:11:00 +0530394 bool jeita_configured;
Harry Yang6afaea22018-03-26 19:11:07 -0700395 enum sink_src_mode sink_src_mode;
Ashay Jaiswal0de6fb92018-06-12 17:23:45 +0530396 bool hw_die_temp_mitigation;
397 bool hw_connector_mitigation;
398 int connector_pull_up;
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530399 int aicl_5v_threshold_mv;
400 int default_aicl_5v_threshold_mv;
401 int aicl_cont_threshold_mv;
402 int default_aicl_cont_threshold_mv;
403 bool aicl_max_reached;
Umang Agrawal461e9ea2018-07-05 18:50:13 +0530404 bool moisture_present;
405 bool moisture_protection_enabled;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800406
407 /* workaround flag */
408 u32 wa_flags;
409 int boost_current_ua;
410
411 /* extcon for VBUS / ID notification to USB for uUSB */
412 struct extcon_dev *extcon;
413
414 /* battery profile */
415 int batt_profile_fcc_ua;
416 int batt_profile_fv_uv;
417
418 int usb_icl_delta_ua;
419 int pulse_cnt;
420
421 int die_health;
Ashay Jaiswal09feab82018-02-12 12:33:18 +0530422
423 /* flash */
424 u32 flash_derating_soc;
425 u32 flash_disable_soc;
426 u32 headroom_mode;
427 bool flash_init_done;
428 bool flash_active;
Harry Yang4b7db0f2017-11-27 10:50:44 -0800429};
430
431int smblib_read(struct smb_charger *chg, u16 addr, u8 *val);
432int smblib_masked_write(struct smb_charger *chg, u16 addr, u8 mask, u8 val);
433int smblib_write(struct smb_charger *chg, u16 addr, u8 val);
Anirudh Ghayal1380d312018-02-23 00:01:43 +0530434int smblib_batch_write(struct smb_charger *chg, u16 addr, u8 *val, int count);
435int smblib_batch_read(struct smb_charger *chg, u16 addr, u8 *val, int count);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800436
437int smblib_get_charge_param(struct smb_charger *chg,
438 struct smb_chg_param *param, int *val_u);
439int smblib_get_usb_suspend(struct smb_charger *chg, int *suspend);
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530440int smblib_get_aicl_cont_threshold(struct smb_chg_param *param, u8 val_raw);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800441int smblib_enable_charging(struct smb_charger *chg, bool enable);
442int smblib_set_charge_param(struct smb_charger *chg,
443 struct smb_chg_param *param, int val_u);
444int smblib_set_usb_suspend(struct smb_charger *chg, bool suspend);
445int smblib_set_dc_suspend(struct smb_charger *chg, bool suspend);
446
447int smblib_mapping_soc_from_field_value(struct smb_chg_param *param,
448 int val_u, u8 *val_raw);
449int smblib_mapping_cc_delta_to_field_value(struct smb_chg_param *param,
450 u8 val_raw);
451int smblib_mapping_cc_delta_from_field_value(struct smb_chg_param *param,
452 int val_u, u8 *val_raw);
453int smblib_set_chg_freq(struct smb_chg_param *param,
454 int val_u, u8 *val_raw);
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530455int smblib_set_prop_boost_current(struct smb_charger *chg,
456 const union power_supply_propval *val);
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530457int smblib_set_aicl_cont_threshold(struct smb_chg_param *param,
458 int val_u, u8 *val_raw);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800459int smblib_vbus_regulator_enable(struct regulator_dev *rdev);
460int smblib_vbus_regulator_disable(struct regulator_dev *rdev);
461int smblib_vbus_regulator_is_enabled(struct regulator_dev *rdev);
462
463int smblib_vconn_regulator_enable(struct regulator_dev *rdev);
464int smblib_vconn_regulator_disable(struct regulator_dev *rdev);
465int smblib_vconn_regulator_is_enabled(struct regulator_dev *rdev);
466
467irqreturn_t default_irq_handler(int irq, void *data);
468irqreturn_t chg_state_change_irq_handler(int irq, void *data);
469irqreturn_t batt_temp_changed_irq_handler(int irq, void *data);
470irqreturn_t batt_psy_changed_irq_handler(int irq, void *data);
471irqreturn_t usbin_uv_irq_handler(int irq, void *data);
472irqreturn_t usb_plugin_irq_handler(int irq, void *data);
473irqreturn_t usb_source_change_irq_handler(int irq, void *data);
474irqreturn_t icl_change_irq_handler(int irq, void *data);
475irqreturn_t typec_state_change_irq_handler(int irq, void *data);
Harry Yang6afaea22018-03-26 19:11:07 -0700476irqreturn_t typec_attach_detach_irq_handler(int irq, void *data);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800477irqreturn_t dc_plugin_irq_handler(int irq, void *data);
478irqreturn_t high_duty_cycle_irq_handler(int irq, void *data);
479irqreturn_t switcher_power_ok_irq_handler(int irq, void *data);
480irqreturn_t wdog_bark_irq_handler(int irq, void *data);
Ashay Jaiswala9e10912018-02-02 14:03:35 +0530481irqreturn_t typec_or_rid_detection_change_irq_handler(int irq, void *data);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800482
483int smblib_get_prop_input_suspend(struct smb_charger *chg,
484 union power_supply_propval *val);
485int smblib_get_prop_batt_present(struct smb_charger *chg,
486 union power_supply_propval *val);
487int smblib_get_prop_batt_capacity(struct smb_charger *chg,
488 union power_supply_propval *val);
489int smblib_get_prop_batt_status(struct smb_charger *chg,
490 union power_supply_propval *val);
491int smblib_get_prop_batt_charge_type(struct smb_charger *chg,
492 union power_supply_propval *val);
493int smblib_get_prop_batt_charge_done(struct smb_charger *chg,
494 union power_supply_propval *val);
495int smblib_get_prop_batt_health(struct smb_charger *chg,
496 union power_supply_propval *val);
497int smblib_get_prop_system_temp_level(struct smb_charger *chg,
498 union power_supply_propval *val);
499int smblib_get_prop_system_temp_level_max(struct smb_charger *chg,
500 union power_supply_propval *val);
501int smblib_get_prop_input_current_limited(struct smb_charger *chg,
502 union power_supply_propval *val);
Guru Das Srinagesh3ca14372018-06-01 11:30:56 -0700503int smblib_get_prop_batt_iterm(struct smb_charger *chg,
504 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800505int smblib_set_prop_input_suspend(struct smb_charger *chg,
506 const union power_supply_propval *val);
507int smblib_set_prop_batt_capacity(struct smb_charger *chg,
508 const union power_supply_propval *val);
509int smblib_set_prop_batt_status(struct smb_charger *chg,
510 const union power_supply_propval *val);
511int smblib_set_prop_system_temp_level(struct smb_charger *chg,
512 const union power_supply_propval *val);
513int smblib_set_prop_input_current_limited(struct smb_charger *chg,
514 const union power_supply_propval *val);
515
516int smblib_get_prop_dc_present(struct smb_charger *chg,
517 union power_supply_propval *val);
518int smblib_get_prop_dc_online(struct smb_charger *chg,
519 union power_supply_propval *val);
520int smblib_get_prop_dc_current_max(struct smb_charger *chg,
521 union power_supply_propval *val);
522int smblib_set_prop_dc_current_max(struct smb_charger *chg,
523 const union power_supply_propval *val);
524int smblib_get_prop_usb_present(struct smb_charger *chg,
525 union power_supply_propval *val);
526int smblib_get_prop_usb_online(struct smb_charger *chg,
527 union power_supply_propval *val);
528int smblib_get_prop_usb_suspend(struct smb_charger *chg,
529 union power_supply_propval *val);
530int smblib_get_prop_usb_voltage_max(struct smb_charger *chg,
531 union power_supply_propval *val);
Umang Agrawal9fb865a2018-06-25 16:24:00 +0530532int smblib_get_prop_usb_voltage_max_design(struct smb_charger *chg,
533 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800534int smblib_get_prop_typec_cc_orientation(struct smb_charger *chg,
535 union power_supply_propval *val);
536int smblib_get_prop_typec_power_role(struct smb_charger *chg,
537 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800538int smblib_get_prop_input_current_settled(struct smb_charger *chg,
539 union power_supply_propval *val);
540int smblib_get_prop_input_voltage_settled(struct smb_charger *chg,
541 union power_supply_propval *val);
542int smblib_get_prop_pd_in_hard_reset(struct smb_charger *chg,
543 union power_supply_propval *val);
544int smblib_get_pe_start(struct smb_charger *chg,
545 union power_supply_propval *val);
546int smblib_get_prop_die_health(struct smb_charger *chg,
547 union power_supply_propval *val);
548int smblib_set_prop_pd_current_max(struct smb_charger *chg,
549 const union power_supply_propval *val);
550int smblib_set_prop_sdp_current_max(struct smb_charger *chg,
551 const union power_supply_propval *val);
552int smblib_set_prop_pd_voltage_max(struct smb_charger *chg,
553 const union power_supply_propval *val);
554int smblib_set_prop_pd_voltage_min(struct smb_charger *chg,
555 const union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800556int smblib_set_prop_typec_power_role(struct smb_charger *chg,
557 const union power_supply_propval *val);
558int smblib_set_prop_pd_active(struct smb_charger *chg,
559 const union power_supply_propval *val);
560int smblib_set_prop_pd_in_hard_reset(struct smb_charger *chg,
561 const union power_supply_propval *val);
562int smblib_set_prop_ship_mode(struct smb_charger *chg,
563 const union power_supply_propval *val);
564void smblib_suspend_on_debug_battery(struct smb_charger *chg);
565int smblib_rerun_apsd_if_required(struct smb_charger *chg);
566int smblib_get_prop_fcc_delta(struct smb_charger *chg,
567 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800568int smblib_dp_dm(struct smb_charger *chg, int val);
569int smblib_disable_hw_jeita(struct smb_charger *chg, bool disable);
Ashay Jaiswale0b3c472018-06-20 23:39:41 +0530570int smblib_run_aicl(struct smb_charger *chg, int type);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800571int smblib_set_icl_current(struct smb_charger *chg, int icl_ua);
572int smblib_get_icl_current(struct smb_charger *chg, int *icl_ua);
573int smblib_get_charge_current(struct smb_charger *chg, int *total_current_ua);
574int smblib_get_prop_pr_swap_in_progress(struct smb_charger *chg,
575 union power_supply_propval *val);
576int smblib_set_prop_pr_swap_in_progress(struct smb_charger *chg,
577 const union power_supply_propval *val);
Ashay Jaiswal5c5ba272018-07-23 14:54:20 +0530578int smblib_get_prop_from_bms(struct smb_charger *chg,
579 enum power_supply_property psp,
580 union power_supply_propval *val);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800581int smblib_stat_sw_override_cfg(struct smb_charger *chg, bool override);
Ashay Jaiswala55b7ed2018-03-23 17:23:48 +0530582int smblib_configure_wdog(struct smb_charger *chg, bool enable);
Ashay Jaiswal4d334f42018-04-25 10:58:49 +0530583int smblib_force_vbus_voltage(struct smb_charger *chg, u8 val);
Ashay Jaiswalc96380de2018-05-16 12:02:36 +0530584int smblib_configure_hvdcp_apsd(struct smb_charger *chg, bool enable);
Ashay Jaiswalcbdf2e82018-05-27 23:59:01 +0530585int smblib_icl_override(struct smb_charger *chg, bool override);
Harry Yang4b7db0f2017-11-27 10:50:44 -0800586
587int smblib_init(struct smb_charger *chg);
588int smblib_deinit(struct smb_charger *chg);
589#endif /* __SMB5_CHARGER_H */