xref: /linux/drivers/power/supply/ab8500_charger.c (revision fbf46565c67c626849c7ce2a326972d3008d2a91)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) ST-Ericsson SA 2012
4  *
5  * Charger driver for AB8500
6  *
7  * Author:
8  *	Johan Palsson <johan.palsson@stericsson.com>
9  *	Karl Komierowski <karl.komierowski@stericsson.com>
10  *	Arun R Murthy <arun.murthy@stericsson.com>
11  */
12 
13 #include <linux/init.h>
14 #include <linux/module.h>
15 #include <linux/device.h>
16 #include <linux/component.h>
17 #include <linux/interrupt.h>
18 #include <linux/delay.h>
19 #include <linux/notifier.h>
20 #include <linux/slab.h>
21 #include <linux/platform_device.h>
22 #include <linux/power_supply.h>
23 #include <linux/completion.h>
24 #include <linux/regulator/consumer.h>
25 #include <linux/err.h>
26 #include <linux/workqueue.h>
27 #include <linux/kobject.h>
28 #include <linux/of.h>
29 #include <linux/mfd/core.h>
30 #include <linux/mfd/abx500/ab8500.h>
31 #include <linux/mfd/abx500.h>
32 #include <linux/usb/otg.h>
33 #include <linux/mutex.h>
34 #include <linux/iio/consumer.h>
35 
36 #include "ab8500-bm.h"
37 #include "ab8500-chargalg.h"
38 
39 /* Charger constants */
40 #define NO_PW_CONN			0
41 #define AC_PW_CONN			1
42 #define USB_PW_CONN			2
43 
44 #define MAIN_WDOG_ENA			0x01
45 #define MAIN_WDOG_KICK			0x02
46 #define MAIN_WDOG_DIS			0x00
47 #define CHARG_WD_KICK			0x01
48 #define MAIN_CH_ENA			0x01
49 #define MAIN_CH_NO_OVERSHOOT_ENA_N	0x02
50 #define USB_CH_ENA			0x01
51 #define USB_CHG_NO_OVERSHOOT_ENA_N	0x02
52 #define MAIN_CH_DET			0x01
53 #define MAIN_CH_CV_ON			0x04
54 #define USB_CH_CV_ON			0x08
55 #define VBUS_DET_DBNC100		0x02
56 #define VBUS_DET_DBNC1			0x01
57 #define OTP_ENABLE_WD			0x01
58 #define DROP_COUNT_RESET		0x01
59 #define USB_CH_DET			0x01
60 
61 #define MAIN_CH_INPUT_CURR_SHIFT	4
62 #define VBUS_IN_CURR_LIM_SHIFT		4
63 #define AUTO_VBUS_IN_CURR_LIM_SHIFT	4
64 #define VBUS_IN_CURR_LIM_RETRY_SET_TIME	30 /* seconds */
65 
66 #define LED_INDICATOR_PWM_ENA		0x01
67 #define LED_INDICATOR_PWM_DIS		0x00
68 #define LED_IND_CUR_5MA			0x04
69 #define LED_INDICATOR_PWM_DUTY_252_256	0xBF
70 
71 /* HW failure constants */
72 #define MAIN_CH_TH_PROT			0x02
73 #define VBUS_CH_NOK			0x08
74 #define USB_CH_TH_PROT			0x02
75 #define VBUS_OVV_TH			0x01
76 #define MAIN_CH_NOK			0x01
77 #define VBUS_DET			0x80
78 
79 #define MAIN_CH_STATUS2_MAINCHGDROP		0x80
80 #define MAIN_CH_STATUS2_MAINCHARGERDETDBNC	0x40
81 #define USB_CH_VBUSDROP				0x40
82 #define USB_CH_VBUSDETDBNC			0x01
83 
84 /* UsbLineStatus register bit masks */
85 #define AB8500_USB_LINK_STATUS		0x78
86 #define AB8505_USB_LINK_STATUS		0xF8
87 #define AB8500_STD_HOST_SUSP		0x18
88 #define USB_LINK_STATUS_SHIFT		3
89 
90 /* Watchdog timeout constant */
91 #define WD_TIMER			0x30 /* 4min */
92 #define WD_KICK_INTERVAL		(60 * HZ)
93 
94 /* Lowest charger voltage is 3.39V -> 0x4E */
95 #define LOW_VOLT_REG			0x4E
96 
97 /* Step up/down delay in us */
98 #define STEP_UDELAY			1000
99 
100 #define CHARGER_STATUS_POLL 10 /* in ms */
101 
102 #define CHG_WD_INTERVAL			(60 * HZ)
103 
104 #define AB8500_SW_CONTROL_FALLBACK	0x03
105 /* Wait for enumeration before charing in us */
106 #define WAIT_ACA_RID_ENUMERATION	(5 * 1000)
107 /*External charger control*/
108 #define AB8500_SYS_CHARGER_CONTROL_REG		0x52
109 #define EXTERNAL_CHARGER_DISABLE_REG_VAL	0x03
110 #define EXTERNAL_CHARGER_ENABLE_REG_VAL		0x07
111 
112 /* UsbLineStatus register - usb types */
113 enum ab8500_charger_link_status {
114 	USB_STAT_NOT_CONFIGURED,
115 	USB_STAT_STD_HOST_NC,
116 	USB_STAT_STD_HOST_C_NS,
117 	USB_STAT_STD_HOST_C_S,
118 	USB_STAT_HOST_CHG_NM,
119 	USB_STAT_HOST_CHG_HS,
120 	USB_STAT_HOST_CHG_HS_CHIRP,
121 	USB_STAT_DEDICATED_CHG,
122 	USB_STAT_ACA_RID_A,
123 	USB_STAT_ACA_RID_B,
124 	USB_STAT_ACA_RID_C_NM,
125 	USB_STAT_ACA_RID_C_HS,
126 	USB_STAT_ACA_RID_C_HS_CHIRP,
127 	USB_STAT_HM_IDGND,
128 	USB_STAT_RESERVED,
129 	USB_STAT_NOT_VALID_LINK,
130 	USB_STAT_PHY_EN,
131 	USB_STAT_SUP_NO_IDGND_VBUS,
132 	USB_STAT_SUP_IDGND_VBUS,
133 	USB_STAT_CHARGER_LINE_1,
134 	USB_STAT_CARKIT_1,
135 	USB_STAT_CARKIT_2,
136 	USB_STAT_ACA_DOCK_CHARGER,
137 };
138 
139 enum ab8500_usb_state {
140 	AB8500_BM_USB_STATE_RESET_HS,	/* HighSpeed Reset */
141 	AB8500_BM_USB_STATE_RESET_FS,	/* FullSpeed/LowSpeed Reset */
142 	AB8500_BM_USB_STATE_CONFIGURED,
143 	AB8500_BM_USB_STATE_SUSPEND,
144 	AB8500_BM_USB_STATE_RESUME,
145 	AB8500_BM_USB_STATE_MAX,
146 };
147 
148 /* VBUS input current limits supported in AB8500 in uA */
149 #define USB_CH_IP_CUR_LVL_0P05		50000
150 #define USB_CH_IP_CUR_LVL_0P09		98000
151 #define USB_CH_IP_CUR_LVL_0P19		193000
152 #define USB_CH_IP_CUR_LVL_0P29		290000
153 #define USB_CH_IP_CUR_LVL_0P38		380000
154 #define USB_CH_IP_CUR_LVL_0P45		450000
155 #define USB_CH_IP_CUR_LVL_0P5		500000
156 #define USB_CH_IP_CUR_LVL_0P6		600000
157 #define USB_CH_IP_CUR_LVL_0P7		700000
158 #define USB_CH_IP_CUR_LVL_0P8		800000
159 #define USB_CH_IP_CUR_LVL_0P9		900000
160 #define USB_CH_IP_CUR_LVL_1P0		1000000
161 #define USB_CH_IP_CUR_LVL_1P1		1100000
162 #define USB_CH_IP_CUR_LVL_1P3		1300000
163 #define USB_CH_IP_CUR_LVL_1P4		1400000
164 #define USB_CH_IP_CUR_LVL_1P5		1500000
165 
166 #define VBAT_TRESH_IP_CUR_RED		3800000
167 
168 #define to_ab8500_charger_usb_device_info(x) container_of((x), \
169 	struct ab8500_charger, usb_chg)
170 #define to_ab8500_charger_ac_device_info(x) container_of((x), \
171 	struct ab8500_charger, ac_chg)
172 
173 /**
174  * struct ab8500_charger_interrupts - ab8500 interrupts
175  * @name:	name of the interrupt
176  * @isr		function pointer to the isr
177  */
178 struct ab8500_charger_interrupts {
179 	char *name;
180 	irqreturn_t (*isr)(int irq, void *data);
181 };
182 
183 struct ab8500_charger_info {
184 	int charger_connected;
185 	int charger_online;
186 	int charger_voltage_uv;
187 	int cv_active;
188 	bool wd_expired;
189 	int charger_current_ua;
190 };
191 
192 struct ab8500_charger_event_flags {
193 	bool mainextchnotok;
194 	bool main_thermal_prot;
195 	bool usb_thermal_prot;
196 	bool vbus_ovv;
197 	bool usbchargernotok;
198 	bool chgwdexp;
199 	bool vbus_collapse;
200 	bool vbus_drop_end;
201 };
202 
203 struct ab8500_charger_usb_state {
204 	int usb_current_ua;
205 	int usb_current_tmp_ua;
206 	enum ab8500_usb_state state;
207 	enum ab8500_usb_state state_tmp;
208 	spinlock_t usb_lock;
209 };
210 
211 struct ab8500_charger_max_usb_in_curr {
212 	int usb_type_max_ua;
213 	int set_max_ua;
214 	int calculated_max_ua;
215 };
216 
217 /**
218  * struct ab8500_charger - ab8500 Charger device information
219  * @dev:		Pointer to the structure device
220  * @vbus_detected:	VBUS detected
221  * @vbus_detected_start:
222  *			VBUS detected during startup
223  * @ac_conn:		This will be true when the AC charger has been plugged
224  * @vddadc_en_ac:	Indicate if VDD ADC supply is enabled because AC
225  *			charger is enabled
226  * @vddadc_en_usb:	Indicate if VDD ADC supply is enabled because USB
227  *			charger is enabled
228  * @vbat		Battery voltage
229  * @old_vbat		Previously measured battery voltage
230  * @usb_device_is_unrecognised	USB device is unrecognised by the hardware
231  * @autopower		Indicate if we should have automatic pwron after pwrloss
232  * @autopower_cfg	platform specific power config support for "pwron after pwrloss"
233  * @invalid_charger_detect_state State when forcing AB to use invalid charger
234  * @is_aca_rid:		Incicate if accessory is ACA type
235  * @current_stepping_sessions:
236  *			Counter for current stepping sessions
237  * @parent:		Pointer to the struct ab8500
238  * @adc_main_charger_v	ADC channel for main charger voltage
239  * @adc_main_charger_c	ADC channel for main charger current
240  * @adc_vbus_v		ADC channel for USB charger voltage
241  * @adc_usb_charger_c	ADC channel for USB charger current
242  * @bm:           	Platform specific battery management information
243  * @flags:		Structure for information about events triggered
244  * @usb_state:		Structure for usb stack information
245  * @max_usb_in_curr:	Max USB charger input current
246  * @ac_chg:		AC charger power supply
247  * @usb_chg:		USB charger power supply
248  * @ac:			Structure that holds the AC charger properties
249  * @usb:		Structure that holds the USB charger properties
250  * @regu:		Pointer to the struct regulator
251  * @charger_wq:		Work queue for the IRQs and checking HW state
252  * @usb_ipt_crnt_lock:	Lock to protect VBUS input current setting from mutuals
253  * @pm_lock:		Lock to prevent system to suspend
254  * @check_vbat_work	Work for checking vbat threshold to adjust vbus current
255  * @check_hw_failure_work:	Work for checking HW state
256  * @check_usbchgnotok_work:	Work for checking USB charger not ok status
257  * @kick_wd_work:		Work for kicking the charger watchdog in case
258  *				of ABB rev 1.* due to the watchog logic bug
259  * @ac_charger_attached_work:	Work for checking if AC charger is still
260  *				connected
261  * @usb_charger_attached_work:	Work for checking if USB charger is still
262  *				connected
263  * @ac_work:			Work for checking AC charger connection
264  * @detect_usb_type_work:	Work for detecting the USB type connected
265  * @usb_link_status_work:	Work for checking the new USB link status
266  * @usb_state_changed_work:	Work for checking USB state
267  * @attach_work:		Work for detecting USB type
268  * @vbus_drop_end_work:		Work for detecting VBUS drop end
269  * @check_main_thermal_prot_work:
270  *				Work for checking Main thermal status
271  * @check_usb_thermal_prot_work:
272  *				Work for checking USB thermal status
273  * @charger_attached_mutex:	For controlling the wakelock
274  */
275 struct ab8500_charger {
276 	struct device *dev;
277 	bool vbus_detected;
278 	bool vbus_detected_start;
279 	bool ac_conn;
280 	bool vddadc_en_ac;
281 	bool vddadc_en_usb;
282 	int vbat;
283 	int old_vbat;
284 	bool usb_device_is_unrecognised;
285 	bool autopower;
286 	bool autopower_cfg;
287 	int invalid_charger_detect_state;
288 	int is_aca_rid;
289 	atomic_t current_stepping_sessions;
290 	struct ab8500 *parent;
291 	struct iio_channel *adc_main_charger_v;
292 	struct iio_channel *adc_main_charger_c;
293 	struct iio_channel *adc_vbus_v;
294 	struct iio_channel *adc_usb_charger_c;
295 	struct ab8500_bm_data *bm;
296 	struct ab8500_charger_event_flags flags;
297 	struct ab8500_charger_usb_state usb_state;
298 	struct ab8500_charger_max_usb_in_curr max_usb_in_curr;
299 	struct ux500_charger ac_chg;
300 	struct ux500_charger usb_chg;
301 	struct ab8500_charger_info ac;
302 	struct ab8500_charger_info usb;
303 	struct regulator *regu;
304 	struct workqueue_struct *charger_wq;
305 	struct mutex usb_ipt_crnt_lock;
306 	struct delayed_work check_vbat_work;
307 	struct delayed_work check_hw_failure_work;
308 	struct delayed_work check_usbchgnotok_work;
309 	struct delayed_work kick_wd_work;
310 	struct delayed_work usb_state_changed_work;
311 	struct delayed_work attach_work;
312 	struct delayed_work ac_charger_attached_work;
313 	struct delayed_work usb_charger_attached_work;
314 	struct delayed_work vbus_drop_end_work;
315 	struct work_struct ac_work;
316 	struct work_struct detect_usb_type_work;
317 	struct work_struct usb_link_status_work;
318 	struct work_struct check_main_thermal_prot_work;
319 	struct work_struct check_usb_thermal_prot_work;
320 	struct usb_phy *usb_phy;
321 	struct notifier_block nb;
322 	struct mutex charger_attached_mutex;
323 };
324 
325 /* AC properties */
326 static enum power_supply_property ab8500_charger_ac_props[] = {
327 	POWER_SUPPLY_PROP_HEALTH,
328 	POWER_SUPPLY_PROP_PRESENT,
329 	POWER_SUPPLY_PROP_ONLINE,
330 	POWER_SUPPLY_PROP_VOLTAGE_NOW,
331 	POWER_SUPPLY_PROP_VOLTAGE_AVG,
332 	POWER_SUPPLY_PROP_CURRENT_NOW,
333 };
334 
335 /* USB properties */
336 static enum power_supply_property ab8500_charger_usb_props[] = {
337 	POWER_SUPPLY_PROP_HEALTH,
338 	POWER_SUPPLY_PROP_CURRENT_AVG,
339 	POWER_SUPPLY_PROP_PRESENT,
340 	POWER_SUPPLY_PROP_ONLINE,
341 	POWER_SUPPLY_PROP_VOLTAGE_NOW,
342 	POWER_SUPPLY_PROP_VOLTAGE_AVG,
343 	POWER_SUPPLY_PROP_CURRENT_NOW,
344 };
345 
346 /*
347  * Function for enabling and disabling sw fallback mode
348  * should always be disabled when no charger is connected.
349  */
350 static void ab8500_enable_disable_sw_fallback(struct ab8500_charger *di,
351 		bool fallback)
352 {
353 	u8 val;
354 	u8 reg;
355 	u8 bank;
356 	u8 bit;
357 	int ret;
358 
359 	dev_dbg(di->dev, "SW Fallback: %d\n", fallback);
360 
361 	if (is_ab8500(di->parent)) {
362 		bank = 0x15;
363 		reg = 0x0;
364 		bit = 3;
365 	} else {
366 		bank = AB8500_SYS_CTRL1_BLOCK;
367 		reg = AB8500_SW_CONTROL_FALLBACK;
368 		bit = 0;
369 	}
370 
371 	/* read the register containing fallback bit */
372 	ret = abx500_get_register_interruptible(di->dev, bank, reg, &val);
373 	if (ret < 0) {
374 		dev_err(di->dev, "%d read failed\n", __LINE__);
375 		return;
376 	}
377 
378 	if (is_ab8500(di->parent)) {
379 		/* enable the OPT emulation registers */
380 		ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x2);
381 		if (ret) {
382 			dev_err(di->dev, "%d write failed\n", __LINE__);
383 			goto disable_otp;
384 		}
385 	}
386 
387 	if (fallback)
388 		val |= (1 << bit);
389 	else
390 		val &= ~(1 << bit);
391 
392 	/* write back the changed fallback bit value to register */
393 	ret = abx500_set_register_interruptible(di->dev, bank, reg, val);
394 	if (ret) {
395 		dev_err(di->dev, "%d write failed\n", __LINE__);
396 	}
397 
398 disable_otp:
399 	if (is_ab8500(di->parent)) {
400 		/* disable the set OTP registers again */
401 		ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x0);
402 		if (ret) {
403 			dev_err(di->dev, "%d write failed\n", __LINE__);
404 		}
405 	}
406 }
407 
408 /**
409  * ab8500_power_supply_changed - a wrapper with local extensions for
410  * power_supply_changed
411  * @di:	  pointer to the ab8500_charger structure
412  * @psy:  pointer to power_supply_that have changed.
413  *
414  */
415 static void ab8500_power_supply_changed(struct ab8500_charger *di,
416 					struct power_supply *psy)
417 {
418 	/*
419 	 * This happens if we get notifications or interrupts and
420 	 * the platform has been configured not to support one or
421 	 * other type of charging.
422 	 */
423 	if (!psy)
424 		return;
425 
426 	if (di->autopower_cfg) {
427 		if (!di->usb.charger_connected &&
428 		    !di->ac.charger_connected &&
429 		    di->autopower) {
430 			di->autopower = false;
431 			ab8500_enable_disable_sw_fallback(di, false);
432 		} else if (!di->autopower &&
433 			   (di->ac.charger_connected ||
434 			    di->usb.charger_connected)) {
435 			di->autopower = true;
436 			ab8500_enable_disable_sw_fallback(di, true);
437 		}
438 	}
439 	power_supply_changed(psy);
440 }
441 
442 static void ab8500_charger_set_usb_connected(struct ab8500_charger *di,
443 	bool connected)
444 {
445 	if (connected != di->usb.charger_connected) {
446 		dev_dbg(di->dev, "USB connected:%i\n", connected);
447 		di->usb.charger_connected = connected;
448 
449 		if (!connected)
450 			di->flags.vbus_drop_end = false;
451 
452 		/*
453 		 * Sometimes the platform is configured not to support
454 		 * USB charging and no psy has been created, but we still
455 		 * will get these notifications.
456 		 */
457 		if (di->usb_chg.psy) {
458 			sysfs_notify(&di->usb_chg.psy->dev.kobj, NULL,
459 				     "present");
460 		}
461 
462 		if (connected) {
463 			mutex_lock(&di->charger_attached_mutex);
464 			mutex_unlock(&di->charger_attached_mutex);
465 
466 			if (is_ab8500(di->parent))
467 				queue_delayed_work(di->charger_wq,
468 					   &di->usb_charger_attached_work,
469 					   HZ);
470 		} else {
471 			cancel_delayed_work_sync(&di->usb_charger_attached_work);
472 			mutex_lock(&di->charger_attached_mutex);
473 			mutex_unlock(&di->charger_attached_mutex);
474 		}
475 	}
476 }
477 
478 /**
479  * ab8500_charger_get_ac_voltage() - get ac charger voltage
480  * @di:		pointer to the ab8500_charger structure
481  *
482  * Returns ac charger voltage in microvolt (on success)
483  */
484 static int ab8500_charger_get_ac_voltage(struct ab8500_charger *di)
485 {
486 	int vch, ret;
487 
488 	/* Only measure voltage if the charger is connected */
489 	if (di->ac.charger_connected) {
490 		ret = iio_read_channel_processed(di->adc_main_charger_v, &vch);
491 		if (ret < 0)
492 			dev_err(di->dev, "%s ADC conv failed,\n", __func__);
493 	} else {
494 		vch = 0;
495 	}
496 	/* Convert to microvolt, IIO returns millivolt */
497 	return vch * 1000;
498 }
499 
500 /**
501  * ab8500_charger_ac_cv() - check if the main charger is in CV mode
502  * @di:		pointer to the ab8500_charger structure
503  *
504  * Returns ac charger CV mode (on success) else error code
505  */
506 static int ab8500_charger_ac_cv(struct ab8500_charger *di)
507 {
508 	u8 val;
509 	int ret = 0;
510 
511 	/* Only check CV mode if the charger is online */
512 	if (di->ac.charger_online) {
513 		ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
514 			AB8500_CH_STATUS1_REG, &val);
515 		if (ret < 0) {
516 			dev_err(di->dev, "%s ab8500 read failed\n", __func__);
517 			return 0;
518 		}
519 
520 		if (val & MAIN_CH_CV_ON)
521 			ret = 1;
522 		else
523 			ret = 0;
524 	}
525 
526 	return ret;
527 }
528 
529 /**
530  * ab8500_charger_get_vbus_voltage() - get vbus voltage
531  * @di:		pointer to the ab8500_charger structure
532  *
533  * This function returns the vbus voltage.
534  * Returns vbus voltage in microvolt (on success)
535  */
536 static int ab8500_charger_get_vbus_voltage(struct ab8500_charger *di)
537 {
538 	int vch, ret;
539 
540 	/* Only measure voltage if the charger is connected */
541 	if (di->usb.charger_connected) {
542 		ret = iio_read_channel_processed(di->adc_vbus_v, &vch);
543 		if (ret < 0)
544 			dev_err(di->dev, "%s ADC conv failed,\n", __func__);
545 	} else {
546 		vch = 0;
547 	}
548 	/* Convert to microvolt, IIO returns millivolt */
549 	return vch * 1000;
550 }
551 
552 /**
553  * ab8500_charger_get_usb_current() - get usb charger current
554  * @di:		pointer to the ab8500_charger structure
555  *
556  * This function returns the usb charger current.
557  * Returns usb current in microamperes (on success) and error code on failure
558  */
559 static int ab8500_charger_get_usb_current(struct ab8500_charger *di)
560 {
561 	int ich, ret;
562 
563 	/* Only measure current if the charger is online */
564 	if (di->usb.charger_online) {
565 		ret = iio_read_channel_processed(di->adc_usb_charger_c, &ich);
566 		if (ret < 0)
567 			dev_err(di->dev, "%s ADC conv failed,\n", __func__);
568 	} else {
569 		ich = 0;
570 	}
571 	/* Return microamperes */
572 	return ich * 1000;
573 }
574 
575 /**
576  * ab8500_charger_get_ac_current() - get ac charger current
577  * @di:		pointer to the ab8500_charger structure
578  *
579  * This function returns the ac charger current.
580  * Returns ac current in microamperes (on success) and error code on failure.
581  */
582 static int ab8500_charger_get_ac_current(struct ab8500_charger *di)
583 {
584 	int ich, ret;
585 
586 	/* Only measure current if the charger is online */
587 	if (di->ac.charger_online) {
588 		ret = iio_read_channel_processed(di->adc_main_charger_c, &ich);
589 		if (ret < 0)
590 			dev_err(di->dev, "%s ADC conv failed,\n", __func__);
591 	} else {
592 		ich = 0;
593 	}
594 	/* Return microamperes */
595 	return ich * 1000;
596 }
597 
598 /**
599  * ab8500_charger_usb_cv() - check if the usb charger is in CV mode
600  * @di:		pointer to the ab8500_charger structure
601  *
602  * Returns ac charger CV mode (on success) else error code
603  */
604 static int ab8500_charger_usb_cv(struct ab8500_charger *di)
605 {
606 	int ret;
607 	u8 val;
608 
609 	/* Only check CV mode if the charger is online */
610 	if (di->usb.charger_online) {
611 		ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
612 			AB8500_CH_USBCH_STAT1_REG, &val);
613 		if (ret < 0) {
614 			dev_err(di->dev, "%s ab8500 read failed\n", __func__);
615 			return 0;
616 		}
617 
618 		if (val & USB_CH_CV_ON)
619 			ret = 1;
620 		else
621 			ret = 0;
622 	} else {
623 		ret = 0;
624 	}
625 
626 	return ret;
627 }
628 
629 /**
630  * ab8500_charger_detect_chargers() - Detect the connected chargers
631  * @di:		pointer to the ab8500_charger structure
632  * @probe:	if probe, don't delay and wait for HW
633  *
634  * Returns the type of charger connected.
635  * For USB it will not mean we can actually charge from it
636  * but that there is a USB cable connected that we have to
637  * identify. This is used during startup when we don't get
638  * interrupts of the charger detection
639  *
640  * Returns an integer value, that means,
641  * NO_PW_CONN  no power supply is connected
642  * AC_PW_CONN  if the AC power supply is connected
643  * USB_PW_CONN  if the USB power supply is connected
644  * AC_PW_CONN + USB_PW_CONN if USB and AC power supplies are both connected
645  */
646 static int ab8500_charger_detect_chargers(struct ab8500_charger *di, bool probe)
647 {
648 	int result = NO_PW_CONN;
649 	int ret;
650 	u8 val;
651 
652 	/* Check for AC charger */
653 	ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
654 		AB8500_CH_STATUS1_REG, &val);
655 	if (ret < 0) {
656 		dev_err(di->dev, "%s ab8500 read failed\n", __func__);
657 		return ret;
658 	}
659 
660 	if (val & MAIN_CH_DET)
661 		result = AC_PW_CONN;
662 
663 	/* Check for USB charger */
664 
665 	if (!probe) {
666 		/*
667 		 * AB8500 says VBUS_DET_DBNC1 & VBUS_DET_DBNC100
668 		 * when disconnecting ACA even though no
669 		 * charger was connected. Try waiting a little
670 		 * longer than the 100 ms of VBUS_DET_DBNC100...
671 		 */
672 		msleep(110);
673 	}
674 	ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
675 		AB8500_CH_USBCH_STAT1_REG, &val);
676 	if (ret < 0) {
677 		dev_err(di->dev, "%s ab8500 read failed\n", __func__);
678 		return ret;
679 	}
680 	dev_dbg(di->dev,
681 		"%s AB8500_CH_USBCH_STAT1_REG %x\n", __func__,
682 		val);
683 	if ((val & VBUS_DET_DBNC1) && (val & VBUS_DET_DBNC100))
684 		result |= USB_PW_CONN;
685 
686 	return result;
687 }
688 
689 /**
690  * ab8500_charger_max_usb_curr() - get the max curr for the USB type
691  * @di:			pointer to the ab8500_charger structure
692  * @link_status:	the identified USB type
693  *
694  * Get the maximum current that is allowed to be drawn from the host
695  * based on the USB type.
696  * Returns error code in case of failure else 0 on success
697  */
698 static int ab8500_charger_max_usb_curr(struct ab8500_charger *di,
699 		enum ab8500_charger_link_status link_status)
700 {
701 	int ret = 0;
702 
703 	di->usb_device_is_unrecognised = false;
704 
705 	/*
706 	 * Platform only supports USB 2.0.
707 	 * This means that charging current from USB source
708 	 * is maximum 500 mA. Every occurrence of USB_STAT_*_HOST_*
709 	 * should set USB_CH_IP_CUR_LVL_0P5.
710 	 */
711 
712 	switch (link_status) {
713 	case USB_STAT_STD_HOST_NC:
714 	case USB_STAT_STD_HOST_C_NS:
715 	case USB_STAT_STD_HOST_C_S:
716 		dev_dbg(di->dev, "USB Type - Standard host is "
717 			"detected through USB driver\n");
718 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
719 		di->is_aca_rid = 0;
720 		break;
721 	case USB_STAT_HOST_CHG_HS_CHIRP:
722 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
723 		di->is_aca_rid = 0;
724 		break;
725 	case USB_STAT_HOST_CHG_HS:
726 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
727 		di->is_aca_rid = 0;
728 		break;
729 	case USB_STAT_ACA_RID_C_HS:
730 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P9;
731 		di->is_aca_rid = 0;
732 		break;
733 	case USB_STAT_ACA_RID_A:
734 		/*
735 		 * Dedicated charger level minus maximum current accessory
736 		 * can consume (900mA). Closest level is 500mA
737 		 */
738 		dev_dbg(di->dev, "USB_STAT_ACA_RID_A detected\n");
739 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
740 		di->is_aca_rid = 1;
741 		break;
742 	case USB_STAT_ACA_RID_B:
743 		/*
744 		 * Dedicated charger level minus 120mA (20mA for ACA and
745 		 * 100mA for potential accessory). Closest level is 1300mA
746 		 */
747 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P3;
748 		dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status,
749 				di->max_usb_in_curr.usb_type_max_ua);
750 		di->is_aca_rid = 1;
751 		break;
752 	case USB_STAT_HOST_CHG_NM:
753 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
754 		di->is_aca_rid = 0;
755 		break;
756 	case USB_STAT_DEDICATED_CHG:
757 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P5;
758 		di->is_aca_rid = 0;
759 		break;
760 	case USB_STAT_ACA_RID_C_HS_CHIRP:
761 	case USB_STAT_ACA_RID_C_NM:
762 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P5;
763 		di->is_aca_rid = 1;
764 		break;
765 	case USB_STAT_NOT_CONFIGURED:
766 		if (di->vbus_detected) {
767 			di->usb_device_is_unrecognised = true;
768 			dev_dbg(di->dev, "USB Type - Legacy charger.\n");
769 			di->max_usb_in_curr.usb_type_max_ua =
770 						USB_CH_IP_CUR_LVL_1P5;
771 			break;
772 		}
773 		fallthrough;
774 	case USB_STAT_HM_IDGND:
775 		dev_err(di->dev, "USB Type - Charging not allowed\n");
776 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05;
777 		ret = -ENXIO;
778 		break;
779 	case USB_STAT_RESERVED:
780 		if (is_ab8500(di->parent)) {
781 			di->flags.vbus_collapse = true;
782 			dev_err(di->dev, "USB Type - USB_STAT_RESERVED "
783 						"VBUS has collapsed\n");
784 			ret = -ENXIO;
785 			break;
786 		} else {
787 			dev_dbg(di->dev, "USB Type - Charging not allowed\n");
788 			di->max_usb_in_curr.usb_type_max_ua =
789 						USB_CH_IP_CUR_LVL_0P05;
790 			dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d",
791 				link_status,
792 				di->max_usb_in_curr.usb_type_max_ua);
793 			ret = -ENXIO;
794 			break;
795 		}
796 	case USB_STAT_CARKIT_1:
797 	case USB_STAT_CARKIT_2:
798 	case USB_STAT_ACA_DOCK_CHARGER:
799 	case USB_STAT_CHARGER_LINE_1:
800 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
801 		dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status,
802 				di->max_usb_in_curr.usb_type_max_ua);
803 		break;
804 	case USB_STAT_NOT_VALID_LINK:
805 		dev_err(di->dev, "USB Type invalid - try charging anyway\n");
806 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
807 		break;
808 
809 	default:
810 		dev_err(di->dev, "USB Type - Unknown\n");
811 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05;
812 		ret = -ENXIO;
813 		break;
814 	}
815 
816 	di->max_usb_in_curr.set_max_ua = di->max_usb_in_curr.usb_type_max_ua;
817 	dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d",
818 		link_status, di->max_usb_in_curr.set_max_ua);
819 
820 	return ret;
821 }
822 
823 /**
824  * ab8500_charger_read_usb_type() - read the type of usb connected
825  * @di:		pointer to the ab8500_charger structure
826  *
827  * Detect the type of the plugged USB
828  * Returns error code in case of failure else 0 on success
829  */
830 static int ab8500_charger_read_usb_type(struct ab8500_charger *di)
831 {
832 	int ret;
833 	u8 val;
834 
835 	ret = abx500_get_register_interruptible(di->dev,
836 		AB8500_INTERRUPT, AB8500_IT_SOURCE21_REG, &val);
837 	if (ret < 0) {
838 		dev_err(di->dev, "%s ab8500 read failed\n", __func__);
839 		return ret;
840 	}
841 	if (is_ab8500(di->parent))
842 		ret = abx500_get_register_interruptible(di->dev, AB8500_USB,
843 			AB8500_USB_LINE_STAT_REG, &val);
844 	else
845 		ret = abx500_get_register_interruptible(di->dev,
846 			AB8500_USB, AB8500_USB_LINK1_STAT_REG, &val);
847 	if (ret < 0) {
848 		dev_err(di->dev, "%s ab8500 read failed\n", __func__);
849 		return ret;
850 	}
851 
852 	/* get the USB type */
853 	if (is_ab8500(di->parent))
854 		val = (val & AB8500_USB_LINK_STATUS) >> USB_LINK_STATUS_SHIFT;
855 	else
856 		val = (val & AB8505_USB_LINK_STATUS) >> USB_LINK_STATUS_SHIFT;
857 	ret = ab8500_charger_max_usb_curr(di,
858 		(enum ab8500_charger_link_status) val);
859 
860 	return ret;
861 }
862 
863 /**
864  * ab8500_charger_detect_usb_type() - get the type of usb connected
865  * @di:		pointer to the ab8500_charger structure
866  *
867  * Detect the type of the plugged USB
868  * Returns error code in case of failure else 0 on success
869  */
870 static int ab8500_charger_detect_usb_type(struct ab8500_charger *di)
871 {
872 	int i, ret;
873 	u8 val;
874 
875 	/*
876 	 * On getting the VBUS rising edge detect interrupt there
877 	 * is a 250ms delay after which the register UsbLineStatus
878 	 * is filled with valid data.
879 	 */
880 	for (i = 0; i < 10; i++) {
881 		msleep(250);
882 		ret = abx500_get_register_interruptible(di->dev,
883 			AB8500_INTERRUPT, AB8500_IT_SOURCE21_REG,
884 			&val);
885 		dev_dbg(di->dev, "%s AB8500_IT_SOURCE21_REG %x\n",
886 			__func__, val);
887 		if (ret < 0) {
888 			dev_err(di->dev, "%s ab8500 read failed\n", __func__);
889 			return ret;
890 		}
891 
892 		if (is_ab8500(di->parent))
893 			ret = abx500_get_register_interruptible(di->dev,
894 				AB8500_USB, AB8500_USB_LINE_STAT_REG, &val);
895 		else
896 			ret = abx500_get_register_interruptible(di->dev,
897 				AB8500_USB, AB8500_USB_LINK1_STAT_REG, &val);
898 		if (ret < 0) {
899 			dev_err(di->dev, "%s ab8500 read failed\n", __func__);
900 			return ret;
901 		}
902 		dev_dbg(di->dev, "%s AB8500_USB_LINE_STAT_REG %x\n", __func__,
903 			val);
904 		/*
905 		 * Until the IT source register is read the UsbLineStatus
906 		 * register is not updated, hence doing the same
907 		 * Revisit this:
908 		 */
909 
910 		/* get the USB type */
911 		if (is_ab8500(di->parent))
912 			val = (val & AB8500_USB_LINK_STATUS) >>
913 							USB_LINK_STATUS_SHIFT;
914 		else
915 			val = (val & AB8505_USB_LINK_STATUS) >>
916 							USB_LINK_STATUS_SHIFT;
917 		if (val)
918 			break;
919 	}
920 	ret = ab8500_charger_max_usb_curr(di,
921 		(enum ab8500_charger_link_status) val);
922 
923 	return ret;
924 }
925 
926 /*
927  * This array maps the raw hex value to charger voltage used by the AB8500
928  * Values taken from the UM0836, in microvolt.
929  */
930 static int ab8500_charger_voltage_map[] = {
931 	3500000,
932 	3525000,
933 	3550000,
934 	3575000,
935 	3600000,
936 	3625000,
937 	3650000,
938 	3675000,
939 	3700000,
940 	3725000,
941 	3750000,
942 	3775000,
943 	3800000,
944 	3825000,
945 	3850000,
946 	3875000,
947 	3900000,
948 	3925000,
949 	3950000,
950 	3975000,
951 	4000000,
952 	4025000,
953 	4050000,
954 	4060000,
955 	4070000,
956 	4080000,
957 	4090000,
958 	4100000,
959 	4110000,
960 	4120000,
961 	4130000,
962 	4140000,
963 	4150000,
964 	4160000,
965 	4170000,
966 	4180000,
967 	4190000,
968 	4200000,
969 	4210000,
970 	4220000,
971 	4230000,
972 	4240000,
973 	4250000,
974 	4260000,
975 	4270000,
976 	4280000,
977 	4290000,
978 	4300000,
979 	4310000,
980 	4320000,
981 	4330000,
982 	4340000,
983 	4350000,
984 	4360000,
985 	4370000,
986 	4380000,
987 	4390000,
988 	4400000,
989 	4410000,
990 	4420000,
991 	4430000,
992 	4440000,
993 	4450000,
994 	4460000,
995 	4470000,
996 	4480000,
997 	4490000,
998 	4500000,
999 	4510000,
1000 	4520000,
1001 	4530000,
1002 	4540000,
1003 	4550000,
1004 	4560000,
1005 	4570000,
1006 	4580000,
1007 	4590000,
1008 	4600000,
1009 };
1010 
1011 static int ab8500_voltage_to_regval(int voltage_uv)
1012 {
1013 	int i;
1014 
1015 	/* Special case for voltage below 3.5V */
1016 	if (voltage_uv < ab8500_charger_voltage_map[0])
1017 		return LOW_VOLT_REG;
1018 
1019 	for (i = 1; i < ARRAY_SIZE(ab8500_charger_voltage_map); i++) {
1020 		if (voltage_uv < ab8500_charger_voltage_map[i])
1021 			return i - 1;
1022 	}
1023 
1024 	/* If not last element, return error */
1025 	i = ARRAY_SIZE(ab8500_charger_voltage_map) - 1;
1026 	if (voltage_uv == ab8500_charger_voltage_map[i])
1027 		return i;
1028 	else
1029 		return -1;
1030 }
1031 
1032 /* This array maps the raw register value to charger input current */
1033 static int ab8500_charge_input_curr_map[] = {
1034 	50000, 98000, 193000, 290000, 380000, 450000, 500000, 600000,
1035 	700000, 800000, 900000, 1000000, 1100000, 1300000, 1400000, 1500000,
1036 };
1037 
1038 /* This array maps the raw register value to charger output current */
1039 static int ab8500_charge_output_curr_map[] = {
1040 	100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000,
1041 	900000, 1000000, 1100000, 1200000, 1300000, 1400000, 1500000, 1500000,
1042 };
1043 
1044 static int ab8500_current_to_regval(struct ab8500_charger *di, int curr_ua)
1045 {
1046 	int i;
1047 
1048 	if (curr_ua < ab8500_charge_output_curr_map[0])
1049 		return 0;
1050 
1051 	for (i = 0; i < ARRAY_SIZE(ab8500_charge_output_curr_map); i++) {
1052 		if (curr_ua < ab8500_charge_output_curr_map[i])
1053 			return i - 1;
1054 	}
1055 
1056 	/* If not last element, return error */
1057 	i =  ARRAY_SIZE(ab8500_charge_output_curr_map) - 1;
1058 	if (curr_ua == ab8500_charge_output_curr_map[i])
1059 		return i;
1060 	else
1061 		return -1;
1062 }
1063 
1064 static int ab8500_vbus_in_curr_to_regval(struct ab8500_charger *di, int curr_ua)
1065 {
1066 	int i;
1067 
1068 	if (curr_ua < ab8500_charge_input_curr_map[0])
1069 		return 0;
1070 
1071 	for (i = 0; i < ARRAY_SIZE(ab8500_charge_input_curr_map); i++) {
1072 		if (curr_ua < ab8500_charge_input_curr_map[i])
1073 			return i - 1;
1074 	}
1075 
1076 	/* If not last element, return error */
1077 	i =  ARRAY_SIZE(ab8500_charge_input_curr_map) - 1;
1078 	if (curr_ua == ab8500_charge_input_curr_map[i])
1079 		return i;
1080 	else
1081 		return -1;
1082 }
1083 
1084 /**
1085  * ab8500_charger_get_usb_cur() - get usb current
1086  * @di:		pointer to the ab8500_charger structure
1087  *
1088  * The usb stack provides the maximum current that can be drawn from
1089  * the standard usb host. This will be in uA.
1090  * This function converts current in uA to a value that can be written
1091  * to the register. Returns -1 if charging is not allowed
1092  */
1093 static int ab8500_charger_get_usb_cur(struct ab8500_charger *di)
1094 {
1095 	int ret = 0;
1096 	switch (di->usb_state.usb_current_ua) {
1097 	case 100000:
1098 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P09;
1099 		break;
1100 	case 200000:
1101 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P19;
1102 		break;
1103 	case 300000:
1104 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P29;
1105 		break;
1106 	case 400000:
1107 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P38;
1108 		break;
1109 	case 500000:
1110 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
1111 		break;
1112 	default:
1113 		di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05;
1114 		ret = -EPERM;
1115 		break;
1116 	}
1117 	di->max_usb_in_curr.set_max_ua = di->max_usb_in_curr.usb_type_max_ua;
1118 	return ret;
1119 }
1120 
1121 /**
1122  * ab8500_charger_check_continue_stepping() - Check to allow stepping
1123  * @di:		pointer to the ab8500_charger structure
1124  * @reg:	select what charger register to check
1125  *
1126  * Check if current stepping should be allowed to continue.
1127  * Checks if charger source has not collapsed. If it has, further stepping
1128  * is not allowed.
1129  */
1130 static bool ab8500_charger_check_continue_stepping(struct ab8500_charger *di,
1131 						   int reg)
1132 {
1133 	if (reg == AB8500_USBCH_IPT_CRNTLVL_REG)
1134 		return !di->flags.vbus_drop_end;
1135 	else
1136 		return true;
1137 }
1138 
1139 /**
1140  * ab8500_charger_set_current() - set charger current
1141  * @di:		pointer to the ab8500_charger structure
1142  * @ich_ua:	charger current, in uA
1143  * @reg:	select what charger register to set
1144  *
1145  * Set charger current.
1146  * There is no state machine in the AB to step up/down the charger
1147  * current to avoid dips and spikes on MAIN, VBUS and VBAT when
1148  * charging is started. Instead we need to implement
1149  * this charger current step-up/down here.
1150  * Returns error code in case of failure else 0(on success)
1151  */
1152 static int ab8500_charger_set_current(struct ab8500_charger *di,
1153 	int ich_ua, int reg)
1154 {
1155 	int ret = 0;
1156 	int curr_index, prev_curr_index, shift_value, i;
1157 	u8 reg_value;
1158 	u32 step_udelay;
1159 	bool no_stepping = false;
1160 
1161 	atomic_inc(&di->current_stepping_sessions);
1162 
1163 	ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
1164 		reg, &reg_value);
1165 	if (ret < 0) {
1166 		dev_err(di->dev, "%s read failed\n", __func__);
1167 		goto exit_set_current;
1168 	}
1169 
1170 	switch (reg) {
1171 	case AB8500_MCH_IPT_CURLVL_REG:
1172 		shift_value = MAIN_CH_INPUT_CURR_SHIFT;
1173 		prev_curr_index = (reg_value >> shift_value);
1174 		curr_index = ab8500_current_to_regval(di, ich_ua);
1175 		step_udelay = STEP_UDELAY;
1176 		if (!di->ac.charger_connected)
1177 			no_stepping = true;
1178 		break;
1179 	case AB8500_USBCH_IPT_CRNTLVL_REG:
1180 		shift_value = VBUS_IN_CURR_LIM_SHIFT;
1181 		prev_curr_index = (reg_value >> shift_value);
1182 		curr_index = ab8500_vbus_in_curr_to_regval(di, ich_ua);
1183 		step_udelay = STEP_UDELAY * 100;
1184 
1185 		if (!di->usb.charger_connected)
1186 			no_stepping = true;
1187 		break;
1188 	case AB8500_CH_OPT_CRNTLVL_REG:
1189 		shift_value = 0;
1190 		prev_curr_index = (reg_value >> shift_value);
1191 		curr_index = ab8500_current_to_regval(di, ich_ua);
1192 		step_udelay = STEP_UDELAY;
1193 		if (curr_index && (curr_index - prev_curr_index) > 1)
1194 			step_udelay *= 100;
1195 
1196 		if (!di->usb.charger_connected && !di->ac.charger_connected)
1197 			no_stepping = true;
1198 
1199 		break;
1200 	default:
1201 		dev_err(di->dev, "%s current register not valid\n", __func__);
1202 		ret = -ENXIO;
1203 		goto exit_set_current;
1204 	}
1205 
1206 	if (curr_index < 0) {
1207 		dev_err(di->dev, "requested current limit out-of-range\n");
1208 		ret = -ENXIO;
1209 		goto exit_set_current;
1210 	}
1211 
1212 	/* only update current if it's been changed */
1213 	if (prev_curr_index == curr_index) {
1214 		dev_dbg(di->dev, "%s current not changed for reg: 0x%02x\n",
1215 			__func__, reg);
1216 		ret = 0;
1217 		goto exit_set_current;
1218 	}
1219 
1220 	dev_dbg(di->dev, "%s set charger current: %d uA for reg: 0x%02x\n",
1221 		__func__, ich_ua, reg);
1222 
1223 	if (no_stepping) {
1224 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1225 					reg, (u8)curr_index << shift_value);
1226 		if (ret)
1227 			dev_err(di->dev, "%s write failed\n", __func__);
1228 	} else if (prev_curr_index > curr_index) {
1229 		for (i = prev_curr_index - 1; i >= curr_index; i--) {
1230 			dev_dbg(di->dev, "curr change_1 to: %x for 0x%02x\n",
1231 				(u8) i << shift_value, reg);
1232 			ret = abx500_set_register_interruptible(di->dev,
1233 				AB8500_CHARGER, reg, (u8)i << shift_value);
1234 			if (ret) {
1235 				dev_err(di->dev, "%s write failed\n", __func__);
1236 				goto exit_set_current;
1237 			}
1238 			if (i != curr_index)
1239 				usleep_range(step_udelay, step_udelay * 2);
1240 		}
1241 	} else {
1242 		bool allow = true;
1243 		for (i = prev_curr_index + 1; i <= curr_index && allow; i++) {
1244 			dev_dbg(di->dev, "curr change_2 to: %x for 0x%02x\n",
1245 				(u8)i << shift_value, reg);
1246 			ret = abx500_set_register_interruptible(di->dev,
1247 				AB8500_CHARGER, reg, (u8)i << shift_value);
1248 			if (ret) {
1249 				dev_err(di->dev, "%s write failed\n", __func__);
1250 				goto exit_set_current;
1251 			}
1252 			if (i != curr_index)
1253 				usleep_range(step_udelay, step_udelay * 2);
1254 
1255 			allow = ab8500_charger_check_continue_stepping(di, reg);
1256 		}
1257 	}
1258 
1259 exit_set_current:
1260 	atomic_dec(&di->current_stepping_sessions);
1261 
1262 	return ret;
1263 }
1264 
1265 /**
1266  * ab8500_charger_set_vbus_in_curr() - set VBUS input current limit
1267  * @di:		pointer to the ab8500_charger structure
1268  * @ich_in_ua:	charger input current limit in microampere
1269  *
1270  * Sets the current that can be drawn from the USB host
1271  * Returns error code in case of failure else 0(on success)
1272  */
1273 static int ab8500_charger_set_vbus_in_curr(struct ab8500_charger *di,
1274 		int ich_in_ua)
1275 {
1276 	int min_value;
1277 	int ret;
1278 
1279 	/* We should always use to lowest current limit */
1280 	min_value = min(di->bm->chg_params->usb_curr_max_ua, ich_in_ua);
1281 	if (di->max_usb_in_curr.set_max_ua > 0)
1282 		min_value = min(di->max_usb_in_curr.set_max_ua, min_value);
1283 
1284 	if (di->usb_state.usb_current_ua >= 0)
1285 		min_value = min(di->usb_state.usb_current_ua, min_value);
1286 
1287 	switch (min_value) {
1288 	case 100000:
1289 		if (di->vbat < VBAT_TRESH_IP_CUR_RED)
1290 			min_value = USB_CH_IP_CUR_LVL_0P05;
1291 		break;
1292 	case 500000:
1293 		if (di->vbat < VBAT_TRESH_IP_CUR_RED)
1294 			min_value = USB_CH_IP_CUR_LVL_0P45;
1295 		break;
1296 	default:
1297 		break;
1298 	}
1299 
1300 	dev_info(di->dev, "VBUS input current limit set to %d uA\n", min_value);
1301 
1302 	mutex_lock(&di->usb_ipt_crnt_lock);
1303 	ret = ab8500_charger_set_current(di, min_value,
1304 		AB8500_USBCH_IPT_CRNTLVL_REG);
1305 	mutex_unlock(&di->usb_ipt_crnt_lock);
1306 
1307 	return ret;
1308 }
1309 
1310 /**
1311  * ab8500_charger_set_main_in_curr() - set main charger input current
1312  * @di:		pointer to the ab8500_charger structure
1313  * @ich_in_ua:	input charger current, in uA
1314  *
1315  * Set main charger input current.
1316  * Returns error code in case of failure else 0(on success)
1317  */
1318 static int ab8500_charger_set_main_in_curr(struct ab8500_charger *di,
1319 	int ich_in_ua)
1320 {
1321 	return ab8500_charger_set_current(di, ich_in_ua,
1322 		AB8500_MCH_IPT_CURLVL_REG);
1323 }
1324 
1325 /**
1326  * ab8500_charger_set_output_curr() - set charger output current
1327  * @di:		pointer to the ab8500_charger structure
1328  * @ich_out_ua:	output charger current, in uA
1329  *
1330  * Set charger output current.
1331  * Returns error code in case of failure else 0(on success)
1332  */
1333 static int ab8500_charger_set_output_curr(struct ab8500_charger *di,
1334 	int ich_out_ua)
1335 {
1336 	return ab8500_charger_set_current(di, ich_out_ua,
1337 		AB8500_CH_OPT_CRNTLVL_REG);
1338 }
1339 
1340 /**
1341  * ab8500_charger_led_en() - turn on/off chargign led
1342  * @di:		pointer to the ab8500_charger structure
1343  * @on:		flag to turn on/off the chargign led
1344  *
1345  * Power ON/OFF charging LED indication
1346  * Returns error code in case of failure else 0(on success)
1347  */
1348 static int ab8500_charger_led_en(struct ab8500_charger *di, int on)
1349 {
1350 	int ret;
1351 
1352 	if (on) {
1353 		/* Power ON charging LED indicator, set LED current to 5mA */
1354 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1355 			AB8500_LED_INDICATOR_PWM_CTRL,
1356 			(LED_IND_CUR_5MA | LED_INDICATOR_PWM_ENA));
1357 		if (ret) {
1358 			dev_err(di->dev, "Power ON LED failed\n");
1359 			return ret;
1360 		}
1361 		/* LED indicator PWM duty cycle 252/256 */
1362 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1363 			AB8500_LED_INDICATOR_PWM_DUTY,
1364 			LED_INDICATOR_PWM_DUTY_252_256);
1365 		if (ret) {
1366 			dev_err(di->dev, "Set LED PWM duty cycle failed\n");
1367 			return ret;
1368 		}
1369 	} else {
1370 		/* Power off charging LED indicator */
1371 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1372 			AB8500_LED_INDICATOR_PWM_CTRL,
1373 			LED_INDICATOR_PWM_DIS);
1374 		if (ret) {
1375 			dev_err(di->dev, "Power-off LED failed\n");
1376 			return ret;
1377 		}
1378 	}
1379 
1380 	return ret;
1381 }
1382 
1383 /**
1384  * ab8500_charger_ac_en() - enable or disable ac charging
1385  * @di:		pointer to the ab8500_charger structure
1386  * @enable:	enable/disable flag
1387  * @vset_uv:	charging voltage in microvolt
1388  * @iset_ua:	charging current in microampere
1389  *
1390  * Enable/Disable AC/Mains charging and turns on/off the charging led
1391  * respectively.
1392  **/
1393 static int ab8500_charger_ac_en(struct ux500_charger *charger,
1394 	int enable, int vset_uv, int iset_ua)
1395 {
1396 	int ret;
1397 	int volt_index;
1398 	int curr_index;
1399 	int input_curr_index;
1400 	u8 overshoot = 0;
1401 
1402 	struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger);
1403 
1404 	if (enable) {
1405 		/* Check if AC is connected */
1406 		if (!di->ac.charger_connected) {
1407 			dev_err(di->dev, "AC charger not connected\n");
1408 			return -ENXIO;
1409 		}
1410 
1411 		/* Enable AC charging */
1412 		dev_dbg(di->dev, "Enable AC: %duV %duA\n", vset_uv, iset_ua);
1413 
1414 		/*
1415 		 * Due to a bug in AB8500, BTEMP_HIGH/LOW interrupts
1416 		 * will be triggered every time we enable the VDD ADC supply.
1417 		 * This will turn off charging for a short while.
1418 		 * It can be avoided by having the supply on when
1419 		 * there is a charger enabled. Normally the VDD ADC supply
1420 		 * is enabled every time a GPADC conversion is triggered.
1421 		 * We will force it to be enabled from this driver to have
1422 		 * the GPADC module independent of the AB8500 chargers
1423 		 */
1424 		if (!di->vddadc_en_ac) {
1425 			ret = regulator_enable(di->regu);
1426 			if (ret)
1427 				dev_warn(di->dev,
1428 					"Failed to enable regulator\n");
1429 			else
1430 				di->vddadc_en_ac = true;
1431 		}
1432 
1433 		/* Check if the requested voltage or current is valid */
1434 		volt_index = ab8500_voltage_to_regval(vset_uv);
1435 		curr_index = ab8500_current_to_regval(di, iset_ua);
1436 		input_curr_index = ab8500_current_to_regval(di,
1437 			di->bm->chg_params->ac_curr_max_ua);
1438 		if (volt_index < 0 || curr_index < 0 || input_curr_index < 0) {
1439 			dev_err(di->dev,
1440 				"Charger voltage or current too high, "
1441 				"charging not started\n");
1442 			return -ENXIO;
1443 		}
1444 
1445 		/* ChVoltLevel: maximum battery charging voltage */
1446 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1447 			AB8500_CH_VOLT_LVL_REG, (u8) volt_index);
1448 		if (ret) {
1449 			dev_err(di->dev, "%s write failed\n", __func__);
1450 			return ret;
1451 		}
1452 		/* MainChInputCurr: current that can be drawn from the charger*/
1453 		ret = ab8500_charger_set_main_in_curr(di,
1454 			di->bm->chg_params->ac_curr_max_ua);
1455 		if (ret) {
1456 			dev_err(di->dev, "%s Failed to set MainChInputCurr\n",
1457 				__func__);
1458 			return ret;
1459 		}
1460 		/* ChOutputCurentLevel: protected output current */
1461 		ret = ab8500_charger_set_output_curr(di, iset_ua);
1462 		if (ret) {
1463 			dev_err(di->dev, "%s "
1464 				"Failed to set ChOutputCurentLevel\n",
1465 				__func__);
1466 			return ret;
1467 		}
1468 
1469 		/* Check if VBAT overshoot control should be enabled */
1470 		if (!di->bm->enable_overshoot)
1471 			overshoot = MAIN_CH_NO_OVERSHOOT_ENA_N;
1472 
1473 		/* Enable Main Charger */
1474 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1475 			AB8500_MCH_CTRL1, MAIN_CH_ENA | overshoot);
1476 		if (ret) {
1477 			dev_err(di->dev, "%s write failed\n", __func__);
1478 			return ret;
1479 		}
1480 
1481 		/* Power on charging LED indication */
1482 		ret = ab8500_charger_led_en(di, true);
1483 		if (ret < 0)
1484 			dev_err(di->dev, "failed to enable LED\n");
1485 
1486 		di->ac.charger_online = 1;
1487 	} else {
1488 		/* Disable AC charging */
1489 		if (is_ab8500_1p1_or_earlier(di->parent)) {
1490 			/*
1491 			 * For ABB revision 1.0 and 1.1 there is a bug in the
1492 			 * watchdog logic. That means we have to continuously
1493 			 * kick the charger watchdog even when no charger is
1494 			 * connected. This is only valid once the AC charger
1495 			 * has been enabled. This is a bug that is not handled
1496 			 * by the algorithm and the watchdog have to be kicked
1497 			 * by the charger driver when the AC charger
1498 			 * is disabled
1499 			 */
1500 			if (di->ac_conn) {
1501 				queue_delayed_work(di->charger_wq,
1502 					&di->kick_wd_work,
1503 					round_jiffies(WD_KICK_INTERVAL));
1504 			}
1505 
1506 			/*
1507 			 * We can't turn off charging completely
1508 			 * due to a bug in AB8500 cut1.
1509 			 * If we do, charging will not start again.
1510 			 * That is why we set the lowest voltage
1511 			 * and current possible
1512 			 */
1513 			ret = abx500_set_register_interruptible(di->dev,
1514 				AB8500_CHARGER,
1515 				AB8500_CH_VOLT_LVL_REG, CH_VOL_LVL_3P5);
1516 			if (ret) {
1517 				dev_err(di->dev,
1518 					"%s write failed\n", __func__);
1519 				return ret;
1520 			}
1521 
1522 			ret = ab8500_charger_set_output_curr(di, 0);
1523 			if (ret) {
1524 				dev_err(di->dev, "%s "
1525 					"Failed to set ChOutputCurentLevel\n",
1526 					__func__);
1527 				return ret;
1528 			}
1529 		} else {
1530 			ret = abx500_set_register_interruptible(di->dev,
1531 				AB8500_CHARGER,
1532 				AB8500_MCH_CTRL1, 0);
1533 			if (ret) {
1534 				dev_err(di->dev,
1535 					"%s write failed\n", __func__);
1536 				return ret;
1537 			}
1538 		}
1539 
1540 		ret = ab8500_charger_led_en(di, false);
1541 		if (ret < 0)
1542 			dev_err(di->dev, "failed to disable LED\n");
1543 
1544 		di->ac.charger_online = 0;
1545 		di->ac.wd_expired = false;
1546 
1547 		/* Disable regulator if enabled */
1548 		if (di->vddadc_en_ac) {
1549 			regulator_disable(di->regu);
1550 			di->vddadc_en_ac = false;
1551 		}
1552 
1553 		dev_dbg(di->dev, "%s Disabled AC charging\n", __func__);
1554 	}
1555 	ab8500_power_supply_changed(di, di->ac_chg.psy);
1556 
1557 	return ret;
1558 }
1559 
1560 /**
1561  * ab8500_charger_usb_en() - enable usb charging
1562  * @di:		pointer to the ab8500_charger structure
1563  * @enable:	enable/disable flag
1564  * @vset_uv:	charging voltage in microvolt
1565  * @ich_out_ua:	charger output current in microampere
1566  *
1567  * Enable/Disable USB charging and turns on/off the charging led respectively.
1568  * Returns error code in case of failure else 0(on success)
1569  */
1570 static int ab8500_charger_usb_en(struct ux500_charger *charger,
1571 	int enable, int vset_uv, int ich_out_ua)
1572 {
1573 	int ret;
1574 	int volt_index;
1575 	int curr_index;
1576 	u8 overshoot = 0;
1577 
1578 	struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger);
1579 
1580 	if (enable) {
1581 		/* Check if USB is connected */
1582 		if (!di->usb.charger_connected) {
1583 			dev_err(di->dev, "USB charger not connected\n");
1584 			return -ENXIO;
1585 		}
1586 
1587 		/*
1588 		 * Due to a bug in AB8500, BTEMP_HIGH/LOW interrupts
1589 		 * will be triggered every time we enable the VDD ADC supply.
1590 		 * This will turn off charging for a short while.
1591 		 * It can be avoided by having the supply on when
1592 		 * there is a charger enabled. Normally the VDD ADC supply
1593 		 * is enabled every time a GPADC conversion is triggered.
1594 		 * We will force it to be enabled from this driver to have
1595 		 * the GPADC module independent of the AB8500 chargers
1596 		 */
1597 		if (!di->vddadc_en_usb) {
1598 			ret = regulator_enable(di->regu);
1599 			if (ret)
1600 				dev_warn(di->dev,
1601 					"Failed to enable regulator\n");
1602 			else
1603 				di->vddadc_en_usb = true;
1604 		}
1605 
1606 		/* Enable USB charging */
1607 		dev_dbg(di->dev, "Enable USB: %d uV %d uA\n", vset_uv, ich_out_ua);
1608 
1609 		/* Check if the requested voltage or current is valid */
1610 		volt_index = ab8500_voltage_to_regval(vset_uv);
1611 		curr_index = ab8500_current_to_regval(di, ich_out_ua);
1612 		if (volt_index < 0 || curr_index < 0) {
1613 			dev_err(di->dev,
1614 				"Charger voltage or current too high, "
1615 				"charging not started\n");
1616 			return -ENXIO;
1617 		}
1618 
1619 		/*
1620 		 * ChVoltLevel: max voltage up to which battery can be
1621 		 * charged
1622 		 */
1623 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1624 			AB8500_CH_VOLT_LVL_REG, (u8) volt_index);
1625 		if (ret) {
1626 			dev_err(di->dev, "%s write failed\n", __func__);
1627 			return ret;
1628 		}
1629 		/* Check if VBAT overshoot control should be enabled */
1630 		if (!di->bm->enable_overshoot)
1631 			overshoot = USB_CHG_NO_OVERSHOOT_ENA_N;
1632 
1633 		/* Enable USB Charger */
1634 		dev_dbg(di->dev,
1635 			"Enabling USB with write to AB8500_USBCH_CTRL1_REG\n");
1636 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1637 			AB8500_USBCH_CTRL1_REG, USB_CH_ENA | overshoot);
1638 		if (ret) {
1639 			dev_err(di->dev, "%s write failed\n", __func__);
1640 			return ret;
1641 		}
1642 
1643 		/* If success power on charging LED indication */
1644 		ret = ab8500_charger_led_en(di, true);
1645 		if (ret < 0)
1646 			dev_err(di->dev, "failed to enable LED\n");
1647 
1648 		di->usb.charger_online = 1;
1649 
1650 		/* USBChInputCurr: current that can be drawn from the usb */
1651 		ret = ab8500_charger_set_vbus_in_curr(di,
1652 					di->max_usb_in_curr.usb_type_max_ua);
1653 		if (ret) {
1654 			dev_err(di->dev, "setting USBChInputCurr failed\n");
1655 			return ret;
1656 		}
1657 
1658 		/* ChOutputCurentLevel: protected output current */
1659 		ret = ab8500_charger_set_output_curr(di, ich_out_ua);
1660 		if (ret) {
1661 			dev_err(di->dev, "%s "
1662 				"Failed to set ChOutputCurentLevel\n",
1663 				__func__);
1664 			return ret;
1665 		}
1666 
1667 		queue_delayed_work(di->charger_wq, &di->check_vbat_work, HZ);
1668 
1669 	} else {
1670 		/* Disable USB charging */
1671 		dev_dbg(di->dev, "%s Disabled USB charging\n", __func__);
1672 		ret = abx500_set_register_interruptible(di->dev,
1673 			AB8500_CHARGER,
1674 			AB8500_USBCH_CTRL1_REG, 0);
1675 		if (ret) {
1676 			dev_err(di->dev,
1677 				"%s write failed\n", __func__);
1678 			return ret;
1679 		}
1680 
1681 		ret = ab8500_charger_led_en(di, false);
1682 		if (ret < 0)
1683 			dev_err(di->dev, "failed to disable LED\n");
1684 		/* USBChInputCurr: current that can be drawn from the usb */
1685 		ret = ab8500_charger_set_vbus_in_curr(di, 0);
1686 		if (ret) {
1687 			dev_err(di->dev, "setting USBChInputCurr failed\n");
1688 			return ret;
1689 		}
1690 
1691 		/* ChOutputCurentLevel: protected output current */
1692 		ret = ab8500_charger_set_output_curr(di, 0);
1693 		if (ret) {
1694 			dev_err(di->dev, "%s "
1695 				"Failed to reset ChOutputCurentLevel\n",
1696 				__func__);
1697 			return ret;
1698 		}
1699 		di->usb.charger_online = 0;
1700 		di->usb.wd_expired = false;
1701 
1702 		/* Disable regulator if enabled */
1703 		if (di->vddadc_en_usb) {
1704 			regulator_disable(di->regu);
1705 			di->vddadc_en_usb = false;
1706 		}
1707 
1708 		dev_dbg(di->dev, "%s Disabled USB charging\n", __func__);
1709 
1710 		/* Cancel any pending Vbat check work */
1711 		cancel_delayed_work(&di->check_vbat_work);
1712 
1713 	}
1714 	ab8500_power_supply_changed(di, di->usb_chg.psy);
1715 
1716 	return ret;
1717 }
1718 
1719 /**
1720  * ab8500_charger_usb_check_enable() - enable usb charging
1721  * @charger:	pointer to the ux500_charger structure
1722  * @vset_uv:	charging voltage in microvolt
1723  * @iset_ua:	charger output current in microampere
1724  *
1725  * Check if the VBUS charger has been disconnected and reconnected without
1726  * AB8500 rising an interrupt. Returns 0 on success.
1727  */
1728 static int ab8500_charger_usb_check_enable(struct ux500_charger *charger,
1729 	int vset_uv, int iset_ua)
1730 {
1731 	u8 usbch_ctrl1 = 0;
1732 	int ret = 0;
1733 
1734 	struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger);
1735 
1736 	if (!di->usb.charger_connected)
1737 		return ret;
1738 
1739 	ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
1740 				AB8500_USBCH_CTRL1_REG, &usbch_ctrl1);
1741 	if (ret < 0) {
1742 		dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
1743 		return ret;
1744 	}
1745 	dev_dbg(di->dev, "USB charger ctrl: 0x%02x\n", usbch_ctrl1);
1746 
1747 	if (!(usbch_ctrl1 & USB_CH_ENA)) {
1748 		dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n");
1749 
1750 		ret = abx500_mask_and_set_register_interruptible(di->dev,
1751 					AB8500_CHARGER, AB8500_CHARGER_CTRL,
1752 					DROP_COUNT_RESET, DROP_COUNT_RESET);
1753 		if (ret < 0) {
1754 			dev_err(di->dev, "ab8500 write failed %d\n", __LINE__);
1755 			return ret;
1756 		}
1757 
1758 		ret = ab8500_charger_usb_en(&di->usb_chg, true, vset_uv, iset_ua);
1759 		if (ret < 0) {
1760 			dev_err(di->dev, "Failed to enable VBUS charger %d\n",
1761 					__LINE__);
1762 			return ret;
1763 		}
1764 	}
1765 	return ret;
1766 }
1767 
1768 /**
1769  * ab8500_charger_ac_check_enable() - enable usb charging
1770  * @charger:	pointer to the ux500_charger structure
1771  * @vset_uv:	charging voltage in microvolt
1772  * @iset_ua:	charger output current in micrompere
1773  *
1774  * Check if the AC charger has been disconnected and reconnected without
1775  * AB8500 rising an interrupt. Returns 0 on success.
1776  */
1777 static int ab8500_charger_ac_check_enable(struct ux500_charger *charger,
1778 	int vset_uv, int iset_ua)
1779 {
1780 	u8 mainch_ctrl1 = 0;
1781 	int ret = 0;
1782 
1783 	struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger);
1784 
1785 	if (!di->ac.charger_connected)
1786 		return ret;
1787 
1788 	ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
1789 				AB8500_MCH_CTRL1, &mainch_ctrl1);
1790 	if (ret < 0) {
1791 		dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
1792 		return ret;
1793 	}
1794 	dev_dbg(di->dev, "AC charger ctrl: 0x%02x\n", mainch_ctrl1);
1795 
1796 	if (!(mainch_ctrl1 & MAIN_CH_ENA)) {
1797 		dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n");
1798 
1799 		ret = abx500_mask_and_set_register_interruptible(di->dev,
1800 					AB8500_CHARGER, AB8500_CHARGER_CTRL,
1801 					DROP_COUNT_RESET, DROP_COUNT_RESET);
1802 
1803 		if (ret < 0) {
1804 			dev_err(di->dev, "ab8500 write failed %d\n", __LINE__);
1805 			return ret;
1806 		}
1807 
1808 		ret = ab8500_charger_ac_en(&di->usb_chg, true, vset_uv, iset_ua);
1809 		if (ret < 0) {
1810 			dev_err(di->dev, "failed to enable AC charger %d\n",
1811 				__LINE__);
1812 			return ret;
1813 		}
1814 	}
1815 	return ret;
1816 }
1817 
1818 /**
1819  * ab8500_charger_watchdog_kick() - kick charger watchdog
1820  * @di:		pointer to the ab8500_charger structure
1821  *
1822  * Kick charger watchdog
1823  * Returns error code in case of failure else 0(on success)
1824  */
1825 static int ab8500_charger_watchdog_kick(struct ux500_charger *charger)
1826 {
1827 	int ret;
1828 	struct ab8500_charger *di;
1829 
1830 	if (charger->psy->desc->type == POWER_SUPPLY_TYPE_MAINS)
1831 		di = to_ab8500_charger_ac_device_info(charger);
1832 	else if (charger->psy->desc->type == POWER_SUPPLY_TYPE_USB)
1833 		di = to_ab8500_charger_usb_device_info(charger);
1834 	else
1835 		return -ENXIO;
1836 
1837 	ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1838 		AB8500_CHARG_WD_CTRL, CHARG_WD_KICK);
1839 	if (ret)
1840 		dev_err(di->dev, "Failed to kick WD!\n");
1841 
1842 	return ret;
1843 }
1844 
1845 /**
1846  * ab8500_charger_update_charger_current() - update charger current
1847  * @charger:		pointer to the ab8500_charger structure
1848  * @ich_out_ua:		desired output current in microampere
1849  *
1850  * Update the charger output current for the specified charger
1851  * Returns error code in case of failure else 0(on success)
1852  */
1853 static int ab8500_charger_update_charger_current(struct ux500_charger *charger,
1854 		int ich_out_ua)
1855 {
1856 	int ret;
1857 	struct ab8500_charger *di;
1858 
1859 	if (charger->psy->desc->type == POWER_SUPPLY_TYPE_MAINS)
1860 		di = to_ab8500_charger_ac_device_info(charger);
1861 	else if (charger->psy->desc->type == POWER_SUPPLY_TYPE_USB)
1862 		di = to_ab8500_charger_usb_device_info(charger);
1863 	else
1864 		return -ENXIO;
1865 
1866 	ret = ab8500_charger_set_output_curr(di, ich_out_ua);
1867 	if (ret) {
1868 		dev_err(di->dev, "%s "
1869 			"Failed to set ChOutputCurentLevel\n",
1870 			__func__);
1871 		return ret;
1872 	}
1873 
1874 	/* Reset the main and usb drop input current measurement counter */
1875 	ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1876 				AB8500_CHARGER_CTRL, DROP_COUNT_RESET);
1877 	if (ret) {
1878 		dev_err(di->dev, "%s write failed\n", __func__);
1879 		return ret;
1880 	}
1881 
1882 	return ret;
1883 }
1884 
1885 static int ab8500_charger_get_ext_psy_data(struct device *dev, void *data)
1886 {
1887 	struct power_supply *psy;
1888 	struct power_supply *ext = dev_get_drvdata(dev);
1889 	const char **supplicants = (const char **)ext->supplied_to;
1890 	struct ab8500_charger *di;
1891 	union power_supply_propval ret;
1892 	int j;
1893 	struct ux500_charger *usb_chg;
1894 
1895 	usb_chg = (struct ux500_charger *)data;
1896 	psy = usb_chg->psy;
1897 
1898 	di = to_ab8500_charger_usb_device_info(usb_chg);
1899 
1900 	/*
1901 	 * For all psy where the driver name appears in any supplied_to
1902 	 * in practice what we will find will always be "ab8500_fg" as
1903 	 * the fuel gauge is responsible of keeping track of VBAT.
1904 	 */
1905 	j = match_string(supplicants, ext->num_supplicants, psy->desc->name);
1906 	if (j < 0)
1907 		return 0;
1908 
1909 	/* Go through all properties for the psy */
1910 	for (j = 0; j < ext->desc->num_properties; j++) {
1911 		enum power_supply_property prop;
1912 		prop = ext->desc->properties[j];
1913 
1914 		if (power_supply_get_property(ext, prop, &ret))
1915 			continue;
1916 
1917 		switch (prop) {
1918 		case POWER_SUPPLY_PROP_VOLTAGE_NOW:
1919 			switch (ext->desc->type) {
1920 			case POWER_SUPPLY_TYPE_BATTERY:
1921 				/* This will always be "ab8500_fg" */
1922 				dev_dbg(di->dev, "get VBAT from %s\n",
1923 					dev_name(&ext->dev));
1924 				di->vbat = ret.intval;
1925 				break;
1926 			default:
1927 				break;
1928 			}
1929 			break;
1930 		default:
1931 			break;
1932 		}
1933 	}
1934 	return 0;
1935 }
1936 
1937 /**
1938  * ab8500_charger_check_vbat_work() - keep vbus current within spec
1939  * @work	pointer to the work_struct structure
1940  *
1941  * Due to a asic bug it is necessary to lower the input current to the vbus
1942  * charger when charging with at some specific levels. This issue is only valid
1943  * for below a certain battery voltage. This function makes sure that
1944  * the allowed current limit isn't exceeded.
1945  */
1946 static void ab8500_charger_check_vbat_work(struct work_struct *work)
1947 {
1948 	int t = 10;
1949 	struct ab8500_charger *di = container_of(work,
1950 		struct ab8500_charger, check_vbat_work.work);
1951 
1952 	class_for_each_device(power_supply_class, NULL,
1953 			      &di->usb_chg, ab8500_charger_get_ext_psy_data);
1954 
1955 	/* First run old_vbat is 0. */
1956 	if (di->old_vbat == 0)
1957 		di->old_vbat = di->vbat;
1958 
1959 	if (!((di->old_vbat <= VBAT_TRESH_IP_CUR_RED &&
1960 		di->vbat <= VBAT_TRESH_IP_CUR_RED) ||
1961 		(di->old_vbat > VBAT_TRESH_IP_CUR_RED &&
1962 		di->vbat > VBAT_TRESH_IP_CUR_RED))) {
1963 
1964 		dev_dbg(di->dev, "Vbat did cross threshold, curr: %d, new: %d,"
1965 			" old: %d\n", di->max_usb_in_curr.usb_type_max_ua,
1966 			di->vbat, di->old_vbat);
1967 		ab8500_charger_set_vbus_in_curr(di,
1968 					di->max_usb_in_curr.usb_type_max_ua);
1969 		power_supply_changed(di->usb_chg.psy);
1970 	}
1971 
1972 	di->old_vbat = di->vbat;
1973 
1974 	/*
1975 	 * No need to check the battery voltage every second when not close to
1976 	 * the threshold.
1977 	 */
1978 	if (di->vbat < (VBAT_TRESH_IP_CUR_RED + 100000) &&
1979 		(di->vbat > (VBAT_TRESH_IP_CUR_RED - 100000)))
1980 			t = 1;
1981 
1982 	queue_delayed_work(di->charger_wq, &di->check_vbat_work, t * HZ);
1983 }
1984 
1985 /**
1986  * ab8500_charger_check_hw_failure_work() - check main charger failure
1987  * @work:	pointer to the work_struct structure
1988  *
1989  * Work queue function for checking the main charger status
1990  */
1991 static void ab8500_charger_check_hw_failure_work(struct work_struct *work)
1992 {
1993 	int ret;
1994 	u8 reg_value;
1995 
1996 	struct ab8500_charger *di = container_of(work,
1997 		struct ab8500_charger, check_hw_failure_work.work);
1998 
1999 	/* Check if the status bits for HW failure is still active */
2000 	if (di->flags.mainextchnotok) {
2001 		ret = abx500_get_register_interruptible(di->dev,
2002 			AB8500_CHARGER, AB8500_CH_STATUS2_REG, &reg_value);
2003 		if (ret < 0) {
2004 			dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2005 			return;
2006 		}
2007 		if (!(reg_value & MAIN_CH_NOK)) {
2008 			di->flags.mainextchnotok = false;
2009 			ab8500_power_supply_changed(di, di->ac_chg.psy);
2010 		}
2011 	}
2012 	if (di->flags.vbus_ovv) {
2013 		ret = abx500_get_register_interruptible(di->dev,
2014 			AB8500_CHARGER, AB8500_CH_USBCH_STAT2_REG,
2015 			&reg_value);
2016 		if (ret < 0) {
2017 			dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2018 			return;
2019 		}
2020 		if (!(reg_value & VBUS_OVV_TH)) {
2021 			di->flags.vbus_ovv = false;
2022 			ab8500_power_supply_changed(di, di->usb_chg.psy);
2023 		}
2024 	}
2025 	/* If we still have a failure, schedule a new check */
2026 	if (di->flags.mainextchnotok || di->flags.vbus_ovv) {
2027 		queue_delayed_work(di->charger_wq,
2028 			&di->check_hw_failure_work, round_jiffies(HZ));
2029 	}
2030 }
2031 
2032 /**
2033  * ab8500_charger_kick_watchdog_work() - kick the watchdog
2034  * @work:	pointer to the work_struct structure
2035  *
2036  * Work queue function for kicking the charger watchdog.
2037  *
2038  * For ABB revision 1.0 and 1.1 there is a bug in the watchdog
2039  * logic. That means we have to continuously kick the charger
2040  * watchdog even when no charger is connected. This is only
2041  * valid once the AC charger has been enabled. This is
2042  * a bug that is not handled by the algorithm and the
2043  * watchdog have to be kicked by the charger driver
2044  * when the AC charger is disabled
2045  */
2046 static void ab8500_charger_kick_watchdog_work(struct work_struct *work)
2047 {
2048 	int ret;
2049 
2050 	struct ab8500_charger *di = container_of(work,
2051 		struct ab8500_charger, kick_wd_work.work);
2052 
2053 	ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
2054 		AB8500_CHARG_WD_CTRL, CHARG_WD_KICK);
2055 	if (ret)
2056 		dev_err(di->dev, "Failed to kick WD!\n");
2057 
2058 	/* Schedule a new watchdog kick */
2059 	queue_delayed_work(di->charger_wq,
2060 		&di->kick_wd_work, round_jiffies(WD_KICK_INTERVAL));
2061 }
2062 
2063 /**
2064  * ab8500_charger_ac_work() - work to get and set main charger status
2065  * @work:	pointer to the work_struct structure
2066  *
2067  * Work queue function for checking the main charger status
2068  */
2069 static void ab8500_charger_ac_work(struct work_struct *work)
2070 {
2071 	int ret;
2072 
2073 	struct ab8500_charger *di = container_of(work,
2074 		struct ab8500_charger, ac_work);
2075 
2076 	/*
2077 	 * Since we can't be sure that the events are received
2078 	 * synchronously, we have the check if the main charger is
2079 	 * connected by reading the status register
2080 	 */
2081 	ret = ab8500_charger_detect_chargers(di, false);
2082 	if (ret < 0)
2083 		return;
2084 
2085 	if (ret & AC_PW_CONN) {
2086 		di->ac.charger_connected = 1;
2087 		di->ac_conn = true;
2088 	} else {
2089 		di->ac.charger_connected = 0;
2090 	}
2091 
2092 	ab8500_power_supply_changed(di, di->ac_chg.psy);
2093 	sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present");
2094 }
2095 
2096 static void ab8500_charger_usb_attached_work(struct work_struct *work)
2097 {
2098 	struct ab8500_charger *di = container_of(work,
2099 						 struct ab8500_charger,
2100 						 usb_charger_attached_work.work);
2101 	int usbch = (USB_CH_VBUSDROP | USB_CH_VBUSDETDBNC);
2102 	int ret, i;
2103 	u8 statval;
2104 
2105 	for (i = 0; i < 10; i++) {
2106 		ret = abx500_get_register_interruptible(di->dev,
2107 							AB8500_CHARGER,
2108 							AB8500_CH_USBCH_STAT1_REG,
2109 							&statval);
2110 		if (ret < 0) {
2111 			dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
2112 			goto reschedule;
2113 		}
2114 		if ((statval & usbch) != usbch)
2115 			goto reschedule;
2116 
2117 		msleep(CHARGER_STATUS_POLL);
2118 	}
2119 
2120 	ab8500_charger_usb_en(&di->usb_chg, 0, 0, 0);
2121 
2122 	mutex_lock(&di->charger_attached_mutex);
2123 	mutex_unlock(&di->charger_attached_mutex);
2124 
2125 	return;
2126 
2127 reschedule:
2128 	queue_delayed_work(di->charger_wq,
2129 			   &di->usb_charger_attached_work,
2130 			   HZ);
2131 }
2132 
2133 static void ab8500_charger_ac_attached_work(struct work_struct *work)
2134 {
2135 
2136 	struct ab8500_charger *di = container_of(work,
2137 						 struct ab8500_charger,
2138 						 ac_charger_attached_work.work);
2139 	int mainch = (MAIN_CH_STATUS2_MAINCHGDROP |
2140 		      MAIN_CH_STATUS2_MAINCHARGERDETDBNC);
2141 	int ret, i;
2142 	u8 statval;
2143 
2144 	for (i = 0; i < 10; i++) {
2145 		ret = abx500_get_register_interruptible(di->dev,
2146 							AB8500_CHARGER,
2147 							AB8500_CH_STATUS2_REG,
2148 							&statval);
2149 		if (ret < 0) {
2150 			dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
2151 			goto reschedule;
2152 		}
2153 
2154 		if ((statval & mainch) != mainch)
2155 			goto reschedule;
2156 
2157 		msleep(CHARGER_STATUS_POLL);
2158 	}
2159 
2160 	ab8500_charger_ac_en(&di->ac_chg, 0, 0, 0);
2161 	queue_work(di->charger_wq, &di->ac_work);
2162 
2163 	mutex_lock(&di->charger_attached_mutex);
2164 	mutex_unlock(&di->charger_attached_mutex);
2165 
2166 	return;
2167 
2168 reschedule:
2169 	queue_delayed_work(di->charger_wq,
2170 			   &di->ac_charger_attached_work,
2171 			   HZ);
2172 }
2173 
2174 /**
2175  * ab8500_charger_detect_usb_type_work() - work to detect USB type
2176  * @work:	Pointer to the work_struct structure
2177  *
2178  * Detect the type of USB plugged
2179  */
2180 static void ab8500_charger_detect_usb_type_work(struct work_struct *work)
2181 {
2182 	int ret;
2183 
2184 	struct ab8500_charger *di = container_of(work,
2185 		struct ab8500_charger, detect_usb_type_work);
2186 
2187 	/*
2188 	 * Since we can't be sure that the events are received
2189 	 * synchronously, we have the check if is
2190 	 * connected by reading the status register
2191 	 */
2192 	ret = ab8500_charger_detect_chargers(di, false);
2193 	if (ret < 0)
2194 		return;
2195 
2196 	if (!(ret & USB_PW_CONN)) {
2197 		dev_dbg(di->dev, "%s di->vbus_detected = false\n", __func__);
2198 		di->vbus_detected = false;
2199 		ab8500_charger_set_usb_connected(di, false);
2200 		ab8500_power_supply_changed(di, di->usb_chg.psy);
2201 	} else {
2202 		dev_dbg(di->dev, "%s di->vbus_detected = true\n", __func__);
2203 		di->vbus_detected = true;
2204 
2205 		if (is_ab8500_1p1_or_earlier(di->parent)) {
2206 			ret = ab8500_charger_detect_usb_type(di);
2207 			if (!ret) {
2208 				ab8500_charger_set_usb_connected(di, true);
2209 				ab8500_power_supply_changed(di,
2210 							    di->usb_chg.psy);
2211 			}
2212 		} else {
2213 			/*
2214 			 * For ABB cut2.0 and onwards we have an IRQ,
2215 			 * USB_LINK_STATUS that will be triggered when the USB
2216 			 * link status changes. The exception is USB connected
2217 			 * during startup. Then we don't get a
2218 			 * USB_LINK_STATUS IRQ
2219 			 */
2220 			if (di->vbus_detected_start) {
2221 				di->vbus_detected_start = false;
2222 				ret = ab8500_charger_detect_usb_type(di);
2223 				if (!ret) {
2224 					ab8500_charger_set_usb_connected(di,
2225 						true);
2226 					ab8500_power_supply_changed(di,
2227 						di->usb_chg.psy);
2228 				}
2229 			}
2230 		}
2231 	}
2232 }
2233 
2234 /**
2235  * ab8500_charger_usb_link_attach_work() - work to detect USB type
2236  * @work:	pointer to the work_struct structure
2237  *
2238  * Detect the type of USB plugged
2239  */
2240 static void ab8500_charger_usb_link_attach_work(struct work_struct *work)
2241 {
2242 	struct ab8500_charger *di =
2243 		container_of(work, struct ab8500_charger, attach_work.work);
2244 	int ret;
2245 
2246 	/* Update maximum input current if USB enumeration is not detected */
2247 	if (!di->usb.charger_online) {
2248 		ret = ab8500_charger_set_vbus_in_curr(di,
2249 					di->max_usb_in_curr.usb_type_max_ua);
2250 		if (ret)
2251 			return;
2252 	}
2253 
2254 	ab8500_charger_set_usb_connected(di, true);
2255 	ab8500_power_supply_changed(di, di->usb_chg.psy);
2256 }
2257 
2258 /**
2259  * ab8500_charger_usb_link_status_work() - work to detect USB type
2260  * @work:	pointer to the work_struct structure
2261  *
2262  * Detect the type of USB plugged
2263  */
2264 static void ab8500_charger_usb_link_status_work(struct work_struct *work)
2265 {
2266 	int detected_chargers;
2267 	int ret;
2268 	u8 val;
2269 	u8 link_status;
2270 
2271 	struct ab8500_charger *di = container_of(work,
2272 		struct ab8500_charger, usb_link_status_work);
2273 
2274 	/*
2275 	 * Since we can't be sure that the events are received
2276 	 * synchronously, we have the check if  is
2277 	 * connected by reading the status register
2278 	 */
2279 	detected_chargers = ab8500_charger_detect_chargers(di, false);
2280 	if (detected_chargers < 0)
2281 		return;
2282 
2283 	/*
2284 	 * Some chargers that breaks the USB spec is
2285 	 * identified as invalid by AB8500 and it refuse
2286 	 * to start the charging process. but by jumping
2287 	 * through a few hoops it can be forced to start.
2288 	 */
2289 	if (is_ab8500(di->parent))
2290 		ret = abx500_get_register_interruptible(di->dev, AB8500_USB,
2291 					AB8500_USB_LINE_STAT_REG, &val);
2292 	else
2293 		ret = abx500_get_register_interruptible(di->dev, AB8500_USB,
2294 					AB8500_USB_LINK1_STAT_REG, &val);
2295 
2296 	if (ret >= 0)
2297 		dev_dbg(di->dev, "UsbLineStatus register = 0x%02x\n", val);
2298 	else
2299 		dev_dbg(di->dev, "Error reading USB link status\n");
2300 
2301 	if (is_ab8500(di->parent))
2302 		link_status = AB8500_USB_LINK_STATUS;
2303 	else
2304 		link_status = AB8505_USB_LINK_STATUS;
2305 
2306 	if (detected_chargers & USB_PW_CONN) {
2307 		if (((val & link_status) >> USB_LINK_STATUS_SHIFT) ==
2308 				USB_STAT_NOT_VALID_LINK &&
2309 				di->invalid_charger_detect_state == 0) {
2310 			dev_dbg(di->dev,
2311 					"Invalid charger detected, state= 0\n");
2312 			/*Enable charger*/
2313 			abx500_mask_and_set_register_interruptible(di->dev,
2314 					AB8500_CHARGER, AB8500_USBCH_CTRL1_REG,
2315 					USB_CH_ENA, USB_CH_ENA);
2316 			/*Enable charger detection*/
2317 			abx500_mask_and_set_register_interruptible(di->dev,
2318 					AB8500_USB, AB8500_USB_LINE_CTRL2_REG,
2319 					USB_CH_DET, USB_CH_DET);
2320 			di->invalid_charger_detect_state = 1;
2321 			/*exit and wait for new link status interrupt.*/
2322 			return;
2323 
2324 		}
2325 		if (di->invalid_charger_detect_state == 1) {
2326 			dev_dbg(di->dev,
2327 					"Invalid charger detected, state= 1\n");
2328 			/*Stop charger detection*/
2329 			abx500_mask_and_set_register_interruptible(di->dev,
2330 					AB8500_USB, AB8500_USB_LINE_CTRL2_REG,
2331 					USB_CH_DET, 0x00);
2332 			/*Check link status*/
2333 			if (is_ab8500(di->parent))
2334 				ret = abx500_get_register_interruptible(di->dev,
2335 					AB8500_USB, AB8500_USB_LINE_STAT_REG,
2336 					&val);
2337 			else
2338 				ret = abx500_get_register_interruptible(di->dev,
2339 					AB8500_USB, AB8500_USB_LINK1_STAT_REG,
2340 					&val);
2341 
2342 			dev_dbg(di->dev, "USB link status= 0x%02x\n",
2343 				(val & link_status) >> USB_LINK_STATUS_SHIFT);
2344 			di->invalid_charger_detect_state = 2;
2345 		}
2346 	} else {
2347 		di->invalid_charger_detect_state = 0;
2348 	}
2349 
2350 	if (!(detected_chargers & USB_PW_CONN)) {
2351 		di->vbus_detected = false;
2352 		ab8500_charger_set_usb_connected(di, false);
2353 		ab8500_power_supply_changed(di, di->usb_chg.psy);
2354 		return;
2355 	}
2356 
2357 	dev_dbg(di->dev,"%s di->vbus_detected = true\n",__func__);
2358 	di->vbus_detected = true;
2359 	ret = ab8500_charger_read_usb_type(di);
2360 	if (ret) {
2361 		if (ret == -ENXIO) {
2362 			/* No valid charger type detected */
2363 			ab8500_charger_set_usb_connected(di, false);
2364 			ab8500_power_supply_changed(di, di->usb_chg.psy);
2365 		}
2366 		return;
2367 	}
2368 
2369 	if (di->usb_device_is_unrecognised) {
2370 		dev_dbg(di->dev,
2371 			"Potential Legacy Charger device. "
2372 			"Delay work for %d msec for USB enum "
2373 			"to finish",
2374 			WAIT_ACA_RID_ENUMERATION);
2375 		queue_delayed_work(di->charger_wq,
2376 				   &di->attach_work,
2377 				   msecs_to_jiffies(WAIT_ACA_RID_ENUMERATION));
2378 	} else if (di->is_aca_rid == 1) {
2379 		/* Only wait once */
2380 		di->is_aca_rid++;
2381 		dev_dbg(di->dev,
2382 			"%s Wait %d msec for USB enum to finish",
2383 			__func__, WAIT_ACA_RID_ENUMERATION);
2384 		queue_delayed_work(di->charger_wq,
2385 				   &di->attach_work,
2386 				   msecs_to_jiffies(WAIT_ACA_RID_ENUMERATION));
2387 	} else {
2388 		queue_delayed_work(di->charger_wq,
2389 				   &di->attach_work,
2390 				   0);
2391 	}
2392 }
2393 
2394 static void ab8500_charger_usb_state_changed_work(struct work_struct *work)
2395 {
2396 	int ret;
2397 	unsigned long flags;
2398 
2399 	struct ab8500_charger *di = container_of(work,
2400 		struct ab8500_charger, usb_state_changed_work.work);
2401 
2402 	if (!di->vbus_detected)	{
2403 		dev_dbg(di->dev,
2404 			"%s !di->vbus_detected\n",
2405 			__func__);
2406 		return;
2407 	}
2408 
2409 	spin_lock_irqsave(&di->usb_state.usb_lock, flags);
2410 	di->usb_state.state = di->usb_state.state_tmp;
2411 	di->usb_state.usb_current_ua = di->usb_state.usb_current_tmp_ua;
2412 	spin_unlock_irqrestore(&di->usb_state.usb_lock, flags);
2413 
2414 	dev_dbg(di->dev, "%s USB state: 0x%02x uA: %d\n",
2415 		__func__, di->usb_state.state, di->usb_state.usb_current_ua);
2416 
2417 	switch (di->usb_state.state) {
2418 	case AB8500_BM_USB_STATE_RESET_HS:
2419 	case AB8500_BM_USB_STATE_RESET_FS:
2420 	case AB8500_BM_USB_STATE_SUSPEND:
2421 	case AB8500_BM_USB_STATE_MAX:
2422 		ab8500_charger_set_usb_connected(di, false);
2423 		ab8500_power_supply_changed(di, di->usb_chg.psy);
2424 		break;
2425 
2426 	case AB8500_BM_USB_STATE_RESUME:
2427 		/*
2428 		 * when suspend->resume there should be delay
2429 		 * of 1sec for enabling charging
2430 		 */
2431 		msleep(1000);
2432 		fallthrough;
2433 	case AB8500_BM_USB_STATE_CONFIGURED:
2434 		/*
2435 		 * USB is configured, enable charging with the charging
2436 		 * input current obtained from USB driver
2437 		 */
2438 		if (!ab8500_charger_get_usb_cur(di)) {
2439 			/* Update maximum input current */
2440 			ret = ab8500_charger_set_vbus_in_curr(di,
2441 					di->max_usb_in_curr.usb_type_max_ua);
2442 			if (ret)
2443 				return;
2444 
2445 			ab8500_charger_set_usb_connected(di, true);
2446 			ab8500_power_supply_changed(di, di->usb_chg.psy);
2447 		}
2448 		break;
2449 
2450 	default:
2451 		break;
2452 	}
2453 }
2454 
2455 /**
2456  * ab8500_charger_check_usbchargernotok_work() - check USB chg not ok status
2457  * @work:	pointer to the work_struct structure
2458  *
2459  * Work queue function for checking the USB charger Not OK status
2460  */
2461 static void ab8500_charger_check_usbchargernotok_work(struct work_struct *work)
2462 {
2463 	int ret;
2464 	u8 reg_value;
2465 	bool prev_status;
2466 
2467 	struct ab8500_charger *di = container_of(work,
2468 		struct ab8500_charger, check_usbchgnotok_work.work);
2469 
2470 	/* Check if the status bit for usbchargernotok is still active */
2471 	ret = abx500_get_register_interruptible(di->dev,
2472 		AB8500_CHARGER, AB8500_CH_USBCH_STAT2_REG, &reg_value);
2473 	if (ret < 0) {
2474 		dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2475 		return;
2476 	}
2477 	prev_status = di->flags.usbchargernotok;
2478 
2479 	if (reg_value & VBUS_CH_NOK) {
2480 		di->flags.usbchargernotok = true;
2481 		/* Check again in 1sec */
2482 		queue_delayed_work(di->charger_wq,
2483 			&di->check_usbchgnotok_work, HZ);
2484 	} else {
2485 		di->flags.usbchargernotok = false;
2486 		di->flags.vbus_collapse = false;
2487 	}
2488 
2489 	if (prev_status != di->flags.usbchargernotok)
2490 		ab8500_power_supply_changed(di, di->usb_chg.psy);
2491 }
2492 
2493 /**
2494  * ab8500_charger_check_main_thermal_prot_work() - check main thermal status
2495  * @work:	pointer to the work_struct structure
2496  *
2497  * Work queue function for checking the Main thermal prot status
2498  */
2499 static void ab8500_charger_check_main_thermal_prot_work(
2500 	struct work_struct *work)
2501 {
2502 	int ret;
2503 	u8 reg_value;
2504 
2505 	struct ab8500_charger *di = container_of(work,
2506 		struct ab8500_charger, check_main_thermal_prot_work);
2507 
2508 	/* Check if the status bit for main_thermal_prot is still active */
2509 	ret = abx500_get_register_interruptible(di->dev,
2510 		AB8500_CHARGER, AB8500_CH_STATUS2_REG, &reg_value);
2511 	if (ret < 0) {
2512 		dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2513 		return;
2514 	}
2515 	if (reg_value & MAIN_CH_TH_PROT)
2516 		di->flags.main_thermal_prot = true;
2517 	else
2518 		di->flags.main_thermal_prot = false;
2519 
2520 	ab8500_power_supply_changed(di, di->ac_chg.psy);
2521 }
2522 
2523 /**
2524  * ab8500_charger_check_usb_thermal_prot_work() - check usb thermal status
2525  * @work:	pointer to the work_struct structure
2526  *
2527  * Work queue function for checking the USB thermal prot status
2528  */
2529 static void ab8500_charger_check_usb_thermal_prot_work(
2530 	struct work_struct *work)
2531 {
2532 	int ret;
2533 	u8 reg_value;
2534 
2535 	struct ab8500_charger *di = container_of(work,
2536 		struct ab8500_charger, check_usb_thermal_prot_work);
2537 
2538 	/* Check if the status bit for usb_thermal_prot is still active */
2539 	ret = abx500_get_register_interruptible(di->dev,
2540 		AB8500_CHARGER, AB8500_CH_USBCH_STAT2_REG, &reg_value);
2541 	if (ret < 0) {
2542 		dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2543 		return;
2544 	}
2545 	if (reg_value & USB_CH_TH_PROT)
2546 		di->flags.usb_thermal_prot = true;
2547 	else
2548 		di->flags.usb_thermal_prot = false;
2549 
2550 	ab8500_power_supply_changed(di, di->usb_chg.psy);
2551 }
2552 
2553 /**
2554  * ab8500_charger_mainchunplugdet_handler() - main charger unplugged
2555  * @irq:       interrupt number
2556  * @_di:       pointer to the ab8500_charger structure
2557  *
2558  * Returns IRQ status(IRQ_HANDLED)
2559  */
2560 static irqreturn_t ab8500_charger_mainchunplugdet_handler(int irq, void *_di)
2561 {
2562 	struct ab8500_charger *di = _di;
2563 
2564 	dev_dbg(di->dev, "Main charger unplugged\n");
2565 	queue_work(di->charger_wq, &di->ac_work);
2566 
2567 	cancel_delayed_work_sync(&di->ac_charger_attached_work);
2568 	mutex_lock(&di->charger_attached_mutex);
2569 	mutex_unlock(&di->charger_attached_mutex);
2570 
2571 	return IRQ_HANDLED;
2572 }
2573 
2574 /**
2575  * ab8500_charger_mainchplugdet_handler() - main charger plugged
2576  * @irq:       interrupt number
2577  * @_di:       pointer to the ab8500_charger structure
2578  *
2579  * Returns IRQ status(IRQ_HANDLED)
2580  */
2581 static irqreturn_t ab8500_charger_mainchplugdet_handler(int irq, void *_di)
2582 {
2583 	struct ab8500_charger *di = _di;
2584 
2585 	dev_dbg(di->dev, "Main charger plugged\n");
2586 	queue_work(di->charger_wq, &di->ac_work);
2587 
2588 	mutex_lock(&di->charger_attached_mutex);
2589 	mutex_unlock(&di->charger_attached_mutex);
2590 
2591 	if (is_ab8500(di->parent))
2592 		queue_delayed_work(di->charger_wq,
2593 			   &di->ac_charger_attached_work,
2594 			   HZ);
2595 	return IRQ_HANDLED;
2596 }
2597 
2598 /**
2599  * ab8500_charger_mainextchnotok_handler() - main charger not ok
2600  * @irq:       interrupt number
2601  * @_di:       pointer to the ab8500_charger structure
2602  *
2603  * Returns IRQ status(IRQ_HANDLED)
2604  */
2605 static irqreturn_t ab8500_charger_mainextchnotok_handler(int irq, void *_di)
2606 {
2607 	struct ab8500_charger *di = _di;
2608 
2609 	dev_dbg(di->dev, "Main charger not ok\n");
2610 	di->flags.mainextchnotok = true;
2611 	ab8500_power_supply_changed(di, di->ac_chg.psy);
2612 
2613 	/* Schedule a new HW failure check */
2614 	queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0);
2615 
2616 	return IRQ_HANDLED;
2617 }
2618 
2619 /**
2620  * ab8500_charger_mainchthprotr_handler() - Die temp is above main charger
2621  * thermal protection threshold
2622  * @irq:       interrupt number
2623  * @_di:       pointer to the ab8500_charger structure
2624  *
2625  * Returns IRQ status(IRQ_HANDLED)
2626  */
2627 static irqreturn_t ab8500_charger_mainchthprotr_handler(int irq, void *_di)
2628 {
2629 	struct ab8500_charger *di = _di;
2630 
2631 	dev_dbg(di->dev,
2632 		"Die temp above Main charger thermal protection threshold\n");
2633 	queue_work(di->charger_wq, &di->check_main_thermal_prot_work);
2634 
2635 	return IRQ_HANDLED;
2636 }
2637 
2638 /**
2639  * ab8500_charger_mainchthprotf_handler() - Die temp is below main charger
2640  * thermal protection threshold
2641  * @irq:       interrupt number
2642  * @_di:       pointer to the ab8500_charger structure
2643  *
2644  * Returns IRQ status(IRQ_HANDLED)
2645  */
2646 static irqreturn_t ab8500_charger_mainchthprotf_handler(int irq, void *_di)
2647 {
2648 	struct ab8500_charger *di = _di;
2649 
2650 	dev_dbg(di->dev,
2651 		"Die temp ok for Main charger thermal protection threshold\n");
2652 	queue_work(di->charger_wq, &di->check_main_thermal_prot_work);
2653 
2654 	return IRQ_HANDLED;
2655 }
2656 
2657 static void ab8500_charger_vbus_drop_end_work(struct work_struct *work)
2658 {
2659 	struct ab8500_charger *di = container_of(work,
2660 		struct ab8500_charger, vbus_drop_end_work.work);
2661 	int ret, curr_ua;
2662 	u8 reg_value;
2663 
2664 	di->flags.vbus_drop_end = false;
2665 
2666 	/* Reset the drop counter */
2667 	abx500_set_register_interruptible(di->dev,
2668 				  AB8500_CHARGER, AB8500_CHARGER_CTRL, 0x01);
2669 
2670 	ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
2671 			AB8500_CH_USBCH_STAT2_REG, &reg_value);
2672 	if (ret < 0) {
2673 		dev_err(di->dev, "%s read failed\n", __func__);
2674 		return;
2675 	}
2676 
2677 	curr_ua = ab8500_charge_input_curr_map[
2678 		reg_value >> AUTO_VBUS_IN_CURR_LIM_SHIFT];
2679 
2680 	if (di->max_usb_in_curr.calculated_max_ua != curr_ua) {
2681 		/* USB source is collapsing */
2682 		di->max_usb_in_curr.calculated_max_ua = curr_ua;
2683 		dev_dbg(di->dev,
2684 			 "VBUS input current limiting to %d uA\n",
2685 			 di->max_usb_in_curr.calculated_max_ua);
2686 	} else {
2687 		/*
2688 		 * USB source can not give more than this amount.
2689 		 * Taking more will collapse the source.
2690 		 */
2691 		di->max_usb_in_curr.set_max_ua =
2692 			di->max_usb_in_curr.calculated_max_ua;
2693 		dev_dbg(di->dev,
2694 			 "VBUS input current limited to %d uA\n",
2695 			 di->max_usb_in_curr.set_max_ua);
2696 	}
2697 
2698 	if (di->usb.charger_connected)
2699 		ab8500_charger_set_vbus_in_curr(di,
2700 					di->max_usb_in_curr.usb_type_max_ua);
2701 }
2702 
2703 /**
2704  * ab8500_charger_vbusdetf_handler() - VBUS falling detected
2705  * @irq:       interrupt number
2706  * @_di:       pointer to the ab8500_charger structure
2707  *
2708  * Returns IRQ status(IRQ_HANDLED)
2709  */
2710 static irqreturn_t ab8500_charger_vbusdetf_handler(int irq, void *_di)
2711 {
2712 	struct ab8500_charger *di = _di;
2713 
2714 	di->vbus_detected = false;
2715 	dev_dbg(di->dev, "VBUS falling detected\n");
2716 	queue_work(di->charger_wq, &di->detect_usb_type_work);
2717 
2718 	return IRQ_HANDLED;
2719 }
2720 
2721 /**
2722  * ab8500_charger_vbusdetr_handler() - VBUS rising detected
2723  * @irq:       interrupt number
2724  * @_di:       pointer to the ab8500_charger structure
2725  *
2726  * Returns IRQ status(IRQ_HANDLED)
2727  */
2728 static irqreturn_t ab8500_charger_vbusdetr_handler(int irq, void *_di)
2729 {
2730 	struct ab8500_charger *di = _di;
2731 
2732 	di->vbus_detected = true;
2733 	dev_dbg(di->dev, "VBUS rising detected\n");
2734 
2735 	queue_work(di->charger_wq, &di->detect_usb_type_work);
2736 
2737 	return IRQ_HANDLED;
2738 }
2739 
2740 /**
2741  * ab8500_charger_usblinkstatus_handler() - USB link status has changed
2742  * @irq:       interrupt number
2743  * @_di:       pointer to the ab8500_charger structure
2744  *
2745  * Returns IRQ status(IRQ_HANDLED)
2746  */
2747 static irqreturn_t ab8500_charger_usblinkstatus_handler(int irq, void *_di)
2748 {
2749 	struct ab8500_charger *di = _di;
2750 
2751 	dev_dbg(di->dev, "USB link status changed\n");
2752 
2753 	queue_work(di->charger_wq, &di->usb_link_status_work);
2754 
2755 	return IRQ_HANDLED;
2756 }
2757 
2758 /**
2759  * ab8500_charger_usbchthprotr_handler() - Die temp is above usb charger
2760  * thermal protection threshold
2761  * @irq:       interrupt number
2762  * @_di:       pointer to the ab8500_charger structure
2763  *
2764  * Returns IRQ status(IRQ_HANDLED)
2765  */
2766 static irqreturn_t ab8500_charger_usbchthprotr_handler(int irq, void *_di)
2767 {
2768 	struct ab8500_charger *di = _di;
2769 
2770 	dev_dbg(di->dev,
2771 		"Die temp above USB charger thermal protection threshold\n");
2772 	queue_work(di->charger_wq, &di->check_usb_thermal_prot_work);
2773 
2774 	return IRQ_HANDLED;
2775 }
2776 
2777 /**
2778  * ab8500_charger_usbchthprotf_handler() - Die temp is below usb charger
2779  * thermal protection threshold
2780  * @irq:       interrupt number
2781  * @_di:       pointer to the ab8500_charger structure
2782  *
2783  * Returns IRQ status(IRQ_HANDLED)
2784  */
2785 static irqreturn_t ab8500_charger_usbchthprotf_handler(int irq, void *_di)
2786 {
2787 	struct ab8500_charger *di = _di;
2788 
2789 	dev_dbg(di->dev,
2790 		"Die temp ok for USB charger thermal protection threshold\n");
2791 	queue_work(di->charger_wq, &di->check_usb_thermal_prot_work);
2792 
2793 	return IRQ_HANDLED;
2794 }
2795 
2796 /**
2797  * ab8500_charger_usbchargernotokr_handler() - USB charger not ok detected
2798  * @irq:       interrupt number
2799  * @_di:       pointer to the ab8500_charger structure
2800  *
2801  * Returns IRQ status(IRQ_HANDLED)
2802  */
2803 static irqreturn_t ab8500_charger_usbchargernotokr_handler(int irq, void *_di)
2804 {
2805 	struct ab8500_charger *di = _di;
2806 
2807 	dev_dbg(di->dev, "Not allowed USB charger detected\n");
2808 	queue_delayed_work(di->charger_wq, &di->check_usbchgnotok_work, 0);
2809 
2810 	return IRQ_HANDLED;
2811 }
2812 
2813 /**
2814  * ab8500_charger_chwdexp_handler() - Charger watchdog expired
2815  * @irq:       interrupt number
2816  * @_di:       pointer to the ab8500_charger structure
2817  *
2818  * Returns IRQ status(IRQ_HANDLED)
2819  */
2820 static irqreturn_t ab8500_charger_chwdexp_handler(int irq, void *_di)
2821 {
2822 	struct ab8500_charger *di = _di;
2823 
2824 	dev_dbg(di->dev, "Charger watchdog expired\n");
2825 
2826 	/*
2827 	 * The charger that was online when the watchdog expired
2828 	 * needs to be restarted for charging to start again
2829 	 */
2830 	if (di->ac.charger_online) {
2831 		di->ac.wd_expired = true;
2832 		ab8500_power_supply_changed(di, di->ac_chg.psy);
2833 	}
2834 	if (di->usb.charger_online) {
2835 		di->usb.wd_expired = true;
2836 		ab8500_power_supply_changed(di, di->usb_chg.psy);
2837 	}
2838 
2839 	return IRQ_HANDLED;
2840 }
2841 
2842 /**
2843  * ab8500_charger_vbuschdropend_handler() - VBUS drop removed
2844  * @irq:       interrupt number
2845  * @_di:       pointer to the ab8500_charger structure
2846  *
2847  * Returns IRQ status(IRQ_HANDLED)
2848  */
2849 static irqreturn_t ab8500_charger_vbuschdropend_handler(int irq, void *_di)
2850 {
2851 	struct ab8500_charger *di = _di;
2852 
2853 	dev_dbg(di->dev, "VBUS charger drop ended\n");
2854 	di->flags.vbus_drop_end = true;
2855 
2856 	/*
2857 	 * VBUS might have dropped due to bad connection.
2858 	 * Schedule a new input limit set to the value SW requests.
2859 	 */
2860 	queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work,
2861 			   round_jiffies(VBUS_IN_CURR_LIM_RETRY_SET_TIME * HZ));
2862 
2863 	return IRQ_HANDLED;
2864 }
2865 
2866 /**
2867  * ab8500_charger_vbusovv_handler() - VBUS overvoltage detected
2868  * @irq:       interrupt number
2869  * @_di:       pointer to the ab8500_charger structure
2870  *
2871  * Returns IRQ status(IRQ_HANDLED)
2872  */
2873 static irqreturn_t ab8500_charger_vbusovv_handler(int irq, void *_di)
2874 {
2875 	struct ab8500_charger *di = _di;
2876 
2877 	dev_dbg(di->dev, "VBUS overvoltage detected\n");
2878 	di->flags.vbus_ovv = true;
2879 	ab8500_power_supply_changed(di, di->usb_chg.psy);
2880 
2881 	/* Schedule a new HW failure check */
2882 	queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0);
2883 
2884 	return IRQ_HANDLED;
2885 }
2886 
2887 /**
2888  * ab8500_charger_ac_get_property() - get the ac/mains properties
2889  * @psy:       pointer to the power_supply structure
2890  * @psp:       pointer to the power_supply_property structure
2891  * @val:       pointer to the power_supply_propval union
2892  *
2893  * This function gets called when an application tries to get the ac/mains
2894  * properties by reading the sysfs files.
2895  * AC/Mains properties are online, present and voltage.
2896  * online:     ac/mains charging is in progress or not
2897  * present:    presence of the ac/mains
2898  * voltage:    AC/Mains voltage
2899  * Returns error code in case of failure else 0(on success)
2900  */
2901 static int ab8500_charger_ac_get_property(struct power_supply *psy,
2902 	enum power_supply_property psp,
2903 	union power_supply_propval *val)
2904 {
2905 	struct ab8500_charger *di;
2906 	int ret;
2907 
2908 	di = to_ab8500_charger_ac_device_info(psy_to_ux500_charger(psy));
2909 
2910 	switch (psp) {
2911 	case POWER_SUPPLY_PROP_HEALTH:
2912 		if (di->flags.mainextchnotok)
2913 			val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
2914 		else if (di->ac.wd_expired || di->usb.wd_expired)
2915 			val->intval = POWER_SUPPLY_HEALTH_DEAD;
2916 		else if (di->flags.main_thermal_prot)
2917 			val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
2918 		else
2919 			val->intval = POWER_SUPPLY_HEALTH_GOOD;
2920 		break;
2921 	case POWER_SUPPLY_PROP_ONLINE:
2922 		val->intval = di->ac.charger_online;
2923 		break;
2924 	case POWER_SUPPLY_PROP_PRESENT:
2925 		val->intval = di->ac.charger_connected;
2926 		break;
2927 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
2928 		ret = ab8500_charger_get_ac_voltage(di);
2929 		if (ret >= 0)
2930 			di->ac.charger_voltage_uv = ret;
2931 		/* On error, use previous value */
2932 		val->intval = di->ac.charger_voltage_uv;
2933 		break;
2934 	case POWER_SUPPLY_PROP_VOLTAGE_AVG:
2935 		/*
2936 		 * This property is used to indicate when CV mode is entered
2937 		 * for the AC charger
2938 		 */
2939 		di->ac.cv_active = ab8500_charger_ac_cv(di);
2940 		val->intval = di->ac.cv_active;
2941 		break;
2942 	case POWER_SUPPLY_PROP_CURRENT_NOW:
2943 		ret = ab8500_charger_get_ac_current(di);
2944 		if (ret >= 0)
2945 			di->ac.charger_current_ua = ret;
2946 		val->intval = di->ac.charger_current_ua;
2947 		break;
2948 	default:
2949 		return -EINVAL;
2950 	}
2951 	return 0;
2952 }
2953 
2954 /**
2955  * ab8500_charger_usb_get_property() - get the usb properties
2956  * @psy:        pointer to the power_supply structure
2957  * @psp:        pointer to the power_supply_property structure
2958  * @val:        pointer to the power_supply_propval union
2959  *
2960  * This function gets called when an application tries to get the usb
2961  * properties by reading the sysfs files.
2962  * USB properties are online, present and voltage.
2963  * online:     usb charging is in progress or not
2964  * present:    presence of the usb
2965  * voltage:    vbus voltage
2966  * Returns error code in case of failure else 0(on success)
2967  */
2968 static int ab8500_charger_usb_get_property(struct power_supply *psy,
2969 	enum power_supply_property psp,
2970 	union power_supply_propval *val)
2971 {
2972 	struct ab8500_charger *di;
2973 	int ret;
2974 
2975 	di = to_ab8500_charger_usb_device_info(psy_to_ux500_charger(psy));
2976 
2977 	switch (psp) {
2978 	case POWER_SUPPLY_PROP_HEALTH:
2979 		if (di->flags.usbchargernotok)
2980 			val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
2981 		else if (di->ac.wd_expired || di->usb.wd_expired)
2982 			val->intval = POWER_SUPPLY_HEALTH_DEAD;
2983 		else if (di->flags.usb_thermal_prot)
2984 			val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
2985 		else if (di->flags.vbus_ovv)
2986 			val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
2987 		else
2988 			val->intval = POWER_SUPPLY_HEALTH_GOOD;
2989 		break;
2990 	case POWER_SUPPLY_PROP_ONLINE:
2991 		val->intval = di->usb.charger_online;
2992 		break;
2993 	case POWER_SUPPLY_PROP_PRESENT:
2994 		val->intval = di->usb.charger_connected;
2995 		break;
2996 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
2997 		ret = ab8500_charger_get_vbus_voltage(di);
2998 		if (ret >= 0)
2999 			di->usb.charger_voltage_uv = ret;
3000 		val->intval = di->usb.charger_voltage_uv;
3001 		break;
3002 	case POWER_SUPPLY_PROP_VOLTAGE_AVG:
3003 		/*
3004 		 * This property is used to indicate when CV mode is entered
3005 		 * for the USB charger
3006 		 */
3007 		di->usb.cv_active = ab8500_charger_usb_cv(di);
3008 		val->intval = di->usb.cv_active;
3009 		break;
3010 	case POWER_SUPPLY_PROP_CURRENT_NOW:
3011 		ret = ab8500_charger_get_usb_current(di);
3012 		if (ret >= 0)
3013 			di->usb.charger_current_ua = ret;
3014 		val->intval = di->usb.charger_current_ua;
3015 		break;
3016 	case POWER_SUPPLY_PROP_CURRENT_AVG:
3017 		/*
3018 		 * This property is used to indicate when VBUS has collapsed
3019 		 * due to too high output current from the USB charger
3020 		 */
3021 		if (di->flags.vbus_collapse)
3022 			val->intval = 1;
3023 		else
3024 			val->intval = 0;
3025 		break;
3026 	default:
3027 		return -EINVAL;
3028 	}
3029 	return 0;
3030 }
3031 
3032 /**
3033  * ab8500_charger_init_hw_registers() - Set up charger related registers
3034  * @di:		pointer to the ab8500_charger structure
3035  *
3036  * Set up charger OVV, watchdog and maximum voltage registers as well as
3037  * charging of the backup battery
3038  */
3039 static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
3040 {
3041 	int ret = 0;
3042 
3043 	/* Setup maximum charger current and voltage for ABB cut2.0 */
3044 	if (!is_ab8500_1p1_or_earlier(di->parent)) {
3045 		ret = abx500_set_register_interruptible(di->dev,
3046 			AB8500_CHARGER,
3047 			AB8500_CH_VOLT_LVL_MAX_REG, CH_VOL_LVL_4P6);
3048 		if (ret) {
3049 			dev_err(di->dev,
3050 				"failed to set CH_VOLT_LVL_MAX_REG\n");
3051 			goto out;
3052 		}
3053 
3054 		ret = abx500_set_register_interruptible(di->dev,
3055 			AB8500_CHARGER, AB8500_CH_OPT_CRNTLVL_MAX_REG,
3056 			CH_OP_CUR_LVL_1P6);
3057 		if (ret) {
3058 			dev_err(di->dev,
3059 				"failed to set CH_OPT_CRNTLVL_MAX_REG\n");
3060 			goto out;
3061 		}
3062 	}
3063 
3064 	if (is_ab8505_2p0(di->parent))
3065 		ret = abx500_mask_and_set_register_interruptible(di->dev,
3066 			AB8500_CHARGER,
3067 			AB8500_USBCH_CTRL2_REG,
3068 			VBUS_AUTO_IN_CURR_LIM_ENA,
3069 			VBUS_AUTO_IN_CURR_LIM_ENA);
3070 	else
3071 		/*
3072 		 * VBUS OVV set to 6.3V and enable automatic current limitation
3073 		 */
3074 		ret = abx500_set_register_interruptible(di->dev,
3075 			AB8500_CHARGER,
3076 			AB8500_USBCH_CTRL2_REG,
3077 			VBUS_OVV_SELECT_6P3V | VBUS_AUTO_IN_CURR_LIM_ENA);
3078 	if (ret) {
3079 		dev_err(di->dev,
3080 			"failed to set automatic current limitation\n");
3081 		goto out;
3082 	}
3083 
3084 	/* Enable main watchdog in OTP */
3085 	ret = abx500_set_register_interruptible(di->dev,
3086 		AB8500_OTP_EMUL, AB8500_OTP_CONF_15, OTP_ENABLE_WD);
3087 	if (ret) {
3088 		dev_err(di->dev, "failed to enable main WD in OTP\n");
3089 		goto out;
3090 	}
3091 
3092 	/* Enable main watchdog */
3093 	ret = abx500_set_register_interruptible(di->dev,
3094 		AB8500_SYS_CTRL2_BLOCK,
3095 		AB8500_MAIN_WDOG_CTRL_REG, MAIN_WDOG_ENA);
3096 	if (ret) {
3097 		dev_err(di->dev, "failed to enable main watchdog\n");
3098 		goto out;
3099 	}
3100 
3101 	/*
3102 	 * Due to internal synchronisation, Enable and Kick watchdog bits
3103 	 * cannot be enabled in a single write.
3104 	 * A minimum delay of 2*32 kHz period (62.5µs) must be inserted
3105 	 * between writing Enable then Kick bits.
3106 	 */
3107 	udelay(63);
3108 
3109 	/* Kick main watchdog */
3110 	ret = abx500_set_register_interruptible(di->dev,
3111 		AB8500_SYS_CTRL2_BLOCK,
3112 		AB8500_MAIN_WDOG_CTRL_REG,
3113 		(MAIN_WDOG_ENA | MAIN_WDOG_KICK));
3114 	if (ret) {
3115 		dev_err(di->dev, "failed to kick main watchdog\n");
3116 		goto out;
3117 	}
3118 
3119 	/* Disable main watchdog */
3120 	ret = abx500_set_register_interruptible(di->dev,
3121 		AB8500_SYS_CTRL2_BLOCK,
3122 		AB8500_MAIN_WDOG_CTRL_REG, MAIN_WDOG_DIS);
3123 	if (ret) {
3124 		dev_err(di->dev, "failed to disable main watchdog\n");
3125 		goto out;
3126 	}
3127 
3128 	/* Set watchdog timeout */
3129 	ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
3130 		AB8500_CH_WD_TIMER_REG, WD_TIMER);
3131 	if (ret) {
3132 		dev_err(di->dev, "failed to set charger watchdog timeout\n");
3133 		goto out;
3134 	}
3135 
3136 	ret = ab8500_charger_led_en(di, false);
3137 	if (ret < 0) {
3138 		dev_err(di->dev, "failed to disable LED\n");
3139 		goto out;
3140 	}
3141 
3142 	ret = abx500_set_register_interruptible(di->dev,
3143 		AB8500_RTC,
3144 		AB8500_RTC_BACKUP_CHG_REG,
3145 		(di->bm->bkup_bat_v & 0x3) | di->bm->bkup_bat_i);
3146 	if (ret) {
3147 		dev_err(di->dev, "failed to setup backup battery charging\n");
3148 		goto out;
3149 	}
3150 
3151 	/* Enable backup battery charging */
3152 	ret = abx500_mask_and_set_register_interruptible(di->dev,
3153 		AB8500_RTC, AB8500_RTC_CTRL_REG,
3154 		RTC_BUP_CH_ENA, RTC_BUP_CH_ENA);
3155 	if (ret < 0) {
3156 		dev_err(di->dev, "%s mask and set failed\n", __func__);
3157 		goto out;
3158 	}
3159 
3160 out:
3161 	return ret;
3162 }
3163 
3164 /*
3165  * ab8500 charger driver interrupts and their respective isr
3166  */
3167 static struct ab8500_charger_interrupts ab8500_charger_irq[] = {
3168 	{"MAIN_CH_UNPLUG_DET", ab8500_charger_mainchunplugdet_handler},
3169 	{"MAIN_CHARGE_PLUG_DET", ab8500_charger_mainchplugdet_handler},
3170 	{"MAIN_EXT_CH_NOT_OK", ab8500_charger_mainextchnotok_handler},
3171 	{"MAIN_CH_TH_PROT_R", ab8500_charger_mainchthprotr_handler},
3172 	{"MAIN_CH_TH_PROT_F", ab8500_charger_mainchthprotf_handler},
3173 	{"VBUS_DET_F", ab8500_charger_vbusdetf_handler},
3174 	{"VBUS_DET_R", ab8500_charger_vbusdetr_handler},
3175 	{"USB_LINK_STATUS", ab8500_charger_usblinkstatus_handler},
3176 	{"USB_CH_TH_PROT_R", ab8500_charger_usbchthprotr_handler},
3177 	{"USB_CH_TH_PROT_F", ab8500_charger_usbchthprotf_handler},
3178 	{"USB_CHARGER_NOT_OKR", ab8500_charger_usbchargernotokr_handler},
3179 	{"VBUS_OVV", ab8500_charger_vbusovv_handler},
3180 	{"CH_WD_EXP", ab8500_charger_chwdexp_handler},
3181 	{"VBUS_CH_DROP_END", ab8500_charger_vbuschdropend_handler},
3182 };
3183 
3184 static int ab8500_charger_usb_notifier_call(struct notifier_block *nb,
3185 		unsigned long event, void *power)
3186 {
3187 	struct ab8500_charger *di =
3188 		container_of(nb, struct ab8500_charger, nb);
3189 	enum ab8500_usb_state bm_usb_state;
3190 	/*
3191 	 * FIXME: it appears the AB8500 PHY never sends what it should here.
3192 	 * Fix the PHY driver to properly notify the desired current.
3193 	 * Also broadcast microampere and not milliampere.
3194 	 */
3195 	unsigned mA = *((unsigned *)power);
3196 
3197 	if (event != USB_EVENT_VBUS) {
3198 		dev_dbg(di->dev, "not a standard host, returning\n");
3199 		return NOTIFY_DONE;
3200 	}
3201 
3202 	/* TODO: State is fabricate  here. See if charger really needs USB
3203 	 * state or if mA is enough
3204 	 */
3205 	if ((di->usb_state.usb_current_ua == 2000) && (mA > 2))
3206 		bm_usb_state = AB8500_BM_USB_STATE_RESUME;
3207 	else if (mA == 0)
3208 		bm_usb_state = AB8500_BM_USB_STATE_RESET_HS;
3209 	else if (mA == 2)
3210 		bm_usb_state = AB8500_BM_USB_STATE_SUSPEND;
3211 	else if (mA >= 8) /* 8, 100, 500 */
3212 		bm_usb_state = AB8500_BM_USB_STATE_CONFIGURED;
3213 	else /* Should never occur */
3214 		bm_usb_state = AB8500_BM_USB_STATE_RESET_FS;
3215 
3216 	dev_dbg(di->dev, "%s usb_state: 0x%02x mA: %d\n",
3217 		__func__, bm_usb_state, mA);
3218 
3219 	spin_lock(&di->usb_state.usb_lock);
3220 	di->usb_state.state_tmp = bm_usb_state;
3221 	/* FIXME: broadcast ua instead, see above */
3222 	di->usb_state.usb_current_tmp_ua = mA * 1000;
3223 	spin_unlock(&di->usb_state.usb_lock);
3224 
3225 	/*
3226 	 * wait for some time until you get updates from the usb stack
3227 	 * and negotiations are completed
3228 	 */
3229 	queue_delayed_work(di->charger_wq, &di->usb_state_changed_work, HZ/2);
3230 
3231 	return NOTIFY_OK;
3232 }
3233 
3234 static int __maybe_unused ab8500_charger_resume(struct device *dev)
3235 {
3236 	int ret;
3237 	struct ab8500_charger *di = dev_get_drvdata(dev);
3238 
3239 	/*
3240 	 * For ABB revision 1.0 and 1.1 there is a bug in the watchdog
3241 	 * logic. That means we have to continuously kick the charger
3242 	 * watchdog even when no charger is connected. This is only
3243 	 * valid once the AC charger has been enabled. This is
3244 	 * a bug that is not handled by the algorithm and the
3245 	 * watchdog have to be kicked by the charger driver
3246 	 * when the AC charger is disabled
3247 	 */
3248 	if (di->ac_conn && is_ab8500_1p1_or_earlier(di->parent)) {
3249 		ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
3250 			AB8500_CHARG_WD_CTRL, CHARG_WD_KICK);
3251 		if (ret)
3252 			dev_err(di->dev, "Failed to kick WD!\n");
3253 
3254 		/* If not already pending start a new timer */
3255 		queue_delayed_work(di->charger_wq, &di->kick_wd_work,
3256 				   round_jiffies(WD_KICK_INTERVAL));
3257 	}
3258 
3259 	/* If we still have a HW failure, schedule a new check */
3260 	if (di->flags.mainextchnotok || di->flags.vbus_ovv) {
3261 		queue_delayed_work(di->charger_wq,
3262 			&di->check_hw_failure_work, 0);
3263 	}
3264 
3265 	if (di->flags.vbus_drop_end)
3266 		queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, 0);
3267 
3268 	return 0;
3269 }
3270 
3271 static int __maybe_unused ab8500_charger_suspend(struct device *dev)
3272 {
3273 	struct ab8500_charger *di = dev_get_drvdata(dev);
3274 
3275 	/* Cancel any pending jobs */
3276 	cancel_delayed_work(&di->check_hw_failure_work);
3277 	cancel_delayed_work(&di->vbus_drop_end_work);
3278 
3279 	flush_delayed_work(&di->attach_work);
3280 	flush_delayed_work(&di->usb_charger_attached_work);
3281 	flush_delayed_work(&di->ac_charger_attached_work);
3282 	flush_delayed_work(&di->check_usbchgnotok_work);
3283 	flush_delayed_work(&di->check_vbat_work);
3284 	flush_delayed_work(&di->kick_wd_work);
3285 
3286 	flush_work(&di->usb_link_status_work);
3287 	flush_work(&di->ac_work);
3288 	flush_work(&di->detect_usb_type_work);
3289 
3290 	if (atomic_read(&di->current_stepping_sessions))
3291 		return -EAGAIN;
3292 
3293 	return 0;
3294 }
3295 
3296 static char *supply_interface[] = {
3297 	"ab8500_chargalg",
3298 	"ab8500_fg",
3299 	"ab8500_btemp",
3300 };
3301 
3302 static const struct power_supply_desc ab8500_ac_chg_desc = {
3303 	.name		= "ab8500_ac",
3304 	.type		= POWER_SUPPLY_TYPE_MAINS,
3305 	.properties	= ab8500_charger_ac_props,
3306 	.num_properties	= ARRAY_SIZE(ab8500_charger_ac_props),
3307 	.get_property	= ab8500_charger_ac_get_property,
3308 };
3309 
3310 static const struct power_supply_desc ab8500_usb_chg_desc = {
3311 	.name		= "ab8500_usb",
3312 	.type		= POWER_SUPPLY_TYPE_USB,
3313 	.properties	= ab8500_charger_usb_props,
3314 	.num_properties	= ARRAY_SIZE(ab8500_charger_usb_props),
3315 	.get_property	= ab8500_charger_usb_get_property,
3316 };
3317 
3318 static int ab8500_charger_bind(struct device *dev)
3319 {
3320 	struct ab8500_charger *di = dev_get_drvdata(dev);
3321 	int ch_stat;
3322 	int ret;
3323 
3324 	/* Create a work queue for the charger */
3325 	di->charger_wq = alloc_ordered_workqueue("ab8500_charger_wq",
3326 						 WQ_MEM_RECLAIM);
3327 	if (di->charger_wq == NULL) {
3328 		dev_err(dev, "failed to create work queue\n");
3329 		return -ENOMEM;
3330 	}
3331 
3332 	ch_stat = ab8500_charger_detect_chargers(di, false);
3333 
3334 	if (ch_stat & AC_PW_CONN) {
3335 		if (is_ab8500(di->parent))
3336 			queue_delayed_work(di->charger_wq,
3337 					   &di->ac_charger_attached_work,
3338 					   HZ);
3339 	}
3340 	if (ch_stat & USB_PW_CONN) {
3341 		if (is_ab8500(di->parent))
3342 			queue_delayed_work(di->charger_wq,
3343 					   &di->usb_charger_attached_work,
3344 					   HZ);
3345 		di->vbus_detected = true;
3346 		di->vbus_detected_start = true;
3347 		queue_work(di->charger_wq,
3348 			   &di->detect_usb_type_work);
3349 	}
3350 
3351 	ret = component_bind_all(dev, di);
3352 	if (ret) {
3353 		dev_err(dev, "can't bind component devices\n");
3354 		destroy_workqueue(di->charger_wq);
3355 		return ret;
3356 	}
3357 
3358 	return 0;
3359 }
3360 
3361 static void ab8500_charger_unbind(struct device *dev)
3362 {
3363 	struct ab8500_charger *di = dev_get_drvdata(dev);
3364 	int ret;
3365 
3366 	/* Disable AC charging */
3367 	ab8500_charger_ac_en(&di->ac_chg, false, 0, 0);
3368 
3369 	/* Disable USB charging */
3370 	ab8500_charger_usb_en(&di->usb_chg, false, 0, 0);
3371 
3372 	/* Backup battery voltage and current disable */
3373 	ret = abx500_mask_and_set_register_interruptible(di->dev,
3374 		AB8500_RTC, AB8500_RTC_CTRL_REG, RTC_BUP_CH_ENA, 0);
3375 	if (ret < 0)
3376 		dev_err(di->dev, "%s mask and set failed\n", __func__);
3377 
3378 	/* Delete the work queue */
3379 	destroy_workqueue(di->charger_wq);
3380 
3381 	/* Unbind fg, btemp, algorithm */
3382 	component_unbind_all(dev, di);
3383 }
3384 
3385 static const struct component_master_ops ab8500_charger_comp_ops = {
3386 	.bind = ab8500_charger_bind,
3387 	.unbind = ab8500_charger_unbind,
3388 };
3389 
3390 static struct platform_driver *const ab8500_charger_component_drivers[] = {
3391 	&ab8500_fg_driver,
3392 	&ab8500_btemp_driver,
3393 	&ab8500_chargalg_driver,
3394 };
3395 
3396 static int ab8500_charger_probe(struct platform_device *pdev)
3397 {
3398 	struct device *dev = &pdev->dev;
3399 	struct device_node *np = dev->of_node;
3400 	struct component_match *match = NULL;
3401 	struct power_supply_config ac_psy_cfg = {}, usb_psy_cfg = {};
3402 	struct ab8500_charger *di;
3403 	int charger_status;
3404 	int i, irq;
3405 	int ret;
3406 
3407 	di = devm_kzalloc(dev, sizeof(*di), GFP_KERNEL);
3408 	if (!di)
3409 		return -ENOMEM;
3410 
3411 	di->bm = &ab8500_bm_data;
3412 
3413 	di->autopower_cfg = of_property_read_bool(np, "autopower_cfg");
3414 
3415 	/* get parent data */
3416 	di->dev = dev;
3417 	di->parent = dev_get_drvdata(pdev->dev.parent);
3418 
3419 	/* Get ADC channels */
3420 	if (!is_ab8505(di->parent)) {
3421 		di->adc_main_charger_v = devm_iio_channel_get(dev, "main_charger_v");
3422 		if (IS_ERR(di->adc_main_charger_v)) {
3423 			ret = dev_err_probe(dev, PTR_ERR(di->adc_main_charger_v),
3424 					    "failed to get ADC main charger voltage\n");
3425 			return ret;
3426 		}
3427 		di->adc_main_charger_c = devm_iio_channel_get(dev, "main_charger_c");
3428 		if (IS_ERR(di->adc_main_charger_c)) {
3429 			ret = dev_err_probe(dev, PTR_ERR(di->adc_main_charger_c),
3430 					    "failed to get ADC main charger current\n");
3431 			return ret;
3432 		}
3433 	}
3434 	di->adc_vbus_v = devm_iio_channel_get(dev, "vbus_v");
3435 	if (IS_ERR(di->adc_vbus_v)) {
3436 		ret = dev_err_probe(dev, PTR_ERR(di->adc_vbus_v),
3437 				    "failed to get ADC USB charger voltage\n");
3438 		return ret;
3439 	}
3440 	di->adc_usb_charger_c = devm_iio_channel_get(dev, "usb_charger_c");
3441 	if (IS_ERR(di->adc_usb_charger_c)) {
3442 		ret = dev_err_probe(dev, PTR_ERR(di->adc_usb_charger_c),
3443 				    "failed to get ADC USB charger current\n");
3444 		return ret;
3445 	}
3446 
3447 	/*
3448 	 * VDD ADC supply needs to be enabled from this driver when there
3449 	 * is a charger connected to avoid erroneous BTEMP_HIGH/LOW
3450 	 * interrupts during charging
3451 	 */
3452 	di->regu = devm_regulator_get(dev, "vddadc");
3453 	if (IS_ERR(di->regu)) {
3454 		ret = PTR_ERR(di->regu);
3455 		dev_err(dev, "failed to get vddadc regulator\n");
3456 		return ret;
3457 	}
3458 
3459 	/* Request interrupts */
3460 	for (i = 0; i < ARRAY_SIZE(ab8500_charger_irq); i++) {
3461 		irq = platform_get_irq_byname(pdev, ab8500_charger_irq[i].name);
3462 		if (irq < 0)
3463 			return irq;
3464 
3465 		ret = devm_request_threaded_irq(dev,
3466 			irq, NULL, ab8500_charger_irq[i].isr,
3467 			IRQF_SHARED | IRQF_NO_SUSPEND | IRQF_ONESHOT,
3468 			ab8500_charger_irq[i].name, di);
3469 
3470 		if (ret != 0) {
3471 			dev_err(dev, "failed to request %s IRQ %d: %d\n"
3472 				, ab8500_charger_irq[i].name, irq, ret);
3473 			return ret;
3474 		}
3475 		dev_dbg(dev, "Requested %s IRQ %d: %d\n",
3476 			ab8500_charger_irq[i].name, irq, ret);
3477 	}
3478 
3479 	/* initialize lock */
3480 	spin_lock_init(&di->usb_state.usb_lock);
3481 	mutex_init(&di->usb_ipt_crnt_lock);
3482 
3483 	di->autopower = false;
3484 	di->invalid_charger_detect_state = 0;
3485 
3486 	/* AC and USB supply config */
3487 	ac_psy_cfg.of_node = np;
3488 	ac_psy_cfg.supplied_to = supply_interface;
3489 	ac_psy_cfg.num_supplicants = ARRAY_SIZE(supply_interface);
3490 	ac_psy_cfg.drv_data = &di->ac_chg;
3491 	usb_psy_cfg.of_node = np;
3492 	usb_psy_cfg.supplied_to = supply_interface;
3493 	usb_psy_cfg.num_supplicants = ARRAY_SIZE(supply_interface);
3494 	usb_psy_cfg.drv_data = &di->usb_chg;
3495 
3496 	/* AC supply */
3497 	/* ux500_charger sub-class */
3498 	di->ac_chg.ops.enable = &ab8500_charger_ac_en;
3499 	di->ac_chg.ops.check_enable = &ab8500_charger_ac_check_enable;
3500 	di->ac_chg.ops.kick_wd = &ab8500_charger_watchdog_kick;
3501 	di->ac_chg.ops.update_curr = &ab8500_charger_update_charger_current;
3502 	di->ac_chg.max_out_volt_uv = ab8500_charger_voltage_map[
3503 		ARRAY_SIZE(ab8500_charger_voltage_map) - 1];
3504 	di->ac_chg.max_out_curr_ua =
3505 		ab8500_charge_output_curr_map[ARRAY_SIZE(ab8500_charge_output_curr_map) - 1];
3506 	di->ac_chg.wdt_refresh = CHG_WD_INTERVAL;
3507 	/*
3508 	 * The AB8505 only supports USB charging. If we are not the
3509 	 * AB8505, register an AC charger.
3510 	 *
3511 	 * TODO: if this should be opt-in, add DT properties for this.
3512 	 */
3513 	if (!is_ab8505(di->parent))
3514 		di->ac_chg.enabled = true;
3515 
3516 	/* USB supply */
3517 	/* ux500_charger sub-class */
3518 	di->usb_chg.ops.enable = &ab8500_charger_usb_en;
3519 	di->usb_chg.ops.check_enable = &ab8500_charger_usb_check_enable;
3520 	di->usb_chg.ops.kick_wd = &ab8500_charger_watchdog_kick;
3521 	di->usb_chg.ops.update_curr = &ab8500_charger_update_charger_current;
3522 	di->usb_chg.max_out_volt_uv = ab8500_charger_voltage_map[
3523 		ARRAY_SIZE(ab8500_charger_voltage_map) - 1];
3524 	di->usb_chg.max_out_curr_ua =
3525 		ab8500_charge_output_curr_map[ARRAY_SIZE(ab8500_charge_output_curr_map) - 1];
3526 	di->usb_chg.wdt_refresh = CHG_WD_INTERVAL;
3527 	di->usb_state.usb_current_ua = -1;
3528 
3529 	mutex_init(&di->charger_attached_mutex);
3530 
3531 	/* Init work for HW failure check */
3532 	INIT_DEFERRABLE_WORK(&di->check_hw_failure_work,
3533 		ab8500_charger_check_hw_failure_work);
3534 	INIT_DEFERRABLE_WORK(&di->check_usbchgnotok_work,
3535 		ab8500_charger_check_usbchargernotok_work);
3536 
3537 	INIT_DELAYED_WORK(&di->ac_charger_attached_work,
3538 			  ab8500_charger_ac_attached_work);
3539 	INIT_DELAYED_WORK(&di->usb_charger_attached_work,
3540 			  ab8500_charger_usb_attached_work);
3541 
3542 	/*
3543 	 * For ABB revision 1.0 and 1.1 there is a bug in the watchdog
3544 	 * logic. That means we have to continuously kick the charger
3545 	 * watchdog even when no charger is connected. This is only
3546 	 * valid once the AC charger has been enabled. This is
3547 	 * a bug that is not handled by the algorithm and the
3548 	 * watchdog have to be kicked by the charger driver
3549 	 * when the AC charger is disabled
3550 	 */
3551 	INIT_DEFERRABLE_WORK(&di->kick_wd_work,
3552 		ab8500_charger_kick_watchdog_work);
3553 
3554 	INIT_DEFERRABLE_WORK(&di->check_vbat_work,
3555 		ab8500_charger_check_vbat_work);
3556 
3557 	INIT_DELAYED_WORK(&di->attach_work,
3558 		ab8500_charger_usb_link_attach_work);
3559 
3560 	INIT_DELAYED_WORK(&di->usb_state_changed_work,
3561 		ab8500_charger_usb_state_changed_work);
3562 
3563 	INIT_DELAYED_WORK(&di->vbus_drop_end_work,
3564 		ab8500_charger_vbus_drop_end_work);
3565 
3566 	/* Init work for charger detection */
3567 	INIT_WORK(&di->usb_link_status_work,
3568 		ab8500_charger_usb_link_status_work);
3569 	INIT_WORK(&di->ac_work, ab8500_charger_ac_work);
3570 	INIT_WORK(&di->detect_usb_type_work,
3571 		ab8500_charger_detect_usb_type_work);
3572 
3573 	/* Init work for checking HW status */
3574 	INIT_WORK(&di->check_main_thermal_prot_work,
3575 		ab8500_charger_check_main_thermal_prot_work);
3576 	INIT_WORK(&di->check_usb_thermal_prot_work,
3577 		ab8500_charger_check_usb_thermal_prot_work);
3578 
3579 
3580 	/* Initialize OVV, and other registers */
3581 	ret = ab8500_charger_init_hw_registers(di);
3582 	if (ret) {
3583 		dev_err(dev, "failed to initialize ABB registers\n");
3584 		return ret;
3585 	}
3586 
3587 	/* Register AC charger class */
3588 	if (di->ac_chg.enabled) {
3589 		di->ac_chg.psy = devm_power_supply_register(dev,
3590 						       &ab8500_ac_chg_desc,
3591 						       &ac_psy_cfg);
3592 		if (IS_ERR(di->ac_chg.psy)) {
3593 			dev_err(dev, "failed to register AC charger\n");
3594 			return PTR_ERR(di->ac_chg.psy);
3595 		}
3596 	}
3597 
3598 	/* Register USB charger class */
3599 	di->usb_chg.psy = devm_power_supply_register(dev,
3600 						     &ab8500_usb_chg_desc,
3601 						     &usb_psy_cfg);
3602 	if (IS_ERR(di->usb_chg.psy)) {
3603 		dev_err(dev, "failed to register USB charger\n");
3604 		return PTR_ERR(di->usb_chg.psy);
3605 	}
3606 
3607 	/*
3608 	 * Check what battery we have, since we always have the USB
3609 	 * psy, use that as a handle.
3610 	 */
3611 	ret = ab8500_bm_of_probe(di->usb_chg.psy, di->bm);
3612 	if (ret)
3613 		return dev_err_probe(dev, ret,
3614 				     "failed to get battery information\n");
3615 
3616 	/* Identify the connected charger types during startup */
3617 	charger_status = ab8500_charger_detect_chargers(di, true);
3618 	if (charger_status & AC_PW_CONN) {
3619 		di->ac.charger_connected = 1;
3620 		di->ac_conn = true;
3621 		ab8500_power_supply_changed(di, di->ac_chg.psy);
3622 		sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present");
3623 	}
3624 
3625 	platform_set_drvdata(pdev, di);
3626 
3627 	/* Create something that will match the subdrivers when we bind */
3628 	for (i = 0; i < ARRAY_SIZE(ab8500_charger_component_drivers); i++) {
3629 		struct device_driver *drv = &ab8500_charger_component_drivers[i]->driver;
3630 		struct device *p = NULL, *d;
3631 
3632 		while ((d = platform_find_device_by_driver(p, drv))) {
3633 			put_device(p);
3634 			component_match_add(dev, &match, component_compare_dev, d);
3635 			p = d;
3636 		}
3637 		put_device(p);
3638 	}
3639 	if (!match) {
3640 		dev_err(dev, "no matching components\n");
3641 		ret = -ENODEV;
3642 		goto remove_ab8500_bm;
3643 	}
3644 	if (IS_ERR(match)) {
3645 		dev_err(dev, "could not create component match\n");
3646 		ret = PTR_ERR(match);
3647 		goto remove_ab8500_bm;
3648 	}
3649 
3650 	di->usb_phy = usb_get_phy(USB_PHY_TYPE_USB2);
3651 	if (IS_ERR_OR_NULL(di->usb_phy)) {
3652 		dev_err(dev, "failed to get usb transceiver\n");
3653 		ret = -EINVAL;
3654 		goto remove_ab8500_bm;
3655 	}
3656 	di->nb.notifier_call = ab8500_charger_usb_notifier_call;
3657 	ret = usb_register_notifier(di->usb_phy, &di->nb);
3658 	if (ret) {
3659 		dev_err(dev, "failed to register usb notifier\n");
3660 		goto put_usb_phy;
3661 	}
3662 
3663 	ret = component_master_add_with_match(&pdev->dev,
3664 					      &ab8500_charger_comp_ops,
3665 					      match);
3666 	if (ret) {
3667 		dev_err(dev, "failed to add component master\n");
3668 		goto free_notifier;
3669 	}
3670 
3671 	return 0;
3672 
3673 free_notifier:
3674 	usb_unregister_notifier(di->usb_phy, &di->nb);
3675 put_usb_phy:
3676 	usb_put_phy(di->usb_phy);
3677 remove_ab8500_bm:
3678 	ab8500_bm_of_remove(di->usb_chg.psy, di->bm);
3679 	return ret;
3680 }
3681 
3682 static int ab8500_charger_remove(struct platform_device *pdev)
3683 {
3684 	struct ab8500_charger *di = platform_get_drvdata(pdev);
3685 
3686 	component_master_del(&pdev->dev, &ab8500_charger_comp_ops);
3687 
3688 	usb_unregister_notifier(di->usb_phy, &di->nb);
3689 	ab8500_bm_of_remove(di->usb_chg.psy, di->bm);
3690 	usb_put_phy(di->usb_phy);
3691 
3692 	return 0;
3693 }
3694 
3695 static SIMPLE_DEV_PM_OPS(ab8500_charger_pm_ops, ab8500_charger_suspend, ab8500_charger_resume);
3696 
3697 static const struct of_device_id ab8500_charger_match[] = {
3698 	{ .compatible = "stericsson,ab8500-charger", },
3699 	{ },
3700 };
3701 MODULE_DEVICE_TABLE(of, ab8500_charger_match);
3702 
3703 static struct platform_driver ab8500_charger_driver = {
3704 	.probe = ab8500_charger_probe,
3705 	.remove = ab8500_charger_remove,
3706 	.driver = {
3707 		.name = "ab8500-charger",
3708 		.of_match_table = ab8500_charger_match,
3709 		.pm = &ab8500_charger_pm_ops,
3710 	},
3711 };
3712 
3713 static int __init ab8500_charger_init(void)
3714 {
3715 	int ret;
3716 
3717 	ret = platform_register_drivers(ab8500_charger_component_drivers,
3718 			ARRAY_SIZE(ab8500_charger_component_drivers));
3719 	if (ret)
3720 		return ret;
3721 
3722 	ret = platform_driver_register(&ab8500_charger_driver);
3723 	if (ret) {
3724 		platform_unregister_drivers(ab8500_charger_component_drivers,
3725 				ARRAY_SIZE(ab8500_charger_component_drivers));
3726 		return ret;
3727 	}
3728 
3729 	return 0;
3730 }
3731 
3732 static void __exit ab8500_charger_exit(void)
3733 {
3734 	platform_unregister_drivers(ab8500_charger_component_drivers,
3735 			ARRAY_SIZE(ab8500_charger_component_drivers));
3736 	platform_driver_unregister(&ab8500_charger_driver);
3737 }
3738 
3739 module_init(ab8500_charger_init);
3740 module_exit(ab8500_charger_exit);
3741 
3742 MODULE_LICENSE("GPL v2");
3743 MODULE_AUTHOR("Johan Palsson, Karl Komierowski, Arun R Murthy");
3744 MODULE_ALIAS("platform:ab8500-charger");
3745 MODULE_DESCRIPTION("AB8500 charger management driver");
3746