Merge tag 'trace-tools-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[linux-2.6-microblaze.git] / drivers / power / supply / ab8500_charger.c
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         power_supply_for_each_device(&di->usb_chg, ab8500_charger_get_ext_psy_data);
1953
1954         /* First run old_vbat is 0. */
1955         if (di->old_vbat == 0)
1956                 di->old_vbat = di->vbat;
1957
1958         if (!((di->old_vbat <= VBAT_TRESH_IP_CUR_RED &&
1959                 di->vbat <= VBAT_TRESH_IP_CUR_RED) ||
1960                 (di->old_vbat > VBAT_TRESH_IP_CUR_RED &&
1961                 di->vbat > VBAT_TRESH_IP_CUR_RED))) {
1962
1963                 dev_dbg(di->dev, "Vbat did cross threshold, curr: %d, new: %d,"
1964                         " old: %d\n", di->max_usb_in_curr.usb_type_max_ua,
1965                         di->vbat, di->old_vbat);
1966                 ab8500_charger_set_vbus_in_curr(di,
1967                                         di->max_usb_in_curr.usb_type_max_ua);
1968                 power_supply_changed(di->usb_chg.psy);
1969         }
1970
1971         di->old_vbat = di->vbat;
1972
1973         /*
1974          * No need to check the battery voltage every second when not close to
1975          * the threshold.
1976          */
1977         if (di->vbat < (VBAT_TRESH_IP_CUR_RED + 100000) &&
1978                 (di->vbat > (VBAT_TRESH_IP_CUR_RED - 100000)))
1979                         t = 1;
1980
1981         queue_delayed_work(di->charger_wq, &di->check_vbat_work, t * HZ);
1982 }
1983
1984 /**
1985  * ab8500_charger_check_hw_failure_work() - check main charger failure
1986  * @work:       pointer to the work_struct structure
1987  *
1988  * Work queue function for checking the main charger status
1989  */
1990 static void ab8500_charger_check_hw_failure_work(struct work_struct *work)
1991 {
1992         int ret;
1993         u8 reg_value;
1994
1995         struct ab8500_charger *di = container_of(work,
1996                 struct ab8500_charger, check_hw_failure_work.work);
1997
1998         /* Check if the status bits for HW failure is still active */
1999         if (di->flags.mainextchnotok) {
2000                 ret = abx500_get_register_interruptible(di->dev,
2001                         AB8500_CHARGER, AB8500_CH_STATUS2_REG, &reg_value);
2002                 if (ret < 0) {
2003                         dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2004                         return;
2005                 }
2006                 if (!(reg_value & MAIN_CH_NOK)) {
2007                         di->flags.mainextchnotok = false;
2008                         ab8500_power_supply_changed(di, di->ac_chg.psy);
2009                 }
2010         }
2011         if (di->flags.vbus_ovv) {
2012                 ret = abx500_get_register_interruptible(di->dev,
2013                         AB8500_CHARGER, AB8500_CH_USBCH_STAT2_REG,
2014                         &reg_value);
2015                 if (ret < 0) {
2016                         dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2017                         return;
2018                 }
2019                 if (!(reg_value & VBUS_OVV_TH)) {
2020                         di->flags.vbus_ovv = false;
2021                         ab8500_power_supply_changed(di, di->usb_chg.psy);
2022                 }
2023         }
2024         /* If we still have a failure, schedule a new check */
2025         if (di->flags.mainextchnotok || di->flags.vbus_ovv) {
2026                 queue_delayed_work(di->charger_wq,
2027                         &di->check_hw_failure_work, round_jiffies(HZ));
2028         }
2029 }
2030
2031 /**
2032  * ab8500_charger_kick_watchdog_work() - kick the watchdog
2033  * @work:       pointer to the work_struct structure
2034  *
2035  * Work queue function for kicking the charger watchdog.
2036  *
2037  * For ABB revision 1.0 and 1.1 there is a bug in the watchdog
2038  * logic. That means we have to continuously kick the charger
2039  * watchdog even when no charger is connected. This is only
2040  * valid once the AC charger has been enabled. This is
2041  * a bug that is not handled by the algorithm and the
2042  * watchdog have to be kicked by the charger driver
2043  * when the AC charger is disabled
2044  */
2045 static void ab8500_charger_kick_watchdog_work(struct work_struct *work)
2046 {
2047         int ret;
2048
2049         struct ab8500_charger *di = container_of(work,
2050                 struct ab8500_charger, kick_wd_work.work);
2051
2052         ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
2053                 AB8500_CHARG_WD_CTRL, CHARG_WD_KICK);
2054         if (ret)
2055                 dev_err(di->dev, "Failed to kick WD!\n");
2056
2057         /* Schedule a new watchdog kick */
2058         queue_delayed_work(di->charger_wq,
2059                 &di->kick_wd_work, round_jiffies(WD_KICK_INTERVAL));
2060 }
2061
2062 /**
2063  * ab8500_charger_ac_work() - work to get and set main charger status
2064  * @work:       pointer to the work_struct structure
2065  *
2066  * Work queue function for checking the main charger status
2067  */
2068 static void ab8500_charger_ac_work(struct work_struct *work)
2069 {
2070         int ret;
2071
2072         struct ab8500_charger *di = container_of(work,
2073                 struct ab8500_charger, ac_work);
2074
2075         /*
2076          * Since we can't be sure that the events are received
2077          * synchronously, we have the check if the main charger is
2078          * connected by reading the status register
2079          */
2080         ret = ab8500_charger_detect_chargers(di, false);
2081         if (ret < 0)
2082                 return;
2083
2084         if (ret & AC_PW_CONN) {
2085                 di->ac.charger_connected = 1;
2086                 di->ac_conn = true;
2087         } else {
2088                 di->ac.charger_connected = 0;
2089         }
2090
2091         ab8500_power_supply_changed(di, di->ac_chg.psy);
2092         sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present");
2093 }
2094
2095 static void ab8500_charger_usb_attached_work(struct work_struct *work)
2096 {
2097         struct ab8500_charger *di = container_of(work,
2098                                                  struct ab8500_charger,
2099                                                  usb_charger_attached_work.work);
2100         int usbch = (USB_CH_VBUSDROP | USB_CH_VBUSDETDBNC);
2101         int ret, i;
2102         u8 statval;
2103
2104         for (i = 0; i < 10; i++) {
2105                 ret = abx500_get_register_interruptible(di->dev,
2106                                                         AB8500_CHARGER,
2107                                                         AB8500_CH_USBCH_STAT1_REG,
2108                                                         &statval);
2109                 if (ret < 0) {
2110                         dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
2111                         goto reschedule;
2112                 }
2113                 if ((statval & usbch) != usbch)
2114                         goto reschedule;
2115
2116                 msleep(CHARGER_STATUS_POLL);
2117         }
2118
2119         ab8500_charger_usb_en(&di->usb_chg, 0, 0, 0);
2120
2121         mutex_lock(&di->charger_attached_mutex);
2122         mutex_unlock(&di->charger_attached_mutex);
2123
2124         return;
2125
2126 reschedule:
2127         queue_delayed_work(di->charger_wq,
2128                            &di->usb_charger_attached_work,
2129                            HZ);
2130 }
2131
2132 static void ab8500_charger_ac_attached_work(struct work_struct *work)
2133 {
2134
2135         struct ab8500_charger *di = container_of(work,
2136                                                  struct ab8500_charger,
2137                                                  ac_charger_attached_work.work);
2138         int mainch = (MAIN_CH_STATUS2_MAINCHGDROP |
2139                       MAIN_CH_STATUS2_MAINCHARGERDETDBNC);
2140         int ret, i;
2141         u8 statval;
2142
2143         for (i = 0; i < 10; i++) {
2144                 ret = abx500_get_register_interruptible(di->dev,
2145                                                         AB8500_CHARGER,
2146                                                         AB8500_CH_STATUS2_REG,
2147                                                         &statval);
2148                 if (ret < 0) {
2149                         dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
2150                         goto reschedule;
2151                 }
2152
2153                 if ((statval & mainch) != mainch)
2154                         goto reschedule;
2155
2156                 msleep(CHARGER_STATUS_POLL);
2157         }
2158
2159         ab8500_charger_ac_en(&di->ac_chg, 0, 0, 0);
2160         queue_work(di->charger_wq, &di->ac_work);
2161
2162         mutex_lock(&di->charger_attached_mutex);
2163         mutex_unlock(&di->charger_attached_mutex);
2164
2165         return;
2166
2167 reschedule:
2168         queue_delayed_work(di->charger_wq,
2169                            &di->ac_charger_attached_work,
2170                            HZ);
2171 }
2172
2173 /**
2174  * ab8500_charger_detect_usb_type_work() - work to detect USB type
2175  * @work:       Pointer to the work_struct structure
2176  *
2177  * Detect the type of USB plugged
2178  */
2179 static void ab8500_charger_detect_usb_type_work(struct work_struct *work)
2180 {
2181         int ret;
2182
2183         struct ab8500_charger *di = container_of(work,
2184                 struct ab8500_charger, detect_usb_type_work);
2185
2186         /*
2187          * Since we can't be sure that the events are received
2188          * synchronously, we have the check if is
2189          * connected by reading the status register
2190          */
2191         ret = ab8500_charger_detect_chargers(di, false);
2192         if (ret < 0)
2193                 return;
2194
2195         if (!(ret & USB_PW_CONN)) {
2196                 dev_dbg(di->dev, "%s di->vbus_detected = false\n", __func__);
2197                 di->vbus_detected = false;
2198                 ab8500_charger_set_usb_connected(di, false);
2199                 ab8500_power_supply_changed(di, di->usb_chg.psy);
2200         } else {
2201                 dev_dbg(di->dev, "%s di->vbus_detected = true\n", __func__);
2202                 di->vbus_detected = true;
2203
2204                 if (is_ab8500_1p1_or_earlier(di->parent)) {
2205                         ret = ab8500_charger_detect_usb_type(di);
2206                         if (!ret) {
2207                                 ab8500_charger_set_usb_connected(di, true);
2208                                 ab8500_power_supply_changed(di,
2209                                                             di->usb_chg.psy);
2210                         }
2211                 } else {
2212                         /*
2213                          * For ABB cut2.0 and onwards we have an IRQ,
2214                          * USB_LINK_STATUS that will be triggered when the USB
2215                          * link status changes. The exception is USB connected
2216                          * during startup. Then we don't get a
2217                          * USB_LINK_STATUS IRQ
2218                          */
2219                         if (di->vbus_detected_start) {
2220                                 di->vbus_detected_start = false;
2221                                 ret = ab8500_charger_detect_usb_type(di);
2222                                 if (!ret) {
2223                                         ab8500_charger_set_usb_connected(di,
2224                                                 true);
2225                                         ab8500_power_supply_changed(di,
2226                                                 di->usb_chg.psy);
2227                                 }
2228                         }
2229                 }
2230         }
2231 }
2232
2233 /**
2234  * ab8500_charger_usb_link_attach_work() - work to detect USB type
2235  * @work:       pointer to the work_struct structure
2236  *
2237  * Detect the type of USB plugged
2238  */
2239 static void ab8500_charger_usb_link_attach_work(struct work_struct *work)
2240 {
2241         struct ab8500_charger *di =
2242                 container_of(work, struct ab8500_charger, attach_work.work);
2243         int ret;
2244
2245         /* Update maximum input current if USB enumeration is not detected */
2246         if (!di->usb.charger_online) {
2247                 ret = ab8500_charger_set_vbus_in_curr(di,
2248                                         di->max_usb_in_curr.usb_type_max_ua);
2249                 if (ret)
2250                         return;
2251         }
2252
2253         ab8500_charger_set_usb_connected(di, true);
2254         ab8500_power_supply_changed(di, di->usb_chg.psy);
2255 }
2256
2257 /**
2258  * ab8500_charger_usb_link_status_work() - work to detect USB type
2259  * @work:       pointer to the work_struct structure
2260  *
2261  * Detect the type of USB plugged
2262  */
2263 static void ab8500_charger_usb_link_status_work(struct work_struct *work)
2264 {
2265         int detected_chargers;
2266         int ret;
2267         u8 val;
2268         u8 link_status;
2269
2270         struct ab8500_charger *di = container_of(work,
2271                 struct ab8500_charger, usb_link_status_work);
2272
2273         /*
2274          * Since we can't be sure that the events are received
2275          * synchronously, we have the check if  is
2276          * connected by reading the status register
2277          */
2278         detected_chargers = ab8500_charger_detect_chargers(di, false);
2279         if (detected_chargers < 0)
2280                 return;
2281
2282         /*
2283          * Some chargers that breaks the USB spec is
2284          * identified as invalid by AB8500 and it refuse
2285          * to start the charging process. but by jumping
2286          * through a few hoops it can be forced to start.
2287          */
2288         if (is_ab8500(di->parent))
2289                 ret = abx500_get_register_interruptible(di->dev, AB8500_USB,
2290                                         AB8500_USB_LINE_STAT_REG, &val);
2291         else
2292                 ret = abx500_get_register_interruptible(di->dev, AB8500_USB,
2293                                         AB8500_USB_LINK1_STAT_REG, &val);
2294
2295         if (ret >= 0)
2296                 dev_dbg(di->dev, "UsbLineStatus register = 0x%02x\n", val);
2297         else
2298                 dev_dbg(di->dev, "Error reading USB link status\n");
2299
2300         if (is_ab8500(di->parent))
2301                 link_status = AB8500_USB_LINK_STATUS;
2302         else
2303                 link_status = AB8505_USB_LINK_STATUS;
2304
2305         if (detected_chargers & USB_PW_CONN) {
2306                 if (((val & link_status) >> USB_LINK_STATUS_SHIFT) ==
2307                                 USB_STAT_NOT_VALID_LINK &&
2308                                 di->invalid_charger_detect_state == 0) {
2309                         dev_dbg(di->dev,
2310                                         "Invalid charger detected, state= 0\n");
2311                         /*Enable charger*/
2312                         abx500_mask_and_set_register_interruptible(di->dev,
2313                                         AB8500_CHARGER, AB8500_USBCH_CTRL1_REG,
2314                                         USB_CH_ENA, USB_CH_ENA);
2315                         /*Enable charger detection*/
2316                         abx500_mask_and_set_register_interruptible(di->dev,
2317                                         AB8500_USB, AB8500_USB_LINE_CTRL2_REG,
2318                                         USB_CH_DET, USB_CH_DET);
2319                         di->invalid_charger_detect_state = 1;
2320                         /*exit and wait for new link status interrupt.*/
2321                         return;
2322
2323                 }
2324                 if (di->invalid_charger_detect_state == 1) {
2325                         dev_dbg(di->dev,
2326                                         "Invalid charger detected, state= 1\n");
2327                         /*Stop charger detection*/
2328                         abx500_mask_and_set_register_interruptible(di->dev,
2329                                         AB8500_USB, AB8500_USB_LINE_CTRL2_REG,
2330                                         USB_CH_DET, 0x00);
2331                         /*Check link status*/
2332                         if (is_ab8500(di->parent))
2333                                 ret = abx500_get_register_interruptible(di->dev,
2334                                         AB8500_USB, AB8500_USB_LINE_STAT_REG,
2335                                         &val);
2336                         else
2337                                 ret = abx500_get_register_interruptible(di->dev,
2338                                         AB8500_USB, AB8500_USB_LINK1_STAT_REG,
2339                                         &val);
2340
2341                         dev_dbg(di->dev, "USB link status= 0x%02x\n",
2342                                 (val & link_status) >> USB_LINK_STATUS_SHIFT);
2343                         di->invalid_charger_detect_state = 2;
2344                 }
2345         } else {
2346                 di->invalid_charger_detect_state = 0;
2347         }
2348
2349         if (!(detected_chargers & USB_PW_CONN)) {
2350                 di->vbus_detected = false;
2351                 ab8500_charger_set_usb_connected(di, false);
2352                 ab8500_power_supply_changed(di, di->usb_chg.psy);
2353                 return;
2354         }
2355
2356         dev_dbg(di->dev,"%s di->vbus_detected = true\n",__func__);
2357         di->vbus_detected = true;
2358         ret = ab8500_charger_read_usb_type(di);
2359         if (ret) {
2360                 if (ret == -ENXIO) {
2361                         /* No valid charger type detected */
2362                         ab8500_charger_set_usb_connected(di, false);
2363                         ab8500_power_supply_changed(di, di->usb_chg.psy);
2364                 }
2365                 return;
2366         }
2367
2368         if (di->usb_device_is_unrecognised) {
2369                 dev_dbg(di->dev,
2370                         "Potential Legacy Charger device. "
2371                         "Delay work for %d msec for USB enum "
2372                         "to finish",
2373                         WAIT_ACA_RID_ENUMERATION);
2374                 queue_delayed_work(di->charger_wq,
2375                                    &di->attach_work,
2376                                    msecs_to_jiffies(WAIT_ACA_RID_ENUMERATION));
2377         } else if (di->is_aca_rid == 1) {
2378                 /* Only wait once */
2379                 di->is_aca_rid++;
2380                 dev_dbg(di->dev,
2381                         "%s Wait %d msec for USB enum to finish",
2382                         __func__, WAIT_ACA_RID_ENUMERATION);
2383                 queue_delayed_work(di->charger_wq,
2384                                    &di->attach_work,
2385                                    msecs_to_jiffies(WAIT_ACA_RID_ENUMERATION));
2386         } else {
2387                 queue_delayed_work(di->charger_wq,
2388                                    &di->attach_work,
2389                                    0);
2390         }
2391 }
2392
2393 static void ab8500_charger_usb_state_changed_work(struct work_struct *work)
2394 {
2395         int ret;
2396         unsigned long flags;
2397
2398         struct ab8500_charger *di = container_of(work,
2399                 struct ab8500_charger, usb_state_changed_work.work);
2400
2401         if (!di->vbus_detected) {
2402                 dev_dbg(di->dev,
2403                         "%s !di->vbus_detected\n",
2404                         __func__);
2405                 return;
2406         }
2407
2408         spin_lock_irqsave(&di->usb_state.usb_lock, flags);
2409         di->usb_state.state = di->usb_state.state_tmp;
2410         di->usb_state.usb_current_ua = di->usb_state.usb_current_tmp_ua;
2411         spin_unlock_irqrestore(&di->usb_state.usb_lock, flags);
2412
2413         dev_dbg(di->dev, "%s USB state: 0x%02x uA: %d\n",
2414                 __func__, di->usb_state.state, di->usb_state.usb_current_ua);
2415
2416         switch (di->usb_state.state) {
2417         case AB8500_BM_USB_STATE_RESET_HS:
2418         case AB8500_BM_USB_STATE_RESET_FS:
2419         case AB8500_BM_USB_STATE_SUSPEND:
2420         case AB8500_BM_USB_STATE_MAX:
2421                 ab8500_charger_set_usb_connected(di, false);
2422                 ab8500_power_supply_changed(di, di->usb_chg.psy);
2423                 break;
2424
2425         case AB8500_BM_USB_STATE_RESUME:
2426                 /*
2427                  * when suspend->resume there should be delay
2428                  * of 1sec for enabling charging
2429                  */
2430                 msleep(1000);
2431                 fallthrough;
2432         case AB8500_BM_USB_STATE_CONFIGURED:
2433                 /*
2434                  * USB is configured, enable charging with the charging
2435                  * input current obtained from USB driver
2436                  */
2437                 if (!ab8500_charger_get_usb_cur(di)) {
2438                         /* Update maximum input current */
2439                         ret = ab8500_charger_set_vbus_in_curr(di,
2440                                         di->max_usb_in_curr.usb_type_max_ua);
2441                         if (ret)
2442                                 return;
2443
2444                         ab8500_charger_set_usb_connected(di, true);
2445                         ab8500_power_supply_changed(di, di->usb_chg.psy);
2446                 }
2447                 break;
2448
2449         default:
2450                 break;
2451         }
2452 }
2453
2454 /**
2455  * ab8500_charger_check_usbchargernotok_work() - check USB chg not ok status
2456  * @work:       pointer to the work_struct structure
2457  *
2458  * Work queue function for checking the USB charger Not OK status
2459  */
2460 static void ab8500_charger_check_usbchargernotok_work(struct work_struct *work)
2461 {
2462         int ret;
2463         u8 reg_value;
2464         bool prev_status;
2465
2466         struct ab8500_charger *di = container_of(work,
2467                 struct ab8500_charger, check_usbchgnotok_work.work);
2468
2469         /* Check if the status bit for usbchargernotok is still active */
2470         ret = abx500_get_register_interruptible(di->dev,
2471                 AB8500_CHARGER, AB8500_CH_USBCH_STAT2_REG, &reg_value);
2472         if (ret < 0) {
2473                 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2474                 return;
2475         }
2476         prev_status = di->flags.usbchargernotok;
2477
2478         if (reg_value & VBUS_CH_NOK) {
2479                 di->flags.usbchargernotok = true;
2480                 /* Check again in 1sec */
2481                 queue_delayed_work(di->charger_wq,
2482                         &di->check_usbchgnotok_work, HZ);
2483         } else {
2484                 di->flags.usbchargernotok = false;
2485                 di->flags.vbus_collapse = false;
2486         }
2487
2488         if (prev_status != di->flags.usbchargernotok)
2489                 ab8500_power_supply_changed(di, di->usb_chg.psy);
2490 }
2491
2492 /**
2493  * ab8500_charger_check_main_thermal_prot_work() - check main thermal status
2494  * @work:       pointer to the work_struct structure
2495  *
2496  * Work queue function for checking the Main thermal prot status
2497  */
2498 static void ab8500_charger_check_main_thermal_prot_work(
2499         struct work_struct *work)
2500 {
2501         int ret;
2502         u8 reg_value;
2503
2504         struct ab8500_charger *di = container_of(work,
2505                 struct ab8500_charger, check_main_thermal_prot_work);
2506
2507         /* Check if the status bit for main_thermal_prot is still active */
2508         ret = abx500_get_register_interruptible(di->dev,
2509                 AB8500_CHARGER, AB8500_CH_STATUS2_REG, &reg_value);
2510         if (ret < 0) {
2511                 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2512                 return;
2513         }
2514         if (reg_value & MAIN_CH_TH_PROT)
2515                 di->flags.main_thermal_prot = true;
2516         else
2517                 di->flags.main_thermal_prot = false;
2518
2519         ab8500_power_supply_changed(di, di->ac_chg.psy);
2520 }
2521
2522 /**
2523  * ab8500_charger_check_usb_thermal_prot_work() - check usb thermal status
2524  * @work:       pointer to the work_struct structure
2525  *
2526  * Work queue function for checking the USB thermal prot status
2527  */
2528 static void ab8500_charger_check_usb_thermal_prot_work(
2529         struct work_struct *work)
2530 {
2531         int ret;
2532         u8 reg_value;
2533
2534         struct ab8500_charger *di = container_of(work,
2535                 struct ab8500_charger, check_usb_thermal_prot_work);
2536
2537         /* Check if the status bit for usb_thermal_prot is still active */
2538         ret = abx500_get_register_interruptible(di->dev,
2539                 AB8500_CHARGER, AB8500_CH_USBCH_STAT2_REG, &reg_value);
2540         if (ret < 0) {
2541                 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2542                 return;
2543         }
2544         if (reg_value & USB_CH_TH_PROT)
2545                 di->flags.usb_thermal_prot = true;
2546         else
2547                 di->flags.usb_thermal_prot = false;
2548
2549         ab8500_power_supply_changed(di, di->usb_chg.psy);
2550 }
2551
2552 /**
2553  * ab8500_charger_mainchunplugdet_handler() - main charger unplugged
2554  * @irq:       interrupt number
2555  * @_di:       pointer to the ab8500_charger structure
2556  *
2557  * Returns IRQ status(IRQ_HANDLED)
2558  */
2559 static irqreturn_t ab8500_charger_mainchunplugdet_handler(int irq, void *_di)
2560 {
2561         struct ab8500_charger *di = _di;
2562
2563         dev_dbg(di->dev, "Main charger unplugged\n");
2564         queue_work(di->charger_wq, &di->ac_work);
2565
2566         cancel_delayed_work_sync(&di->ac_charger_attached_work);
2567         mutex_lock(&di->charger_attached_mutex);
2568         mutex_unlock(&di->charger_attached_mutex);
2569
2570         return IRQ_HANDLED;
2571 }
2572
2573 /**
2574  * ab8500_charger_mainchplugdet_handler() - main charger plugged
2575  * @irq:       interrupt number
2576  * @_di:       pointer to the ab8500_charger structure
2577  *
2578  * Returns IRQ status(IRQ_HANDLED)
2579  */
2580 static irqreturn_t ab8500_charger_mainchplugdet_handler(int irq, void *_di)
2581 {
2582         struct ab8500_charger *di = _di;
2583
2584         dev_dbg(di->dev, "Main charger plugged\n");
2585         queue_work(di->charger_wq, &di->ac_work);
2586
2587         mutex_lock(&di->charger_attached_mutex);
2588         mutex_unlock(&di->charger_attached_mutex);
2589
2590         if (is_ab8500(di->parent))
2591                 queue_delayed_work(di->charger_wq,
2592                            &di->ac_charger_attached_work,
2593                            HZ);
2594         return IRQ_HANDLED;
2595 }
2596
2597 /**
2598  * ab8500_charger_mainextchnotok_handler() - main charger not ok
2599  * @irq:       interrupt number
2600  * @_di:       pointer to the ab8500_charger structure
2601  *
2602  * Returns IRQ status(IRQ_HANDLED)
2603  */
2604 static irqreturn_t ab8500_charger_mainextchnotok_handler(int irq, void *_di)
2605 {
2606         struct ab8500_charger *di = _di;
2607
2608         dev_dbg(di->dev, "Main charger not ok\n");
2609         di->flags.mainextchnotok = true;
2610         ab8500_power_supply_changed(di, di->ac_chg.psy);
2611
2612         /* Schedule a new HW failure check */
2613         queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0);
2614
2615         return IRQ_HANDLED;
2616 }
2617
2618 /**
2619  * ab8500_charger_mainchthprotr_handler() - Die temp is above main charger
2620  * thermal protection threshold
2621  * @irq:       interrupt number
2622  * @_di:       pointer to the ab8500_charger structure
2623  *
2624  * Returns IRQ status(IRQ_HANDLED)
2625  */
2626 static irqreturn_t ab8500_charger_mainchthprotr_handler(int irq, void *_di)
2627 {
2628         struct ab8500_charger *di = _di;
2629
2630         dev_dbg(di->dev,
2631                 "Die temp above Main charger thermal protection threshold\n");
2632         queue_work(di->charger_wq, &di->check_main_thermal_prot_work);
2633
2634         return IRQ_HANDLED;
2635 }
2636
2637 /**
2638  * ab8500_charger_mainchthprotf_handler() - Die temp is below main charger
2639  * thermal protection threshold
2640  * @irq:       interrupt number
2641  * @_di:       pointer to the ab8500_charger structure
2642  *
2643  * Returns IRQ status(IRQ_HANDLED)
2644  */
2645 static irqreturn_t ab8500_charger_mainchthprotf_handler(int irq, void *_di)
2646 {
2647         struct ab8500_charger *di = _di;
2648
2649         dev_dbg(di->dev,
2650                 "Die temp ok for Main charger thermal protection threshold\n");
2651         queue_work(di->charger_wq, &di->check_main_thermal_prot_work);
2652
2653         return IRQ_HANDLED;
2654 }
2655
2656 static void ab8500_charger_vbus_drop_end_work(struct work_struct *work)
2657 {
2658         struct ab8500_charger *di = container_of(work,
2659                 struct ab8500_charger, vbus_drop_end_work.work);
2660         int ret, curr_ua;
2661         u8 reg_value;
2662
2663         di->flags.vbus_drop_end = false;
2664
2665         /* Reset the drop counter */
2666         abx500_set_register_interruptible(di->dev,
2667                                   AB8500_CHARGER, AB8500_CHARGER_CTRL, 0x01);
2668
2669         ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
2670                         AB8500_CH_USBCH_STAT2_REG, &reg_value);
2671         if (ret < 0) {
2672                 dev_err(di->dev, "%s read failed\n", __func__);
2673                 return;
2674         }
2675
2676         curr_ua = ab8500_charge_input_curr_map[
2677                 reg_value >> AUTO_VBUS_IN_CURR_LIM_SHIFT];
2678
2679         if (di->max_usb_in_curr.calculated_max_ua != curr_ua) {
2680                 /* USB source is collapsing */
2681                 di->max_usb_in_curr.calculated_max_ua = curr_ua;
2682                 dev_dbg(di->dev,
2683                          "VBUS input current limiting to %d uA\n",
2684                          di->max_usb_in_curr.calculated_max_ua);
2685         } else {
2686                 /*
2687                  * USB source can not give more than this amount.
2688                  * Taking more will collapse the source.
2689                  */
2690                 di->max_usb_in_curr.set_max_ua =
2691                         di->max_usb_in_curr.calculated_max_ua;
2692                 dev_dbg(di->dev,
2693                          "VBUS input current limited to %d uA\n",
2694                          di->max_usb_in_curr.set_max_ua);
2695         }
2696
2697         if (di->usb.charger_connected)
2698                 ab8500_charger_set_vbus_in_curr(di,
2699                                         di->max_usb_in_curr.usb_type_max_ua);
2700 }
2701
2702 /**
2703  * ab8500_charger_vbusdetf_handler() - VBUS falling detected
2704  * @irq:       interrupt number
2705  * @_di:       pointer to the ab8500_charger structure
2706  *
2707  * Returns IRQ status(IRQ_HANDLED)
2708  */
2709 static irqreturn_t ab8500_charger_vbusdetf_handler(int irq, void *_di)
2710 {
2711         struct ab8500_charger *di = _di;
2712
2713         di->vbus_detected = false;
2714         dev_dbg(di->dev, "VBUS falling detected\n");
2715         queue_work(di->charger_wq, &di->detect_usb_type_work);
2716
2717         return IRQ_HANDLED;
2718 }
2719
2720 /**
2721  * ab8500_charger_vbusdetr_handler() - VBUS rising detected
2722  * @irq:       interrupt number
2723  * @_di:       pointer to the ab8500_charger structure
2724  *
2725  * Returns IRQ status(IRQ_HANDLED)
2726  */
2727 static irqreturn_t ab8500_charger_vbusdetr_handler(int irq, void *_di)
2728 {
2729         struct ab8500_charger *di = _di;
2730
2731         di->vbus_detected = true;
2732         dev_dbg(di->dev, "VBUS rising detected\n");
2733
2734         queue_work(di->charger_wq, &di->detect_usb_type_work);
2735
2736         return IRQ_HANDLED;
2737 }
2738
2739 /**
2740  * ab8500_charger_usblinkstatus_handler() - USB link status has changed
2741  * @irq:       interrupt number
2742  * @_di:       pointer to the ab8500_charger structure
2743  *
2744  * Returns IRQ status(IRQ_HANDLED)
2745  */
2746 static irqreturn_t ab8500_charger_usblinkstatus_handler(int irq, void *_di)
2747 {
2748         struct ab8500_charger *di = _di;
2749
2750         dev_dbg(di->dev, "USB link status changed\n");
2751
2752         queue_work(di->charger_wq, &di->usb_link_status_work);
2753
2754         return IRQ_HANDLED;
2755 }
2756
2757 /**
2758  * ab8500_charger_usbchthprotr_handler() - Die temp is above usb charger
2759  * thermal protection threshold
2760  * @irq:       interrupt number
2761  * @_di:       pointer to the ab8500_charger structure
2762  *
2763  * Returns IRQ status(IRQ_HANDLED)
2764  */
2765 static irqreturn_t ab8500_charger_usbchthprotr_handler(int irq, void *_di)
2766 {
2767         struct ab8500_charger *di = _di;
2768
2769         dev_dbg(di->dev,
2770                 "Die temp above USB charger thermal protection threshold\n");
2771         queue_work(di->charger_wq, &di->check_usb_thermal_prot_work);
2772
2773         return IRQ_HANDLED;
2774 }
2775
2776 /**
2777  * ab8500_charger_usbchthprotf_handler() - Die temp is below usb charger
2778  * thermal protection threshold
2779  * @irq:       interrupt number
2780  * @_di:       pointer to the ab8500_charger structure
2781  *
2782  * Returns IRQ status(IRQ_HANDLED)
2783  */
2784 static irqreturn_t ab8500_charger_usbchthprotf_handler(int irq, void *_di)
2785 {
2786         struct ab8500_charger *di = _di;
2787
2788         dev_dbg(di->dev,
2789                 "Die temp ok for USB charger thermal protection threshold\n");
2790         queue_work(di->charger_wq, &di->check_usb_thermal_prot_work);
2791
2792         return IRQ_HANDLED;
2793 }
2794
2795 /**
2796  * ab8500_charger_usbchargernotokr_handler() - USB charger not ok detected
2797  * @irq:       interrupt number
2798  * @_di:       pointer to the ab8500_charger structure
2799  *
2800  * Returns IRQ status(IRQ_HANDLED)
2801  */
2802 static irqreturn_t ab8500_charger_usbchargernotokr_handler(int irq, void *_di)
2803 {
2804         struct ab8500_charger *di = _di;
2805
2806         dev_dbg(di->dev, "Not allowed USB charger detected\n");
2807         queue_delayed_work(di->charger_wq, &di->check_usbchgnotok_work, 0);
2808
2809         return IRQ_HANDLED;
2810 }
2811
2812 /**
2813  * ab8500_charger_chwdexp_handler() - Charger watchdog expired
2814  * @irq:       interrupt number
2815  * @_di:       pointer to the ab8500_charger structure
2816  *
2817  * Returns IRQ status(IRQ_HANDLED)
2818  */
2819 static irqreturn_t ab8500_charger_chwdexp_handler(int irq, void *_di)
2820 {
2821         struct ab8500_charger *di = _di;
2822
2823         dev_dbg(di->dev, "Charger watchdog expired\n");
2824
2825         /*
2826          * The charger that was online when the watchdog expired
2827          * needs to be restarted for charging to start again
2828          */
2829         if (di->ac.charger_online) {
2830                 di->ac.wd_expired = true;
2831                 ab8500_power_supply_changed(di, di->ac_chg.psy);
2832         }
2833         if (di->usb.charger_online) {
2834                 di->usb.wd_expired = true;
2835                 ab8500_power_supply_changed(di, di->usb_chg.psy);
2836         }
2837
2838         return IRQ_HANDLED;
2839 }
2840
2841 /**
2842  * ab8500_charger_vbuschdropend_handler() - VBUS drop removed
2843  * @irq:       interrupt number
2844  * @_di:       pointer to the ab8500_charger structure
2845  *
2846  * Returns IRQ status(IRQ_HANDLED)
2847  */
2848 static irqreturn_t ab8500_charger_vbuschdropend_handler(int irq, void *_di)
2849 {
2850         struct ab8500_charger *di = _di;
2851
2852         dev_dbg(di->dev, "VBUS charger drop ended\n");
2853         di->flags.vbus_drop_end = true;
2854
2855         /*
2856          * VBUS might have dropped due to bad connection.
2857          * Schedule a new input limit set to the value SW requests.
2858          */
2859         queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work,
2860                            round_jiffies(VBUS_IN_CURR_LIM_RETRY_SET_TIME * HZ));
2861
2862         return IRQ_HANDLED;
2863 }
2864
2865 /**
2866  * ab8500_charger_vbusovv_handler() - VBUS overvoltage detected
2867  * @irq:       interrupt number
2868  * @_di:       pointer to the ab8500_charger structure
2869  *
2870  * Returns IRQ status(IRQ_HANDLED)
2871  */
2872 static irqreturn_t ab8500_charger_vbusovv_handler(int irq, void *_di)
2873 {
2874         struct ab8500_charger *di = _di;
2875
2876         dev_dbg(di->dev, "VBUS overvoltage detected\n");
2877         di->flags.vbus_ovv = true;
2878         ab8500_power_supply_changed(di, di->usb_chg.psy);
2879
2880         /* Schedule a new HW failure check */
2881         queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0);
2882
2883         return IRQ_HANDLED;
2884 }
2885
2886 /**
2887  * ab8500_charger_ac_get_property() - get the ac/mains properties
2888  * @psy:       pointer to the power_supply structure
2889  * @psp:       pointer to the power_supply_property structure
2890  * @val:       pointer to the power_supply_propval union
2891  *
2892  * This function gets called when an application tries to get the ac/mains
2893  * properties by reading the sysfs files.
2894  * AC/Mains properties are online, present and voltage.
2895  * online:     ac/mains charging is in progress or not
2896  * present:    presence of the ac/mains
2897  * voltage:    AC/Mains voltage
2898  * Returns error code in case of failure else 0(on success)
2899  */
2900 static int ab8500_charger_ac_get_property(struct power_supply *psy,
2901         enum power_supply_property psp,
2902         union power_supply_propval *val)
2903 {
2904         struct ab8500_charger *di;
2905         int ret;
2906
2907         di = to_ab8500_charger_ac_device_info(psy_to_ux500_charger(psy));
2908
2909         switch (psp) {
2910         case POWER_SUPPLY_PROP_HEALTH:
2911                 if (di->flags.mainextchnotok)
2912                         val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
2913                 else if (di->ac.wd_expired || di->usb.wd_expired)
2914                         val->intval = POWER_SUPPLY_HEALTH_DEAD;
2915                 else if (di->flags.main_thermal_prot)
2916                         val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
2917                 else
2918                         val->intval = POWER_SUPPLY_HEALTH_GOOD;
2919                 break;
2920         case POWER_SUPPLY_PROP_ONLINE:
2921                 val->intval = di->ac.charger_online;
2922                 break;
2923         case POWER_SUPPLY_PROP_PRESENT:
2924                 val->intval = di->ac.charger_connected;
2925                 break;
2926         case POWER_SUPPLY_PROP_VOLTAGE_NOW:
2927                 ret = ab8500_charger_get_ac_voltage(di);
2928                 if (ret >= 0)
2929                         di->ac.charger_voltage_uv = ret;
2930                 /* On error, use previous value */
2931                 val->intval = di->ac.charger_voltage_uv;
2932                 break;
2933         case POWER_SUPPLY_PROP_VOLTAGE_AVG:
2934                 /*
2935                  * This property is used to indicate when CV mode is entered
2936                  * for the AC charger
2937                  */
2938                 di->ac.cv_active = ab8500_charger_ac_cv(di);
2939                 val->intval = di->ac.cv_active;
2940                 break;
2941         case POWER_SUPPLY_PROP_CURRENT_NOW:
2942                 ret = ab8500_charger_get_ac_current(di);
2943                 if (ret >= 0)
2944                         di->ac.charger_current_ua = ret;
2945                 val->intval = di->ac.charger_current_ua;
2946                 break;
2947         default:
2948                 return -EINVAL;
2949         }
2950         return 0;
2951 }
2952
2953 /**
2954  * ab8500_charger_usb_get_property() - get the usb properties
2955  * @psy:        pointer to the power_supply structure
2956  * @psp:        pointer to the power_supply_property structure
2957  * @val:        pointer to the power_supply_propval union
2958  *
2959  * This function gets called when an application tries to get the usb
2960  * properties by reading the sysfs files.
2961  * USB properties are online, present and voltage.
2962  * online:     usb charging is in progress or not
2963  * present:    presence of the usb
2964  * voltage:    vbus voltage
2965  * Returns error code in case of failure else 0(on success)
2966  */
2967 static int ab8500_charger_usb_get_property(struct power_supply *psy,
2968         enum power_supply_property psp,
2969         union power_supply_propval *val)
2970 {
2971         struct ab8500_charger *di;
2972         int ret;
2973
2974         di = to_ab8500_charger_usb_device_info(psy_to_ux500_charger(psy));
2975
2976         switch (psp) {
2977         case POWER_SUPPLY_PROP_HEALTH:
2978                 if (di->flags.usbchargernotok)
2979                         val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
2980                 else if (di->ac.wd_expired || di->usb.wd_expired)
2981                         val->intval = POWER_SUPPLY_HEALTH_DEAD;
2982                 else if (di->flags.usb_thermal_prot)
2983                         val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
2984                 else if (di->flags.vbus_ovv)
2985                         val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
2986                 else
2987                         val->intval = POWER_SUPPLY_HEALTH_GOOD;
2988                 break;
2989         case POWER_SUPPLY_PROP_ONLINE:
2990                 val->intval = di->usb.charger_online;
2991                 break;
2992         case POWER_SUPPLY_PROP_PRESENT:
2993                 val->intval = di->usb.charger_connected;
2994                 break;
2995         case POWER_SUPPLY_PROP_VOLTAGE_NOW:
2996                 ret = ab8500_charger_get_vbus_voltage(di);
2997                 if (ret >= 0)
2998                         di->usb.charger_voltage_uv = ret;
2999                 val->intval = di->usb.charger_voltage_uv;
3000                 break;
3001         case POWER_SUPPLY_PROP_VOLTAGE_AVG:
3002                 /*
3003                  * This property is used to indicate when CV mode is entered
3004                  * for the USB charger
3005                  */
3006                 di->usb.cv_active = ab8500_charger_usb_cv(di);
3007                 val->intval = di->usb.cv_active;
3008                 break;
3009         case POWER_SUPPLY_PROP_CURRENT_NOW:
3010                 ret = ab8500_charger_get_usb_current(di);
3011                 if (ret >= 0)
3012                         di->usb.charger_current_ua = ret;
3013                 val->intval = di->usb.charger_current_ua;
3014                 break;
3015         case POWER_SUPPLY_PROP_CURRENT_AVG:
3016                 /*
3017                  * This property is used to indicate when VBUS has collapsed
3018                  * due to too high output current from the USB charger
3019                  */
3020                 if (di->flags.vbus_collapse)
3021                         val->intval = 1;
3022                 else
3023                         val->intval = 0;
3024                 break;
3025         default:
3026                 return -EINVAL;
3027         }
3028         return 0;
3029 }
3030
3031 /**
3032  * ab8500_charger_init_hw_registers() - Set up charger related registers
3033  * @di:         pointer to the ab8500_charger structure
3034  *
3035  * Set up charger OVV, watchdog and maximum voltage registers as well as
3036  * charging of the backup battery
3037  */
3038 static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
3039 {
3040         int ret = 0;
3041
3042         /* Setup maximum charger current and voltage for ABB cut2.0 */
3043         if (!is_ab8500_1p1_or_earlier(di->parent)) {
3044                 ret = abx500_set_register_interruptible(di->dev,
3045                         AB8500_CHARGER,
3046                         AB8500_CH_VOLT_LVL_MAX_REG, CH_VOL_LVL_4P6);
3047                 if (ret) {
3048                         dev_err(di->dev,
3049                                 "failed to set CH_VOLT_LVL_MAX_REG\n");
3050                         goto out;
3051                 }
3052
3053                 ret = abx500_set_register_interruptible(di->dev,
3054                         AB8500_CHARGER, AB8500_CH_OPT_CRNTLVL_MAX_REG,
3055                         CH_OP_CUR_LVL_1P6);
3056                 if (ret) {
3057                         dev_err(di->dev,
3058                                 "failed to set CH_OPT_CRNTLVL_MAX_REG\n");
3059                         goto out;
3060                 }
3061         }
3062
3063         if (is_ab8505_2p0(di->parent))
3064                 ret = abx500_mask_and_set_register_interruptible(di->dev,
3065                         AB8500_CHARGER,
3066                         AB8500_USBCH_CTRL2_REG,
3067                         VBUS_AUTO_IN_CURR_LIM_ENA,
3068                         VBUS_AUTO_IN_CURR_LIM_ENA);
3069         else
3070                 /*
3071                  * VBUS OVV set to 6.3V and enable automatic current limitation
3072                  */
3073                 ret = abx500_set_register_interruptible(di->dev,
3074                         AB8500_CHARGER,
3075                         AB8500_USBCH_CTRL2_REG,
3076                         VBUS_OVV_SELECT_6P3V | VBUS_AUTO_IN_CURR_LIM_ENA);
3077         if (ret) {
3078                 dev_err(di->dev,
3079                         "failed to set automatic current limitation\n");
3080                 goto out;
3081         }
3082
3083         /* Enable main watchdog in OTP */
3084         ret = abx500_set_register_interruptible(di->dev,
3085                 AB8500_OTP_EMUL, AB8500_OTP_CONF_15, OTP_ENABLE_WD);
3086         if (ret) {
3087                 dev_err(di->dev, "failed to enable main WD in OTP\n");
3088                 goto out;
3089         }
3090
3091         /* Enable main watchdog */
3092         ret = abx500_set_register_interruptible(di->dev,
3093                 AB8500_SYS_CTRL2_BLOCK,
3094                 AB8500_MAIN_WDOG_CTRL_REG, MAIN_WDOG_ENA);
3095         if (ret) {
3096                 dev_err(di->dev, "failed to enable main watchdog\n");
3097                 goto out;
3098         }
3099
3100         /*
3101          * Due to internal synchronisation, Enable and Kick watchdog bits
3102          * cannot be enabled in a single write.
3103          * A minimum delay of 2*32 kHz period (62.5µs) must be inserted
3104          * between writing Enable then Kick bits.
3105          */
3106         udelay(63);
3107
3108         /* Kick main watchdog */
3109         ret = abx500_set_register_interruptible(di->dev,
3110                 AB8500_SYS_CTRL2_BLOCK,
3111                 AB8500_MAIN_WDOG_CTRL_REG,
3112                 (MAIN_WDOG_ENA | MAIN_WDOG_KICK));
3113         if (ret) {
3114                 dev_err(di->dev, "failed to kick main watchdog\n");
3115                 goto out;
3116         }
3117
3118         /* Disable main watchdog */
3119         ret = abx500_set_register_interruptible(di->dev,
3120                 AB8500_SYS_CTRL2_BLOCK,
3121                 AB8500_MAIN_WDOG_CTRL_REG, MAIN_WDOG_DIS);
3122         if (ret) {
3123                 dev_err(di->dev, "failed to disable main watchdog\n");
3124                 goto out;
3125         }
3126
3127         /* Set watchdog timeout */
3128         ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
3129                 AB8500_CH_WD_TIMER_REG, WD_TIMER);
3130         if (ret) {
3131                 dev_err(di->dev, "failed to set charger watchdog timeout\n");
3132                 goto out;
3133         }
3134
3135         ret = ab8500_charger_led_en(di, false);
3136         if (ret < 0) {
3137                 dev_err(di->dev, "failed to disable LED\n");
3138                 goto out;
3139         }
3140
3141         ret = abx500_set_register_interruptible(di->dev,
3142                 AB8500_RTC,
3143                 AB8500_RTC_BACKUP_CHG_REG,
3144                 (di->bm->bkup_bat_v & 0x3) | di->bm->bkup_bat_i);
3145         if (ret) {
3146                 dev_err(di->dev, "failed to setup backup battery charging\n");
3147                 goto out;
3148         }
3149
3150         /* Enable backup battery charging */
3151         ret = abx500_mask_and_set_register_interruptible(di->dev,
3152                 AB8500_RTC, AB8500_RTC_CTRL_REG,
3153                 RTC_BUP_CH_ENA, RTC_BUP_CH_ENA);
3154         if (ret < 0) {
3155                 dev_err(di->dev, "%s mask and set failed\n", __func__);
3156                 goto out;
3157         }
3158
3159 out:
3160         return ret;
3161 }
3162
3163 /*
3164  * ab8500 charger driver interrupts and their respective isr
3165  */
3166 static struct ab8500_charger_interrupts ab8500_charger_irq[] = {
3167         {"MAIN_CH_UNPLUG_DET", ab8500_charger_mainchunplugdet_handler},
3168         {"MAIN_CHARGE_PLUG_DET", ab8500_charger_mainchplugdet_handler},
3169         {"MAIN_EXT_CH_NOT_OK", ab8500_charger_mainextchnotok_handler},
3170         {"MAIN_CH_TH_PROT_R", ab8500_charger_mainchthprotr_handler},
3171         {"MAIN_CH_TH_PROT_F", ab8500_charger_mainchthprotf_handler},
3172         {"VBUS_DET_F", ab8500_charger_vbusdetf_handler},
3173         {"VBUS_DET_R", ab8500_charger_vbusdetr_handler},
3174         {"USB_LINK_STATUS", ab8500_charger_usblinkstatus_handler},
3175         {"USB_CH_TH_PROT_R", ab8500_charger_usbchthprotr_handler},
3176         {"USB_CH_TH_PROT_F", ab8500_charger_usbchthprotf_handler},
3177         {"USB_CHARGER_NOT_OKR", ab8500_charger_usbchargernotokr_handler},
3178         {"VBUS_OVV", ab8500_charger_vbusovv_handler},
3179         {"CH_WD_EXP", ab8500_charger_chwdexp_handler},
3180         {"VBUS_CH_DROP_END", ab8500_charger_vbuschdropend_handler},
3181 };
3182
3183 static int ab8500_charger_usb_notifier_call(struct notifier_block *nb,
3184                 unsigned long event, void *power)
3185 {
3186         struct ab8500_charger *di =
3187                 container_of(nb, struct ab8500_charger, nb);
3188         enum ab8500_usb_state bm_usb_state;
3189         /*
3190          * FIXME: it appears the AB8500 PHY never sends what it should here.
3191          * Fix the PHY driver to properly notify the desired current.
3192          * Also broadcast microampere and not milliampere.
3193          */
3194         unsigned mA = *((unsigned *)power);
3195
3196         if (event != USB_EVENT_VBUS) {
3197                 dev_dbg(di->dev, "not a standard host, returning\n");
3198                 return NOTIFY_DONE;
3199         }
3200
3201         /* TODO: State is fabricate  here. See if charger really needs USB
3202          * state or if mA is enough
3203          */
3204         if ((di->usb_state.usb_current_ua == 2000) && (mA > 2))
3205                 bm_usb_state = AB8500_BM_USB_STATE_RESUME;
3206         else if (mA == 0)
3207                 bm_usb_state = AB8500_BM_USB_STATE_RESET_HS;
3208         else if (mA == 2)
3209                 bm_usb_state = AB8500_BM_USB_STATE_SUSPEND;
3210         else if (mA >= 8) /* 8, 100, 500 */
3211                 bm_usb_state = AB8500_BM_USB_STATE_CONFIGURED;
3212         else /* Should never occur */
3213                 bm_usb_state = AB8500_BM_USB_STATE_RESET_FS;
3214
3215         dev_dbg(di->dev, "%s usb_state: 0x%02x mA: %d\n",
3216                 __func__, bm_usb_state, mA);
3217
3218         spin_lock(&di->usb_state.usb_lock);
3219         di->usb_state.state_tmp = bm_usb_state;
3220         /* FIXME: broadcast ua instead, see above */
3221         di->usb_state.usb_current_tmp_ua = mA * 1000;
3222         spin_unlock(&di->usb_state.usb_lock);
3223
3224         /*
3225          * wait for some time until you get updates from the usb stack
3226          * and negotiations are completed
3227          */
3228         queue_delayed_work(di->charger_wq, &di->usb_state_changed_work, HZ/2);
3229
3230         return NOTIFY_OK;
3231 }
3232
3233 static int __maybe_unused ab8500_charger_resume(struct device *dev)
3234 {
3235         int ret;
3236         struct ab8500_charger *di = dev_get_drvdata(dev);
3237
3238         /*
3239          * For ABB revision 1.0 and 1.1 there is a bug in the watchdog
3240          * logic. That means we have to continuously kick the charger
3241          * watchdog even when no charger is connected. This is only
3242          * valid once the AC charger has been enabled. This is
3243          * a bug that is not handled by the algorithm and the
3244          * watchdog have to be kicked by the charger driver
3245          * when the AC charger is disabled
3246          */
3247         if (di->ac_conn && is_ab8500_1p1_or_earlier(di->parent)) {
3248                 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
3249                         AB8500_CHARG_WD_CTRL, CHARG_WD_KICK);
3250                 if (ret)
3251                         dev_err(di->dev, "Failed to kick WD!\n");
3252
3253                 /* If not already pending start a new timer */
3254                 queue_delayed_work(di->charger_wq, &di->kick_wd_work,
3255                                    round_jiffies(WD_KICK_INTERVAL));
3256         }
3257
3258         /* If we still have a HW failure, schedule a new check */
3259         if (di->flags.mainextchnotok || di->flags.vbus_ovv) {
3260                 queue_delayed_work(di->charger_wq,
3261                         &di->check_hw_failure_work, 0);
3262         }
3263
3264         if (di->flags.vbus_drop_end)
3265                 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, 0);
3266
3267         return 0;
3268 }
3269
3270 static int __maybe_unused ab8500_charger_suspend(struct device *dev)
3271 {
3272         struct ab8500_charger *di = dev_get_drvdata(dev);
3273
3274         /* Cancel any pending jobs */
3275         cancel_delayed_work(&di->check_hw_failure_work);
3276         cancel_delayed_work(&di->vbus_drop_end_work);
3277
3278         flush_delayed_work(&di->attach_work);
3279         flush_delayed_work(&di->usb_charger_attached_work);
3280         flush_delayed_work(&di->ac_charger_attached_work);
3281         flush_delayed_work(&di->check_usbchgnotok_work);
3282         flush_delayed_work(&di->check_vbat_work);
3283         flush_delayed_work(&di->kick_wd_work);
3284
3285         flush_work(&di->usb_link_status_work);
3286         flush_work(&di->ac_work);
3287         flush_work(&di->detect_usb_type_work);
3288
3289         if (atomic_read(&di->current_stepping_sessions))
3290                 return -EAGAIN;
3291
3292         return 0;
3293 }
3294
3295 static char *supply_interface[] = {
3296         "ab8500_chargalg",
3297         "ab8500_fg",
3298         "ab8500_btemp",
3299 };
3300
3301 static const struct power_supply_desc ab8500_ac_chg_desc = {
3302         .name           = "ab8500_ac",
3303         .type           = POWER_SUPPLY_TYPE_MAINS,
3304         .properties     = ab8500_charger_ac_props,
3305         .num_properties = ARRAY_SIZE(ab8500_charger_ac_props),
3306         .get_property   = ab8500_charger_ac_get_property,
3307 };
3308
3309 static const struct power_supply_desc ab8500_usb_chg_desc = {
3310         .name           = "ab8500_usb",
3311         .type           = POWER_SUPPLY_TYPE_USB,
3312         .properties     = ab8500_charger_usb_props,
3313         .num_properties = ARRAY_SIZE(ab8500_charger_usb_props),
3314         .get_property   = ab8500_charger_usb_get_property,
3315 };
3316
3317 static int ab8500_charger_bind(struct device *dev)
3318 {
3319         struct ab8500_charger *di = dev_get_drvdata(dev);
3320         int ch_stat;
3321         int ret;
3322
3323         /* Create a work queue for the charger */
3324         di->charger_wq = alloc_ordered_workqueue("ab8500_charger_wq",
3325                                                  WQ_MEM_RECLAIM);
3326         if (di->charger_wq == NULL) {
3327                 dev_err(dev, "failed to create work queue\n");
3328                 return -ENOMEM;
3329         }
3330
3331         ch_stat = ab8500_charger_detect_chargers(di, false);
3332
3333         if (ch_stat & AC_PW_CONN) {
3334                 if (is_ab8500(di->parent))
3335                         queue_delayed_work(di->charger_wq,
3336                                            &di->ac_charger_attached_work,
3337                                            HZ);
3338         }
3339         if (ch_stat & USB_PW_CONN) {
3340                 if (is_ab8500(di->parent))
3341                         queue_delayed_work(di->charger_wq,
3342                                            &di->usb_charger_attached_work,
3343                                            HZ);
3344                 di->vbus_detected = true;
3345                 di->vbus_detected_start = true;
3346                 queue_work(di->charger_wq,
3347                            &di->detect_usb_type_work);
3348         }
3349
3350         ret = component_bind_all(dev, di);
3351         if (ret) {
3352                 dev_err(dev, "can't bind component devices\n");
3353                 destroy_workqueue(di->charger_wq);
3354                 return ret;
3355         }
3356
3357         return 0;
3358 }
3359
3360 static void ab8500_charger_unbind(struct device *dev)
3361 {
3362         struct ab8500_charger *di = dev_get_drvdata(dev);
3363         int ret;
3364
3365         /* Disable AC charging */
3366         ab8500_charger_ac_en(&di->ac_chg, false, 0, 0);
3367
3368         /* Disable USB charging */
3369         ab8500_charger_usb_en(&di->usb_chg, false, 0, 0);
3370
3371         /* Backup battery voltage and current disable */
3372         ret = abx500_mask_and_set_register_interruptible(di->dev,
3373                 AB8500_RTC, AB8500_RTC_CTRL_REG, RTC_BUP_CH_ENA, 0);
3374         if (ret < 0)
3375                 dev_err(di->dev, "%s mask and set failed\n", __func__);
3376
3377         /* Delete the work queue */
3378         destroy_workqueue(di->charger_wq);
3379
3380         /* Unbind fg, btemp, algorithm */
3381         component_unbind_all(dev, di);
3382 }
3383
3384 static const struct component_master_ops ab8500_charger_comp_ops = {
3385         .bind = ab8500_charger_bind,
3386         .unbind = ab8500_charger_unbind,
3387 };
3388
3389 static struct platform_driver *const ab8500_charger_component_drivers[] = {
3390         &ab8500_fg_driver,
3391         &ab8500_btemp_driver,
3392         &ab8500_chargalg_driver,
3393 };
3394
3395 static int ab8500_charger_probe(struct platform_device *pdev)
3396 {
3397         struct device *dev = &pdev->dev;
3398         struct device_node *np = dev->of_node;
3399         struct component_match *match = NULL;
3400         struct power_supply_config ac_psy_cfg = {}, usb_psy_cfg = {};
3401         struct ab8500_charger *di;
3402         int charger_status;
3403         int i, irq;
3404         int ret;
3405
3406         di = devm_kzalloc(dev, sizeof(*di), GFP_KERNEL);
3407         if (!di)
3408                 return -ENOMEM;
3409
3410         di->bm = &ab8500_bm_data;
3411
3412         di->autopower_cfg = of_property_read_bool(np, "autopower_cfg");
3413
3414         /* get parent data */
3415         di->dev = dev;
3416         di->parent = dev_get_drvdata(pdev->dev.parent);
3417
3418         /* Get ADC channels */
3419         if (!is_ab8505(di->parent)) {
3420                 di->adc_main_charger_v = devm_iio_channel_get(dev, "main_charger_v");
3421                 if (IS_ERR(di->adc_main_charger_v)) {
3422                         ret = dev_err_probe(dev, PTR_ERR(di->adc_main_charger_v),
3423                                             "failed to get ADC main charger voltage\n");
3424                         return ret;
3425                 }
3426                 di->adc_main_charger_c = devm_iio_channel_get(dev, "main_charger_c");
3427                 if (IS_ERR(di->adc_main_charger_c)) {
3428                         ret = dev_err_probe(dev, PTR_ERR(di->adc_main_charger_c),
3429                                             "failed to get ADC main charger current\n");
3430                         return ret;
3431                 }
3432         }
3433         di->adc_vbus_v = devm_iio_channel_get(dev, "vbus_v");
3434         if (IS_ERR(di->adc_vbus_v)) {
3435                 ret = dev_err_probe(dev, PTR_ERR(di->adc_vbus_v),
3436                                     "failed to get ADC USB charger voltage\n");
3437                 return ret;
3438         }
3439         di->adc_usb_charger_c = devm_iio_channel_get(dev, "usb_charger_c");
3440         if (IS_ERR(di->adc_usb_charger_c)) {
3441                 ret = dev_err_probe(dev, PTR_ERR(di->adc_usb_charger_c),
3442                                     "failed to get ADC USB charger current\n");
3443                 return ret;
3444         }
3445
3446         /*
3447          * VDD ADC supply needs to be enabled from this driver when there
3448          * is a charger connected to avoid erroneous BTEMP_HIGH/LOW
3449          * interrupts during charging
3450          */
3451         di->regu = devm_regulator_get(dev, "vddadc");
3452         if (IS_ERR(di->regu)) {
3453                 ret = PTR_ERR(di->regu);
3454                 dev_err(dev, "failed to get vddadc regulator\n");
3455                 return ret;
3456         }
3457
3458         /* Request interrupts */
3459         for (i = 0; i < ARRAY_SIZE(ab8500_charger_irq); i++) {
3460                 irq = platform_get_irq_byname(pdev, ab8500_charger_irq[i].name);
3461                 if (irq < 0)
3462                         return irq;
3463
3464                 ret = devm_request_threaded_irq(dev,
3465                         irq, NULL, ab8500_charger_irq[i].isr,
3466                         IRQF_SHARED | IRQF_NO_SUSPEND | IRQF_ONESHOT,
3467                         ab8500_charger_irq[i].name, di);
3468
3469                 if (ret != 0) {
3470                         dev_err(dev, "failed to request %s IRQ %d: %d\n"
3471                                 , ab8500_charger_irq[i].name, irq, ret);
3472                         return ret;
3473                 }
3474                 dev_dbg(dev, "Requested %s IRQ %d: %d\n",
3475                         ab8500_charger_irq[i].name, irq, ret);
3476         }
3477
3478         /* initialize lock */
3479         spin_lock_init(&di->usb_state.usb_lock);
3480         mutex_init(&di->usb_ipt_crnt_lock);
3481
3482         di->autopower = false;
3483         di->invalid_charger_detect_state = 0;
3484
3485         /* AC and USB supply config */
3486         ac_psy_cfg.of_node = np;
3487         ac_psy_cfg.supplied_to = supply_interface;
3488         ac_psy_cfg.num_supplicants = ARRAY_SIZE(supply_interface);
3489         ac_psy_cfg.drv_data = &di->ac_chg;
3490         usb_psy_cfg.of_node = np;
3491         usb_psy_cfg.supplied_to = supply_interface;
3492         usb_psy_cfg.num_supplicants = ARRAY_SIZE(supply_interface);
3493         usb_psy_cfg.drv_data = &di->usb_chg;
3494
3495         /* AC supply */
3496         /* ux500_charger sub-class */
3497         di->ac_chg.ops.enable = &ab8500_charger_ac_en;
3498         di->ac_chg.ops.check_enable = &ab8500_charger_ac_check_enable;
3499         di->ac_chg.ops.kick_wd = &ab8500_charger_watchdog_kick;
3500         di->ac_chg.ops.update_curr = &ab8500_charger_update_charger_current;
3501         di->ac_chg.max_out_volt_uv = ab8500_charger_voltage_map[
3502                 ARRAY_SIZE(ab8500_charger_voltage_map) - 1];
3503         di->ac_chg.max_out_curr_ua =
3504                 ab8500_charge_output_curr_map[ARRAY_SIZE(ab8500_charge_output_curr_map) - 1];
3505         di->ac_chg.wdt_refresh = CHG_WD_INTERVAL;
3506         /*
3507          * The AB8505 only supports USB charging. If we are not the
3508          * AB8505, register an AC charger.
3509          *
3510          * TODO: if this should be opt-in, add DT properties for this.
3511          */
3512         if (!is_ab8505(di->parent))
3513                 di->ac_chg.enabled = true;
3514
3515         /* USB supply */
3516         /* ux500_charger sub-class */
3517         di->usb_chg.ops.enable = &ab8500_charger_usb_en;
3518         di->usb_chg.ops.check_enable = &ab8500_charger_usb_check_enable;
3519         di->usb_chg.ops.kick_wd = &ab8500_charger_watchdog_kick;
3520         di->usb_chg.ops.update_curr = &ab8500_charger_update_charger_current;
3521         di->usb_chg.max_out_volt_uv = ab8500_charger_voltage_map[
3522                 ARRAY_SIZE(ab8500_charger_voltage_map) - 1];
3523         di->usb_chg.max_out_curr_ua =
3524                 ab8500_charge_output_curr_map[ARRAY_SIZE(ab8500_charge_output_curr_map) - 1];
3525         di->usb_chg.wdt_refresh = CHG_WD_INTERVAL;
3526         di->usb_state.usb_current_ua = -1;
3527
3528         mutex_init(&di->charger_attached_mutex);
3529
3530         /* Init work for HW failure check */
3531         INIT_DEFERRABLE_WORK(&di->check_hw_failure_work,
3532                 ab8500_charger_check_hw_failure_work);
3533         INIT_DEFERRABLE_WORK(&di->check_usbchgnotok_work,
3534                 ab8500_charger_check_usbchargernotok_work);
3535
3536         INIT_DELAYED_WORK(&di->ac_charger_attached_work,
3537                           ab8500_charger_ac_attached_work);
3538         INIT_DELAYED_WORK(&di->usb_charger_attached_work,
3539                           ab8500_charger_usb_attached_work);
3540
3541         /*
3542          * For ABB revision 1.0 and 1.1 there is a bug in the watchdog
3543          * logic. That means we have to continuously kick the charger
3544          * watchdog even when no charger is connected. This is only
3545          * valid once the AC charger has been enabled. This is
3546          * a bug that is not handled by the algorithm and the
3547          * watchdog have to be kicked by the charger driver
3548          * when the AC charger is disabled
3549          */
3550         INIT_DEFERRABLE_WORK(&di->kick_wd_work,
3551                 ab8500_charger_kick_watchdog_work);
3552
3553         INIT_DEFERRABLE_WORK(&di->check_vbat_work,
3554                 ab8500_charger_check_vbat_work);
3555
3556         INIT_DELAYED_WORK(&di->attach_work,
3557                 ab8500_charger_usb_link_attach_work);
3558
3559         INIT_DELAYED_WORK(&di->usb_state_changed_work,
3560                 ab8500_charger_usb_state_changed_work);
3561
3562         INIT_DELAYED_WORK(&di->vbus_drop_end_work,
3563                 ab8500_charger_vbus_drop_end_work);
3564
3565         /* Init work for charger detection */
3566         INIT_WORK(&di->usb_link_status_work,
3567                 ab8500_charger_usb_link_status_work);
3568         INIT_WORK(&di->ac_work, ab8500_charger_ac_work);
3569         INIT_WORK(&di->detect_usb_type_work,
3570                 ab8500_charger_detect_usb_type_work);
3571
3572         /* Init work for checking HW status */
3573         INIT_WORK(&di->check_main_thermal_prot_work,
3574                 ab8500_charger_check_main_thermal_prot_work);
3575         INIT_WORK(&di->check_usb_thermal_prot_work,
3576                 ab8500_charger_check_usb_thermal_prot_work);
3577
3578
3579         /* Initialize OVV, and other registers */
3580         ret = ab8500_charger_init_hw_registers(di);
3581         if (ret) {
3582                 dev_err(dev, "failed to initialize ABB registers\n");
3583                 return ret;
3584         }
3585
3586         /* Register AC charger class */
3587         if (di->ac_chg.enabled) {
3588                 di->ac_chg.psy = devm_power_supply_register(dev,
3589                                                        &ab8500_ac_chg_desc,
3590                                                        &ac_psy_cfg);
3591                 if (IS_ERR(di->ac_chg.psy)) {
3592                         dev_err(dev, "failed to register AC charger\n");
3593                         return PTR_ERR(di->ac_chg.psy);
3594                 }
3595         }
3596
3597         /* Register USB charger class */
3598         di->usb_chg.psy = devm_power_supply_register(dev,
3599                                                      &ab8500_usb_chg_desc,
3600                                                      &usb_psy_cfg);
3601         if (IS_ERR(di->usb_chg.psy)) {
3602                 dev_err(dev, "failed to register USB charger\n");
3603                 return PTR_ERR(di->usb_chg.psy);
3604         }
3605
3606         /*
3607          * Check what battery we have, since we always have the USB
3608          * psy, use that as a handle.
3609          */
3610         ret = ab8500_bm_of_probe(di->usb_chg.psy, di->bm);
3611         if (ret)
3612                 return dev_err_probe(dev, ret,
3613                                      "failed to get battery information\n");
3614
3615         /* Identify the connected charger types during startup */
3616         charger_status = ab8500_charger_detect_chargers(di, true);
3617         if (charger_status & AC_PW_CONN) {
3618                 di->ac.charger_connected = 1;
3619                 di->ac_conn = true;
3620                 ab8500_power_supply_changed(di, di->ac_chg.psy);
3621                 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present");
3622         }
3623
3624         platform_set_drvdata(pdev, di);
3625
3626         /* Create something that will match the subdrivers when we bind */
3627         for (i = 0; i < ARRAY_SIZE(ab8500_charger_component_drivers); i++) {
3628                 struct device_driver *drv = &ab8500_charger_component_drivers[i]->driver;
3629                 struct device *p = NULL, *d;
3630
3631                 while ((d = platform_find_device_by_driver(p, drv))) {
3632                         put_device(p);
3633                         component_match_add(dev, &match, component_compare_dev, d);
3634                         p = d;
3635                 }
3636                 put_device(p);
3637         }
3638         if (!match) {
3639                 dev_err(dev, "no matching components\n");
3640                 ret = -ENODEV;
3641                 goto remove_ab8500_bm;
3642         }
3643         if (IS_ERR(match)) {
3644                 dev_err(dev, "could not create component match\n");
3645                 ret = PTR_ERR(match);
3646                 goto remove_ab8500_bm;
3647         }
3648
3649         di->usb_phy = usb_get_phy(USB_PHY_TYPE_USB2);
3650         if (IS_ERR_OR_NULL(di->usb_phy)) {
3651                 dev_err(dev, "failed to get usb transceiver\n");
3652                 ret = -EINVAL;
3653                 goto remove_ab8500_bm;
3654         }
3655         di->nb.notifier_call = ab8500_charger_usb_notifier_call;
3656         ret = usb_register_notifier(di->usb_phy, &di->nb);
3657         if (ret) {
3658                 dev_err(dev, "failed to register usb notifier\n");
3659                 goto put_usb_phy;
3660         }
3661
3662         ret = component_master_add_with_match(&pdev->dev,
3663                                               &ab8500_charger_comp_ops,
3664                                               match);
3665         if (ret) {
3666                 dev_err(dev, "failed to add component master\n");
3667                 goto free_notifier;
3668         }
3669
3670         return 0;
3671
3672 free_notifier:
3673         usb_unregister_notifier(di->usb_phy, &di->nb);
3674 put_usb_phy:
3675         usb_put_phy(di->usb_phy);
3676 remove_ab8500_bm:
3677         ab8500_bm_of_remove(di->usb_chg.psy, di->bm);
3678         return ret;
3679 }
3680
3681 static void ab8500_charger_remove(struct platform_device *pdev)
3682 {
3683         struct ab8500_charger *di = platform_get_drvdata(pdev);
3684
3685         component_master_del(&pdev->dev, &ab8500_charger_comp_ops);
3686
3687         usb_unregister_notifier(di->usb_phy, &di->nb);
3688         ab8500_bm_of_remove(di->usb_chg.psy, di->bm);
3689         usb_put_phy(di->usb_phy);
3690 }
3691
3692 static SIMPLE_DEV_PM_OPS(ab8500_charger_pm_ops, ab8500_charger_suspend, ab8500_charger_resume);
3693
3694 static const struct of_device_id ab8500_charger_match[] = {
3695         { .compatible = "stericsson,ab8500-charger", },
3696         { },
3697 };
3698 MODULE_DEVICE_TABLE(of, ab8500_charger_match);
3699
3700 static struct platform_driver ab8500_charger_driver = {
3701         .probe = ab8500_charger_probe,
3702         .remove_new = ab8500_charger_remove,
3703         .driver = {
3704                 .name = "ab8500-charger",
3705                 .of_match_table = ab8500_charger_match,
3706                 .pm = &ab8500_charger_pm_ops,
3707         },
3708 };
3709
3710 static int __init ab8500_charger_init(void)
3711 {
3712         int ret;
3713
3714         ret = platform_register_drivers(ab8500_charger_component_drivers,
3715                         ARRAY_SIZE(ab8500_charger_component_drivers));
3716         if (ret)
3717                 return ret;
3718
3719         ret = platform_driver_register(&ab8500_charger_driver);
3720         if (ret) {
3721                 platform_unregister_drivers(ab8500_charger_component_drivers,
3722                                 ARRAY_SIZE(ab8500_charger_component_drivers));
3723                 return ret;
3724         }
3725
3726         return 0;
3727 }
3728
3729 static void __exit ab8500_charger_exit(void)
3730 {
3731         platform_unregister_drivers(ab8500_charger_component_drivers,
3732                         ARRAY_SIZE(ab8500_charger_component_drivers));
3733         platform_driver_unregister(&ab8500_charger_driver);
3734 }
3735
3736 module_init(ab8500_charger_init);
3737 module_exit(ab8500_charger_exit);
3738
3739 MODULE_LICENSE("GPL v2");
3740 MODULE_AUTHOR("Johan Palsson, Karl Komierowski, Arun R Murthy");
3741 MODULE_ALIAS("platform:ab8500-charger");
3742 MODULE_DESCRIPTION("AB8500 charger management driver");