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