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

source code of linux/drivers/power/supply/ab8500_charger.c