blob: 63d57fe3d2fb0f87b023d0fb6c3833de45c2c8ec [file] [log] [blame]
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05301/* Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002 *
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#define pr_fmt(fmt) "%s: " fmt, __func__
14
15#include <linux/i2c.h>
16#include <linux/debugfs.h>
17#include <linux/errno.h>
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +053018#include <linux/extcon.h>
Nicholas Troast6e8c0382016-02-12 15:34:57 -080019#include <linux/module.h>
20#include <linux/interrupt.h>
21#include <linux/slab.h>
22#include <linux/power_supply.h>
23#include <linux/regulator/driver.h>
24#include <linux/regulator/of_regulator.h>
25#include <linux/regulator/machine.h>
26#include <linux/of.h>
27#include <linux/mutex.h>
28#include <linux/delay.h>
29#include <linux/qpnp/qpnp-adc.h>
30#include <linux/pinctrl/consumer.h>
31
32/* Mask/Bit helpers */
33#define _SMB1351_MASK(BITS, POS) \
34 ((unsigned char)(((1 << (BITS)) - 1) << (POS)))
35#define SMB1351_MASK(LEFT_BIT_POS, RIGHT_BIT_POS) \
36 _SMB1351_MASK((LEFT_BIT_POS) - (RIGHT_BIT_POS) + 1, \
37 (RIGHT_BIT_POS))
38
39/* Configuration registers */
40#define CHG_CURRENT_CTRL_REG 0x0
41#define FAST_CHG_CURRENT_MASK SMB1351_MASK(7, 4)
42#define AC_INPUT_CURRENT_LIMIT_MASK SMB1351_MASK(3, 0)
43
44#define CHG_OTH_CURRENT_CTRL_REG 0x1
45#define PRECHG_CURRENT_MASK SMB1351_MASK(7, 5)
46#define ITERM_MASK SMB1351_MASK(4, 2)
47#define USB_2_3_MODE_SEL_BIT BIT(1)
48#define USB_2_3_MODE_SEL_BY_I2C 0
49#define USB_2_3_MODE_SEL_BY_PIN 0x2
50#define USB_5_1_CMD_POLARITY_BIT BIT(0)
51#define USB_CMD_POLARITY_500_1_100_0 0
52#define USB_CMD_POLARITY_500_0_100_1 0x1
53
54#define VARIOUS_FUNC_REG 0x2
55#define SUSPEND_MODE_CTRL_BIT BIT(7)
56#define SUSPEND_MODE_CTRL_BY_PIN 0
57#define SUSPEND_MODE_CTRL_BY_I2C 0x80
58#define BATT_TO_SYS_POWER_CTRL_BIT BIT(6)
59#define MAX_SYS_VOLTAGE BIT(5)
60#define AICL_EN_BIT BIT(4)
61#define AICL_DET_TH_BIT BIT(3)
62#define APSD_EN_BIT BIT(2)
63#define BATT_OV_BIT BIT(1)
64#define VCHG_FUNC_BIT BIT(0)
65
66#define VFLOAT_REG 0x3
67#define PRECHG_TO_FAST_VOLTAGE_CFG_MASK SMB1351_MASK(7, 6)
68#define VFLOAT_MASK SMB1351_MASK(5, 0)
69
70#define CHG_CTRL_REG 0x4
71#define AUTO_RECHG_BIT BIT(7)
72#define AUTO_RECHG_ENABLE 0
73#define AUTO_RECHG_DISABLE 0x80
74#define ITERM_EN_BIT BIT(6)
75#define ITERM_ENABLE 0
76#define ITERM_DISABLE 0x40
77#define MAPPED_AC_INPUT_CURRENT_LIMIT_MASK SMB1351_MASK(5, 4)
78#define AUTO_RECHG_TH_BIT BIT(3)
79#define AUTO_RECHG_TH_50MV 0
80#define AUTO_RECHG_TH_100MV 0x8
81#define AFCV_MASK SMB1351_MASK(2, 0)
82
83#define CHG_STAT_TIMERS_CTRL_REG 0x5
84#define STAT_OUTPUT_POLARITY_BIT BIT(7)
85#define STAT_OUTPUT_MODE_BIT BIT(6)
86#define STAT_OUTPUT_CTRL_BIT BIT(5)
87#define OTH_CHG_IL_BIT BIT(4)
88#define COMPLETE_CHG_TIMEOUT_MASK SMB1351_MASK(3, 2)
89#define PRECHG_TIMEOUT_MASK SMB1351_MASK(1, 0)
90
91#define CHG_PIN_EN_CTRL_REG 0x6
92#define LED_BLINK_FUNC_BIT BIT(7)
93#define EN_PIN_CTRL_MASK SMB1351_MASK(6, 5)
94#define EN_BY_I2C_0_DISABLE 0
95#define EN_BY_I2C_0_ENABLE 0x20
96#define EN_BY_PIN_HIGH_ENABLE 0x40
97#define EN_BY_PIN_LOW_ENABLE 0x60
98#define USBCS_CTRL_BIT BIT(4)
99#define USBCS_CTRL_BY_I2C 0
100#define USBCS_CTRL_BY_PIN 0x10
101#define USBCS_INPUT_STATE_BIT BIT(3)
102#define CHG_ERR_BIT BIT(2)
103#define APSD_DONE_BIT BIT(1)
104#define USB_FAIL_BIT BIT(0)
105
106#define THERM_A_CTRL_REG 0x7
107#define MIN_SYS_VOLTAGE_MASK SMB1351_MASK(7, 6)
108#define LOAD_BATT_10MA_FVC_BIT BIT(5)
109#define THERM_MONITOR_BIT BIT(4)
110#define THERM_MONITOR_EN 0
111#define SOFT_COLD_TEMP_LIMIT_MASK SMB1351_MASK(3, 2)
112#define SOFT_HOT_TEMP_LIMIT_MASK SMB1351_MASK(1, 0)
113
114#define WDOG_SAFETY_TIMER_CTRL_REG 0x8
115#define AICL_FAIL_OPTION_BIT BIT(7)
116#define AICL_FAIL_TO_SUSPEND 0
117#define AICL_FAIL_TO_150_MA 0x80
118#define WDOG_TIMEOUT_MASK SMB1351_MASK(6, 5)
119#define WDOG_IRQ_SAFETY_TIMER_MASK SMB1351_MASK(4, 3)
120#define WDOG_IRQ_SAFETY_TIMER_EN_BIT BIT(2)
121#define WDOG_OPTION_BIT BIT(1)
122#define WDOG_TIMER_EN_BIT BIT(0)
123
124#define OTG_USBIN_AICL_CTRL_REG 0x9
125#define OTG_ID_PIN_CTRL_MASK SMB1351_MASK(7, 6)
126#define OTG_PIN_POLARITY_BIT BIT(5)
127#define DCIN_IC_GLITCH_FILTER_HV_ADAPTER_MASK SMB1351_MASK(4, 3)
128#define DCIN_IC_GLITCH_FILTER_LV_ADAPTER_BIT BIT(2)
129#define USBIN_AICL_CFG1_BIT BIT(1)
130#define USBIN_AICL_CFG0_BIT BIT(0)
131
132#define OTG_TLIM_CTRL_REG 0xA
133#define SWITCH_FREQ_MASK SMB1351_MASK(7, 6)
134#define THERM_LOOP_TEMP_SEL_MASK SMB1351_MASK(5, 4)
135#define OTG_OC_LIMIT_MASK SMB1351_MASK(3, 2)
136#define OTG_BATT_UVLO_TH_MASK SMB1351_MASK(1, 0)
137
138#define HARD_SOFT_LIMIT_CELL_TEMP_REG 0xB
139#define HARD_LIMIT_COLD_TEMP_ALARM_TRIP_MASK SMB1351_MASK(7, 6)
140#define HARD_LIMIT_HOT_TEMP_ALARM_TRIP_MASK SMB1351_MASK(5, 4)
141#define SOFT_LIMIT_COLD_TEMP_ALARM_TRIP_MASK SMB1351_MASK(3, 2)
142#define SOFT_LIMIT_HOT_TEMP_ALARM_TRIP_MASK SMB1351_MASK(1, 0)
143
144#define FAULT_INT_REG 0xC
145#define HOT_COLD_HARD_LIMIT_BIT BIT(7)
146#define HOT_COLD_SOFT_LIMIT_BIT BIT(6)
147#define BATT_UVLO_IN_OTG_BIT BIT(5)
148#define OTG_OC_BIT BIT(4)
149#define INPUT_OVLO_BIT BIT(3)
150#define INPUT_UVLO_BIT BIT(2)
151#define AICL_DONE_FAIL_BIT BIT(1)
152#define INTERNAL_OVER_TEMP_BIT BIT(0)
153
154#define STATUS_INT_REG 0xD
155#define CHG_OR_PRECHG_TIMEOUT_BIT BIT(7)
156#define RID_CHANGE_BIT BIT(6)
157#define BATT_OVP_BIT BIT(5)
158#define FAST_TERM_TAPER_RECHG_INHIBIT_BIT BIT(4)
159#define WDOG_TIMER_BIT BIT(3)
160#define POK_BIT BIT(2)
161#define BATT_MISSING_BIT BIT(1)
162#define BATT_LOW_BIT BIT(0)
163
164#define VARIOUS_FUNC_2_REG 0xE
165#define CHG_HOLD_OFF_TIMER_AFTER_PLUGIN_BIT BIT(7)
166#define CHG_INHIBIT_BIT BIT(6)
167#define FAST_CHG_CC_IN_BATT_SOFT_LIMIT_MODE_BIT BIT(5)
168#define FVCL_IN_BATT_SOFT_LIMIT_MODE_MASK SMB1351_MASK(4, 3)
169#define HARD_TEMP_LIMIT_BEHAVIOR_BIT BIT(2)
170#define PRECHG_TO_FASTCHG_BIT BIT(1)
171#define STAT_PIN_CONFIG_BIT BIT(0)
172
173#define FLEXCHARGER_REG 0x10
174#define AFVC_IRQ_BIT BIT(7)
175#define CHG_CONFIG_MASK SMB1351_MASK(6, 4)
176#define LOW_BATT_VOLTAGE_DET_TH_MASK SMB1351_MASK(3, 0)
177
178#define VARIOUS_FUNC_3_REG 0x11
179#define SAFETY_TIMER_EN_MASK SMB1351_MASK(7, 6)
180#define BLOCK_SUSPEND_DURING_VBATT_LOW_BIT BIT(5)
181#define TIMEOUT_SEL_FOR_APSD_BIT BIT(4)
182#define SDP_SUSPEND_BIT BIT(3)
183#define QC_2P1_AUTO_INCREMENT_MODE_BIT BIT(2)
184#define QC_2P1_AUTH_ALGO_BIT BIT(1)
185#define DCD_EN_BIT BIT(0)
186
187#define HVDCP_BATT_MISSING_CTRL_REG 0x12
188#define HVDCP_ADAPTER_SEL_MASK SMB1351_MASK(7, 6)
189#define HVDCP_EN_BIT BIT(5)
190#define HVDCP_AUTO_INCREMENT_LIMIT_BIT BIT(4)
191#define BATT_MISSING_ON_INPUT_PLUGIN_BIT BIT(3)
192#define BATT_MISSING_2P6S_POLLER_BIT BIT(2)
193#define BATT_MISSING_ALGO_BIT BIT(1)
194#define BATT_MISSING_THERM_PIN_SOURCE_BIT BIT(0)
195
196#define PON_OPTIONS_REG 0x13
197#define SYSOK_INOK_POLARITY_BIT BIT(7)
198#define SYSOK_OPTIONS_MASK SMB1351_MASK(6, 4)
199#define INPUT_MISSING_POLLER_CONFIG_BIT BIT(3)
200#define VBATT_LOW_DISABLED_OR_RESET_STATE_BIT BIT(2)
201#define QC_2P1_AUTH_ALGO_IRQ_EN_BIT BIT(0)
202
203#define OTG_MODE_POWER_OPTIONS_REG 0x14
204#define ADAPTER_CONFIG_MASK SMB1351_MASK(7, 6)
205#define MAP_HVDCP_BIT BIT(5)
206#define SDP_LOW_BATT_FORCE_USB5_OVER_USB1_BIT BIT(4)
207#define OTG_HICCUP_MODE_BIT BIT(2)
208#define INPUT_CURRENT_LIMIT_MASK SMB1351_MASK(1, 0)
209
210#define CHARGER_I2C_CTRL_REG 0x15
211#define FULLON_MODE_EN_BIT BIT(7)
212#define I2C_HS_MODE_EN_BIT BIT(6)
213#define SYSON_LDO_OUTPUT_SEL_BIT BIT(5)
214#define VBATT_TRACKING_VOLTAGE_DIFF_BIT BIT(4)
215#define DISABLE_AFVC_WHEN_ENTER_TAPER_BIT BIT(3)
216#define VCHG_IINV_BIT BIT(2)
217#define AFVC_OVERRIDE_BIT BIT(1)
218#define SYSOK_PIN_CONFIG_BIT BIT(0)
219
220#define VERSION_REG 0x2E
221#define VERSION_MASK BIT(1)
222
223/* Command registers */
224#define CMD_I2C_REG 0x30
225#define CMD_RELOAD_BIT BIT(7)
226#define CMD_BQ_CFG_ACCESS_BIT BIT(6)
227
228#define CMD_INPUT_LIMIT_REG 0x31
229#define CMD_OVERRIDE_BIT BIT(7)
230#define CMD_SUSPEND_MODE_BIT BIT(6)
231#define CMD_INPUT_CURRENT_MODE_BIT BIT(3)
232#define CMD_INPUT_CURRENT_MODE_APSD 0
233#define CMD_INPUT_CURRENT_MODE_CMD 0x08
234#define CMD_USB_2_3_SEL_BIT BIT(2)
235#define CMD_USB_2_MODE 0
236#define CMD_USB_3_MODE 0x4
237#define CMD_USB_1_5_AC_CTRL_MASK SMB1351_MASK(1, 0)
238#define CMD_USB_100_MODE 0
239#define CMD_USB_500_MODE 0x2
240#define CMD_USB_AC_MODE 0x1
241
242#define CMD_CHG_REG 0x32
243#define CMD_DISABLE_THERM_MONITOR_BIT BIT(4)
244#define CMD_TURN_OFF_STAT_PIN_BIT BIT(3)
245#define CMD_PRE_TO_FAST_EN_BIT BIT(2)
246#define CMD_CHG_EN_BIT BIT(1)
247#define CMD_CHG_DISABLE 0
248#define CMD_CHG_ENABLE 0x2
249#define CMD_OTG_EN_BIT BIT(0)
250
251#define CMD_DEAD_BATT_REG 0x33
252#define CMD_STOP_DEAD_BATT_TIMER_MASK SMB1351_MASK(7, 0)
253
254#define CMD_HVDCP_REG 0x34
255#define CMD_APSD_RE_RUN_BIT BIT(7)
256#define CMD_FORCE_HVDCP_2P0_BIT BIT(5)
257#define CMD_HVDCP_MODE_MASK SMB1351_MASK(5, 0)
258
259/* Status registers */
260#define STATUS_0_REG 0x36
261#define STATUS_AICL_BIT BIT(7)
262#define STATUS_INPUT_CURRENT_LIMIT_MASK SMB1351_MASK(6, 5)
263#define STATUS_DCIN_INPUT_CURRENT_LIMIT_MASK SMB1351_MASK(4, 0)
264
265#define STATUS_1_REG 0x37
266#define STATUS_INPUT_RANGE_MASK SMB1351_MASK(7, 4)
267#define STATUS_INPUT_USB_BIT BIT(0)
268
269#define STATUS_2_REG 0x38
270#define STATUS_FAST_CHG_BIT BIT(7)
271#define STATUS_HARD_LIMIT_BIT BIT(6)
272#define STATUS_FLOAT_VOLTAGE_MASK SMB1351_MASK(5, 0)
273
274#define STATUS_3_REG 0x39
275#define STATUS_CHG_BIT BIT(7)
276#define STATUS_PRECHG_CURRENT_MASK SMB1351_MASK(6, 4)
277#define STATUS_FAST_CHG_CURRENT_MASK SMB1351_MASK(3, 0)
278
279#define STATUS_4_REG 0x3A
280#define STATUS_OTG_BIT BIT(7)
281#define STATUS_AFVC_BIT BIT(6)
282#define STATUS_DONE_BIT BIT(5)
283#define STATUS_BATT_LESS_THAN_2V_BIT BIT(4)
284#define STATUS_HOLD_OFF_BIT BIT(3)
285#define STATUS_CHG_MASK SMB1351_MASK(2, 1)
286#define STATUS_NO_CHARGING 0
287#define STATUS_FAST_CHARGING 0x4
288#define STATUS_PRE_CHARGING 0x2
289#define STATUS_TAPER_CHARGING 0x6
290#define STATUS_CHG_EN_STATUS_BIT BIT(0)
291
292#define STATUS_5_REG 0x3B
293#define STATUS_SOURCE_DETECTED_MASK SMB1351_MASK(7, 0)
294#define STATUS_PORT_CDP 0x80
295#define STATUS_PORT_DCP 0x40
296#define STATUS_PORT_OTHER 0x20
297#define STATUS_PORT_SDP 0x10
298#define STATUS_PORT_ACA_A 0x8
299#define STATUS_PORT_ACA_B 0x4
300#define STATUS_PORT_ACA_C 0x2
301#define STATUS_PORT_ACA_DOCK 0x1
302
303#define STATUS_6_REG 0x3C
304#define STATUS_DCD_TIMEOUT_BIT BIT(7)
305#define STATUS_DCD_GOOD_DG_BIT BIT(6)
306#define STATUS_OCD_GOOD_DG_BIT BIT(5)
307#define STATUS_RID_ABD_DG_BIT BIT(4)
308#define STATUS_RID_FLOAT_STATE_MACHINE_BIT BIT(3)
309#define STATUS_RID_A_STATE_MACHINE_BIT BIT(2)
310#define STATUS_RID_B_STATE_MACHINE_BIT BIT(1)
311#define STATUS_RID_C_STATE_MACHINE_BIT BIT(0)
312
313#define STATUS_7_REG 0x3D
314#define STATUS_HVDCP_MASK SMB1351_MASK(7, 0)
315
316#define STATUS_8_REG 0x3E
317#define STATUS_USNIN_HV_INPUT_SEL_BIT BIT(5)
318#define STATUS_USBIN_LV_UNDER_INPUT_SEL_BIT BIT(4)
319#define STATUS_USBIN_LV_INPUT_SEL_BIT BIT(3)
320
321/* Revision register */
322#define CHG_REVISION_REG 0x3F
323#define GUI_REVISION_MASK SMB1351_MASK(7, 4)
324#define DEVICE_REVISION_MASK SMB1351_MASK(3, 0)
325
326/* IRQ status registers */
327#define IRQ_A_REG 0x40
328#define IRQ_HOT_HARD_BIT BIT(6)
329#define IRQ_COLD_HARD_BIT BIT(4)
330#define IRQ_HOT_SOFT_BIT BIT(2)
331#define IRQ_COLD_SOFT_BIT BIT(0)
332
333#define IRQ_B_REG 0x41
334#define IRQ_BATT_TERMINAL_REMOVED_BIT BIT(6)
335#define IRQ_BATT_MISSING_BIT BIT(4)
336#define IRQ_LOW_BATT_VOLTAGE_BIT BIT(2)
337#define IRQ_INTERNAL_TEMP_LIMIT_BIT BIT(0)
338
339#define IRQ_C_REG 0x42
340#define IRQ_PRE_TO_FAST_VOLTAGE_BIT BIT(6)
341#define IRQ_RECHG_BIT BIT(4)
342#define IRQ_TAPER_BIT BIT(2)
343#define IRQ_TERM_BIT BIT(0)
344
345#define IRQ_D_REG 0x43
346#define IRQ_BATT_OV_BIT BIT(6)
347#define IRQ_CHG_ERROR_BIT BIT(4)
348#define IRQ_CHG_TIMEOUT_BIT BIT(2)
349#define IRQ_PRECHG_TIMEOUT_BIT BIT(0)
350
351#define IRQ_E_REG 0x44
352#define IRQ_USBIN_OV_BIT BIT(6)
353#define IRQ_USBIN_UV_BIT BIT(4)
354#define IRQ_AFVC_BIT BIT(2)
355#define IRQ_POWER_OK_BIT BIT(0)
356
357#define IRQ_F_REG 0x45
358#define IRQ_OTG_OVER_CURRENT_BIT BIT(6)
359#define IRQ_OTG_FAIL_BIT BIT(4)
360#define IRQ_RID_BIT BIT(2)
361#define IRQ_OTG_OC_RETRY_BIT BIT(0)
362
363#define IRQ_G_REG 0x46
364#define IRQ_SOURCE_DET_BIT BIT(6)
365#define IRQ_AICL_DONE_BIT BIT(4)
366#define IRQ_AICL_FAIL_BIT BIT(2)
367#define IRQ_CHG_INHIBIT_BIT BIT(0)
368
369#define IRQ_H_REG 0x47
370#define IRQ_IC_LIMIT_STATUS_BIT BIT(5)
371#define IRQ_HVDCP_2P1_STATUS_BIT BIT(4)
372#define IRQ_HVDCP_AUTH_DONE_BIT BIT(2)
373#define IRQ_WDOG_TIMEOUT_BIT BIT(0)
374
375/* constants */
376#define USB2_MIN_CURRENT_MA 100
377#define USB2_MAX_CURRENT_MA 500
378#define USB3_MIN_CURRENT_MA 150
379#define USB3_MAX_CURRENT_MA 900
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +0530380#define DCP_MAX_CURRENT_MA 1500
Nicholas Troast6e8c0382016-02-12 15:34:57 -0800381#define SMB1351_IRQ_REG_COUNT 8
382#define SMB1351_CHG_PRE_MIN_MA 100
383#define SMB1351_CHG_FAST_MIN_MA 1000
384#define SMB1351_CHG_FAST_MAX_MA 4500
385#define SMB1351_CHG_PRE_SHIFT 5
386#define SMB1351_CHG_FAST_SHIFT 4
387#define DEFAULT_BATT_CAPACITY 50
388#define DEFAULT_BATT_TEMP 250
389#define SUSPEND_CURRENT_MA 2
390
391#define CHG_ITERM_200MA 0x0
392#define CHG_ITERM_300MA 0x04
393#define CHG_ITERM_400MA 0x08
394#define CHG_ITERM_500MA 0x0C
395#define CHG_ITERM_600MA 0x10
396#define CHG_ITERM_700MA 0x14
397
398#define ADC_TM_WARM_COOL_THR_ENABLE ADC_TM_HIGH_LOW_THR_ENABLE
399
400enum reason {
401 USER = BIT(0),
402 THERMAL = BIT(1),
403 CURRENT = BIT(2),
404 SOC = BIT(3),
405};
406
407static char *pm_batt_supplied_to[] = {
408 "bms",
409};
410
411struct smb1351_regulator {
412 struct regulator_desc rdesc;
413 struct regulator_dev *rdev;
414};
415
416enum chip_version {
417 SMB_UNKNOWN = 0,
418 SMB1350,
419 SMB1351,
420 SMB_MAX_TYPE,
421};
422
423static const char *smb1351_version_str[SMB_MAX_TYPE] = {
424 [SMB_UNKNOWN] = "Unknown",
425 [SMB1350] = "SMB1350",
426 [SMB1351] = "SMB1351",
427};
428
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +0530429static const unsigned int smb1351_extcon_cable[] = {
430 EXTCON_USB,
431 EXTCON_USB_HOST,
432 EXTCON_NONE,
433};
434
Nicholas Troast6e8c0382016-02-12 15:34:57 -0800435struct smb1351_charger {
436 struct i2c_client *client;
437 struct device *dev;
438
439 bool recharge_disabled;
440 int recharge_mv;
441 bool iterm_disabled;
442 int iterm_ma;
443 int vfloat_mv;
444 int chg_present;
445 int fake_battery_soc;
446 bool chg_autonomous_mode;
447 bool disable_apsd;
448 bool using_pmic_therm;
449 bool jeita_supported;
450 bool battery_missing;
451 const char *bms_psy_name;
452 bool resume_completed;
453 bool irq_waiting;
454 struct delayed_work chg_remove_work;
455 struct delayed_work hvdcp_det_work;
456
457 /* status tracking */
458 bool batt_full;
459 bool batt_hot;
460 bool batt_cold;
461 bool batt_warm;
462 bool batt_cool;
463
464 int battchg_disabled_status;
465 int usb_suspended_status;
466 int target_fastchg_current_max_ma;
467 int fastchg_current_max_ma;
468 int workaround_flags;
469
470 int parallel_pin_polarity_setting;
Ashay Jaiswalec6af842017-02-17 16:00:05 +0530471 int parallel_mode;
Ashay Jaiswal33de94a2017-11-02 10:06:52 +0530472 int pl_batfet_mode;
Nicholas Troast6e8c0382016-02-12 15:34:57 -0800473 bool parallel_charger;
Ashay Jaiswal0513d342017-02-07 00:12:08 +0530474 bool parallel_charger_suspended;
Nicholas Troast6e8c0382016-02-12 15:34:57 -0800475 bool bms_controlled_charging;
476 bool apsd_rerun;
477 bool usbin_ov;
478 bool chg_remove_work_scheduled;
479 bool force_hvdcp_2p0;
480 enum chip_version version;
481
482 /* psy */
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +0530483 struct power_supply_desc usb_psy_d;
Nicholas Troast6e8c0382016-02-12 15:34:57 -0800484 struct power_supply *usb_psy;
485 int usb_psy_ma;
486 struct power_supply *bms_psy;
487 struct power_supply_desc batt_psy_d;
488 struct power_supply *batt_psy;
489 struct power_supply *parallel_psy;
490 struct power_supply_desc parallel_psy_d;
491
492 struct smb1351_regulator otg_vreg;
493 struct mutex irq_complete;
494
495 struct dentry *debug_root;
496 u32 peek_poke_address;
497
498 /* adc_tm parameters */
499 struct qpnp_vadc_chip *vadc_dev;
500 struct qpnp_adc_tm_chip *adc_tm_dev;
501 struct qpnp_adc_tm_btm_param adc_param;
502
503 /* jeita parameters */
504 int batt_hot_decidegc;
505 int batt_cold_decidegc;
506 int batt_warm_decidegc;
507 int batt_cool_decidegc;
508 int batt_missing_decidegc;
509 unsigned int batt_warm_ma;
510 unsigned int batt_warm_mv;
511 unsigned int batt_cool_ma;
512 unsigned int batt_cool_mv;
513
514 /* pinctrl parameters */
515 const char *pinctrl_state_name;
516 struct pinctrl *smb_pinctrl;
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +0530517
518 /* standalone */
519 bool charger_present;
520 struct extcon_dev *extcon;
521 struct regulator *dpdm_reg;
522 enum power_supply_type charger_type;
Nicholas Troast6e8c0382016-02-12 15:34:57 -0800523};
524
525struct smb_irq_info {
526 const char *name;
527 int (*smb_irq)(struct smb1351_charger *chip, u8 rt_stat);
528 int high;
529 int low;
530};
531
532struct irq_handler_info {
533 u8 stat_reg;
534 u8 val;
535 u8 prev_val;
536 struct smb_irq_info irq_info[4];
537};
538
539/* USB input charge current */
540static int usb_chg_current[] = {
541 500, 685, 1000, 1100, 1200, 1300, 1500, 1600,
542 1700, 1800, 2000, 2200, 2500, 3000,
543};
544
545static int fast_chg_current[] = {
546 1000, 1200, 1400, 1600, 1800, 2000, 2200,
547 2400, 2600, 2800, 3000, 3400, 3600, 3800,
548 4000, 4640,
549};
550
551static int pre_chg_current[] = {
552 200, 300, 400, 500, 600, 700,
553};
554
555struct battery_status {
556 bool batt_hot;
557 bool batt_warm;
558 bool batt_cool;
559 bool batt_cold;
560 bool batt_present;
561};
562
563enum {
564 BATT_HOT = 0,
565 BATT_WARM,
566 BATT_NORMAL,
567 BATT_COOL,
568 BATT_COLD,
569 BATT_MISSING,
570 BATT_STATUS_MAX,
571};
572
573static struct battery_status batt_s[] = {
574 [BATT_HOT] = {1, 0, 0, 0, 1},
575 [BATT_WARM] = {0, 1, 0, 0, 1},
576 [BATT_NORMAL] = {0, 0, 0, 0, 1},
577 [BATT_COOL] = {0, 0, 1, 0, 1},
578 [BATT_COLD] = {0, 0, 0, 1, 1},
579 [BATT_MISSING] = {0, 0, 0, 1, 0},
580};
581
582static int smb1351_read_reg(struct smb1351_charger *chip, int reg, u8 *val)
583{
584 s32 ret;
585
586 pm_stay_awake(chip->dev);
587 ret = i2c_smbus_read_byte_data(chip->client, reg);
588 if (ret < 0) {
589 pr_err("i2c read fail: can't read from %02x: %d\n", reg, ret);
590 pm_relax(chip->dev);
591 return ret;
592 }
593
594 *val = ret;
595
596 pm_relax(chip->dev);
597 pr_debug("Reading 0x%02x=0x%02x\n", reg, *val);
598 return 0;
599}
600
601static int smb1351_write_reg(struct smb1351_charger *chip, int reg, u8 val)
602{
603 s32 ret;
604
605 pm_stay_awake(chip->dev);
606 ret = i2c_smbus_write_byte_data(chip->client, reg, val);
607 if (ret < 0) {
608 pr_err("i2c write fail: can't write %02x to %02x: %d\n",
609 val, reg, ret);
610 pm_relax(chip->dev);
611 return ret;
612 }
613 pm_relax(chip->dev);
614 pr_debug("Writing 0x%02x=0x%02x\n", reg, val);
615 return 0;
616}
617
618static int smb1351_masked_write(struct smb1351_charger *chip, int reg,
619 u8 mask, u8 val)
620{
621 s32 rc;
622 u8 temp;
623
624 rc = smb1351_read_reg(chip, reg, &temp);
625 if (rc) {
626 pr_err("read failed: reg=%03X, rc=%d\n", reg, rc);
627 return rc;
628 }
629 temp &= ~mask;
630 temp |= val & mask;
631 rc = smb1351_write_reg(chip, reg, temp);
632 if (rc) {
633 pr_err("write failed: reg=%03X, rc=%d\n", reg, rc);
634 return rc;
635 }
636 return 0;
637}
638
639static int smb1351_enable_volatile_writes(struct smb1351_charger *chip)
640{
641 int rc;
642
643 rc = smb1351_masked_write(chip, CMD_I2C_REG, CMD_BQ_CFG_ACCESS_BIT,
644 CMD_BQ_CFG_ACCESS_BIT);
645 if (rc)
646 pr_err("Couldn't write CMD_BQ_CFG_ACCESS_BIT rc=%d\n", rc);
647
648 return rc;
649}
650
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +0530651static int smb1351_get_closest_usb_setpoint(int val)
652{
653 int i;
654
655 for (i = ARRAY_SIZE(usb_chg_current) - 1; i >= 0; i--) {
656 if (usb_chg_current[i] <= val)
657 break;
658 }
659 if (i < 0)
660 i = 0;
661
662 if (i >= ARRAY_SIZE(usb_chg_current) - 1)
663 return ARRAY_SIZE(usb_chg_current) - 1;
664
665 /* check what is closer, i or i + 1 */
666 if (abs(usb_chg_current[i] - val) < abs(usb_chg_current[i + 1] - val))
667 return i;
668 else
669 return i + 1;
670}
671
672static int smb1351_request_dpdm(struct smb1351_charger *chip, bool enable)
673{
674 int rc = 0;
675
676 /* fetch the DPDM regulator */
677 if (!chip->dpdm_reg && of_get_property(chip->dev->of_node,
678 "dpdm-supply", NULL)) {
679 chip->dpdm_reg = devm_regulator_get(chip->dev, "dpdm");
680 if (IS_ERR(chip->dpdm_reg)) {
681 rc = PTR_ERR(chip->dpdm_reg);
682 pr_err("Couldn't get dpdm regulator rc=%d\n",
683 rc);
684 chip->dpdm_reg = NULL;
685 return rc;
686 }
687 }
688
689 if (enable) {
690 if (chip->dpdm_reg && !regulator_is_enabled(chip->dpdm_reg)) {
691 pr_err("enabling DPDM regulator\n");
692 rc = regulator_enable(chip->dpdm_reg);
693 if (rc < 0)
694 pr_err("Couldn't enable dpdm regulator rc=%d\n",
695 rc);
696 }
697 } else {
698 if (chip->dpdm_reg && regulator_is_enabled(chip->dpdm_reg)) {
699 pr_err("disabling DPDM regulator\n");
700 rc = regulator_disable(chip->dpdm_reg);
701 if (rc < 0)
702 pr_err("Couldn't disable dpdm regulator rc=%d\n",
703 rc);
704 }
705 }
706
707 return rc;
708}
709
Nicholas Troast6e8c0382016-02-12 15:34:57 -0800710static int smb1351_usb_suspend(struct smb1351_charger *chip, int reason,
711 bool suspend)
712{
713 int rc = 0;
714 int suspended;
715
716 suspended = chip->usb_suspended_status;
717
718 pr_debug("reason = %d requested_suspend = %d suspended_status = %d\n",
719 reason, suspend, suspended);
720
721 if (suspend == false)
722 suspended &= ~reason;
723 else
724 suspended |= reason;
725
726 pr_debug("new suspended_status = %d\n", suspended);
727
728 rc = smb1351_masked_write(chip, CMD_INPUT_LIMIT_REG,
729 CMD_SUSPEND_MODE_BIT,
730 suspended ? CMD_SUSPEND_MODE_BIT : 0);
731 if (rc)
732 pr_err("Couldn't suspend rc = %d\n", rc);
733 else
734 chip->usb_suspended_status = suspended;
735
736 return rc;
737}
738
739static int smb1351_battchg_disable(struct smb1351_charger *chip,
740 int reason, int disable)
741{
742 int rc = 0;
743 int disabled;
744
745 if (chip->chg_autonomous_mode) {
746 pr_debug("Charger in autonomous mode\n");
747 return 0;
748 }
749
750 disabled = chip->battchg_disabled_status;
751
752 pr_debug("reason = %d requested_disable = %d disabled_status = %d\n",
753 reason, disable, disabled);
754 if (disable == true)
755 disabled |= reason;
756 else
757 disabled &= ~reason;
758
759 pr_debug("new disabled_status = %d\n", disabled);
760
761 rc = smb1351_masked_write(chip, CMD_CHG_REG, CMD_CHG_EN_BIT,
762 disabled ? 0 : CMD_CHG_ENABLE);
763 if (rc)
764 pr_err("Couldn't %s charging rc=%d\n",
765 disable ? "disable" : "enable", rc);
766 else
767 chip->battchg_disabled_status = disabled;
768
769 return rc;
770}
771
772static int smb1351_fastchg_current_set(struct smb1351_charger *chip,
773 unsigned int fastchg_current)
774{
775 int i, rc;
776 bool is_pre_chg = false;
777
778
779 if ((fastchg_current < SMB1351_CHG_PRE_MIN_MA) ||
780 (fastchg_current > SMB1351_CHG_FAST_MAX_MA)) {
781 pr_err("bad pre_fastchg current mA=%d asked to set\n",
782 fastchg_current);
783 return -EINVAL;
784 }
785
786 /*
787 * fast chg current could not support less than 1000mA
788 * use pre chg to instead for the parallel charging
789 */
790 if (fastchg_current < SMB1351_CHG_FAST_MIN_MA) {
791 is_pre_chg = true;
792 pr_debug("is_pre_chg true, current is %d\n", fastchg_current);
793 }
794
795 if (is_pre_chg) {
796 /* set prechg current */
797 for (i = ARRAY_SIZE(pre_chg_current) - 1; i >= 0; i--) {
798 if (pre_chg_current[i] <= fastchg_current)
799 break;
800 }
801 if (i < 0)
802 i = 0;
803 chip->fastchg_current_max_ma = pre_chg_current[i];
804 pr_debug("prechg setting %02x\n", i);
805
806 i = i << SMB1351_CHG_PRE_SHIFT;
807
808 rc = smb1351_masked_write(chip, CHG_OTH_CURRENT_CTRL_REG,
809 PRECHG_CURRENT_MASK, i);
810 if (rc)
811 pr_err("Couldn't write CHG_OTH_CURRENT_CTRL_REG rc=%d\n",
812 rc);
813
814 return smb1351_masked_write(chip, VARIOUS_FUNC_2_REG,
815 PRECHG_TO_FASTCHG_BIT, PRECHG_TO_FASTCHG_BIT);
816 } else {
817 if (chip->version == SMB_UNKNOWN)
818 return -EINVAL;
819
820 /* SMB1350 supports FCC upto 2600 mA */
821 if (chip->version == SMB1350 && fastchg_current > 2600)
822 fastchg_current = 2600;
823
824 /* set fastchg current */
825 for (i = ARRAY_SIZE(fast_chg_current) - 1; i >= 0; i--) {
826 if (fast_chg_current[i] <= fastchg_current)
827 break;
828 }
829 if (i < 0)
830 i = 0;
831 chip->fastchg_current_max_ma = fast_chg_current[i];
832
833 i = i << SMB1351_CHG_FAST_SHIFT;
834 pr_debug("fastchg limit=%d setting %02x\n",
835 chip->fastchg_current_max_ma, i);
836
837 /* make sure pre chg mode is disabled */
838 rc = smb1351_masked_write(chip, VARIOUS_FUNC_2_REG,
839 PRECHG_TO_FASTCHG_BIT, 0);
840 if (rc)
841 pr_err("Couldn't write VARIOUS_FUNC_2_REG rc=%d\n", rc);
842
843 return smb1351_masked_write(chip, CHG_CURRENT_CTRL_REG,
844 FAST_CHG_CURRENT_MASK, i);
845 }
846}
847
848#define MIN_FLOAT_MV 3500
849#define MAX_FLOAT_MV 4500
850#define VFLOAT_STEP_MV 20
851
852static int smb1351_float_voltage_set(struct smb1351_charger *chip,
853 int vfloat_mv)
854{
855 u8 temp;
856
857 if ((vfloat_mv < MIN_FLOAT_MV) || (vfloat_mv > MAX_FLOAT_MV)) {
858 pr_err("bad float voltage mv =%d asked to set\n", vfloat_mv);
859 return -EINVAL;
860 }
861
862 temp = (vfloat_mv - MIN_FLOAT_MV) / VFLOAT_STEP_MV;
863
864 return smb1351_masked_write(chip, VFLOAT_REG, VFLOAT_MASK, temp);
865}
866
867static int smb1351_iterm_set(struct smb1351_charger *chip, int iterm_ma)
868{
869 int rc;
870 u8 reg;
871
872 if (iterm_ma <= 200)
873 reg = CHG_ITERM_200MA;
874 else if (iterm_ma <= 300)
875 reg = CHG_ITERM_300MA;
876 else if (iterm_ma <= 400)
877 reg = CHG_ITERM_400MA;
878 else if (iterm_ma <= 500)
879 reg = CHG_ITERM_500MA;
880 else if (iterm_ma <= 600)
881 reg = CHG_ITERM_600MA;
882 else
883 reg = CHG_ITERM_700MA;
884
885 rc = smb1351_masked_write(chip, CHG_OTH_CURRENT_CTRL_REG,
886 ITERM_MASK, reg);
887 if (rc) {
888 pr_err("Couldn't set iterm rc = %d\n", rc);
889 return rc;
890 }
891 /* enable the iterm */
892 rc = smb1351_masked_write(chip, CHG_CTRL_REG,
893 ITERM_EN_BIT, ITERM_ENABLE);
894 if (rc) {
895 pr_err("Couldn't enable iterm rc = %d\n", rc);
896 return rc;
897 }
898 return 0;
899}
900
901static int smb1351_chg_otg_regulator_enable(struct regulator_dev *rdev)
902{
903 int rc = 0;
904 struct smb1351_charger *chip = rdev_get_drvdata(rdev);
905
906 rc = smb1351_masked_write(chip, CMD_CHG_REG, CMD_OTG_EN_BIT,
907 CMD_OTG_EN_BIT);
908 if (rc)
909 pr_err("Couldn't enable OTG mode rc=%d\n", rc);
910 return rc;
911}
912
913static int smb1351_chg_otg_regulator_disable(struct regulator_dev *rdev)
914{
915 int rc = 0;
916 struct smb1351_charger *chip = rdev_get_drvdata(rdev);
917
918 rc = smb1351_masked_write(chip, CMD_CHG_REG, CMD_OTG_EN_BIT, 0);
919 if (rc)
920 pr_err("Couldn't disable OTG mode rc=%d\n", rc);
921 return rc;
922}
923
924static int smb1351_chg_otg_regulator_is_enable(struct regulator_dev *rdev)
925{
926 int rc = 0;
927 u8 reg = 0;
928 struct smb1351_charger *chip = rdev_get_drvdata(rdev);
929
930 rc = smb1351_read_reg(chip, CMD_CHG_REG, &reg);
931 if (rc) {
932 pr_err("Couldn't read OTG enable bit rc=%d\n", rc);
933 return rc;
934 }
935
936 return (reg & CMD_OTG_EN_BIT) ? 1 : 0;
937}
938
Subbaraman Narayanamurthyaa390522017-08-31 18:33:16 -0700939static struct regulator_ops smb1351_chg_otg_reg_ops = {
Nicholas Troast6e8c0382016-02-12 15:34:57 -0800940 .enable = smb1351_chg_otg_regulator_enable,
941 .disable = smb1351_chg_otg_regulator_disable,
942 .is_enabled = smb1351_chg_otg_regulator_is_enable,
943};
944
945static int smb1351_regulator_init(struct smb1351_charger *chip)
946{
947 int rc = 0;
948 struct regulator_config cfg = {};
949
950 chip->otg_vreg.rdesc.owner = THIS_MODULE;
951 chip->otg_vreg.rdesc.type = REGULATOR_VOLTAGE;
952 chip->otg_vreg.rdesc.ops = &smb1351_chg_otg_reg_ops;
953 chip->otg_vreg.rdesc.name =
954 chip->dev->of_node->name;
955 chip->otg_vreg.rdesc.of_match =
956 chip->dev->of_node->name;
957
958 cfg.dev = chip->dev;
959 cfg.driver_data = chip;
960
961 chip->otg_vreg.rdev = regulator_register(
962 &chip->otg_vreg.rdesc, &cfg);
963 if (IS_ERR(chip->otg_vreg.rdev)) {
964 rc = PTR_ERR(chip->otg_vreg.rdev);
965 chip->otg_vreg.rdev = NULL;
966 if (rc != -EPROBE_DEFER)
967 pr_err("OTG reg failed, rc=%d\n", rc);
968 }
969 return rc;
970}
971
972static int smb_chip_get_version(struct smb1351_charger *chip)
973{
974 u8 ver;
975 int rc = 0;
976
977 if (chip->version == SMB_UNKNOWN) {
978 rc = smb1351_read_reg(chip, VERSION_REG, &ver);
979 if (rc) {
980 pr_err("Couldn't read version rc=%d\n", rc);
981 return rc;
982 }
983
984 /* If bit 1 is set, it is SMB1350 */
985 if (ver & VERSION_MASK)
986 chip->version = SMB1350;
987 else
988 chip->version = SMB1351;
989 }
990
991 return rc;
992}
993
994static int smb1351_hw_init(struct smb1351_charger *chip)
995{
996 int rc;
997 u8 reg = 0, mask = 0;
998
999 /* configure smb_pinctrl to enable irqs */
1000 if (chip->pinctrl_state_name) {
1001 chip->smb_pinctrl = pinctrl_get_select(chip->dev,
1002 chip->pinctrl_state_name);
1003 if (IS_ERR(chip->smb_pinctrl)) {
1004 pr_err("Could not get/set %s pinctrl state rc = %ld\n",
1005 chip->pinctrl_state_name,
1006 PTR_ERR(chip->smb_pinctrl));
1007 return PTR_ERR(chip->smb_pinctrl);
1008 }
1009 }
1010
1011 /*
1012 * If the charger is pre-configured for autonomous operation,
1013 * do not apply additional settings
1014 */
1015 if (chip->chg_autonomous_mode) {
1016 pr_debug("Charger configured for autonomous mode\n");
1017 return 0;
1018 }
1019
1020 rc = smb_chip_get_version(chip);
1021 if (rc) {
1022 pr_err("Couldn't get version rc = %d\n", rc);
1023 return rc;
1024 }
1025
1026 rc = smb1351_enable_volatile_writes(chip);
1027 if (rc) {
1028 pr_err("Couldn't configure volatile writes rc=%d\n", rc);
1029 return rc;
1030 }
1031
1032 /* setup battery missing source */
1033 reg = BATT_MISSING_THERM_PIN_SOURCE_BIT;
1034 mask = BATT_MISSING_THERM_PIN_SOURCE_BIT;
1035 rc = smb1351_masked_write(chip, HVDCP_BATT_MISSING_CTRL_REG,
1036 mask, reg);
1037 if (rc) {
1038 pr_err("Couldn't set HVDCP_BATT_MISSING_CTRL_REG rc=%d\n", rc);
1039 return rc;
1040 }
1041 /* setup defaults for CHG_PIN_EN_CTRL_REG */
1042 reg = EN_BY_I2C_0_DISABLE | USBCS_CTRL_BY_I2C | CHG_ERR_BIT |
1043 APSD_DONE_BIT | LED_BLINK_FUNC_BIT;
1044 mask = EN_PIN_CTRL_MASK | USBCS_CTRL_BIT | CHG_ERR_BIT |
1045 APSD_DONE_BIT | LED_BLINK_FUNC_BIT;
1046 rc = smb1351_masked_write(chip, CHG_PIN_EN_CTRL_REG, mask, reg);
1047 if (rc) {
1048 pr_err("Couldn't set CHG_PIN_EN_CTRL_REG rc=%d\n", rc);
1049 return rc;
1050 }
1051 /* setup USB 2.0/3.0 detection and USB 500/100 command polarity */
1052 reg = USB_2_3_MODE_SEL_BY_I2C | USB_CMD_POLARITY_500_1_100_0;
1053 mask = USB_2_3_MODE_SEL_BIT | USB_5_1_CMD_POLARITY_BIT;
1054 rc = smb1351_masked_write(chip, CHG_OTH_CURRENT_CTRL_REG, mask, reg);
1055 if (rc) {
1056 pr_err("Couldn't set CHG_OTH_CURRENT_CTRL_REG rc=%d\n", rc);
1057 return rc;
1058 }
1059 /* setup USB suspend, AICL and APSD */
1060 reg = SUSPEND_MODE_CTRL_BY_I2C | AICL_EN_BIT;
1061 if (!chip->disable_apsd)
1062 reg |= APSD_EN_BIT;
1063 mask = SUSPEND_MODE_CTRL_BIT | AICL_EN_BIT | APSD_EN_BIT;
1064 rc = smb1351_masked_write(chip, VARIOUS_FUNC_REG, mask, reg);
1065 if (rc) {
1066 pr_err("Couldn't set VARIOUS_FUNC_REG rc=%d\n", rc);
1067 return rc;
1068 }
1069 /* Fault and Status IRQ configuration */
1070 reg = HOT_COLD_HARD_LIMIT_BIT | HOT_COLD_SOFT_LIMIT_BIT
1071 | INPUT_OVLO_BIT | INPUT_UVLO_BIT | AICL_DONE_FAIL_BIT;
1072 rc = smb1351_write_reg(chip, FAULT_INT_REG, reg);
1073 if (rc) {
1074 pr_err("Couldn't set FAULT_INT_REG rc=%d\n", rc);
1075 return rc;
1076 }
1077 reg = CHG_OR_PRECHG_TIMEOUT_BIT | BATT_OVP_BIT |
1078 FAST_TERM_TAPER_RECHG_INHIBIT_BIT |
1079 BATT_MISSING_BIT | BATT_LOW_BIT;
1080 rc = smb1351_write_reg(chip, STATUS_INT_REG, reg);
1081 if (rc) {
1082 pr_err("Couldn't set STATUS_INT_REG rc=%d\n", rc);
1083 return rc;
1084 }
1085 /* setup THERM Monitor */
1086 if (!chip->using_pmic_therm) {
1087 rc = smb1351_masked_write(chip, THERM_A_CTRL_REG,
1088 THERM_MONITOR_BIT, THERM_MONITOR_EN);
1089 if (rc) {
1090 pr_err("Couldn't set THERM_A_CTRL_REG rc=%d\n", rc);
1091 return rc;
1092 }
1093 }
1094 /* set the fast charge current limit */
1095 rc = smb1351_fastchg_current_set(chip,
1096 chip->target_fastchg_current_max_ma);
1097 if (rc) {
1098 pr_err("Couldn't set fastchg current rc=%d\n", rc);
1099 return rc;
1100 }
1101
1102 /* set the float voltage */
1103 if (chip->vfloat_mv != -EINVAL) {
1104 rc = smb1351_float_voltage_set(chip, chip->vfloat_mv);
1105 if (rc) {
1106 pr_err("Couldn't set float voltage rc = %d\n", rc);
1107 return rc;
1108 }
1109 }
1110
1111 /* set iterm */
1112 if (chip->iterm_ma != -EINVAL) {
1113 if (chip->iterm_disabled) {
1114 pr_err("Error: Both iterm_disabled and iterm_ma set\n");
1115 return -EINVAL;
1116 }
1117 rc = smb1351_iterm_set(chip, chip->iterm_ma);
1118 if (rc) {
1119 pr_err("Couldn't set iterm rc = %d\n", rc);
1120 return rc;
1121 }
1122 } else if (chip->iterm_disabled) {
1123 rc = smb1351_masked_write(chip, CHG_CTRL_REG,
1124 ITERM_EN_BIT, ITERM_DISABLE);
1125 if (rc) {
1126 pr_err("Couldn't set iterm rc = %d\n", rc);
1127 return rc;
1128 }
1129 }
1130
1131 /* set recharge-threshold */
1132 if (chip->recharge_mv != -EINVAL) {
1133 if (chip->recharge_disabled) {
1134 pr_err("Error: Both recharge_disabled and recharge_mv set\n");
1135 return -EINVAL;
1136 }
1137
1138 reg = AUTO_RECHG_ENABLE;
1139 if (chip->recharge_mv > 50)
1140 reg |= AUTO_RECHG_TH_100MV;
1141 else
1142 reg |= AUTO_RECHG_TH_50MV;
1143
1144 rc = smb1351_masked_write(chip, CHG_CTRL_REG,
1145 AUTO_RECHG_BIT |
1146 AUTO_RECHG_TH_BIT, reg);
1147 if (rc) {
1148 pr_err("Couldn't set rechg-cfg rc = %d\n", rc);
1149 return rc;
1150 }
1151 } else if (chip->recharge_disabled) {
1152 rc = smb1351_masked_write(chip, CHG_CTRL_REG,
1153 AUTO_RECHG_BIT,
1154 AUTO_RECHG_DISABLE);
1155 if (rc) {
1156 pr_err("Couldn't disable auto-rechg rc = %d\n", rc);
1157 return rc;
1158 }
1159 }
1160
1161 /* enable/disable charging by suspending usb */
1162 rc = smb1351_usb_suspend(chip, USER, chip->usb_suspended_status);
1163 if (rc) {
1164 pr_err("Unable to %s battery charging. rc=%d\n",
1165 chip->usb_suspended_status ? "disable" : "enable",
1166 rc);
1167 }
1168
1169 return rc;
1170}
1171
1172static enum power_supply_property smb1351_battery_properties[] = {
1173 POWER_SUPPLY_PROP_STATUS,
1174 POWER_SUPPLY_PROP_PRESENT,
1175 POWER_SUPPLY_PROP_CHARGING_ENABLED,
1176 POWER_SUPPLY_PROP_BATTERY_CHARGING_ENABLED,
1177 POWER_SUPPLY_PROP_CHARGE_TYPE,
1178 POWER_SUPPLY_PROP_CAPACITY,
1179 POWER_SUPPLY_PROP_HEALTH,
1180 POWER_SUPPLY_PROP_TEMP,
1181 POWER_SUPPLY_PROP_TECHNOLOGY,
1182 POWER_SUPPLY_PROP_MODEL_NAME,
1183};
1184
1185static int smb1351_get_prop_batt_status(struct smb1351_charger *chip)
1186{
1187 int rc;
1188 u8 reg = 0;
1189
1190 if (chip->batt_full)
1191 return POWER_SUPPLY_STATUS_FULL;
1192
1193 rc = smb1351_read_reg(chip, STATUS_4_REG, &reg);
1194 if (rc) {
1195 pr_err("Couldn't read STATUS_4 rc = %d\n", rc);
1196 return POWER_SUPPLY_STATUS_UNKNOWN;
1197 }
1198
1199 pr_debug("STATUS_4_REG(0x3A)=%x\n", reg);
1200
1201 if (reg & STATUS_HOLD_OFF_BIT)
1202 return POWER_SUPPLY_STATUS_NOT_CHARGING;
1203
1204 if (reg & STATUS_CHG_MASK)
1205 return POWER_SUPPLY_STATUS_CHARGING;
1206
1207 return POWER_SUPPLY_STATUS_DISCHARGING;
1208}
1209
1210static int smb1351_get_prop_batt_present(struct smb1351_charger *chip)
1211{
1212 return !chip->battery_missing;
1213}
1214
1215static int smb1351_get_prop_batt_capacity(struct smb1351_charger *chip)
1216{
1217 union power_supply_propval ret = {0, };
1218
1219 if (chip->fake_battery_soc >= 0)
1220 return chip->fake_battery_soc;
1221
1222 if (chip->bms_psy) {
1223 power_supply_get_property(chip->bms_psy,
1224 POWER_SUPPLY_PROP_CAPACITY, &ret);
1225 return ret.intval;
1226 }
1227 pr_debug("return DEFAULT_BATT_CAPACITY\n");
1228 return DEFAULT_BATT_CAPACITY;
1229}
1230
1231static int smb1351_get_prop_batt_temp(struct smb1351_charger *chip)
1232{
1233 union power_supply_propval ret = {0, };
1234 int rc = 0;
1235 struct qpnp_vadc_result results;
1236
1237 if (chip->bms_psy) {
1238 power_supply_get_property(chip->bms_psy,
1239 POWER_SUPPLY_PROP_TEMP, &ret);
1240 return ret.intval;
1241 }
1242 if (chip->vadc_dev) {
1243 rc = qpnp_vadc_read(chip->vadc_dev,
1244 LR_MUX1_BATT_THERM, &results);
1245 if (rc)
1246 pr_debug("Unable to read adc batt temp rc=%d\n", rc);
1247 else
1248 return (int)results.physical;
1249 }
1250
1251 pr_debug("return default temperature\n");
1252 return DEFAULT_BATT_TEMP;
1253}
1254
1255static int smb1351_get_prop_charge_type(struct smb1351_charger *chip)
1256{
1257 int rc;
1258 u8 reg = 0;
1259
1260 rc = smb1351_read_reg(chip, STATUS_4_REG, &reg);
1261 if (rc) {
1262 pr_err("Couldn't read STATUS_4 rc = %d\n", rc);
1263 return POWER_SUPPLY_CHARGE_TYPE_UNKNOWN;
1264 }
1265
1266 pr_debug("STATUS_4_REG(0x3A)=%x\n", reg);
1267
1268 reg &= STATUS_CHG_MASK;
1269
1270 if (reg == STATUS_FAST_CHARGING)
1271 return POWER_SUPPLY_CHARGE_TYPE_FAST;
1272 else if (reg == STATUS_TAPER_CHARGING)
1273 return POWER_SUPPLY_CHARGE_TYPE_TAPER;
1274 else if (reg == STATUS_PRE_CHARGING)
1275 return POWER_SUPPLY_CHARGE_TYPE_TRICKLE;
1276 else
1277 return POWER_SUPPLY_CHARGE_TYPE_NONE;
1278}
1279
1280static int smb1351_get_prop_batt_health(struct smb1351_charger *chip)
1281{
1282 union power_supply_propval ret = {0, };
1283
1284 if (chip->batt_hot)
1285 ret.intval = POWER_SUPPLY_HEALTH_OVERHEAT;
1286 else if (chip->batt_cold)
1287 ret.intval = POWER_SUPPLY_HEALTH_COLD;
1288 else if (chip->batt_warm)
1289 ret.intval = POWER_SUPPLY_HEALTH_WARM;
1290 else if (chip->batt_cool)
1291 ret.intval = POWER_SUPPLY_HEALTH_COOL;
1292 else
1293 ret.intval = POWER_SUPPLY_HEALTH_GOOD;
1294
1295 return ret.intval;
1296}
1297
1298static int smb1351_set_usb_chg_current(struct smb1351_charger *chip,
1299 int current_ma)
1300{
1301 int i, rc = 0;
1302 u8 reg = 0, mask = 0;
1303
1304 pr_debug("USB current_ma = %d\n", current_ma);
1305
1306 if (chip->chg_autonomous_mode) {
1307 pr_debug("Charger in autonomous mode\n");
1308 return 0;
1309 }
1310
1311 /* set suspend bit when urrent_ma <= 2 */
1312 if (current_ma <= SUSPEND_CURRENT_MA) {
1313 smb1351_usb_suspend(chip, CURRENT, true);
1314 pr_debug("USB suspend\n");
1315 return 0;
1316 }
1317
1318 if (current_ma > SUSPEND_CURRENT_MA &&
1319 current_ma < USB2_MIN_CURRENT_MA)
1320 current_ma = USB2_MIN_CURRENT_MA;
1321
1322 if (current_ma == USB2_MIN_CURRENT_MA) {
1323 /* USB 2.0 - 100mA */
1324 reg = CMD_USB_2_MODE | CMD_USB_100_MODE;
1325 } else if (current_ma == USB3_MIN_CURRENT_MA) {
1326 /* USB 3.0 - 150mA */
1327 reg = CMD_USB_3_MODE | CMD_USB_100_MODE;
1328 } else if (current_ma == USB2_MAX_CURRENT_MA) {
1329 /* USB 2.0 - 500mA */
1330 reg = CMD_USB_2_MODE | CMD_USB_500_MODE;
1331 } else if (current_ma == USB3_MAX_CURRENT_MA) {
1332 /* USB 3.0 - 900mA */
1333 reg = CMD_USB_3_MODE | CMD_USB_500_MODE;
1334 } else if (current_ma > USB2_MAX_CURRENT_MA) {
1335 /* HC mode - if none of the above */
1336 reg = CMD_USB_AC_MODE;
1337
1338 for (i = ARRAY_SIZE(usb_chg_current) - 1; i >= 0; i--) {
1339 if (usb_chg_current[i] <= current_ma)
1340 break;
1341 }
1342 if (i < 0)
1343 i = 0;
1344 rc = smb1351_masked_write(chip, CHG_CURRENT_CTRL_REG,
1345 AC_INPUT_CURRENT_LIMIT_MASK, i);
1346 if (rc) {
1347 pr_err("Couldn't set input mA rc=%d\n", rc);
1348 return rc;
1349 }
1350 }
1351 /* control input current mode by command */
1352 reg |= CMD_INPUT_CURRENT_MODE_CMD;
1353 mask = CMD_INPUT_CURRENT_MODE_BIT | CMD_USB_2_3_SEL_BIT |
1354 CMD_USB_1_5_AC_CTRL_MASK;
1355 rc = smb1351_masked_write(chip, CMD_INPUT_LIMIT_REG, mask, reg);
1356 if (rc) {
1357 pr_err("Couldn't set charging mode rc = %d\n", rc);
1358 return rc;
1359 }
1360
1361 /* unset the suspend bit here */
1362 smb1351_usb_suspend(chip, CURRENT, false);
1363
1364 return rc;
1365}
1366
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05301367static char *smb1351_usb_supplicants[] = {
1368 "bms",
1369};
1370
1371static enum power_supply_property smb1351_usb_properties[] = {
1372 POWER_SUPPLY_PROP_PRESENT,
1373 POWER_SUPPLY_PROP_ONLINE,
1374 POWER_SUPPLY_PROP_CURRENT_MAX,
1375 POWER_SUPPLY_PROP_TYPE,
1376};
1377
1378static int smb1351_usb_get_property(struct power_supply *psy,
1379 enum power_supply_property psp,
1380 union power_supply_propval *val)
1381{
1382 struct smb1351_charger *chip = power_supply_get_drvdata(psy);
1383
1384 switch (psp) {
1385 case POWER_SUPPLY_PROP_CURRENT_MAX:
1386 val->intval = chip->usb_psy_ma * 1000;
1387 break;
1388 case POWER_SUPPLY_PROP_PRESENT:
1389 val->intval = chip->chg_present;
1390 break;
1391 case POWER_SUPPLY_PROP_ONLINE:
1392 val->intval = chip->chg_present && !chip->usb_suspended_status;
1393 break;
1394 case POWER_SUPPLY_PROP_TYPE:
1395 val->intval = chip->charger_type;
1396 break;
1397 default:
1398 return -EINVAL;
1399 }
1400 return 0;
1401}
1402
1403static int smb1351_usb_set_property(struct power_supply *psy,
1404 enum power_supply_property psp,
1405 const union power_supply_propval *val)
1406{
1407 struct smb1351_charger *chip = power_supply_get_drvdata(psy);
1408
1409 switch (psp) {
1410 case POWER_SUPPLY_PROP_CURRENT_MAX:
1411 chip->usb_psy_ma = val->intval / 1000;
1412 smb1351_enable_volatile_writes(chip);
1413 smb1351_set_usb_chg_current(chip, chip->usb_psy_ma);
1414 break;
1415 default:
1416 return -EINVAL;
1417 }
1418
1419 power_supply_changed(psy);
1420 return 0;
1421}
1422
1423static int smb1351_usb_is_writeable(struct power_supply *psy,
1424 enum power_supply_property psp)
1425{
1426 switch (psp) {
1427 case POWER_SUPPLY_PROP_CURRENT_MAX:
1428 return 1;
1429 default:
1430 break;
1431 }
1432
1433 return 0;
1434}
1435
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001436static int smb1351_batt_property_is_writeable(struct power_supply *psy,
1437 enum power_supply_property psp)
1438{
1439 switch (psp) {
1440 case POWER_SUPPLY_PROP_CHARGING_ENABLED:
1441 case POWER_SUPPLY_PROP_BATTERY_CHARGING_ENABLED:
1442 case POWER_SUPPLY_PROP_CAPACITY:
1443 return 1;
1444 default:
1445 break;
1446 }
1447 return 0;
1448}
1449
1450static int smb1351_battery_set_property(struct power_supply *psy,
1451 enum power_supply_property prop,
1452 const union power_supply_propval *val)
1453{
1454 int rc;
1455 struct smb1351_charger *chip = power_supply_get_drvdata(psy);
1456
1457 switch (prop) {
1458 case POWER_SUPPLY_PROP_STATUS:
1459 if (!chip->bms_controlled_charging)
1460 return -EINVAL;
1461 switch (val->intval) {
1462 case POWER_SUPPLY_STATUS_FULL:
1463 rc = smb1351_battchg_disable(chip, SOC, true);
1464 if (rc) {
1465 pr_err("Couldn't disable charging rc = %d\n",
1466 rc);
1467 } else {
1468 chip->batt_full = true;
1469 pr_debug("status = FULL, batt_full = %d\n",
1470 chip->batt_full);
1471 }
1472 break;
1473 case POWER_SUPPLY_STATUS_DISCHARGING:
1474 chip->batt_full = false;
1475 power_supply_changed(chip->batt_psy);
1476 pr_debug("status = DISCHARGING, batt_full = %d\n",
1477 chip->batt_full);
1478 break;
1479 case POWER_SUPPLY_STATUS_CHARGING:
1480 rc = smb1351_battchg_disable(chip, SOC, false);
1481 if (rc) {
1482 pr_err("Couldn't enable charging rc = %d\n",
1483 rc);
1484 } else {
1485 chip->batt_full = false;
1486 pr_debug("status = CHARGING, batt_full = %d\n",
1487 chip->batt_full);
1488 }
1489 break;
1490 default:
1491 return -EINVAL;
1492 }
1493 break;
1494 case POWER_SUPPLY_PROP_CHARGING_ENABLED:
1495 smb1351_usb_suspend(chip, USER, !val->intval);
1496 break;
1497 case POWER_SUPPLY_PROP_BATTERY_CHARGING_ENABLED:
1498 smb1351_battchg_disable(chip, USER, !val->intval);
1499 break;
1500 case POWER_SUPPLY_PROP_CAPACITY:
1501 chip->fake_battery_soc = val->intval;
1502 power_supply_changed(chip->batt_psy);
1503 break;
1504 default:
1505 return -EINVAL;
1506 }
1507
1508 return 0;
1509}
1510
1511static int smb1351_battery_get_property(struct power_supply *psy,
1512 enum power_supply_property prop,
1513 union power_supply_propval *val)
1514{
1515 struct smb1351_charger *chip = power_supply_get_drvdata(psy);
1516
1517 switch (prop) {
1518 case POWER_SUPPLY_PROP_STATUS:
1519 val->intval = smb1351_get_prop_batt_status(chip);
1520 break;
1521 case POWER_SUPPLY_PROP_PRESENT:
1522 val->intval = smb1351_get_prop_batt_present(chip);
1523 break;
1524 case POWER_SUPPLY_PROP_CAPACITY:
1525 val->intval = smb1351_get_prop_batt_capacity(chip);
1526 break;
1527 case POWER_SUPPLY_PROP_CHARGING_ENABLED:
1528 val->intval = !chip->usb_suspended_status;
1529 break;
1530 case POWER_SUPPLY_PROP_BATTERY_CHARGING_ENABLED:
1531 val->intval = !chip->battchg_disabled_status;
1532 break;
1533 case POWER_SUPPLY_PROP_CHARGE_TYPE:
1534 val->intval = smb1351_get_prop_charge_type(chip);
1535 break;
1536 case POWER_SUPPLY_PROP_HEALTH:
1537 val->intval = smb1351_get_prop_batt_health(chip);
1538 break;
1539 case POWER_SUPPLY_PROP_TEMP:
1540 val->intval = smb1351_get_prop_batt_temp(chip);
1541 break;
1542 case POWER_SUPPLY_PROP_TECHNOLOGY:
1543 val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
1544 break;
1545 case POWER_SUPPLY_PROP_MODEL_NAME:
1546 val->strval = "smb1351";
1547 break;
1548 default:
1549 return -EINVAL;
1550 }
1551 return 0;
1552}
1553
1554static enum power_supply_property smb1351_parallel_properties[] = {
1555 POWER_SUPPLY_PROP_CHARGING_ENABLED,
1556 POWER_SUPPLY_PROP_STATUS,
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001557 POWER_SUPPLY_PROP_CURRENT_MAX,
1558 POWER_SUPPLY_PROP_VOLTAGE_MAX,
1559 POWER_SUPPLY_PROP_INPUT_CURRENT_LIMITED,
1560 POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301561 POWER_SUPPLY_PROP_CHARGE_TYPE,
Abhijeet Dharmapurikara8bd6f02017-01-30 15:43:04 -08001562 POWER_SUPPLY_PROP_PARALLEL_MODE,
Ashay Jaiswald02fcab2017-05-15 16:33:03 +05301563 POWER_SUPPLY_PROP_INPUT_SUSPEND,
Ashay Jaiswal33de94a2017-11-02 10:06:52 +05301564 POWER_SUPPLY_PROP_PARALLEL_BATFET_MODE,
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001565};
1566
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301567static int smb1351_parallel_set_chg_suspend(struct smb1351_charger *chip,
1568 int suspend)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001569{
1570 int rc;
1571 u8 reg, mask = 0;
1572
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301573 if (chip->parallel_charger_suspended == suspend) {
1574 pr_debug("Skip same state request suspended = %d suspend=%d\n",
1575 chip->parallel_charger_suspended, !suspend);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001576 return 0;
1577 }
1578
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301579 if (!suspend) {
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001580 rc = smb_chip_get_version(chip);
1581 if (rc) {
1582 pr_err("Couldn't get version rc = %d\n", rc);
1583 return rc;
1584 }
1585
1586 rc = smb1351_enable_volatile_writes(chip);
1587 if (rc) {
1588 pr_err("Couldn't configure for volatile rc = %d\n", rc);
1589 return rc;
1590 }
1591
1592 /* set the float voltage */
1593 if (chip->vfloat_mv != -EINVAL) {
1594 rc = smb1351_float_voltage_set(chip, chip->vfloat_mv);
1595 if (rc) {
1596 pr_err("Couldn't set float voltage rc = %d\n",
1597 rc);
1598 return rc;
1599 }
1600 }
1601
1602 /* set recharge-threshold and enable auto recharge */
1603 if (chip->recharge_mv != -EINVAL) {
1604 reg = AUTO_RECHG_ENABLE;
1605 if (chip->recharge_mv > 50)
1606 reg |= AUTO_RECHG_TH_100MV;
1607 else
1608 reg |= AUTO_RECHG_TH_50MV;
1609
1610 rc = smb1351_masked_write(chip, CHG_CTRL_REG,
1611 AUTO_RECHG_BIT |
1612 AUTO_RECHG_TH_BIT, reg);
1613 if (rc) {
1614 pr_err("Couldn't set rechg-cfg rc = %d\n", rc);
1615 return rc;
1616 }
1617 }
1618
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301619 /* control USB suspend via command bits */
1620 rc = smb1351_masked_write(chip, VARIOUS_FUNC_REG,
1621 APSD_EN_BIT | SUSPEND_MODE_CTRL_BIT,
1622 SUSPEND_MODE_CTRL_BY_I2C);
1623 if (rc) {
1624 pr_err("Couldn't set USB suspend rc=%d\n", rc);
1625 return rc;
1626 }
1627
1628 /*
1629 * When present is being set force USB suspend, start charging
1630 * only when POWER_SUPPLY_PROP_CURRENT_MAX is set.
1631 */
1632 rc = smb1351_usb_suspend(chip, CURRENT, true);
1633 if (rc) {
1634 pr_err("failed to suspend rc=%d\n", rc);
1635 return rc;
1636 }
1637 chip->usb_psy_ma = SUSPEND_CURRENT_MA;
1638
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001639 /* set chg en by pin active low */
1640 reg = chip->parallel_pin_polarity_setting | USBCS_CTRL_BY_I2C;
1641 rc = smb1351_masked_write(chip, CHG_PIN_EN_CTRL_REG,
1642 EN_PIN_CTRL_MASK | USBCS_CTRL_BIT, reg);
1643 if (rc) {
1644 pr_err("Couldn't set en pin rc=%d\n", rc);
1645 return rc;
1646 }
1647
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001648 /*
1649 * setup USB 2.0/3.0 detection and USB 500/100
1650 * command polarity
1651 */
1652 reg = USB_2_3_MODE_SEL_BY_I2C | USB_CMD_POLARITY_500_1_100_0;
1653 mask = USB_2_3_MODE_SEL_BIT | USB_5_1_CMD_POLARITY_BIT;
1654 rc = smb1351_masked_write(chip,
1655 CHG_OTH_CURRENT_CTRL_REG, mask, reg);
1656 if (rc) {
1657 pr_err("Couldn't set CHG_OTH_CURRENT_CTRL_REG rc=%d\n",
1658 rc);
1659 return rc;
1660 }
1661
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001662 rc = smb1351_fastchg_current_set(chip,
1663 chip->target_fastchg_current_max_ma);
1664 if (rc) {
1665 pr_err("Couldn't set fastchg current rc=%d\n", rc);
1666 return rc;
1667 }
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301668 chip->parallel_charger_suspended = false;
1669 } else {
1670 rc = smb1351_usb_suspend(chip, CURRENT, true);
1671 if (rc)
1672 pr_debug("failed to suspend rc=%d\n", rc);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001673
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301674 chip->usb_psy_ma = SUSPEND_CURRENT_MA;
1675 chip->parallel_charger_suspended = true;
1676 }
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001677
1678 return 0;
1679}
1680
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001681static bool smb1351_is_input_current_limited(struct smb1351_charger *chip)
1682{
1683 int rc;
1684 u8 reg;
1685
1686 rc = smb1351_read_reg(chip, IRQ_H_REG, &reg);
1687 if (rc) {
1688 pr_err("Failed to read IRQ_H_REG for ICL status: %d\n", rc);
1689 return false;
1690 }
1691
1692 return !!(reg & IRQ_IC_LIMIT_STATUS_BIT);
1693}
1694
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301695static bool smb1351_is_usb_present(struct smb1351_charger *chip)
1696{
1697 int rc;
1698 union power_supply_propval val = {0, };
1699
1700 if (!chip->usb_psy)
1701 chip->usb_psy = power_supply_get_by_name("usb");
1702 if (!chip->usb_psy) {
1703 pr_err("USB psy not found\n");
1704 return false;
1705 }
1706
1707 rc = power_supply_get_property(chip->usb_psy,
1708 POWER_SUPPLY_PROP_ONLINE, &val);
1709 if (rc < 0) {
1710 pr_err("Failed to get present property rc=%d\n", rc);
1711 return false;
1712 }
1713
1714 if (val.intval)
1715 return true;
1716
1717 return false;
1718}
1719
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001720static int smb1351_parallel_set_property(struct power_supply *psy,
1721 enum power_supply_property prop,
1722 const union power_supply_propval *val)
1723{
1724 int rc = 0, index;
1725 struct smb1351_charger *chip = power_supply_get_drvdata(psy);
1726
1727 switch (prop) {
1728 case POWER_SUPPLY_PROP_CHARGING_ENABLED:
1729 /*
1730 *CHG EN is controlled by pin in the parallel charging.
1731 *Use suspend if disable charging by command.
1732 */
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301733 if (!chip->parallel_charger_suspended)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001734 rc = smb1351_usb_suspend(chip, USER, !val->intval);
1735 break;
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301736 case POWER_SUPPLY_PROP_INPUT_SUSPEND:
1737 rc = smb1351_parallel_set_chg_suspend(chip, val->intval);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001738 break;
1739 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301740 chip->target_fastchg_current_max_ma =
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001741 val->intval / 1000;
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301742 if (!chip->parallel_charger_suspended)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001743 rc = smb1351_fastchg_current_set(chip,
1744 chip->target_fastchg_current_max_ma);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001745 break;
1746 case POWER_SUPPLY_PROP_CURRENT_MAX:
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301747 index = smb1351_get_closest_usb_setpoint(val->intval / 1000);
1748 chip->usb_psy_ma = usb_chg_current[index];
1749 if (!chip->parallel_charger_suspended)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001750 rc = smb1351_set_usb_chg_current(chip,
1751 chip->usb_psy_ma);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001752 break;
1753 case POWER_SUPPLY_PROP_VOLTAGE_MAX:
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301754 chip->vfloat_mv = val->intval / 1000;
1755 if (!chip->parallel_charger_suspended)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001756 rc = smb1351_float_voltage_set(chip, val->intval);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001757 break;
1758 default:
1759 return -EINVAL;
1760 }
1761 return rc;
1762}
1763
1764static int smb1351_parallel_is_writeable(struct power_supply *psy,
1765 enum power_supply_property prop)
1766{
1767 switch (prop) {
1768 case POWER_SUPPLY_PROP_CHARGING_ENABLED:
1769 return 1;
1770 default:
1771 return 0;
1772 }
1773}
1774
1775static int smb1351_parallel_get_property(struct power_supply *psy,
1776 enum power_supply_property prop,
1777 union power_supply_propval *val)
1778{
1779 struct smb1351_charger *chip = power_supply_get_drvdata(psy);
1780
1781 switch (prop) {
1782 case POWER_SUPPLY_PROP_CHARGING_ENABLED:
Ashay Jaiswal2dcc76c2017-04-04 16:57:57 +05301783 val->intval = !chip->parallel_charger_suspended;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001784 break;
1785 case POWER_SUPPLY_PROP_CURRENT_MAX:
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301786 if (!chip->parallel_charger_suspended)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001787 val->intval = chip->usb_psy_ma * 1000;
1788 else
1789 val->intval = 0;
1790 break;
1791 case POWER_SUPPLY_PROP_VOLTAGE_MAX:
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301792 if (!chip->parallel_charger_suspended)
1793 val->intval = chip->vfloat_mv;
1794 else
1795 val->intval = 0;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001796 break;
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301797 case POWER_SUPPLY_PROP_CHARGE_TYPE:
1798 val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE;
1799 /* Check if SMB1351 is present */
1800 if (smb1351_is_usb_present(chip)) {
1801 val->intval = smb1351_get_prop_charge_type(chip);
1802 if (val->intval == POWER_SUPPLY_CHARGE_TYPE_UNKNOWN) {
1803 pr_debug("Failed to charge type, charger may be absent\n");
1804 return -ENODEV;
1805 }
1806 }
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001807 break;
1808 case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301809 if (!chip->parallel_charger_suspended)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001810 val->intval = chip->fastchg_current_max_ma * 1000;
1811 else
1812 val->intval = 0;
1813 break;
1814 case POWER_SUPPLY_PROP_STATUS:
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301815 if (!chip->parallel_charger_suspended)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001816 val->intval = smb1351_get_prop_batt_status(chip);
1817 else
1818 val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
1819 break;
1820 case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMITED:
Ashay Jaiswal0513d342017-02-07 00:12:08 +05301821 if (!chip->parallel_charger_suspended)
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001822 val->intval =
1823 smb1351_is_input_current_limited(chip) ? 1 : 0;
1824 else
1825 val->intval = 0;
1826 break;
Abhijeet Dharmapurikara8bd6f02017-01-30 15:43:04 -08001827 case POWER_SUPPLY_PROP_PARALLEL_MODE:
Ashay Jaiswalec6af842017-02-17 16:00:05 +05301828 val->intval = chip->parallel_mode;
Abhijeet Dharmapurikara8bd6f02017-01-30 15:43:04 -08001829 break;
Ashay Jaiswald02fcab2017-05-15 16:33:03 +05301830 case POWER_SUPPLY_PROP_INPUT_SUSPEND:
1831 val->intval = chip->parallel_charger_suspended;
1832 break;
Ashay Jaiswal33de94a2017-11-02 10:06:52 +05301833 case POWER_SUPPLY_PROP_PARALLEL_BATFET_MODE:
1834 val->intval = chip->pl_batfet_mode;
1835 break;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08001836 default:
1837 return -EINVAL;
1838 }
1839 return 0;
1840}
1841
1842static void smb1351_chg_set_appropriate_battery_current(
1843 struct smb1351_charger *chip)
1844{
1845 int rc;
1846 unsigned int current_max = chip->target_fastchg_current_max_ma;
1847
1848 if (chip->batt_cool)
1849 current_max = min(current_max, chip->batt_cool_ma);
1850 if (chip->batt_warm)
1851 current_max = min(current_max, chip->batt_warm_ma);
1852
1853 pr_debug("setting %dmA", current_max);
1854
1855 rc = smb1351_fastchg_current_set(chip, current_max);
1856 if (rc)
1857 pr_err("Couldn't set charging current rc = %d\n", rc);
1858}
1859
1860static void smb1351_chg_set_appropriate_vddmax(struct smb1351_charger *chip)
1861{
1862 int rc;
1863 unsigned int vddmax = chip->vfloat_mv;
1864
1865 if (chip->batt_cool)
1866 vddmax = min(vddmax, chip->batt_cool_mv);
1867 if (chip->batt_warm)
1868 vddmax = min(vddmax, chip->batt_warm_mv);
1869
1870 pr_debug("setting %dmV\n", vddmax);
1871
1872 rc = smb1351_float_voltage_set(chip, vddmax);
1873 if (rc)
1874 pr_err("Couldn't set float voltage rc = %d\n", rc);
1875}
1876
1877static void smb1351_chg_ctrl_in_jeita(struct smb1351_charger *chip)
1878{
1879 union power_supply_propval ret = {0, };
1880 int rc;
1881
1882 /* enable the iterm to prevent the reverse boost */
1883 if (chip->iterm_disabled) {
1884 if (chip->batt_cool || chip->batt_warm) {
1885 rc = smb1351_iterm_set(chip, 100);
1886 pr_debug("set the iterm due to JEITA\n");
1887 } else {
1888 rc = smb1351_masked_write(chip, CHG_CTRL_REG,
1889 ITERM_EN_BIT, ITERM_DISABLE);
1890 pr_debug("disable the iterm when exits warm/cool\n");
1891 }
1892 if (rc) {
1893 pr_err("Couldn't set iterm rc = %d\n", rc);
1894 return;
1895 }
1896 }
1897 /*
1898 * When JEITA back to normal, the charging maybe disabled due to
1899 * the current termination. So re-enable the charging if the soc
1900 * is less than 100 in the normal mode. A 200ms delay is required
1901 * before the disabe and enable operation.
1902 */
1903 if (chip->bms_psy) {
1904 rc = power_supply_get_property(chip->bms_psy,
1905 POWER_SUPPLY_PROP_CAPACITY, &ret);
1906 if (rc) {
1907 pr_err("Couldn't read the bms capacity rc = %d\n",
1908 rc);
1909 return;
1910 }
1911 if (!chip->batt_cool && !chip->batt_warm
1912 && !chip->batt_cold && !chip->batt_hot
1913 && ret.intval < 100) {
1914 rc = smb1351_battchg_disable(chip, THERMAL, true);
1915 if (rc) {
1916 pr_err("Couldn't disable charging rc = %d\n",
1917 rc);
1918 return;
1919 }
1920 /* delay for resetting the charging */
1921 msleep(200);
1922 rc = smb1351_battchg_disable(chip, THERMAL, false);
1923 if (rc) {
1924 pr_err("Couldn't enable charging rc = %d\n",
1925 rc);
1926 return;
1927 }
1928
1929 chip->batt_full = false;
1930 pr_debug("re-enable charging, batt_full = %d\n",
1931 chip->batt_full);
1932 power_supply_changed(chip->batt_psy);
1933 }
1934 }
1935}
1936
1937#define HYSTERESIS_DECIDEGC 20
1938static void smb1351_chg_adc_notification(enum qpnp_tm_state state, void *ctx)
1939{
1940 struct smb1351_charger *chip = ctx;
1941 struct battery_status *cur = NULL;
1942 int temp;
1943
1944 if (state >= ADC_TM_STATE_NUM) {
1945 pr_err("invalid state parameter %d\n", state);
1946 return;
1947 }
1948
1949 temp = smb1351_get_prop_batt_temp(chip);
1950
1951 pr_debug("temp = %d state = %s\n", temp,
1952 state == ADC_TM_WARM_STATE ? "hot" : "cold");
1953
1954 /* reset the adc status request */
1955 chip->adc_param.state_request = ADC_TM_WARM_COOL_THR_ENABLE;
1956
1957 /* temp from low to high */
1958 if (state == ADC_TM_WARM_STATE) {
1959 /* WARM -> HOT */
1960 if (temp >= chip->batt_hot_decidegc) {
1961 cur = &batt_s[BATT_HOT];
1962 chip->adc_param.low_temp =
1963 chip->batt_hot_decidegc - HYSTERESIS_DECIDEGC;
1964 chip->adc_param.state_request = ADC_TM_COOL_THR_ENABLE;
1965 /* NORMAL -> WARM */
1966 } else if (temp >= chip->batt_warm_decidegc &&
1967 chip->jeita_supported) {
1968 cur = &batt_s[BATT_WARM];
1969 chip->adc_param.low_temp =
1970 chip->batt_warm_decidegc - HYSTERESIS_DECIDEGC;
1971 chip->adc_param.high_temp = chip->batt_hot_decidegc;
1972 /* COOL -> NORMAL */
1973 } else if (temp >= chip->batt_cool_decidegc &&
1974 chip->jeita_supported) {
1975 cur = &batt_s[BATT_NORMAL];
1976 chip->adc_param.low_temp =
1977 chip->batt_cool_decidegc - HYSTERESIS_DECIDEGC;
1978 chip->adc_param.high_temp = chip->batt_warm_decidegc;
1979 /* COLD -> COOL */
1980 } else if (temp >= chip->batt_cold_decidegc) {
1981 cur = &batt_s[BATT_COOL];
1982 chip->adc_param.low_temp =
1983 chip->batt_cold_decidegc - HYSTERESIS_DECIDEGC;
1984 if (chip->jeita_supported)
1985 chip->adc_param.high_temp =
1986 chip->batt_cool_decidegc;
1987 else
1988 chip->adc_param.high_temp =
1989 chip->batt_hot_decidegc;
1990 /* MISSING -> COLD */
1991 } else if (temp >= chip->batt_missing_decidegc) {
1992 cur = &batt_s[BATT_COLD];
1993 chip->adc_param.high_temp = chip->batt_cold_decidegc;
1994 chip->adc_param.low_temp = chip->batt_missing_decidegc
1995 - HYSTERESIS_DECIDEGC;
1996 }
1997 /* temp from high to low */
1998 } else {
1999 /* COLD -> MISSING */
2000 if (temp <= chip->batt_missing_decidegc) {
2001 cur = &batt_s[BATT_MISSING];
2002 chip->adc_param.high_temp = chip->batt_missing_decidegc
2003 + HYSTERESIS_DECIDEGC;
2004 chip->adc_param.state_request = ADC_TM_WARM_THR_ENABLE;
2005 /* COOL -> COLD */
2006 } else if (temp <= chip->batt_cold_decidegc) {
2007 cur = &batt_s[BATT_COLD];
2008 chip->adc_param.high_temp =
2009 chip->batt_cold_decidegc + HYSTERESIS_DECIDEGC;
2010 /* add low_temp to enable batt present check */
2011 chip->adc_param.low_temp = chip->batt_missing_decidegc;
2012 /* NORMAL -> COOL */
2013 } else if (temp <= chip->batt_cool_decidegc &&
2014 chip->jeita_supported) {
2015 cur = &batt_s[BATT_COOL];
2016 chip->adc_param.high_temp =
2017 chip->batt_cool_decidegc + HYSTERESIS_DECIDEGC;
2018 chip->adc_param.low_temp = chip->batt_cold_decidegc;
2019 /* WARM -> NORMAL */
2020 } else if (temp <= chip->batt_warm_decidegc &&
2021 chip->jeita_supported) {
2022 cur = &batt_s[BATT_NORMAL];
2023 chip->adc_param.high_temp =
2024 chip->batt_warm_decidegc + HYSTERESIS_DECIDEGC;
2025 chip->adc_param.low_temp = chip->batt_cool_decidegc;
2026 /* HOT -> WARM */
2027 } else if (temp <= chip->batt_hot_decidegc) {
2028 cur = &batt_s[BATT_WARM];
2029 if (chip->jeita_supported)
2030 chip->adc_param.low_temp =
2031 chip->batt_warm_decidegc;
2032 else
2033 chip->adc_param.low_temp =
2034 chip->batt_cold_decidegc;
2035 chip->adc_param.high_temp =
2036 chip->batt_hot_decidegc + HYSTERESIS_DECIDEGC;
2037 }
2038 }
2039
Abhijeet Dharmapurikar87e0c36b2016-09-13 10:36:48 -07002040 if (!cur) {
2041 pr_debug("Couldn't choose batt state, adc state=%d and temp=%d\n",
2042 state, temp);
2043 return;
2044 }
2045
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002046 if (cur->batt_present)
2047 chip->battery_missing = false;
2048 else
2049 chip->battery_missing = true;
2050
2051 if (cur->batt_hot ^ chip->batt_hot ||
2052 cur->batt_cold ^ chip->batt_cold) {
2053 chip->batt_hot = cur->batt_hot;
2054 chip->batt_cold = cur->batt_cold;
2055 /* stop charging explicitly since we use PMIC thermal pin*/
2056 if (cur->batt_hot || cur->batt_cold ||
2057 chip->battery_missing)
2058 smb1351_battchg_disable(chip, THERMAL, 1);
2059 else
2060 smb1351_battchg_disable(chip, THERMAL, 0);
2061 }
2062
2063 if ((chip->batt_warm ^ cur->batt_warm ||
2064 chip->batt_cool ^ cur->batt_cool)
2065 && chip->jeita_supported) {
2066 chip->batt_warm = cur->batt_warm;
2067 chip->batt_cool = cur->batt_cool;
2068 smb1351_chg_set_appropriate_battery_current(chip);
2069 smb1351_chg_set_appropriate_vddmax(chip);
2070 smb1351_chg_ctrl_in_jeita(chip);
2071 }
2072
2073 pr_debug("hot %d, cold %d, warm %d, cool %d, soft jeita supported %d, missing %d, low = %d deciDegC, high = %d deciDegC\n",
2074 chip->batt_hot, chip->batt_cold, chip->batt_warm,
2075 chip->batt_cool, chip->jeita_supported,
2076 chip->battery_missing, chip->adc_param.low_temp,
2077 chip->adc_param.high_temp);
2078 if (qpnp_adc_tm_channel_measure(chip->adc_tm_dev, &chip->adc_param))
2079 pr_err("request ADC error\n");
2080}
2081
2082static int rerun_apsd(struct smb1351_charger *chip)
2083{
2084 int rc;
2085
2086 pr_debug("Reruning APSD\nDisabling APSD\n");
2087
2088 rc = smb1351_masked_write(chip, CMD_HVDCP_REG, CMD_APSD_RE_RUN_BIT,
2089 CMD_APSD_RE_RUN_BIT);
2090 if (rc)
2091 pr_err("Couldn't re-run APSD algo\n");
2092
2093 return 0;
2094}
2095
2096static void smb1351_hvdcp_det_work(struct work_struct *work)
2097{
2098 int rc;
2099 u8 reg;
2100 union power_supply_propval pval = {0, };
2101 struct smb1351_charger *chip = container_of(work,
2102 struct smb1351_charger,
2103 hvdcp_det_work.work);
2104
2105 rc = smb1351_read_reg(chip, STATUS_7_REG, &reg);
2106 if (rc) {
2107 pr_err("Couldn't read STATUS_7_REG rc == %d\n", rc);
2108 goto end;
2109 }
2110 pr_debug("STATUS_7_REG = 0x%02X\n", reg);
2111
2112 if (reg) {
2113 pr_debug("HVDCP detected; notifying USB PSY\n");
2114 pval.intval = POWER_SUPPLY_TYPE_USB_HVDCP;
2115 power_supply_set_property(chip->usb_psy,
2116 POWER_SUPPLY_PROP_TYPE, &pval);
2117 }
2118end:
2119 pm_relax(chip->dev);
2120}
2121
2122#define HVDCP_NOTIFY_MS 2500
2123static int smb1351_apsd_complete_handler(struct smb1351_charger *chip,
2124 u8 status)
2125{
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302126 int rc, usb_psy_ma = 0;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002127 u8 reg = 0;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002128 enum power_supply_type type = POWER_SUPPLY_TYPE_UNKNOWN;
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302129 union extcon_property_value val;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002130
2131 /*
2132 * If apsd is disabled, charger detection is done by
2133 * USB phy driver.
2134 */
2135 if (chip->disable_apsd || chip->usbin_ov) {
2136 pr_debug("APSD %s, status = %d\n",
2137 chip->disable_apsd ? "disabled" : "enabled", !!status);
2138 pr_debug("USBIN ov, status = %d\n", chip->usbin_ov);
2139 return 0;
2140 }
2141
2142 rc = smb1351_read_reg(chip, STATUS_5_REG, &reg);
2143 if (rc) {
2144 pr_err("Couldn't read STATUS_5 rc = %d\n", rc);
2145 return rc;
2146 }
2147
2148 pr_debug("STATUS_5_REG(0x3B)=%x\n", reg);
2149
2150 switch (reg) {
2151 case STATUS_PORT_ACA_DOCK:
2152 case STATUS_PORT_ACA_C:
2153 case STATUS_PORT_ACA_B:
2154 case STATUS_PORT_ACA_A:
2155 type = POWER_SUPPLY_TYPE_USB_ACA;
2156 break;
2157 case STATUS_PORT_CDP:
2158 type = POWER_SUPPLY_TYPE_USB_CDP;
2159 break;
2160 case STATUS_PORT_DCP:
2161 type = POWER_SUPPLY_TYPE_USB_DCP;
2162 break;
2163 case STATUS_PORT_SDP:
2164 type = POWER_SUPPLY_TYPE_USB;
2165 break;
2166 case STATUS_PORT_OTHER:
2167 type = POWER_SUPPLY_TYPE_USB_DCP;
2168 break;
2169 default:
2170 type = POWER_SUPPLY_TYPE_USB;
2171 break;
2172 }
2173
2174 if (status) {
2175 chip->chg_present = true;
2176 pr_debug("APSD complete. USB type detected=%d chg_present=%d\n",
2177 type, chip->chg_present);
2178 if (!chip->battery_missing && !chip->apsd_rerun) {
2179 if (type == POWER_SUPPLY_TYPE_USB) {
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302180 smb1351_request_dpdm(chip, false);
2181 smb1351_request_dpdm(chip, true);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002182 chip->apsd_rerun = true;
2183 rerun_apsd(chip);
2184 return 0;
2185 }
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002186 }
2187 /*
2188 * If defined force hvdcp 2p0 property,
2189 * we force to hvdcp 2p0 in the APSD handler.
2190 */
2191 if (chip->force_hvdcp_2p0) {
2192 pr_debug("Force set to HVDCP 2.0 mode\n");
2193 smb1351_masked_write(chip, VARIOUS_FUNC_3_REG,
2194 QC_2P1_AUTH_ALGO_BIT, 0);
2195 smb1351_masked_write(chip, CMD_HVDCP_REG,
2196 CMD_FORCE_HVDCP_2P0_BIT,
2197 CMD_FORCE_HVDCP_2P0_BIT);
2198 type = POWER_SUPPLY_TYPE_USB_HVDCP;
2199 } else if (type == POWER_SUPPLY_TYPE_USB_DCP) {
2200 pr_debug("schedule hvdcp detection worker\n");
2201 pm_stay_awake(chip->dev);
2202 schedule_delayed_work(&chip->hvdcp_det_work,
2203 msecs_to_jiffies(HVDCP_NOTIFY_MS));
2204 }
2205
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302206 chip->charger_type = type;
2207 if (type == POWER_SUPPLY_TYPE_USB
2208 || type == POWER_SUPPLY_TYPE_USB_CDP) {
2209 val.intval = true;
2210 extcon_set_property(chip->extcon, EXTCON_USB,
2211 EXTCON_PROP_USB_SS, val);
2212 extcon_set_cable_state_(chip->extcon, EXTCON_USB, true);
2213 }
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002214 chip->apsd_rerun = false;
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302215
2216 /* set the charge current as required */
2217 if (type == POWER_SUPPLY_TYPE_USB)
2218 usb_psy_ma = USB2_MIN_CURRENT_MA;
2219 else /* DCP */
2220 usb_psy_ma = DCP_MAX_CURRENT_MA;
2221
2222 chip->usb_psy_ma = usb_psy_ma;
2223 smb1351_enable_volatile_writes(chip);
2224 rc = smb1351_set_usb_chg_current(chip, chip->usb_psy_ma);
2225 if (rc < 0)
2226 pr_err("Failed to set USB current rc=%d\n", rc);
2227
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002228 } else if (!chip->apsd_rerun) {
2229 /* Handle Charger removal */
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302230 chip->charger_type = POWER_SUPPLY_TYPE_UNKNOWN;
2231 extcon_set_cable_state_(chip->extcon, EXTCON_USB, false);
2232 smb1351_request_dpdm(chip, false);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002233 }
2234
2235 return 0;
2236}
2237
2238/*
2239 * As source detect interrupt is not triggered on the falling edge,
2240 * we need to schedule a work for checking source detect status after
2241 * charger UV interrupt fired.
2242 */
2243#define FIRST_CHECK_DELAY 100
2244#define SECOND_CHECK_DELAY 1000
2245static void smb1351_chg_remove_work(struct work_struct *work)
2246{
2247 int rc;
2248 u8 reg;
2249 struct smb1351_charger *chip = container_of(work,
2250 struct smb1351_charger, chg_remove_work.work);
2251
2252 rc = smb1351_read_reg(chip, IRQ_G_REG, &reg);
2253 if (rc) {
2254 pr_err("Couldn't read IRQ_G_REG rc = %d\n", rc);
2255 goto end;
2256 }
2257
2258 if (!(reg & IRQ_SOURCE_DET_BIT)) {
2259 pr_debug("chg removed\n");
2260 smb1351_apsd_complete_handler(chip, 0);
2261 } else if (!chip->chg_remove_work_scheduled) {
2262 chip->chg_remove_work_scheduled = true;
2263 goto reschedule;
2264 } else {
2265 pr_debug("charger is present\n");
2266 }
2267end:
2268 chip->chg_remove_work_scheduled = false;
2269 pm_relax(chip->dev);
2270 return;
2271
2272reschedule:
2273 pr_debug("reschedule after 1s\n");
2274 schedule_delayed_work(&chip->chg_remove_work,
2275 msecs_to_jiffies(SECOND_CHECK_DELAY));
2276}
2277
2278static int smb1351_usbin_uv_handler(struct smb1351_charger *chip, u8 status)
2279{
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302280 smb1351_request_dpdm(chip, !!status);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002281
2282 if (status) {
2283 cancel_delayed_work_sync(&chip->hvdcp_det_work);
2284 pm_relax(chip->dev);
2285 pr_debug("schedule charger remove worker\n");
2286 schedule_delayed_work(&chip->chg_remove_work,
2287 msecs_to_jiffies(FIRST_CHECK_DELAY));
2288 pm_stay_awake(chip->dev);
2289 }
2290
2291 pr_debug("chip->chg_present = %d\n", chip->chg_present);
2292
2293 return 0;
2294}
2295
2296static int smb1351_usbin_ov_handler(struct smb1351_charger *chip, u8 status)
2297{
2298 int rc;
Kiran Gunda642188d2017-12-18 15:35:12 +05302299 u8 reg = 0;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002300
2301 rc = smb1351_read_reg(chip, IRQ_E_REG, &reg);
2302 if (rc)
2303 pr_err("Couldn't read IRQ_E rc = %d\n", rc);
2304
2305 if (status != 0) {
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002306 chip->usbin_ov = true;
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302307 chip->charger_type = POWER_SUPPLY_TYPE_UNKNOWN;
2308 if (chip->chg_present)
2309 extcon_set_cable_state_(chip->extcon, EXTCON_USB,
2310 false);
2311 chip->chg_present = false;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002312
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002313 } else {
2314 chip->usbin_ov = false;
2315 if (reg & IRQ_USBIN_UV_BIT)
2316 pr_debug("Charger unplugged from OV\n");
2317 else
2318 smb1351_apsd_complete_handler(chip, 1);
2319 }
2320
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002321 pr_debug("chip->chg_present = %d\n", chip->chg_present);
2322
2323 return 0;
2324}
2325
2326static int smb1351_fast_chg_handler(struct smb1351_charger *chip, u8 status)
2327{
2328 pr_debug("enter\n");
2329 return 0;
2330}
2331
2332static int smb1351_chg_term_handler(struct smb1351_charger *chip, u8 status)
2333{
2334 pr_debug("enter\n");
2335 if (!chip->bms_controlled_charging)
2336 chip->batt_full = !!status;
2337 return 0;
2338}
2339
2340static int smb1351_safety_timeout_handler(struct smb1351_charger *chip,
2341 u8 status)
2342{
2343 pr_debug("safety_timeout triggered\n");
2344 return 0;
2345}
2346
2347static int smb1351_aicl_done_handler(struct smb1351_charger *chip, u8 status)
2348{
2349 pr_debug("aicl_done triggered\n");
2350 return 0;
2351}
2352
2353static int smb1351_hot_hard_handler(struct smb1351_charger *chip, u8 status)
2354{
2355 pr_debug("status = 0x%02x\n", status);
2356 chip->batt_hot = !!status;
2357 return 0;
2358}
2359static int smb1351_cold_hard_handler(struct smb1351_charger *chip, u8 status)
2360{
2361 pr_debug("status = 0x%02x\n", status);
2362 chip->batt_cold = !!status;
2363 return 0;
2364}
2365static int smb1351_hot_soft_handler(struct smb1351_charger *chip, u8 status)
2366{
2367 pr_debug("status = 0x%02x\n", status);
2368 chip->batt_warm = !!status;
2369 return 0;
2370}
2371static int smb1351_cold_soft_handler(struct smb1351_charger *chip, u8 status)
2372{
2373 pr_debug("status = 0x%02x\n", status);
2374 chip->batt_cool = !!status;
2375 return 0;
2376}
2377
2378static int smb1351_battery_missing_handler(struct smb1351_charger *chip,
2379 u8 status)
2380{
2381 if (status)
2382 chip->battery_missing = true;
2383 else
2384 chip->battery_missing = false;
2385
2386 return 0;
2387}
2388
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302389static int smb1351_rid_handler(struct smb1351_charger *chip,
2390 u8 status)
2391{
2392 union extcon_property_value val;
2393
2394 if (!!status) {
2395 val.intval = true;
2396 extcon_set_property(chip->extcon, EXTCON_USB_HOST,
2397 EXTCON_PROP_USB_SS, val);
2398 }
2399 extcon_set_cable_state_(chip->extcon, EXTCON_USB_HOST, !!status);
2400
2401 return 0;
2402}
2403
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002404static struct irq_handler_info handlers[] = {
2405 [0] = {
2406 .stat_reg = IRQ_A_REG,
2407 .val = 0,
2408 .prev_val = 0,
2409 .irq_info = {
2410 { .name = "cold_soft",
2411 .smb_irq = smb1351_cold_soft_handler,
2412 },
2413 { .name = "hot_soft",
2414 .smb_irq = smb1351_hot_soft_handler,
2415 },
2416 { .name = "cold_hard",
2417 .smb_irq = smb1351_cold_hard_handler,
2418 },
2419 { .name = "hot_hard",
2420 .smb_irq = smb1351_hot_hard_handler,
2421 },
2422 },
2423 },
2424 [1] = {
2425 .stat_reg = IRQ_B_REG,
2426 .val = 0,
2427 .prev_val = 0,
2428 .irq_info = {
2429 { .name = "internal_temp_limit",
2430 },
2431 { .name = "vbatt_low",
2432 },
2433 { .name = "battery_missing",
2434 .smb_irq = smb1351_battery_missing_handler,
2435 },
2436 { .name = "batt_therm_removed",
2437 },
2438 },
2439 },
2440 [2] = {
2441 .stat_reg = IRQ_C_REG,
2442 .val = 0,
2443 .prev_val = 0,
2444 .irq_info = {
2445 { .name = "chg_term",
2446 .smb_irq = smb1351_chg_term_handler,
2447 },
2448 { .name = "taper",
2449 },
2450 { .name = "recharge",
2451 },
2452 { .name = "fast_chg",
2453 .smb_irq = smb1351_fast_chg_handler,
2454 },
2455 },
2456 },
2457 [3] = {
2458 .stat_reg = IRQ_D_REG,
2459 .val = 0,
2460 .prev_val = 0,
2461 .irq_info = {
2462 { .name = "prechg_timeout",
2463 },
2464 { .name = "safety_timeout",
2465 .smb_irq = smb1351_safety_timeout_handler,
2466 },
2467 { .name = "chg_error",
2468 },
2469 { .name = "batt_ov",
2470 },
2471 },
2472 },
2473 [4] = {
2474 .stat_reg = IRQ_E_REG,
2475 .val = 0,
2476 .prev_val = 0,
2477 .irq_info = {
2478 { .name = "power_ok",
2479 },
2480 { .name = "afvc",
2481 },
2482 { .name = "usbin_uv",
2483 .smb_irq = smb1351_usbin_uv_handler,
2484 },
2485 { .name = "usbin_ov",
2486 .smb_irq = smb1351_usbin_ov_handler,
2487 },
2488 },
2489 },
2490 [5] = {
2491 .stat_reg = IRQ_F_REG,
2492 .val = 0,
2493 .prev_val = 0,
2494 .irq_info = {
2495 { .name = "otg_oc_retry",
2496 },
2497 { .name = "rid",
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302498 .smb_irq = smb1351_rid_handler,
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002499 },
2500 { .name = "otg_fail",
2501 },
2502 { .name = "otg_oc",
2503 },
2504 },
2505 },
2506 [6] = {
2507 .stat_reg = IRQ_G_REG,
2508 .val = 0,
2509 .prev_val = 0,
2510 .irq_info = {
2511 { .name = "chg_inhibit",
2512 },
2513 { .name = "aicl_fail",
2514 },
2515 { .name = "aicl_done",
2516 .smb_irq = smb1351_aicl_done_handler,
2517 },
2518 { .name = "apsd_complete",
2519 .smb_irq = smb1351_apsd_complete_handler,
2520 },
2521 },
2522 },
2523 [7] = {
2524 .stat_reg = IRQ_H_REG,
2525 .val = 0,
2526 .prev_val = 0,
2527 .irq_info = {
2528 { .name = "wdog_timeout",
2529 },
2530 { .name = "hvdcp_auth_done",
2531 },
2532 },
2533 },
2534};
2535
2536#define IRQ_LATCHED_MASK 0x02
2537#define IRQ_STATUS_MASK 0x01
2538#define BITS_PER_IRQ 2
2539static irqreturn_t smb1351_chg_stat_handler(int irq, void *dev_id)
2540{
2541 struct smb1351_charger *chip = dev_id;
2542 int i, j;
2543 u8 triggered;
2544 u8 changed;
2545 u8 rt_stat, prev_rt_stat;
2546 int rc;
2547 int handler_count = 0;
2548
2549 mutex_lock(&chip->irq_complete);
2550
2551 chip->irq_waiting = true;
2552 if (!chip->resume_completed) {
2553 pr_debug("IRQ triggered before device-resume\n");
2554 disable_irq_nosync(irq);
2555 mutex_unlock(&chip->irq_complete);
2556 return IRQ_HANDLED;
2557 }
2558 chip->irq_waiting = false;
2559
2560 for (i = 0; i < ARRAY_SIZE(handlers); i++) {
2561 rc = smb1351_read_reg(chip, handlers[i].stat_reg,
2562 &handlers[i].val);
2563 if (rc) {
2564 pr_err("Couldn't read %d rc = %d\n",
2565 handlers[i].stat_reg, rc);
2566 continue;
2567 }
2568
2569 for (j = 0; j < ARRAY_SIZE(handlers[i].irq_info); j++) {
2570 triggered = handlers[i].val
2571 & (IRQ_LATCHED_MASK << (j * BITS_PER_IRQ));
2572 rt_stat = handlers[i].val
2573 & (IRQ_STATUS_MASK << (j * BITS_PER_IRQ));
2574 prev_rt_stat = handlers[i].prev_val
2575 & (IRQ_STATUS_MASK << (j * BITS_PER_IRQ));
2576 changed = prev_rt_stat ^ rt_stat;
2577
2578 if (triggered || changed)
2579 rt_stat ? handlers[i].irq_info[j].high++ :
2580 handlers[i].irq_info[j].low++;
2581
2582 if ((triggered || changed)
2583 && handlers[i].irq_info[j].smb_irq != NULL) {
2584 handler_count++;
2585 rc = handlers[i].irq_info[j].smb_irq(chip,
2586 rt_stat);
2587 if (rc)
2588 pr_err("Couldn't handle %d irq for reg 0x%02x rc = %d\n",
2589 j, handlers[i].stat_reg, rc);
2590 }
2591 }
2592 handlers[i].prev_val = handlers[i].val;
2593 }
2594
2595 pr_debug("handler count = %d\n", handler_count);
2596 if (handler_count) {
2597 pr_debug("batt psy changed\n");
2598 power_supply_changed(chip->batt_psy);
2599 }
2600
2601 mutex_unlock(&chip->irq_complete);
2602
2603 return IRQ_HANDLED;
2604}
2605
2606static void smb1351_external_power_changed(struct power_supply *psy)
2607{
2608 struct smb1351_charger *chip = power_supply_get_drvdata(psy);
2609 union power_supply_propval prop = {0,};
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302610 int rc, current_limit = 0;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002611
2612 if (chip->bms_psy_name)
2613 chip->bms_psy =
2614 power_supply_get_by_name((char *)chip->bms_psy_name);
2615
2616 rc = power_supply_get_property(chip->usb_psy,
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002617 POWER_SUPPLY_PROP_CURRENT_MAX, &prop);
2618 if (rc)
2619 pr_err("Couldn't read USB current_max property, rc=%d\n", rc);
2620 else
2621 current_limit = prop.intval / 1000;
2622
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05302623 pr_debug("current_limit = %d\n", current_limit);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002624
Nicholas Troast6e8c0382016-02-12 15:34:57 -08002625
2626 pr_debug("updating batt psy\n");
2627}
2628
2629#define LAST_CNFG_REG 0x16
2630static int show_cnfg_regs(struct seq_file *m, void *data)
2631{
2632 struct smb1351_charger *chip = m->private;
2633 int rc;
2634 u8 reg;
2635 u8 addr;
2636
2637 for (addr = 0; addr <= LAST_CNFG_REG; addr++) {
2638 rc = smb1351_read_reg(chip, addr, &reg);
2639 if (!rc)
2640 seq_printf(m, "0x%02x = 0x%02x\n", addr, reg);
2641 }
2642
2643 return 0;
2644}
2645
2646static int cnfg_debugfs_open(struct inode *inode, struct file *file)
2647{
2648 struct smb1351_charger *chip = inode->i_private;
2649
2650 return single_open(file, show_cnfg_regs, chip);
2651}
2652
2653static const struct file_operations cnfg_debugfs_ops = {
2654 .owner = THIS_MODULE,
2655 .open = cnfg_debugfs_open,
2656 .read = seq_read,
2657 .llseek = seq_lseek,
2658 .release = single_release,
2659};
2660
2661#define FIRST_CMD_REG 0x30
2662#define LAST_CMD_REG 0x34
2663static int show_cmd_regs(struct seq_file *m, void *data)
2664{
2665 struct smb1351_charger *chip = m->private;
2666 int rc;
2667 u8 reg;
2668 u8 addr;
2669
2670 for (addr = FIRST_CMD_REG; addr <= LAST_CMD_REG; addr++) {
2671 rc = smb1351_read_reg(chip, addr, &reg);
2672 if (!rc)
2673 seq_printf(m, "0x%02x = 0x%02x\n", addr, reg);
2674 }
2675
2676 return 0;
2677}
2678
2679static int cmd_debugfs_open(struct inode *inode, struct file *file)
2680{
2681 struct smb1351_charger *chip = inode->i_private;
2682
2683 return single_open(file, show_cmd_regs, chip);
2684}
2685
2686static const struct file_operations cmd_debugfs_ops = {
2687 .owner = THIS_MODULE,
2688 .open = cmd_debugfs_open,
2689 .read = seq_read,
2690 .llseek = seq_lseek,
2691 .release = single_release,
2692};
2693
2694#define FIRST_STATUS_REG 0x36
2695#define LAST_STATUS_REG 0x3F
2696static int show_status_regs(struct seq_file *m, void *data)
2697{
2698 struct smb1351_charger *chip = m->private;
2699 int rc;
2700 u8 reg;
2701 u8 addr;
2702
2703 for (addr = FIRST_STATUS_REG; addr <= LAST_STATUS_REG; addr++) {
2704 rc = smb1351_read_reg(chip, addr, &reg);
2705 if (!rc)
2706 seq_printf(m, "0x%02x = 0x%02x\n", addr, reg);
2707 }
2708
2709 return 0;
2710}
2711
2712static int status_debugfs_open(struct inode *inode, struct file *file)
2713{
2714 struct smb1351_charger *chip = inode->i_private;
2715
2716 return single_open(file, show_status_regs, chip);
2717}
2718
2719static const struct file_operations status_debugfs_ops = {
2720 .owner = THIS_MODULE,
2721 .open = status_debugfs_open,
2722 .read = seq_read,
2723 .llseek = seq_lseek,
2724 .release = single_release,
2725};
2726
2727static int show_irq_count(struct seq_file *m, void *data)
2728{
2729 int i, j, total = 0;
2730
2731 for (i = 0; i < ARRAY_SIZE(handlers); i++)
2732 for (j = 0; j < 4; j++) {
2733 seq_printf(m, "%s=%d\t(high=%d low=%d)\n",
2734 handlers[i].irq_info[j].name,
2735 handlers[i].irq_info[j].high
2736 + handlers[i].irq_info[j].low,
2737 handlers[i].irq_info[j].high,
2738 handlers[i].irq_info[j].low);
2739 total += (handlers[i].irq_info[j].high
2740 + handlers[i].irq_info[j].low);
2741 }
2742
2743 seq_printf(m, "\n\tTotal = %d\n", total);
2744
2745 return 0;
2746}
2747
2748static int irq_count_debugfs_open(struct inode *inode, struct file *file)
2749{
2750 struct smb1351_charger *chip = inode->i_private;
2751
2752 return single_open(file, show_irq_count, chip);
2753}
2754
2755static const struct file_operations irq_count_debugfs_ops = {
2756 .owner = THIS_MODULE,
2757 .open = irq_count_debugfs_open,
2758 .read = seq_read,
2759 .llseek = seq_lseek,
2760 .release = single_release,
2761};
2762
2763static int get_reg(void *data, u64 *val)
2764{
2765 struct smb1351_charger *chip = data;
2766 int rc;
2767 u8 temp;
2768
2769 rc = smb1351_read_reg(chip, chip->peek_poke_address, &temp);
2770 if (rc) {
2771 pr_err("Couldn't read reg %x rc = %d\n",
2772 chip->peek_poke_address, rc);
2773 return -EAGAIN;
2774 }
2775 *val = temp;
2776 return 0;
2777}
2778
2779static int set_reg(void *data, u64 val)
2780{
2781 struct smb1351_charger *chip = data;
2782 int rc;
2783 u8 temp;
2784
2785 temp = (u8) val;
2786 rc = smb1351_write_reg(chip, chip->peek_poke_address, temp);
2787 if (rc) {
2788 pr_err("Couldn't write 0x%02x to 0x%02x rc= %d\n",
2789 temp, chip->peek_poke_address, rc);
2790 return -EAGAIN;
2791 }
2792 return 0;
2793}
2794DEFINE_SIMPLE_ATTRIBUTE(poke_poke_debug_ops, get_reg, set_reg, "0x%02llx\n");
2795
2796static int force_irq_set(void *data, u64 val)
2797{
2798 struct smb1351_charger *chip = data;
2799
2800 smb1351_chg_stat_handler(chip->client->irq, data);
2801 return 0;
2802}
2803DEFINE_SIMPLE_ATTRIBUTE(force_irq_ops, NULL, force_irq_set, "0x%02llx\n");
2804
2805#ifdef DEBUG
2806static void dump_regs(struct smb1351_charger *chip)
2807{
2808 int rc;
2809 u8 reg;
2810 u8 addr;
2811
2812 for (addr = 0; addr <= LAST_CNFG_REG; addr++) {
2813 rc = smb1351_read_reg(chip, addr, &reg);
2814 if (rc)
2815 pr_err("Couldn't read 0x%02x rc = %d\n", addr, rc);
2816 else
2817 pr_debug("0x%02x = 0x%02x\n", addr, reg);
2818 }
2819
2820 for (addr = FIRST_STATUS_REG; addr <= LAST_STATUS_REG; addr++) {
2821 rc = smb1351_read_reg(chip, addr, &reg);
2822 if (rc)
2823 pr_err("Couldn't read 0x%02x rc = %d\n", addr, rc);
2824 else
2825 pr_debug("0x%02x = 0x%02x\n", addr, reg);
2826 }
2827
2828 for (addr = FIRST_CMD_REG; addr <= LAST_CMD_REG; addr++) {
2829 rc = smb1351_read_reg(chip, addr, &reg);
2830 if (rc)
2831 pr_err("Couldn't read 0x%02x rc = %d\n", addr, rc);
2832 else
2833 pr_debug("0x%02x = 0x%02x\n", addr, reg);
2834 }
2835}
2836#else
2837static void dump_regs(struct smb1351_charger *chip)
2838{
2839}
2840#endif
2841
2842static int smb1351_parse_dt(struct smb1351_charger *chip)
2843{
2844 int rc;
2845 struct device_node *node = chip->dev->of_node;
2846
2847 if (!node) {
2848 pr_err("device tree info. missing\n");
2849 return -EINVAL;
2850 }
2851
2852 chip->usb_suspended_status = of_property_read_bool(node,
2853 "qcom,charging-disabled");
2854
2855 chip->chg_autonomous_mode = of_property_read_bool(node,
2856 "qcom,chg-autonomous-mode");
2857
2858 chip->disable_apsd = of_property_read_bool(node, "qcom,disable-apsd");
2859
2860 chip->using_pmic_therm = of_property_read_bool(node,
2861 "qcom,using-pmic-therm");
2862 chip->bms_controlled_charging = of_property_read_bool(node,
2863 "qcom,bms-controlled-charging");
2864 chip->force_hvdcp_2p0 = of_property_read_bool(node,
2865 "qcom,force-hvdcp-2p0");
2866
2867 rc = of_property_read_string(node, "qcom,bms-psy-name",
2868 &chip->bms_psy_name);
2869 if (rc)
2870 chip->bms_psy_name = NULL;
2871
2872 rc = of_property_read_u32(node, "qcom,fastchg-current-max-ma",
2873 &chip->target_fastchg_current_max_ma);
2874 if (rc)
2875 chip->target_fastchg_current_max_ma = SMB1351_CHG_FAST_MAX_MA;
2876
2877 chip->iterm_disabled = of_property_read_bool(node,
2878 "qcom,iterm-disabled");
2879
2880 rc = of_property_read_u32(node, "qcom,iterm-ma", &chip->iterm_ma);
2881 if (rc)
2882 chip->iterm_ma = -EINVAL;
2883
2884 rc = of_property_read_u32(node, "qcom,float-voltage-mv",
2885 &chip->vfloat_mv);
2886 if (rc)
2887 chip->vfloat_mv = -EINVAL;
2888
2889 rc = of_property_read_u32(node, "qcom,recharge-mv",
2890 &chip->recharge_mv);
2891 if (rc)
2892 chip->recharge_mv = -EINVAL;
2893
2894 chip->recharge_disabled = of_property_read_bool(node,
2895 "qcom,recharge-disabled");
2896
2897 /* thermal and jeita support */
2898 rc = of_property_read_u32(node, "qcom,batt-cold-decidegc",
2899 &chip->batt_cold_decidegc);
2900 if (rc < 0)
2901 chip->batt_cold_decidegc = -EINVAL;
2902
2903 rc = of_property_read_u32(node, "qcom,batt-hot-decidegc",
2904 &chip->batt_hot_decidegc);
2905 if (rc < 0)
2906 chip->batt_hot_decidegc = -EINVAL;
2907
2908 rc = of_property_read_u32(node, "qcom,batt-warm-decidegc",
2909 &chip->batt_warm_decidegc);
2910
2911 rc |= of_property_read_u32(node, "qcom,batt-cool-decidegc",
2912 &chip->batt_cool_decidegc);
2913
2914 if (!rc) {
2915 rc = of_property_read_u32(node, "qcom,batt-cool-mv",
2916 &chip->batt_cool_mv);
2917
2918 rc |= of_property_read_u32(node, "qcom,batt-warm-mv",
2919 &chip->batt_warm_mv);
2920
2921 rc |= of_property_read_u32(node, "qcom,batt-cool-ma",
2922 &chip->batt_cool_ma);
2923
2924 rc |= of_property_read_u32(node, "qcom,batt-warm-ma",
2925 &chip->batt_warm_ma);
2926 if (rc)
2927 chip->jeita_supported = false;
2928 else
2929 chip->jeita_supported = true;
2930 }
2931
2932 pr_debug("jeita_supported = %d\n", chip->jeita_supported);
2933
2934 rc = of_property_read_u32(node, "qcom,batt-missing-decidegc",
2935 &chip->batt_missing_decidegc);
2936
2937 chip->pinctrl_state_name = of_get_property(node, "pinctrl-names", NULL);
2938
2939 return 0;
2940}
2941
2942static int smb1351_determine_initial_state(struct smb1351_charger *chip)
2943{
2944 int rc;
2945 u8 reg = 0;
2946
2947 /*
2948 * It is okay to read the interrupt status here since
2949 * interrupts aren't requested. Reading interrupt status
2950 * clears the interrupt so be careful to read interrupt
2951 * status only in interrupt handling code
2952 */
2953
2954 rc = smb1351_read_reg(chip, IRQ_B_REG, &reg);
2955 if (rc) {
2956 pr_err("Couldn't read IRQ_B rc = %d\n", rc);
2957 goto fail_init_status;
2958 }
2959
2960 chip->battery_missing = (reg & IRQ_BATT_MISSING_BIT) ? true : false;
2961
2962 rc = smb1351_read_reg(chip, IRQ_C_REG, &reg);
2963 if (rc) {
2964 pr_err("Couldn't read IRQ_C rc = %d\n", rc);
2965 goto fail_init_status;
2966 }
2967 chip->batt_full = (reg & IRQ_TERM_BIT) ? true : false;
2968
2969 rc = smb1351_read_reg(chip, IRQ_A_REG, &reg);
2970 if (rc) {
2971 pr_err("Couldn't read irq A rc = %d\n", rc);
2972 return rc;
2973 }
2974
2975 if (reg & IRQ_HOT_HARD_BIT)
2976 chip->batt_hot = true;
2977 if (reg & IRQ_COLD_HARD_BIT)
2978 chip->batt_cold = true;
2979 if (reg & IRQ_HOT_SOFT_BIT)
2980 chip->batt_warm = true;
2981 if (reg & IRQ_COLD_SOFT_BIT)
2982 chip->batt_cool = true;
2983
2984 rc = smb1351_read_reg(chip, IRQ_E_REG, &reg);
2985 if (rc) {
2986 pr_err("Couldn't read IRQ_E rc = %d\n", rc);
2987 goto fail_init_status;
2988 }
2989
2990 if (reg & IRQ_USBIN_UV_BIT) {
2991 smb1351_usbin_uv_handler(chip, 1);
2992 } else {
2993 smb1351_usbin_uv_handler(chip, 0);
2994 smb1351_apsd_complete_handler(chip, 1);
2995 }
2996
2997 rc = smb1351_read_reg(chip, IRQ_G_REG, &reg);
2998 if (rc) {
2999 pr_err("Couldn't read IRQ_G rc = %d\n", rc);
3000 goto fail_init_status;
3001 }
3002
3003 if (reg & IRQ_SOURCE_DET_BIT)
3004 smb1351_apsd_complete_handler(chip, 1);
3005
3006 return 0;
3007
3008fail_init_status:
3009 pr_err("Couldn't determine initial status\n");
3010 return rc;
3011}
3012
3013static int is_parallel_charger(struct i2c_client *client)
3014{
3015 struct device_node *node = client->dev.of_node;
3016
3017 return of_property_read_bool(node, "qcom,parallel-charger");
3018}
3019
3020static int create_debugfs_entries(struct smb1351_charger *chip)
3021{
3022 struct dentry *ent;
3023
3024 chip->debug_root = debugfs_create_dir("smb1351", NULL);
3025 if (!chip->debug_root) {
3026 pr_err("Couldn't create debug dir\n");
3027 } else {
3028 ent = debugfs_create_file("config_registers", S_IFREG | 0444,
3029 chip->debug_root, chip,
3030 &cnfg_debugfs_ops);
3031 if (!ent)
3032 pr_err("Couldn't create cnfg debug file\n");
3033
3034 ent = debugfs_create_file("status_registers", S_IFREG | 0444,
3035 chip->debug_root, chip,
3036 &status_debugfs_ops);
3037 if (!ent)
3038 pr_err("Couldn't create status debug file\n");
3039
3040 ent = debugfs_create_file("cmd_registers", S_IFREG | 0444,
3041 chip->debug_root, chip,
3042 &cmd_debugfs_ops);
3043 if (!ent)
3044 pr_err("Couldn't create cmd debug file\n");
3045
3046 ent = debugfs_create_x32("address", S_IFREG | 0644,
3047 chip->debug_root,
3048 &(chip->peek_poke_address));
3049 if (!ent)
3050 pr_err("Couldn't create address debug file\n");
3051
3052 ent = debugfs_create_file("data", S_IFREG | 0644,
3053 chip->debug_root, chip,
3054 &poke_poke_debug_ops);
3055 if (!ent)
3056 pr_err("Couldn't create data debug file\n");
3057
3058 ent = debugfs_create_file("force_irq",
3059 S_IFREG | 0644,
3060 chip->debug_root, chip,
3061 &force_irq_ops);
3062 if (!ent)
3063 pr_err("Couldn't create data debug file\n");
3064
3065 ent = debugfs_create_file("irq_count", S_IFREG | 0444,
3066 chip->debug_root, chip,
3067 &irq_count_debugfs_ops);
3068 if (!ent)
3069 pr_err("Couldn't create count debug file\n");
3070 }
3071 return 0;
3072}
3073
3074static int smb1351_main_charger_probe(struct i2c_client *client,
3075 const struct i2c_device_id *id)
3076{
3077 int rc;
3078 struct smb1351_charger *chip;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003079 struct power_supply_config batt_psy_cfg = {};
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05303080 struct power_supply_config usb_psy_cfg = {};
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003081 u8 reg = 0;
3082
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003083 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
3084 if (!chip)
3085 return -ENOMEM;
3086
3087 chip->client = client;
3088 chip->dev = &client->dev;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003089 chip->fake_battery_soc = -EINVAL;
Ashay Jaiswald7a9f2d2018-01-19 19:10:37 +05303090
3091 chip->extcon = devm_extcon_dev_allocate(chip->dev,
3092 smb1351_extcon_cable);
3093 if (IS_ERR(chip->extcon)) {
3094 pr_err("failed to allocate extcon device\n");
3095 rc = PTR_ERR(chip->extcon);
3096 return rc;
3097 }
3098
3099 rc = devm_extcon_dev_register(chip->dev, chip->extcon);
3100 if (rc) {
3101 pr_err("failed to register extcon device\n");
3102 return rc;
3103 }
3104
3105 rc = extcon_set_property_capability(chip->extcon,
3106 EXTCON_USB, EXTCON_PROP_USB_SS);
3107 rc |= extcon_set_property_capability(chip->extcon,
3108 EXTCON_USB_HOST, EXTCON_PROP_USB_SS);
3109 if (rc < 0) {
3110 pr_err("Failed to register extcon capability rc=%d\n", rc);
3111 return rc;
3112 }
3113
3114 chip->usb_psy_d.name = "usb";
3115 chip->usb_psy_d.type = POWER_SUPPLY_TYPE_USB;
3116 chip->usb_psy_d.get_property = smb1351_usb_get_property;
3117 chip->usb_psy_d.set_property = smb1351_usb_set_property;
3118 chip->usb_psy_d.properties = smb1351_usb_properties;
3119 chip->usb_psy_d.num_properties = ARRAY_SIZE(smb1351_usb_properties);
3120 chip->usb_psy_d.property_is_writeable = smb1351_usb_is_writeable;
3121
3122 usb_psy_cfg.drv_data = chip;
3123 usb_psy_cfg.supplied_to = smb1351_usb_supplicants;
3124 usb_psy_cfg.num_supplicants = ARRAY_SIZE(smb1351_usb_supplicants);
3125
3126 chip->usb_psy = devm_power_supply_register(chip->dev,
3127 &chip->usb_psy_d, &usb_psy_cfg);
3128 if (IS_ERR(chip->usb_psy)) {
3129 pr_err("Unable to register usb_psy rc = %ld\n",
3130 PTR_ERR(chip->usb_psy));
3131 rc = PTR_ERR(chip->usb_psy);
3132 return rc;
3133 }
3134
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003135 INIT_DELAYED_WORK(&chip->chg_remove_work, smb1351_chg_remove_work);
3136 INIT_DELAYED_WORK(&chip->hvdcp_det_work, smb1351_hvdcp_det_work);
3137 device_init_wakeup(chip->dev, true);
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003138 /* probe the device to check if its actually connected */
3139 rc = smb1351_read_reg(chip, CHG_REVISION_REG, &reg);
3140 if (rc) {
3141 pr_err("Failed to detect smb1351, device may be absent\n");
3142 return -ENODEV;
3143 }
3144 pr_debug("smb1351 chip revision is %d\n", reg);
3145
3146 rc = smb1351_parse_dt(chip);
3147 if (rc) {
3148 pr_err("Couldn't parse DT nodes rc=%d\n", rc);
3149 return rc;
3150 }
3151
3152 /* using vadc and adc_tm for implementing pmic therm */
3153 if (chip->using_pmic_therm) {
3154 chip->vadc_dev = qpnp_get_vadc(chip->dev, "chg");
3155 if (IS_ERR(chip->vadc_dev)) {
3156 rc = PTR_ERR(chip->vadc_dev);
3157 if (rc != -EPROBE_DEFER)
3158 pr_err("vadc property missing\n");
3159 return rc;
3160 }
3161 chip->adc_tm_dev = qpnp_get_adc_tm(chip->dev, "chg");
3162 if (IS_ERR(chip->adc_tm_dev)) {
3163 rc = PTR_ERR(chip->adc_tm_dev);
3164 if (rc != -EPROBE_DEFER)
3165 pr_err("adc_tm property missing\n");
3166 return rc;
3167 }
3168 }
3169
3170 i2c_set_clientdata(client, chip);
3171
3172 chip->batt_psy_d.name = "battery";
3173 chip->batt_psy_d.type = POWER_SUPPLY_TYPE_BATTERY;
3174 chip->batt_psy_d.get_property = smb1351_battery_get_property;
3175 chip->batt_psy_d.set_property = smb1351_battery_set_property;
3176 chip->batt_psy_d.property_is_writeable =
3177 smb1351_batt_property_is_writeable;
3178 chip->batt_psy_d.properties = smb1351_battery_properties;
3179 chip->batt_psy_d.num_properties =
3180 ARRAY_SIZE(smb1351_battery_properties);
3181 chip->batt_psy_d.external_power_changed =
3182 smb1351_external_power_changed;
3183
3184 chip->resume_completed = true;
3185 mutex_init(&chip->irq_complete);
3186
3187 batt_psy_cfg.drv_data = chip;
3188 batt_psy_cfg.supplied_to = pm_batt_supplied_to;
3189 batt_psy_cfg.num_supplicants = ARRAY_SIZE(pm_batt_supplied_to);
3190 chip->batt_psy = devm_power_supply_register(chip->dev,
3191 &chip->batt_psy_d,
3192 &batt_psy_cfg);
3193 if (IS_ERR(chip->batt_psy)) {
3194 pr_err("Couldn't register batt psy rc=%ld\n",
3195 PTR_ERR(chip->batt_psy));
3196 return rc;
3197 }
3198
3199 dump_regs(chip);
3200
3201 rc = smb1351_regulator_init(chip);
3202 if (rc) {
3203 pr_err("Couldn't initialize smb1351 ragulator rc=%d\n", rc);
3204 goto fail_smb1351_regulator_init;
3205 }
3206
3207 rc = smb1351_hw_init(chip);
3208 if (rc) {
3209 pr_err("Couldn't initialize hardware rc=%d\n", rc);
3210 goto fail_smb1351_hw_init;
3211 }
3212
3213 rc = smb1351_determine_initial_state(chip);
3214 if (rc) {
3215 pr_err("Couldn't determine initial state rc=%d\n", rc);
3216 goto fail_smb1351_hw_init;
3217 }
3218
3219 /* STAT irq configuration */
3220 if (client->irq) {
3221 rc = devm_request_threaded_irq(&client->dev, client->irq, NULL,
3222 smb1351_chg_stat_handler,
3223 IRQF_TRIGGER_LOW | IRQF_ONESHOT,
3224 "smb1351_chg_stat_irq", chip);
3225 if (rc) {
3226 pr_err("Failed STAT irq=%d request rc = %d\n",
3227 client->irq, rc);
3228 goto fail_smb1351_hw_init;
3229 }
3230 enable_irq_wake(client->irq);
3231 }
3232
3233 if (chip->using_pmic_therm) {
3234 if (!chip->jeita_supported) {
3235 /* add hot/cold temperature monitor */
3236 chip->adc_param.low_temp = chip->batt_cold_decidegc;
3237 chip->adc_param.high_temp = chip->batt_hot_decidegc;
3238 } else {
3239 chip->adc_param.low_temp = chip->batt_cool_decidegc;
3240 chip->adc_param.high_temp = chip->batt_warm_decidegc;
3241 }
Subbaraman Narayanamurthy87e9c9a2016-12-06 15:13:26 -08003242 chip->adc_param.timer_interval = ADC_MEAS1_INTERVAL_500MS;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003243 chip->adc_param.state_request = ADC_TM_WARM_COOL_THR_ENABLE;
3244 chip->adc_param.btm_ctx = chip;
3245 chip->adc_param.threshold_notification =
3246 smb1351_chg_adc_notification;
3247 chip->adc_param.channel = LR_MUX1_BATT_THERM;
3248
3249 rc = qpnp_adc_tm_channel_measure(chip->adc_tm_dev,
3250 &chip->adc_param);
3251 if (rc) {
3252 pr_err("requesting ADC error %d\n", rc);
3253 goto fail_smb1351_hw_init;
3254 }
3255 }
3256
3257 create_debugfs_entries(chip);
3258
3259 dump_regs(chip);
3260
3261 pr_info("smb1351 successfully probed. charger=%d, batt=%d version=%s\n",
3262 chip->chg_present,
3263 smb1351_get_prop_batt_present(chip),
3264 smb1351_version_str[chip->version]);
3265 return 0;
3266
3267fail_smb1351_hw_init:
3268 regulator_unregister(chip->otg_vreg.rdev);
3269fail_smb1351_regulator_init:
3270 return rc;
3271}
3272
3273static int smb1351_parallel_charger_probe(struct i2c_client *client,
3274 const struct i2c_device_id *id)
3275{
3276 int rc;
3277 struct smb1351_charger *chip;
3278 struct device_node *node = client->dev.of_node;
3279 struct power_supply_config parallel_psy_cfg = {};
3280
3281 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
3282 if (!chip)
3283 return -ENOMEM;
3284
3285 chip->client = client;
3286 chip->dev = &client->dev;
3287 chip->parallel_charger = true;
Ashay Jaiswal0513d342017-02-07 00:12:08 +05303288 chip->parallel_charger_suspended = true;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003289
3290 chip->usb_suspended_status = of_property_read_bool(node,
3291 "qcom,charging-disabled");
3292 rc = of_property_read_u32(node, "qcom,float-voltage-mv",
3293 &chip->vfloat_mv);
3294 if (rc)
3295 chip->vfloat_mv = -EINVAL;
3296 rc = of_property_read_u32(node, "qcom,recharge-mv",
3297 &chip->recharge_mv);
3298 if (rc)
3299 chip->recharge_mv = -EINVAL;
3300
3301 rc = of_property_read_u32(node, "qcom,parallel-en-pin-polarity",
3302 &chip->parallel_pin_polarity_setting);
3303 if (rc)
3304 chip->parallel_pin_polarity_setting = EN_BY_PIN_LOW_ENABLE;
3305 else
3306 chip->parallel_pin_polarity_setting =
3307 chip->parallel_pin_polarity_setting ?
3308 EN_BY_PIN_HIGH_ENABLE : EN_BY_PIN_LOW_ENABLE;
3309
Ashay Jaiswalec6af842017-02-17 16:00:05 +05303310 if (of_property_read_bool(node,
3311 "qcom,parallel-external-current-sense"))
3312 chip->parallel_mode = POWER_SUPPLY_PL_USBIN_USBIN_EXT;
3313 else
3314 chip->parallel_mode = POWER_SUPPLY_PL_USBIN_USBIN;
3315
Ashay Jaiswal33de94a2017-11-02 10:06:52 +05303316 chip->pl_batfet_mode = POWER_SUPPLY_PL_NON_STACKED_BATFET;
3317 if (of_property_read_bool(node, "qcom,stacked-batfet"))
3318 chip->pl_batfet_mode = POWER_SUPPLY_PL_STACKED_BATFET;
3319
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003320 i2c_set_clientdata(client, chip);
3321
Abhijeet Dharmapurikar9a3a6c32017-01-06 18:27:29 -08003322 chip->parallel_psy_d.name = "parallel";
3323 chip->parallel_psy_d.type = POWER_SUPPLY_TYPE_PARALLEL;
Nicholas Troast6e8c0382016-02-12 15:34:57 -08003324 chip->parallel_psy_d.get_property = smb1351_parallel_get_property;
3325 chip->parallel_psy_d.set_property = smb1351_parallel_set_property;
3326 chip->parallel_psy_d.properties = smb1351_parallel_properties;
3327 chip->parallel_psy_d.property_is_writeable
3328 = smb1351_parallel_is_writeable;
3329 chip->parallel_psy_d.num_properties
3330 = ARRAY_SIZE(smb1351_parallel_properties);
3331
3332 parallel_psy_cfg.drv_data = chip;
3333 parallel_psy_cfg.num_supplicants = 0;
3334 chip->parallel_psy = devm_power_supply_register(chip->dev,
3335 &chip->parallel_psy_d,
3336 &parallel_psy_cfg);
3337 if (IS_ERR(chip->parallel_psy)) {
3338 pr_err("Couldn't register parallel psy rc=%ld\n",
3339 PTR_ERR(chip->parallel_psy));
3340 return rc;
3341 }
3342
3343 chip->resume_completed = true;
3344 mutex_init(&chip->irq_complete);
3345
3346 create_debugfs_entries(chip);
3347
3348 pr_info("smb1351 parallel successfully probed.\n");
3349
3350 return 0;
3351}
3352
3353static int smb1351_charger_probe(struct i2c_client *client,
3354 const struct i2c_device_id *id)
3355{
3356 if (is_parallel_charger(client))
3357 return smb1351_parallel_charger_probe(client, id);
3358 else
3359 return smb1351_main_charger_probe(client, id);
3360}
3361
3362static int smb1351_charger_remove(struct i2c_client *client)
3363{
3364 struct smb1351_charger *chip = i2c_get_clientdata(client);
3365
3366 cancel_delayed_work_sync(&chip->chg_remove_work);
3367
3368 mutex_destroy(&chip->irq_complete);
3369 debugfs_remove_recursive(chip->debug_root);
3370 return 0;
3371}
3372
3373static int smb1351_suspend(struct device *dev)
3374{
3375 struct i2c_client *client = to_i2c_client(dev);
3376 struct smb1351_charger *chip = i2c_get_clientdata(client);
3377
3378 /* no suspend resume activities for parallel charger */
3379 if (chip->parallel_charger)
3380 return 0;
3381
3382 mutex_lock(&chip->irq_complete);
3383 chip->resume_completed = false;
3384 mutex_unlock(&chip->irq_complete);
3385
3386 return 0;
3387}
3388
3389static int smb1351_suspend_noirq(struct device *dev)
3390{
3391 struct i2c_client *client = to_i2c_client(dev);
3392 struct smb1351_charger *chip = i2c_get_clientdata(client);
3393
3394 /* no suspend resume activities for parallel charger */
3395 if (chip->parallel_charger)
3396 return 0;
3397
3398 if (chip->irq_waiting) {
3399 pr_err_ratelimited("Aborting suspend, an interrupt was detected while suspending\n");
3400 return -EBUSY;
3401 }
3402 return 0;
3403}
3404
3405static int smb1351_resume(struct device *dev)
3406{
3407 struct i2c_client *client = to_i2c_client(dev);
3408 struct smb1351_charger *chip = i2c_get_clientdata(client);
3409
3410 /* no suspend resume activities for parallel charger */
3411 if (chip->parallel_charger)
3412 return 0;
3413
3414 mutex_lock(&chip->irq_complete);
3415 chip->resume_completed = true;
3416 if (chip->irq_waiting) {
3417 mutex_unlock(&chip->irq_complete);
3418 smb1351_chg_stat_handler(client->irq, chip);
3419 enable_irq(client->irq);
3420 } else {
3421 mutex_unlock(&chip->irq_complete);
3422 }
3423 return 0;
3424}
3425
3426static const struct dev_pm_ops smb1351_pm_ops = {
3427 .suspend = smb1351_suspend,
3428 .suspend_noirq = smb1351_suspend_noirq,
3429 .resume = smb1351_resume,
3430};
3431
3432static const struct of_device_id smb1351_match_table[] = {
3433 { .compatible = "qcom,smb1351-charger",},
3434 { },
3435};
3436
3437static const struct i2c_device_id smb1351_charger_id[] = {
3438 {"smb1351-charger", 0},
3439 {},
3440};
3441MODULE_DEVICE_TABLE(i2c, smb1351_charger_id);
3442
3443static struct i2c_driver smb1351_charger_driver = {
3444 .driver = {
3445 .name = "smb1351-charger",
3446 .owner = THIS_MODULE,
3447 .of_match_table = smb1351_match_table,
3448 .pm = &smb1351_pm_ops,
3449 },
3450 .probe = smb1351_charger_probe,
3451 .remove = smb1351_charger_remove,
3452 .id_table = smb1351_charger_id,
3453};
3454
3455module_i2c_driver(smb1351_charger_driver);
3456
3457MODULE_DESCRIPTION("smb1351 Charger");
3458MODULE_LICENSE("GPL v2");
3459MODULE_ALIAS("i2c:smb1351-charger");