blob: 49b9d3da783cc253b3b9a5a578e00b3d8ada152f [file] [log] [blame]
Harry Yang3b113a52016-12-08 12:37:40 -08001/* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
Nicholas Troast34db5032016-03-28 12:26:44 -07002 *
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 __SMB2_CHARGER_H
14#define __SMB2_CHARGER_H
15#include <linux/types.h>
Subbaraman Narayanamurthybbd7f452017-02-06 16:22:48 -080016#include <linux/interrupt.h>
Nicholas Troast34db5032016-03-28 12:26:44 -070017#include <linux/irqreturn.h>
18#include <linux/regulator/driver.h>
19#include <linux/regulator/consumer.h>
Ashay Jaiswal4aa2c0c2016-12-07 19:39:38 +053020#include <linux/extcon.h>
Nicholas Troast47ae4612016-08-03 09:49:36 -070021#include "storm-watch.h"
Nicholas Troast34db5032016-03-28 12:26:44 -070022
23enum print_reason {
24 PR_INTERRUPT = BIT(0),
25 PR_REGISTER = BIT(1),
26 PR_MISC = BIT(2),
Nicholas Troast87d69ba2016-10-10 19:29:47 -070027 PR_PARALLEL = BIT(3),
Nicholas Troastb11015f2017-01-17 17:56:45 -080028 PR_OTG = BIT(4),
Nicholas Troast34db5032016-03-28 12:26:44 -070029};
30
Harry Yang995b7422016-08-29 16:06:50 -070031#define DEFAULT_VOTER "DEFAULT_VOTER"
32#define USER_VOTER "USER_VOTER"
33#define PD_VOTER "PD_VOTER"
Harry Yang631b99e2016-11-17 11:24:25 -080034#define DCP_VOTER "DCP_VOTER"
Harry Yang4bf7d962017-03-13 16:51:43 -070035#define QC_VOTER "QC_VOTER"
Abhijeet Dharmapurikar7442e422017-02-08 13:35:14 -080036#define PL_USBIN_USBIN_VOTER "PL_USBIN_USBIN_VOTER"
Abhijeet Dharmapurikard92eca62016-10-07 19:04:33 -070037#define USB_PSY_VOTER "USB_PSY_VOTER"
Harry Yang995b7422016-08-29 16:06:50 -070038#define PL_TAPER_WORK_RUNNING_VOTER "PL_TAPER_WORK_RUNNING_VOTER"
Harry Yangaba1f5f2016-09-28 10:47:29 -070039#define PL_INDIRECT_VOTER "PL_INDIRECT_VOTER"
Harry Yang67f19522017-03-23 22:40:31 -070040#define PL_QNOVO_VOTER "PL_QNOVO_VOTER"
Harry Yangaba1f5f2016-09-28 10:47:29 -070041#define USBIN_I_VOTER "USBIN_I_VOTER"
42#define USBIN_V_VOTER "USBIN_V_VOTER"
Harry Yang995b7422016-08-29 16:06:50 -070043#define CHG_STATE_VOTER "CHG_STATE_VOTER"
44#define TYPEC_SRC_VOTER "TYPEC_SRC_VOTER"
45#define TAPER_END_VOTER "TAPER_END_VOTER"
Harry Yangaba1f5f2016-09-28 10:47:29 -070046#define THERMAL_DAEMON_VOTER "THERMAL_DAEMON_VOTER"
Abhijeet Dharmapurikar4b13c6e2016-10-05 15:15:10 -070047#define CC_DETACHED_VOTER "CC_DETACHED_VOTER"
48#define HVDCP_TIMEOUT_VOTER "HVDCP_TIMEOUT_VOTER"
49#define PD_DISALLOWED_INDIRECT_VOTER "PD_DISALLOWED_INDIRECT_VOTER"
Abhijeet Dharmapurikarf8a7a4a2016-10-07 18:46:45 -070050#define PD_HARD_RESET_VOTER "PD_HARD_RESET_VOTER"
Abhijeet Dharmapurikara8075d72016-10-06 12:59:04 -070051#define VBUS_CC_SHORT_VOTER "VBUS_CC_SHORT_VOTER"
Abhijeet Dharmapurikar716cd962016-10-14 12:50:37 -070052#define PD_INACTIVE_VOTER "PD_INACTIVE_VOTER"
Nicholas Troastabedaf72016-09-16 11:07:45 -070053#define BOOST_BACK_VOTER "BOOST_BACK_VOTER"
Harry Yanga2fb0e32017-03-22 22:45:25 -070054#define USBIN_USBIN_BOOST_VOTER "USBIN_USBIN_BOOST_VOTER"
Ashay Jaiswal4aa2c0c2016-12-07 19:39:38 +053055#define HVDCP_INDIRECT_VOTER "HVDCP_INDIRECT_VOTER"
56#define MICRO_USB_VOTER "MICRO_USB_VOTER"
Ashay Jaiswal2fb369d2017-01-12 21:38:29 +053057#define DEBUG_BOARD_VOTER "DEBUG_BOARD_VOTER"
Abhijeet Dharmapurikar95670872017-02-09 22:55:51 +053058#define PD_SUSPEND_SUPPORTED_VOTER "PD_SUSPEND_SUPPORTED_VOTER"
Ashay Jaiswalc0361672017-03-21 12:24:16 +053059#define PL_DELAY_VOTER "PL_DELAY_VOTER"
Nicholas Troaste1b0c042017-02-09 10:05:03 -080060#define CTM_VOTER "CTM_VOTER"
Ashay Jaiswal6d308da2017-02-18 09:59:23 +053061#define SW_QC3_VOTER "SW_QC3_VOTER"
Nicholas Troast20ae1912017-02-15 10:15:32 -080062#define AICL_RERUN_VOTER "AICL_RERUN_VOTER"
Nicholas Troastf9e44992017-03-14 09:06:56 -070063#define LEGACY_UNKNOWN_VOTER "LEGACY_UNKNOWN_VOTER"
Ashay Jaiswal1829fcf2017-02-02 22:45:22 +053064
Nicholas Troast8995a702016-12-05 10:22:22 -080065#define VCONN_MAX_ATTEMPTS 3
66#define OTG_MAX_ATTEMPTS 3
67
Nicholas Troast320839e2016-06-03 10:18:00 -070068enum smb_mode {
69 PARALLEL_MASTER = 0,
70 PARALLEL_SLAVE,
71 NUM_MODES,
72};
73
Harry Yang755a34b2016-11-01 01:18:51 -070074enum cc2_sink_type {
75 CC2_SINK_NONE = 0,
76 CC2_SINK_STD,
Harry Yang86e4d852016-11-07 15:08:47 -080077 CC2_SINK_MEDIUM_HIGH,
Harry Yang755a34b2016-11-01 01:18:51 -070078 CC2_SINK_WA_DONE,
79};
80
Harry Yang1369b7a2016-09-27 15:59:50 -070081enum {
Harry Yang755a34b2016-11-01 01:18:51 -070082 QC_CHARGER_DETECTION_WA_BIT = BIT(0),
83 BOOST_BACK_WA = BIT(1),
84 TYPEC_CC2_REMOVAL_WA_BIT = BIT(2),
Ashay Jaiswal67ec7072017-02-16 14:14:58 +053085 QC_AUTH_INTERRUPT_WA_BIT = BIT(3),
Ashay Jaiswal7c241382017-03-06 15:26:38 +053086 OTG_WA = BIT(4),
Harry Yang1369b7a2016-09-27 15:59:50 -070087};
88
Subbaraman Narayanamurthybbd7f452017-02-06 16:22:48 -080089enum smb_irq_index {
90 CHG_ERROR_IRQ = 0,
91 CHG_STATE_CHANGE_IRQ,
92 STEP_CHG_STATE_CHANGE_IRQ,
93 STEP_CHG_SOC_UPDATE_FAIL_IRQ,
94 STEP_CHG_SOC_UPDATE_REQ_IRQ,
95 OTG_FAIL_IRQ,
96 OTG_OVERCURRENT_IRQ,
97 OTG_OC_DIS_SW_STS_IRQ,
98 TESTMODE_CHANGE_DET_IRQ,
99 BATT_TEMP_IRQ,
100 BATT_OCP_IRQ,
101 BATT_OV_IRQ,
102 BATT_LOW_IRQ,
103 BATT_THERM_ID_MISS_IRQ,
104 BATT_TERM_MISS_IRQ,
105 USBIN_COLLAPSE_IRQ,
106 USBIN_LT_3P6V_IRQ,
107 USBIN_UV_IRQ,
108 USBIN_OV_IRQ,
109 USBIN_PLUGIN_IRQ,
110 USBIN_SRC_CHANGE_IRQ,
111 USBIN_ICL_CHANGE_IRQ,
112 TYPE_C_CHANGE_IRQ,
113 DCIN_COLLAPSE_IRQ,
114 DCIN_LT_3P6V_IRQ,
115 DCIN_UV_IRQ,
116 DCIN_OV_IRQ,
117 DCIN_PLUGIN_IRQ,
118 DIV2_EN_DG_IRQ,
119 DCIN_ICL_CHANGE_IRQ,
120 WDOG_SNARL_IRQ,
121 WDOG_BARK_IRQ,
122 AICL_FAIL_IRQ,
123 AICL_DONE_IRQ,
124 HIGH_DUTY_CYCLE_IRQ,
125 INPUT_CURRENT_LIMIT_IRQ,
126 TEMPERATURE_CHANGE_IRQ,
127 SWITCH_POWER_OK_IRQ,
128 SMB_IRQ_MAX,
129};
130
131struct smb_irq_info {
132 const char *name;
133 const irq_handler_t handler;
134 const bool wake;
135 const struct storm_watch storm_data;
136 struct smb_irq_data *irq_data;
137 int irq;
138};
139
Ashay Jaiswal4aa2c0c2016-12-07 19:39:38 +0530140static const unsigned int smblib_extcon_cable[] = {
141 EXTCON_USB,
142 EXTCON_USB_HOST,
143 EXTCON_NONE,
144};
145
Nicholas Troast34db5032016-03-28 12:26:44 -0700146struct smb_regulator {
147 struct regulator_dev *rdev;
148 struct regulator_desc rdesc;
149};
150
151struct smb_irq_data {
Nicholas Troast47ae4612016-08-03 09:49:36 -0700152 void *parent_data;
153 const char *name;
154 struct storm_watch storm_data;
Nicholas Troast34db5032016-03-28 12:26:44 -0700155};
156
157struct smb_chg_param {
158 const char *name;
159 u16 reg;
160 int min_u;
161 int max_u;
162 int step_u;
Harry Yangf8b41252016-08-10 14:21:10 -0700163 int (*get_proc)(struct smb_chg_param *param,
164 u8 val_raw);
165 int (*set_proc)(struct smb_chg_param *param,
166 int val_u,
167 u8 *val_raw);
Nicholas Troast34db5032016-03-28 12:26:44 -0700168};
169
Anirudh Ghayal4da3df92017-01-25 18:55:57 +0530170struct smb_chg_freq {
171 unsigned int freq_5V;
172 unsigned int freq_6V_8V;
173 unsigned int freq_9V;
174 unsigned int freq_12V;
175 unsigned int freq_removal;
176 unsigned int freq_below_otg_threshold;
177 unsigned int freq_above_otg_threshold;
178};
179
Nicholas Troast34db5032016-03-28 12:26:44 -0700180struct smb_params {
181 struct smb_chg_param fcc;
182 struct smb_chg_param fv;
183 struct smb_chg_param usb_icl;
Harry Yang1d1034c2016-06-15 12:09:42 -0700184 struct smb_chg_param icl_stat;
Harry Yang360bd532016-09-26 11:03:22 -0700185 struct smb_chg_param otg_cl;
Nicholas Troast34db5032016-03-28 12:26:44 -0700186 struct smb_chg_param dc_icl;
Abhijeet Dharmapurikar5cf5faf2016-06-21 14:20:24 -0700187 struct smb_chg_param dc_icl_pt_lv;
188 struct smb_chg_param dc_icl_pt_hv;
189 struct smb_chg_param dc_icl_div2_lv;
190 struct smb_chg_param dc_icl_div2_mid_lv;
191 struct smb_chg_param dc_icl_div2_mid_hv;
192 struct smb_chg_param dc_icl_div2_hv;
Abhijeet Dharmapurikar2644cd62016-07-20 16:54:55 -0700193 struct smb_chg_param jeita_cc_comp;
Harry Yangfe913842016-08-10 12:27:28 -0700194 struct smb_chg_param step_soc_threshold[4];
195 struct smb_chg_param step_soc;
196 struct smb_chg_param step_cc_delta[5];
Harry Yangf6df8b02016-10-05 15:38:03 -0700197 struct smb_chg_param freq_buck;
Harry Yangd89ff1f2016-12-05 14:59:11 -0800198 struct smb_chg_param freq_boost;
Nicholas Troast34db5032016-03-28 12:26:44 -0700199};
200
Harry Yang1d1034c2016-06-15 12:09:42 -0700201struct parallel_params {
202 struct power_supply *psy;
Harry Yang1d1034c2016-06-15 12:09:42 -0700203};
204
Harry Yangba874ce2016-08-19 14:17:01 -0700205struct smb_iio {
206 struct iio_channel *temp_chan;
207 struct iio_channel *temp_max_chan;
208 struct iio_channel *usbin_i_chan;
209 struct iio_channel *usbin_v_chan;
Nicholas Troast7dbcad22016-10-05 13:30:18 -0700210 struct iio_channel *batt_i_chan;
Nicholas Troastc8434ac2017-02-14 16:11:56 -0800211 struct iio_channel *connector_temp_chan;
Nicholas Troastae0ea542017-01-31 19:23:10 -0800212 struct iio_channel *connector_temp_thr1_chan;
213 struct iio_channel *connector_temp_thr2_chan;
214 struct iio_channel *connector_temp_thr3_chan;
Harry Yangba874ce2016-08-19 14:17:01 -0700215};
216
Harry Yang5e2bb712016-10-18 16:47:48 -0700217struct reg_info {
218 u16 reg;
219 u8 mask;
220 u8 val;
221 u8 bak;
222 const char *desc;
223};
224
Nicholas Troast34db5032016-03-28 12:26:44 -0700225struct smb_charger {
226 struct device *dev;
Abhijeet Dharmapurikar31b98f32016-10-14 12:25:23 -0700227 char *name;
Nicholas Troast34db5032016-03-28 12:26:44 -0700228 struct regmap *regmap;
Subbaraman Narayanamurthybbd7f452017-02-06 16:22:48 -0800229 struct smb_irq_info *irq_info;
Nicholas Troast34db5032016-03-28 12:26:44 -0700230 struct smb_params param;
Harry Yangba874ce2016-08-19 14:17:01 -0700231 struct smb_iio iio;
Nicholas Troast34db5032016-03-28 12:26:44 -0700232 int *debug_mask;
Nicholas Troast320839e2016-06-03 10:18:00 -0700233 enum smb_mode mode;
Nicholas Troast8995a702016-12-05 10:22:22 -0800234 bool external_vconn;
Anirudh Ghayal4da3df92017-01-25 18:55:57 +0530235 struct smb_chg_freq chg_freq;
Abhijeet Dharmapurikar7442e422017-02-08 13:35:14 -0800236 int smb_version;
Nicholas Troast34db5032016-03-28 12:26:44 -0700237
238 /* locks */
Harry Yangbacd2222016-05-11 16:43:51 -0700239 struct mutex write_lock;
Nicholas Troast34db5032016-03-28 12:26:44 -0700240 struct mutex ps_change_lock;
Nicholas Troastb11015f2017-01-17 17:56:45 -0800241 struct mutex otg_oc_lock;
Nicholas Troast34db5032016-03-28 12:26:44 -0700242
243 /* power supplies */
244 struct power_supply *batt_psy;
245 struct power_supply *usb_psy;
Harry Yangf3023592016-07-20 14:56:41 -0700246 struct power_supply *dc_psy;
Harry Yang5e1a5222016-07-26 15:16:04 -0700247 struct power_supply *bms_psy;
Nicholas Troast34db5032016-03-28 12:26:44 -0700248 struct power_supply_desc usb_psy_desc;
Abhijeet Dharmapurikara8bd6f02017-01-30 15:43:04 -0800249 struct power_supply *usb_main_psy;
Nicholas Troast34db5032016-03-28 12:26:44 -0700250
Harry Yang5e1a5222016-07-26 15:16:04 -0700251 /* notifiers */
252 struct notifier_block nb;
253
Harry Yang1d1034c2016-06-15 12:09:42 -0700254 /* parallel charging */
255 struct parallel_params pl;
256
Nicholas Troast34db5032016-03-28 12:26:44 -0700257 /* regulators */
258 struct smb_regulator *vbus_vreg;
259 struct smb_regulator *vconn_vreg;
260 struct regulator *dpdm_reg;
261
262 /* votables */
Nicholas Troast34db5032016-03-28 12:26:44 -0700263 struct votable *dc_suspend_votable;
264 struct votable *fcc_votable;
Abhijeet Dharmapurikarf9805d42016-05-17 18:38:42 -0700265 struct votable *fv_votable;
Nicholas Troast34db5032016-03-28 12:26:44 -0700266 struct votable *usb_icl_votable;
267 struct votable *dc_icl_votable;
Abhijeet Dharmapurikar4b13c6e2016-10-05 15:15:10 -0700268 struct votable *pd_disallowed_votable_indirect;
Nicholas Troast34db5032016-03-28 12:26:44 -0700269 struct votable *pd_allowed_votable;
Harry Yang1d1034c2016-06-15 12:09:42 -0700270 struct votable *awake_votable;
271 struct votable *pl_disable_votable;
Abhijeet Dharmapurikaree54de02016-07-08 14:51:47 -0700272 struct votable *chg_disable_votable;
Harry Yangaba1f5f2016-09-28 10:47:29 -0700273 struct votable *pl_enable_votable_indirect;
Ashay Jaiswal4aa2c0c2016-12-07 19:39:38 +0530274 struct votable *hvdcp_disable_votable_indirect;
275 struct votable *hvdcp_enable_votable;
Abhijeet Dharmapurikarf8a7a4a2016-10-07 18:46:45 -0700276 struct votable *apsd_disable_votable;
Ashay Jaiswal6d308da2017-02-18 09:59:23 +0530277 struct votable *hvdcp_hw_inov_dis_votable;
Harry Yang4bf7d962017-03-13 16:51:43 -0700278 struct votable *usb_irq_enable_votable;
Nicholas Troast34db5032016-03-28 12:26:44 -0700279
280 /* work */
Harry Yang5e1a5222016-07-26 15:16:04 -0700281 struct work_struct bms_update_work;
Harry Yang755a34b2016-11-01 01:18:51 -0700282 struct work_struct rdstd_cc2_detach_work;
Nicholas Troast34db5032016-03-28 12:26:44 -0700283 struct delayed_work hvdcp_detect_work;
284 struct delayed_work ps_change_timeout_work;
Harry Yangfe913842016-08-10 12:27:28 -0700285 struct delayed_work step_soc_req_work;
Abhijeet Dharmapurikar0e369002016-09-07 17:25:36 -0700286 struct delayed_work clear_hdc_work;
Nicholas Troastb11015f2017-01-17 17:56:45 -0800287 struct work_struct otg_oc_work;
288 struct work_struct vconn_oc_work;
289 struct delayed_work otg_ss_done_work;
Ashay Jaiswal4d825782017-02-18 10:11:34 +0530290 struct delayed_work icl_change_work;
Ashay Jaiswalc0361672017-03-21 12:24:16 +0530291 struct delayed_work pl_enable_work;
Nicholas Troast34db5032016-03-28 12:26:44 -0700292
293 /* cached status */
294 int voltage_min_uv;
295 int voltage_max_uv;
Abhijeet Dharmapurikar76e2af52016-10-06 17:25:01 -0700296 int pd_active;
Abhijeet Dharmapurikard92eca62016-10-07 19:04:33 -0700297 bool system_suspend_supported;
Harry Yangd89ff1f2016-12-05 14:59:11 -0800298 int boost_threshold_ua;
Abhijeet Dharmapurikar99fb8942016-07-08 11:39:23 -0700299 int system_temp_level;
300 int thermal_levels;
301 int *thermal_mitigation;
Harry Yang631b99e2016-11-17 11:24:25 -0800302 int dcp_icl_ua;
Abhijeet Dharmapurikar9e7e48c2016-08-23 12:55:49 -0700303 int fake_capacity;
Harry Yangfe913842016-08-10 12:27:28 -0700304 bool step_chg_enabled;
Abhijeet Dharmapurikar0e369002016-09-07 17:25:36 -0700305 bool is_hdc;
Subbaraman Narayanamurthy270a2652016-10-04 17:08:42 -0700306 bool chg_done;
Ashay Jaiswal4aa2c0c2016-12-07 19:39:38 +0530307 bool micro_usb_mode;
Nicholas Troast8995a702016-12-05 10:22:22 -0800308 bool otg_en;
309 bool vconn_en;
Ashay Jaiswalda8669b2017-02-10 23:24:23 +0530310 bool suspend_input_on_debug_batt;
Nicholas Troast8995a702016-12-05 10:22:22 -0800311 int otg_attempts;
312 int vconn_attempts;
Abhijeet Dharmapurikar7442e422017-02-08 13:35:14 -0800313 int default_icl_ua;
Ashay Jaiswal7c241382017-03-06 15:26:38 +0530314 int otg_cl_ua;
Harry Yangf7251982016-09-16 11:14:49 -0700315
316 /* workaround flag */
317 u32 wa_flags;
Harry Yang755a34b2016-11-01 01:18:51 -0700318 enum cc2_sink_type cc2_sink_detach_flag;
Harry Yangd89ff1f2016-12-05 14:59:11 -0800319 int boost_current_ua;
Harry Yange8e38ce2017-03-09 11:22:44 -0800320 int temp_speed_reading_count;
Ashay Jaiswal4aa2c0c2016-12-07 19:39:38 +0530321
322 /* extcon for VBUS / ID notification to USB for uUSB */
323 struct extcon_dev *extcon;
Abhijeet Dharmapurikara8bd6f02017-01-30 15:43:04 -0800324
Harry Yang603e3802017-02-09 17:45:12 -0800325 /* qnovo */
326 int qnovo_fcc_ua;
327 int qnovo_fv_uv;
Ashay Jaiswal6d308da2017-02-18 09:59:23 +0530328 int usb_icl_delta_ua;
329 int pulse_cnt;
Nicholas Troast34db5032016-03-28 12:26:44 -0700330};
331
332int smblib_read(struct smb_charger *chg, u16 addr, u8 *val);
333int smblib_masked_write(struct smb_charger *chg, u16 addr, u8 mask, u8 val);
334int smblib_write(struct smb_charger *chg, u16 addr, u8 val);
335
Nicholas Troast4c310492016-05-12 17:56:35 -0700336int smblib_get_charge_param(struct smb_charger *chg,
337 struct smb_chg_param *param, int *val_u);
338int smblib_get_usb_suspend(struct smb_charger *chg, int *suspend);
339
Nicholas Troast34db5032016-03-28 12:26:44 -0700340int smblib_enable_charging(struct smb_charger *chg, bool enable);
Nicholas Troast4c310492016-05-12 17:56:35 -0700341int smblib_set_charge_param(struct smb_charger *chg,
342 struct smb_chg_param *param, int val_u);
343int smblib_set_usb_suspend(struct smb_charger *chg, bool suspend);
344int smblib_set_dc_suspend(struct smb_charger *chg, bool suspend);
Nicholas Troast34db5032016-03-28 12:26:44 -0700345
Harry Yangfe913842016-08-10 12:27:28 -0700346int smblib_mapping_soc_from_field_value(struct smb_chg_param *param,
347 int val_u, u8 *val_raw);
348int smblib_mapping_cc_delta_to_field_value(struct smb_chg_param *param,
349 u8 val_raw);
350int smblib_mapping_cc_delta_from_field_value(struct smb_chg_param *param,
351 int val_u, u8 *val_raw);
Anirudh Ghayal4da3df92017-01-25 18:55:57 +0530352int smblib_set_chg_freq(struct smb_chg_param *param,
353 int val_u, u8 *val_raw);
Harry Yangfe913842016-08-10 12:27:28 -0700354
Nicholas Troast34db5032016-03-28 12:26:44 -0700355int smblib_vbus_regulator_enable(struct regulator_dev *rdev);
356int smblib_vbus_regulator_disable(struct regulator_dev *rdev);
357int smblib_vbus_regulator_is_enabled(struct regulator_dev *rdev);
358
359int smblib_vconn_regulator_enable(struct regulator_dev *rdev);
360int smblib_vconn_regulator_disable(struct regulator_dev *rdev);
361int smblib_vconn_regulator_is_enabled(struct regulator_dev *rdev);
362
363irqreturn_t smblib_handle_debug(int irq, void *data);
Nicholas Troast8995a702016-12-05 10:22:22 -0800364irqreturn_t smblib_handle_otg_overcurrent(int irq, void *data);
Harry Yang6fe72ab2016-06-14 16:21:39 -0700365irqreturn_t smblib_handle_chg_state_change(int irq, void *data);
Harry Yangfe913842016-08-10 12:27:28 -0700366irqreturn_t smblib_handle_step_chg_state_change(int irq, void *data);
367irqreturn_t smblib_handle_step_chg_soc_update_fail(int irq, void *data);
368irqreturn_t smblib_handle_step_chg_soc_update_request(int irq, void *data);
Abhijeet Dharmapurikar2644cd62016-07-20 16:54:55 -0700369irqreturn_t smblib_handle_batt_temp_changed(int irq, void *data);
Nicholas Troast34db5032016-03-28 12:26:44 -0700370irqreturn_t smblib_handle_batt_psy_changed(int irq, void *data);
371irqreturn_t smblib_handle_usb_psy_changed(int irq, void *data);
Subbaraman Narayanamurthy09327482017-02-06 16:33:12 -0800372irqreturn_t smblib_handle_usbin_uv(int irq, void *data);
Nicholas Troast34db5032016-03-28 12:26:44 -0700373irqreturn_t smblib_handle_usb_plugin(int irq, void *data);
374irqreturn_t smblib_handle_usb_source_change(int irq, void *data);
Harry Yang6fe72ab2016-06-14 16:21:39 -0700375irqreturn_t smblib_handle_icl_change(int irq, void *data);
Nicholas Troast34db5032016-03-28 12:26:44 -0700376irqreturn_t smblib_handle_usb_typec_change(int irq, void *data);
Abhijeet Dharmapurikar23916642016-10-03 10:38:50 -0700377irqreturn_t smblib_handle_dc_plugin(int irq, void *data);
Abhijeet Dharmapurikar0e369002016-09-07 17:25:36 -0700378irqreturn_t smblib_handle_high_duty_cycle(int irq, void *data);
Nicholas Troastabedaf72016-09-16 11:07:45 -0700379irqreturn_t smblib_handle_switcher_power_ok(int irq, void *data);
Nicholas Troast15dc0c82016-10-18 15:15:21 -0700380irqreturn_t smblib_handle_wdog_bark(int irq, void *data);
Nicholas Troast34db5032016-03-28 12:26:44 -0700381
382int smblib_get_prop_input_suspend(struct smb_charger *chg,
383 union power_supply_propval *val);
384int smblib_get_prop_batt_present(struct smb_charger *chg,
385 union power_supply_propval *val);
386int smblib_get_prop_batt_capacity(struct smb_charger *chg,
387 union power_supply_propval *val);
388int smblib_get_prop_batt_status(struct smb_charger *chg,
389 union power_supply_propval *val);
390int smblib_get_prop_batt_charge_type(struct smb_charger *chg,
391 union power_supply_propval *val);
Subbaraman Narayanamurthyb491d022016-10-10 20:22:48 -0700392int smblib_get_prop_batt_charge_done(struct smb_charger *chg,
393 union power_supply_propval *val);
Nicholas Troast34db5032016-03-28 12:26:44 -0700394int smblib_get_prop_batt_health(struct smb_charger *chg,
395 union power_supply_propval *val);
Abhijeet Dharmapurikar99fb8942016-07-08 11:39:23 -0700396int smblib_get_prop_system_temp_level(struct smb_charger *chg,
397 union power_supply_propval *val);
Abhijeet Dharmapurikar0e369002016-09-07 17:25:36 -0700398int smblib_get_prop_input_current_limited(struct smb_charger *chg,
399 union power_supply_propval *val);
Nicholas Troast66b21d72016-09-20 15:33:20 -0700400int smblib_get_prop_batt_voltage_now(struct smb_charger *chg,
401 union power_supply_propval *val);
402int smblib_get_prop_batt_current_now(struct smb_charger *chg,
403 union power_supply_propval *val);
404int smblib_get_prop_batt_temp(struct smb_charger *chg,
405 union power_supply_propval *val);
Harry Yangbedee332016-08-31 16:14:29 -0700406int smblib_get_prop_step_chg_step(struct smb_charger *chg,
407 union power_supply_propval *val);
Abhijeet Dharmapurikar99fb8942016-07-08 11:39:23 -0700408
Nicholas Troast34db5032016-03-28 12:26:44 -0700409int smblib_set_prop_input_suspend(struct smb_charger *chg,
410 const union power_supply_propval *val);
Abhijeet Dharmapurikar9e7e48c2016-08-23 12:55:49 -0700411int smblib_set_prop_batt_capacity(struct smb_charger *chg,
412 const union power_supply_propval *val);
Abhijeet Dharmapurikar99fb8942016-07-08 11:39:23 -0700413int smblib_set_prop_system_temp_level(struct smb_charger *chg,
414 const union power_supply_propval *val);
Nicholas Troast34db5032016-03-28 12:26:44 -0700415
Harry Yangf3023592016-07-20 14:56:41 -0700416int smblib_get_prop_dc_present(struct smb_charger *chg,
417 union power_supply_propval *val);
418int smblib_get_prop_dc_online(struct smb_charger *chg,
419 union power_supply_propval *val);
420int smblib_get_prop_dc_current_max(struct smb_charger *chg,
421 union power_supply_propval *val);
422int smblib_set_prop_dc_current_max(struct smb_charger *chg,
423 const union power_supply_propval *val);
424
Nicholas Troast34db5032016-03-28 12:26:44 -0700425int smblib_get_prop_usb_present(struct smb_charger *chg,
426 union power_supply_propval *val);
427int smblib_get_prop_usb_online(struct smb_charger *chg,
428 union power_supply_propval *val);
429int smblib_get_prop_usb_suspend(struct smb_charger *chg,
430 union power_supply_propval *val);
431int smblib_get_prop_usb_voltage_now(struct smb_charger *chg,
432 union power_supply_propval *val);
Abhijeet Dharmapurikard92eca62016-10-07 19:04:33 -0700433int smblib_get_prop_pd_current_max(struct smb_charger *chg,
434 union power_supply_propval *val);
Nicholas Troast34db5032016-03-28 12:26:44 -0700435int smblib_get_prop_usb_current_max(struct smb_charger *chg,
436 union power_supply_propval *val);
Harry Yangba874ce2016-08-19 14:17:01 -0700437int smblib_get_prop_usb_current_now(struct smb_charger *chg,
438 union power_supply_propval *val);
Nicholas Troast34db5032016-03-28 12:26:44 -0700439int smblib_get_prop_typec_cc_orientation(struct smb_charger *chg,
440 union power_supply_propval *val);
441int smblib_get_prop_typec_mode(struct smb_charger *chg,
442 union power_supply_propval *val);
443int smblib_get_prop_typec_power_role(struct smb_charger *chg,
444 union power_supply_propval *val);
445int smblib_get_prop_pd_allowed(struct smb_charger *chg,
446 union power_supply_propval *val);
Nicholas Troast133a7f52016-06-29 13:48:20 -0700447int smblib_get_prop_input_current_settled(struct smb_charger *chg,
448 union power_supply_propval *val);
Fenglin Wuef4730e2017-01-11 18:16:25 +0800449int smblib_get_prop_input_voltage_settled(struct smb_charger *chg,
450 union power_supply_propval *val);
Abhijeet Dharmapurikarf8a7a4a2016-10-07 18:46:45 -0700451int smblib_get_prop_pd_in_hard_reset(struct smb_charger *chg,
452 union power_supply_propval *val);
Abhijeet Dharmapurikarb9598872016-10-17 16:58:58 -0700453int smblib_get_pe_start(struct smb_charger *chg,
454 union power_supply_propval *val);
Harry Yangba874ce2016-08-19 14:17:01 -0700455int smblib_get_prop_charger_temp(struct smb_charger *chg,
456 union power_supply_propval *val);
457int smblib_get_prop_charger_temp_max(struct smb_charger *chg,
458 union power_supply_propval *val);
Nicholas Troast7fdbd2e2017-02-08 10:47:37 -0800459int smblib_get_prop_die_health(struct smb_charger *chg,
Nicholas Troastb021dd92017-01-31 18:43:38 -0800460 union power_supply_propval *val);
Harry Yang40192cb2017-02-25 23:25:17 -0800461int smblib_get_prop_charge_qnovo_enable(struct smb_charger *chg,
462 union power_supply_propval *val);
Abhijeet Dharmapurikard92eca62016-10-07 19:04:33 -0700463int smblib_set_prop_pd_current_max(struct smb_charger *chg,
464 const union power_supply_propval *val);
Nicholas Troast34db5032016-03-28 12:26:44 -0700465int smblib_set_prop_usb_current_max(struct smb_charger *chg,
466 const union power_supply_propval *val);
467int smblib_set_prop_usb_voltage_min(struct smb_charger *chg,
468 const union power_supply_propval *val);
469int smblib_set_prop_usb_voltage_max(struct smb_charger *chg,
470 const union power_supply_propval *val);
Harry Yangd89ff1f2016-12-05 14:59:11 -0800471int smblib_set_prop_boost_current(struct smb_charger *chg,
472 const union power_supply_propval *val);
Nicholas Troast34db5032016-03-28 12:26:44 -0700473int smblib_set_prop_typec_power_role(struct smb_charger *chg,
474 const union power_supply_propval *val);
475int smblib_set_prop_pd_active(struct smb_charger *chg,
476 const union power_supply_propval *val);
Abhijeet Dharmapurikarf8a7a4a2016-10-07 18:46:45 -0700477int smblib_set_prop_pd_in_hard_reset(struct smb_charger *chg,
478 const union power_supply_propval *val);
Nicholas Troast7dbcad22016-10-05 13:30:18 -0700479int smblib_get_prop_slave_current_now(struct smb_charger *chg,
480 union power_supply_propval *val);
Fenglin Wuedd70792016-11-22 13:16:19 +0800481int smblib_set_prop_ship_mode(struct smb_charger *chg,
482 const union power_supply_propval *val);
Harry Yang40192cb2017-02-25 23:25:17 -0800483int smblib_set_prop_charge_qnovo_enable(struct smb_charger *chg,
484 const union power_supply_propval *val);
Ashay Jaiswal2fb369d2017-01-12 21:38:29 +0530485void smblib_suspend_on_debug_battery(struct smb_charger *chg);
Abhijeet Dharmapurikar9dd61292017-01-25 16:40:08 -0800486int smblib_rerun_apsd_if_required(struct smb_charger *chg);
Abhijeet Dharmapurikara8bd6f02017-01-30 15:43:04 -0800487int smblib_get_prop_fcc_delta(struct smb_charger *chg,
488 union power_supply_propval *val);
Abhijeet Dharmapurikar74021fc2017-02-06 18:39:19 -0800489int smblib_icl_override(struct smb_charger *chg, bool override);
Ashay Jaiswal6d308da2017-02-18 09:59:23 +0530490int smblib_dp_dm(struct smb_charger *chg, int val);
491int smblib_rerun_aicl(struct smb_charger *chg);
Ashay Jaiswalae1586d2017-03-22 23:18:51 +0530492int smblib_set_icl_current(struct smb_charger *chg, int icl_ua);
Abhijeet Dharmapurikarf59c8352017-03-23 14:04:05 -0700493int smblib_get_charge_current(struct smb_charger *chg, int *total_current_ua);
Nicholas Troast7dbcad22016-10-05 13:30:18 -0700494
Nicholas Troast34db5032016-03-28 12:26:44 -0700495int smblib_init(struct smb_charger *chg);
Abhijeet Dharmapurikar8e9e7572016-06-06 16:13:14 -0700496int smblib_deinit(struct smb_charger *chg);
Nicholas Troast34db5032016-03-28 12:26:44 -0700497#endif /* __SMB2_CHARGER_H */