0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <linux/init.h>
0014 #include <linux/module.h>
0015 #include <linux/device.h>
0016 #include <linux/component.h>
0017 #include <linux/interrupt.h>
0018 #include <linux/delay.h>
0019 #include <linux/notifier.h>
0020 #include <linux/slab.h>
0021 #include <linux/platform_device.h>
0022 #include <linux/power_supply.h>
0023 #include <linux/completion.h>
0024 #include <linux/regulator/consumer.h>
0025 #include <linux/err.h>
0026 #include <linux/workqueue.h>
0027 #include <linux/kobject.h>
0028 #include <linux/of.h>
0029 #include <linux/mfd/core.h>
0030 #include <linux/mfd/abx500/ab8500.h>
0031 #include <linux/mfd/abx500.h>
0032 #include <linux/usb/otg.h>
0033 #include <linux/mutex.h>
0034 #include <linux/iio/consumer.h>
0035
0036 #include "ab8500-bm.h"
0037 #include "ab8500-chargalg.h"
0038
0039
0040 #define NO_PW_CONN 0
0041 #define AC_PW_CONN 1
0042 #define USB_PW_CONN 2
0043
0044 #define MAIN_WDOG_ENA 0x01
0045 #define MAIN_WDOG_KICK 0x02
0046 #define MAIN_WDOG_DIS 0x00
0047 #define CHARG_WD_KICK 0x01
0048 #define MAIN_CH_ENA 0x01
0049 #define MAIN_CH_NO_OVERSHOOT_ENA_N 0x02
0050 #define USB_CH_ENA 0x01
0051 #define USB_CHG_NO_OVERSHOOT_ENA_N 0x02
0052 #define MAIN_CH_DET 0x01
0053 #define MAIN_CH_CV_ON 0x04
0054 #define USB_CH_CV_ON 0x08
0055 #define VBUS_DET_DBNC100 0x02
0056 #define VBUS_DET_DBNC1 0x01
0057 #define OTP_ENABLE_WD 0x01
0058 #define DROP_COUNT_RESET 0x01
0059 #define USB_CH_DET 0x01
0060
0061 #define MAIN_CH_INPUT_CURR_SHIFT 4
0062 #define VBUS_IN_CURR_LIM_SHIFT 4
0063 #define AUTO_VBUS_IN_CURR_LIM_SHIFT 4
0064 #define VBUS_IN_CURR_LIM_RETRY_SET_TIME 30
0065
0066 #define LED_INDICATOR_PWM_ENA 0x01
0067 #define LED_INDICATOR_PWM_DIS 0x00
0068 #define LED_IND_CUR_5MA 0x04
0069 #define LED_INDICATOR_PWM_DUTY_252_256 0xBF
0070
0071
0072 #define MAIN_CH_TH_PROT 0x02
0073 #define VBUS_CH_NOK 0x08
0074 #define USB_CH_TH_PROT 0x02
0075 #define VBUS_OVV_TH 0x01
0076 #define MAIN_CH_NOK 0x01
0077 #define VBUS_DET 0x80
0078
0079 #define MAIN_CH_STATUS2_MAINCHGDROP 0x80
0080 #define MAIN_CH_STATUS2_MAINCHARGERDETDBNC 0x40
0081 #define USB_CH_VBUSDROP 0x40
0082 #define USB_CH_VBUSDETDBNC 0x01
0083
0084
0085 #define AB8500_USB_LINK_STATUS 0x78
0086 #define AB8505_USB_LINK_STATUS 0xF8
0087 #define AB8500_STD_HOST_SUSP 0x18
0088 #define USB_LINK_STATUS_SHIFT 3
0089
0090
0091 #define WD_TIMER 0x30
0092 #define WD_KICK_INTERVAL (60 * HZ)
0093
0094
0095 #define LOW_VOLT_REG 0x4E
0096
0097
0098 #define STEP_UDELAY 1000
0099
0100 #define CHARGER_STATUS_POLL 10
0101
0102 #define CHG_WD_INTERVAL (60 * HZ)
0103
0104 #define AB8500_SW_CONTROL_FALLBACK 0x03
0105
0106 #define WAIT_ACA_RID_ENUMERATION (5 * 1000)
0107
0108 #define AB8500_SYS_CHARGER_CONTROL_REG 0x52
0109 #define EXTERNAL_CHARGER_DISABLE_REG_VAL 0x03
0110 #define EXTERNAL_CHARGER_ENABLE_REG_VAL 0x07
0111
0112
0113 enum ab8500_charger_link_status {
0114 USB_STAT_NOT_CONFIGURED,
0115 USB_STAT_STD_HOST_NC,
0116 USB_STAT_STD_HOST_C_NS,
0117 USB_STAT_STD_HOST_C_S,
0118 USB_STAT_HOST_CHG_NM,
0119 USB_STAT_HOST_CHG_HS,
0120 USB_STAT_HOST_CHG_HS_CHIRP,
0121 USB_STAT_DEDICATED_CHG,
0122 USB_STAT_ACA_RID_A,
0123 USB_STAT_ACA_RID_B,
0124 USB_STAT_ACA_RID_C_NM,
0125 USB_STAT_ACA_RID_C_HS,
0126 USB_STAT_ACA_RID_C_HS_CHIRP,
0127 USB_STAT_HM_IDGND,
0128 USB_STAT_RESERVED,
0129 USB_STAT_NOT_VALID_LINK,
0130 USB_STAT_PHY_EN,
0131 USB_STAT_SUP_NO_IDGND_VBUS,
0132 USB_STAT_SUP_IDGND_VBUS,
0133 USB_STAT_CHARGER_LINE_1,
0134 USB_STAT_CARKIT_1,
0135 USB_STAT_CARKIT_2,
0136 USB_STAT_ACA_DOCK_CHARGER,
0137 };
0138
0139 enum ab8500_usb_state {
0140 AB8500_BM_USB_STATE_RESET_HS,
0141 AB8500_BM_USB_STATE_RESET_FS,
0142 AB8500_BM_USB_STATE_CONFIGURED,
0143 AB8500_BM_USB_STATE_SUSPEND,
0144 AB8500_BM_USB_STATE_RESUME,
0145 AB8500_BM_USB_STATE_MAX,
0146 };
0147
0148
0149 #define USB_CH_IP_CUR_LVL_0P05 50000
0150 #define USB_CH_IP_CUR_LVL_0P09 98000
0151 #define USB_CH_IP_CUR_LVL_0P19 193000
0152 #define USB_CH_IP_CUR_LVL_0P29 290000
0153 #define USB_CH_IP_CUR_LVL_0P38 380000
0154 #define USB_CH_IP_CUR_LVL_0P45 450000
0155 #define USB_CH_IP_CUR_LVL_0P5 500000
0156 #define USB_CH_IP_CUR_LVL_0P6 600000
0157 #define USB_CH_IP_CUR_LVL_0P7 700000
0158 #define USB_CH_IP_CUR_LVL_0P8 800000
0159 #define USB_CH_IP_CUR_LVL_0P9 900000
0160 #define USB_CH_IP_CUR_LVL_1P0 1000000
0161 #define USB_CH_IP_CUR_LVL_1P1 1100000
0162 #define USB_CH_IP_CUR_LVL_1P3 1300000
0163 #define USB_CH_IP_CUR_LVL_1P4 1400000
0164 #define USB_CH_IP_CUR_LVL_1P5 1500000
0165
0166 #define VBAT_TRESH_IP_CUR_RED 3800000
0167
0168 #define to_ab8500_charger_usb_device_info(x) container_of((x), \
0169 struct ab8500_charger, usb_chg)
0170 #define to_ab8500_charger_ac_device_info(x) container_of((x), \
0171 struct ab8500_charger, ac_chg)
0172
0173
0174
0175
0176
0177
0178 struct ab8500_charger_interrupts {
0179 char *name;
0180 irqreturn_t (*isr)(int irq, void *data);
0181 };
0182
0183 struct ab8500_charger_info {
0184 int charger_connected;
0185 int charger_online;
0186 int charger_voltage_uv;
0187 int cv_active;
0188 bool wd_expired;
0189 int charger_current_ua;
0190 };
0191
0192 struct ab8500_charger_event_flags {
0193 bool mainextchnotok;
0194 bool main_thermal_prot;
0195 bool usb_thermal_prot;
0196 bool vbus_ovv;
0197 bool usbchargernotok;
0198 bool chgwdexp;
0199 bool vbus_collapse;
0200 bool vbus_drop_end;
0201 };
0202
0203 struct ab8500_charger_usb_state {
0204 int usb_current_ua;
0205 int usb_current_tmp_ua;
0206 enum ab8500_usb_state state;
0207 enum ab8500_usb_state state_tmp;
0208 spinlock_t usb_lock;
0209 };
0210
0211 struct ab8500_charger_max_usb_in_curr {
0212 int usb_type_max_ua;
0213 int set_max_ua;
0214 int calculated_max_ua;
0215 };
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275 struct ab8500_charger {
0276 struct device *dev;
0277 bool vbus_detected;
0278 bool vbus_detected_start;
0279 bool ac_conn;
0280 bool vddadc_en_ac;
0281 bool vddadc_en_usb;
0282 int vbat;
0283 int old_vbat;
0284 bool usb_device_is_unrecognised;
0285 bool autopower;
0286 bool autopower_cfg;
0287 int invalid_charger_detect_state;
0288 int is_aca_rid;
0289 atomic_t current_stepping_sessions;
0290 struct ab8500 *parent;
0291 struct iio_channel *adc_main_charger_v;
0292 struct iio_channel *adc_main_charger_c;
0293 struct iio_channel *adc_vbus_v;
0294 struct iio_channel *adc_usb_charger_c;
0295 struct ab8500_bm_data *bm;
0296 struct ab8500_charger_event_flags flags;
0297 struct ab8500_charger_usb_state usb_state;
0298 struct ab8500_charger_max_usb_in_curr max_usb_in_curr;
0299 struct ux500_charger ac_chg;
0300 struct ux500_charger usb_chg;
0301 struct ab8500_charger_info ac;
0302 struct ab8500_charger_info usb;
0303 struct regulator *regu;
0304 struct workqueue_struct *charger_wq;
0305 struct mutex usb_ipt_crnt_lock;
0306 struct delayed_work check_vbat_work;
0307 struct delayed_work check_hw_failure_work;
0308 struct delayed_work check_usbchgnotok_work;
0309 struct delayed_work kick_wd_work;
0310 struct delayed_work usb_state_changed_work;
0311 struct delayed_work attach_work;
0312 struct delayed_work ac_charger_attached_work;
0313 struct delayed_work usb_charger_attached_work;
0314 struct delayed_work vbus_drop_end_work;
0315 struct work_struct ac_work;
0316 struct work_struct detect_usb_type_work;
0317 struct work_struct usb_link_status_work;
0318 struct work_struct check_main_thermal_prot_work;
0319 struct work_struct check_usb_thermal_prot_work;
0320 struct usb_phy *usb_phy;
0321 struct notifier_block nb;
0322 struct mutex charger_attached_mutex;
0323 };
0324
0325
0326 static enum power_supply_property ab8500_charger_ac_props[] = {
0327 POWER_SUPPLY_PROP_HEALTH,
0328 POWER_SUPPLY_PROP_PRESENT,
0329 POWER_SUPPLY_PROP_ONLINE,
0330 POWER_SUPPLY_PROP_VOLTAGE_NOW,
0331 POWER_SUPPLY_PROP_VOLTAGE_AVG,
0332 POWER_SUPPLY_PROP_CURRENT_NOW,
0333 };
0334
0335
0336 static enum power_supply_property ab8500_charger_usb_props[] = {
0337 POWER_SUPPLY_PROP_HEALTH,
0338 POWER_SUPPLY_PROP_CURRENT_AVG,
0339 POWER_SUPPLY_PROP_PRESENT,
0340 POWER_SUPPLY_PROP_ONLINE,
0341 POWER_SUPPLY_PROP_VOLTAGE_NOW,
0342 POWER_SUPPLY_PROP_VOLTAGE_AVG,
0343 POWER_SUPPLY_PROP_CURRENT_NOW,
0344 };
0345
0346
0347
0348
0349
0350 static void ab8500_enable_disable_sw_fallback(struct ab8500_charger *di,
0351 bool fallback)
0352 {
0353 u8 val;
0354 u8 reg;
0355 u8 bank;
0356 u8 bit;
0357 int ret;
0358
0359 dev_dbg(di->dev, "SW Fallback: %d\n", fallback);
0360
0361 if (is_ab8500(di->parent)) {
0362 bank = 0x15;
0363 reg = 0x0;
0364 bit = 3;
0365 } else {
0366 bank = AB8500_SYS_CTRL1_BLOCK;
0367 reg = AB8500_SW_CONTROL_FALLBACK;
0368 bit = 0;
0369 }
0370
0371
0372 ret = abx500_get_register_interruptible(di->dev, bank, reg, &val);
0373 if (ret < 0) {
0374 dev_err(di->dev, "%d read failed\n", __LINE__);
0375 return;
0376 }
0377
0378 if (is_ab8500(di->parent)) {
0379
0380 ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x2);
0381 if (ret) {
0382 dev_err(di->dev, "%d write failed\n", __LINE__);
0383 goto disable_otp;
0384 }
0385 }
0386
0387 if (fallback)
0388 val |= (1 << bit);
0389 else
0390 val &= ~(1 << bit);
0391
0392
0393 ret = abx500_set_register_interruptible(di->dev, bank, reg, val);
0394 if (ret) {
0395 dev_err(di->dev, "%d write failed\n", __LINE__);
0396 }
0397
0398 disable_otp:
0399 if (is_ab8500(di->parent)) {
0400
0401 ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x0);
0402 if (ret) {
0403 dev_err(di->dev, "%d write failed\n", __LINE__);
0404 }
0405 }
0406 }
0407
0408
0409
0410
0411
0412
0413
0414
0415 static void ab8500_power_supply_changed(struct ab8500_charger *di,
0416 struct power_supply *psy)
0417 {
0418
0419
0420
0421
0422
0423 if (!psy)
0424 return;
0425
0426 if (di->autopower_cfg) {
0427 if (!di->usb.charger_connected &&
0428 !di->ac.charger_connected &&
0429 di->autopower) {
0430 di->autopower = false;
0431 ab8500_enable_disable_sw_fallback(di, false);
0432 } else if (!di->autopower &&
0433 (di->ac.charger_connected ||
0434 di->usb.charger_connected)) {
0435 di->autopower = true;
0436 ab8500_enable_disable_sw_fallback(di, true);
0437 }
0438 }
0439 power_supply_changed(psy);
0440 }
0441
0442 static void ab8500_charger_set_usb_connected(struct ab8500_charger *di,
0443 bool connected)
0444 {
0445 if (connected != di->usb.charger_connected) {
0446 dev_dbg(di->dev, "USB connected:%i\n", connected);
0447 di->usb.charger_connected = connected;
0448
0449 if (!connected)
0450 di->flags.vbus_drop_end = false;
0451
0452
0453
0454
0455
0456
0457 if (di->usb_chg.psy) {
0458 sysfs_notify(&di->usb_chg.psy->dev.kobj, NULL,
0459 "present");
0460 }
0461
0462 if (connected) {
0463 mutex_lock(&di->charger_attached_mutex);
0464 mutex_unlock(&di->charger_attached_mutex);
0465
0466 if (is_ab8500(di->parent))
0467 queue_delayed_work(di->charger_wq,
0468 &di->usb_charger_attached_work,
0469 HZ);
0470 } else {
0471 cancel_delayed_work_sync(&di->usb_charger_attached_work);
0472 mutex_lock(&di->charger_attached_mutex);
0473 mutex_unlock(&di->charger_attached_mutex);
0474 }
0475 }
0476 }
0477
0478
0479
0480
0481
0482
0483
0484 static int ab8500_charger_get_ac_voltage(struct ab8500_charger *di)
0485 {
0486 int vch, ret;
0487
0488
0489 if (di->ac.charger_connected) {
0490 ret = iio_read_channel_processed(di->adc_main_charger_v, &vch);
0491 if (ret < 0)
0492 dev_err(di->dev, "%s ADC conv failed,\n", __func__);
0493 } else {
0494 vch = 0;
0495 }
0496
0497 return vch * 1000;
0498 }
0499
0500
0501
0502
0503
0504
0505
0506 static int ab8500_charger_ac_cv(struct ab8500_charger *di)
0507 {
0508 u8 val;
0509 int ret = 0;
0510
0511
0512 if (di->ac.charger_online) {
0513 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
0514 AB8500_CH_STATUS1_REG, &val);
0515 if (ret < 0) {
0516 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
0517 return 0;
0518 }
0519
0520 if (val & MAIN_CH_CV_ON)
0521 ret = 1;
0522 else
0523 ret = 0;
0524 }
0525
0526 return ret;
0527 }
0528
0529
0530
0531
0532
0533
0534
0535
0536 static int ab8500_charger_get_vbus_voltage(struct ab8500_charger *di)
0537 {
0538 int vch, ret;
0539
0540
0541 if (di->usb.charger_connected) {
0542 ret = iio_read_channel_processed(di->adc_vbus_v, &vch);
0543 if (ret < 0)
0544 dev_err(di->dev, "%s ADC conv failed,\n", __func__);
0545 } else {
0546 vch = 0;
0547 }
0548
0549 return vch * 1000;
0550 }
0551
0552
0553
0554
0555
0556
0557
0558
0559 static int ab8500_charger_get_usb_current(struct ab8500_charger *di)
0560 {
0561 int ich, ret;
0562
0563
0564 if (di->usb.charger_online) {
0565 ret = iio_read_channel_processed(di->adc_usb_charger_c, &ich);
0566 if (ret < 0)
0567 dev_err(di->dev, "%s ADC conv failed,\n", __func__);
0568 } else {
0569 ich = 0;
0570 }
0571
0572 return ich * 1000;
0573 }
0574
0575
0576
0577
0578
0579
0580
0581
0582 static int ab8500_charger_get_ac_current(struct ab8500_charger *di)
0583 {
0584 int ich, ret;
0585
0586
0587 if (di->ac.charger_online) {
0588 ret = iio_read_channel_processed(di->adc_main_charger_c, &ich);
0589 if (ret < 0)
0590 dev_err(di->dev, "%s ADC conv failed,\n", __func__);
0591 } else {
0592 ich = 0;
0593 }
0594
0595 return ich * 1000;
0596 }
0597
0598
0599
0600
0601
0602
0603
0604 static int ab8500_charger_usb_cv(struct ab8500_charger *di)
0605 {
0606 int ret;
0607 u8 val;
0608
0609
0610 if (di->usb.charger_online) {
0611 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
0612 AB8500_CH_USBCH_STAT1_REG, &val);
0613 if (ret < 0) {
0614 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
0615 return 0;
0616 }
0617
0618 if (val & USB_CH_CV_ON)
0619 ret = 1;
0620 else
0621 ret = 0;
0622 } else {
0623 ret = 0;
0624 }
0625
0626 return ret;
0627 }
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645
0646 static int ab8500_charger_detect_chargers(struct ab8500_charger *di, bool probe)
0647 {
0648 int result = NO_PW_CONN;
0649 int ret;
0650 u8 val;
0651
0652
0653 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
0654 AB8500_CH_STATUS1_REG, &val);
0655 if (ret < 0) {
0656 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
0657 return ret;
0658 }
0659
0660 if (val & MAIN_CH_DET)
0661 result = AC_PW_CONN;
0662
0663
0664
0665 if (!probe) {
0666
0667
0668
0669
0670
0671
0672 msleep(110);
0673 }
0674 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
0675 AB8500_CH_USBCH_STAT1_REG, &val);
0676 if (ret < 0) {
0677 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
0678 return ret;
0679 }
0680 dev_dbg(di->dev,
0681 "%s AB8500_CH_USBCH_STAT1_REG %x\n", __func__,
0682 val);
0683 if ((val & VBUS_DET_DBNC1) && (val & VBUS_DET_DBNC100))
0684 result |= USB_PW_CONN;
0685
0686 return result;
0687 }
0688
0689
0690
0691
0692
0693
0694
0695
0696
0697
0698 static int ab8500_charger_max_usb_curr(struct ab8500_charger *di,
0699 enum ab8500_charger_link_status link_status)
0700 {
0701 int ret = 0;
0702
0703 di->usb_device_is_unrecognised = false;
0704
0705
0706
0707
0708
0709
0710
0711
0712 switch (link_status) {
0713 case USB_STAT_STD_HOST_NC:
0714 case USB_STAT_STD_HOST_C_NS:
0715 case USB_STAT_STD_HOST_C_S:
0716 dev_dbg(di->dev, "USB Type - Standard host is "
0717 "detected through USB driver\n");
0718 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
0719 di->is_aca_rid = 0;
0720 break;
0721 case USB_STAT_HOST_CHG_HS_CHIRP:
0722 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
0723 di->is_aca_rid = 0;
0724 break;
0725 case USB_STAT_HOST_CHG_HS:
0726 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
0727 di->is_aca_rid = 0;
0728 break;
0729 case USB_STAT_ACA_RID_C_HS:
0730 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P9;
0731 di->is_aca_rid = 0;
0732 break;
0733 case USB_STAT_ACA_RID_A:
0734
0735
0736
0737
0738 dev_dbg(di->dev, "USB_STAT_ACA_RID_A detected\n");
0739 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
0740 di->is_aca_rid = 1;
0741 break;
0742 case USB_STAT_ACA_RID_B:
0743
0744
0745
0746
0747 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P3;
0748 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status,
0749 di->max_usb_in_curr.usb_type_max_ua);
0750 di->is_aca_rid = 1;
0751 break;
0752 case USB_STAT_HOST_CHG_NM:
0753 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
0754 di->is_aca_rid = 0;
0755 break;
0756 case USB_STAT_DEDICATED_CHG:
0757 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P5;
0758 di->is_aca_rid = 0;
0759 break;
0760 case USB_STAT_ACA_RID_C_HS_CHIRP:
0761 case USB_STAT_ACA_RID_C_NM:
0762 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P5;
0763 di->is_aca_rid = 1;
0764 break;
0765 case USB_STAT_NOT_CONFIGURED:
0766 if (di->vbus_detected) {
0767 di->usb_device_is_unrecognised = true;
0768 dev_dbg(di->dev, "USB Type - Legacy charger.\n");
0769 di->max_usb_in_curr.usb_type_max_ua =
0770 USB_CH_IP_CUR_LVL_1P5;
0771 break;
0772 }
0773 fallthrough;
0774 case USB_STAT_HM_IDGND:
0775 dev_err(di->dev, "USB Type - Charging not allowed\n");
0776 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05;
0777 ret = -ENXIO;
0778 break;
0779 case USB_STAT_RESERVED:
0780 if (is_ab8500(di->parent)) {
0781 di->flags.vbus_collapse = true;
0782 dev_err(di->dev, "USB Type - USB_STAT_RESERVED "
0783 "VBUS has collapsed\n");
0784 ret = -ENXIO;
0785 break;
0786 } else {
0787 dev_dbg(di->dev, "USB Type - Charging not allowed\n");
0788 di->max_usb_in_curr.usb_type_max_ua =
0789 USB_CH_IP_CUR_LVL_0P05;
0790 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d",
0791 link_status,
0792 di->max_usb_in_curr.usb_type_max_ua);
0793 ret = -ENXIO;
0794 break;
0795 }
0796 case USB_STAT_CARKIT_1:
0797 case USB_STAT_CARKIT_2:
0798 case USB_STAT_ACA_DOCK_CHARGER:
0799 case USB_STAT_CHARGER_LINE_1:
0800 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
0801 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status,
0802 di->max_usb_in_curr.usb_type_max_ua);
0803 break;
0804 case USB_STAT_NOT_VALID_LINK:
0805 dev_err(di->dev, "USB Type invalid - try charging anyway\n");
0806 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
0807 break;
0808
0809 default:
0810 dev_err(di->dev, "USB Type - Unknown\n");
0811 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05;
0812 ret = -ENXIO;
0813 break;
0814 }
0815
0816 di->max_usb_in_curr.set_max_ua = di->max_usb_in_curr.usb_type_max_ua;
0817 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d",
0818 link_status, di->max_usb_in_curr.set_max_ua);
0819
0820 return ret;
0821 }
0822
0823
0824
0825
0826
0827
0828
0829
0830 static int ab8500_charger_read_usb_type(struct ab8500_charger *di)
0831 {
0832 int ret;
0833 u8 val;
0834
0835 ret = abx500_get_register_interruptible(di->dev,
0836 AB8500_INTERRUPT, AB8500_IT_SOURCE21_REG, &val);
0837 if (ret < 0) {
0838 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
0839 return ret;
0840 }
0841 if (is_ab8500(di->parent))
0842 ret = abx500_get_register_interruptible(di->dev, AB8500_USB,
0843 AB8500_USB_LINE_STAT_REG, &val);
0844 else
0845 ret = abx500_get_register_interruptible(di->dev,
0846 AB8500_USB, AB8500_USB_LINK1_STAT_REG, &val);
0847 if (ret < 0) {
0848 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
0849 return ret;
0850 }
0851
0852
0853 if (is_ab8500(di->parent))
0854 val = (val & AB8500_USB_LINK_STATUS) >> USB_LINK_STATUS_SHIFT;
0855 else
0856 val = (val & AB8505_USB_LINK_STATUS) >> USB_LINK_STATUS_SHIFT;
0857 ret = ab8500_charger_max_usb_curr(di,
0858 (enum ab8500_charger_link_status) val);
0859
0860 return ret;
0861 }
0862
0863
0864
0865
0866
0867
0868
0869
0870 static int ab8500_charger_detect_usb_type(struct ab8500_charger *di)
0871 {
0872 int i, ret;
0873 u8 val;
0874
0875
0876
0877
0878
0879
0880 for (i = 0; i < 10; i++) {
0881 msleep(250);
0882 ret = abx500_get_register_interruptible(di->dev,
0883 AB8500_INTERRUPT, AB8500_IT_SOURCE21_REG,
0884 &val);
0885 dev_dbg(di->dev, "%s AB8500_IT_SOURCE21_REG %x\n",
0886 __func__, val);
0887 if (ret < 0) {
0888 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
0889 return ret;
0890 }
0891
0892 if (is_ab8500(di->parent))
0893 ret = abx500_get_register_interruptible(di->dev,
0894 AB8500_USB, AB8500_USB_LINE_STAT_REG, &val);
0895 else
0896 ret = abx500_get_register_interruptible(di->dev,
0897 AB8500_USB, AB8500_USB_LINK1_STAT_REG, &val);
0898 if (ret < 0) {
0899 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
0900 return ret;
0901 }
0902 dev_dbg(di->dev, "%s AB8500_USB_LINE_STAT_REG %x\n", __func__,
0903 val);
0904
0905
0906
0907
0908
0909
0910
0911 if (is_ab8500(di->parent))
0912 val = (val & AB8500_USB_LINK_STATUS) >>
0913 USB_LINK_STATUS_SHIFT;
0914 else
0915 val = (val & AB8505_USB_LINK_STATUS) >>
0916 USB_LINK_STATUS_SHIFT;
0917 if (val)
0918 break;
0919 }
0920 ret = ab8500_charger_max_usb_curr(di,
0921 (enum ab8500_charger_link_status) val);
0922
0923 return ret;
0924 }
0925
0926
0927
0928
0929
0930 static int ab8500_charger_voltage_map[] = {
0931 3500000,
0932 3525000,
0933 3550000,
0934 3575000,
0935 3600000,
0936 3625000,
0937 3650000,
0938 3675000,
0939 3700000,
0940 3725000,
0941 3750000,
0942 3775000,
0943 3800000,
0944 3825000,
0945 3850000,
0946 3875000,
0947 3900000,
0948 3925000,
0949 3950000,
0950 3975000,
0951 4000000,
0952 4025000,
0953 4050000,
0954 4060000,
0955 4070000,
0956 4080000,
0957 4090000,
0958 4100000,
0959 4110000,
0960 4120000,
0961 4130000,
0962 4140000,
0963 4150000,
0964 4160000,
0965 4170000,
0966 4180000,
0967 4190000,
0968 4200000,
0969 4210000,
0970 4220000,
0971 4230000,
0972 4240000,
0973 4250000,
0974 4260000,
0975 4270000,
0976 4280000,
0977 4290000,
0978 4300000,
0979 4310000,
0980 4320000,
0981 4330000,
0982 4340000,
0983 4350000,
0984 4360000,
0985 4370000,
0986 4380000,
0987 4390000,
0988 4400000,
0989 4410000,
0990 4420000,
0991 4430000,
0992 4440000,
0993 4450000,
0994 4460000,
0995 4470000,
0996 4480000,
0997 4490000,
0998 4500000,
0999 4510000,
1000 4520000,
1001 4530000,
1002 4540000,
1003 4550000,
1004 4560000,
1005 4570000,
1006 4580000,
1007 4590000,
1008 4600000,
1009 };
1010
1011 static int ab8500_voltage_to_regval(int voltage_uv)
1012 {
1013 int i;
1014
1015
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
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
1033 static int ab8500_charge_input_curr_map[] = {
1034 50000, 98000, 193000, 290000, 380000, 450000, 500000, 600000,
1035 700000, 800000, 900000, 1000000, 1100000, 1300000, 1400000, 1500000,
1036 };
1037
1038
1039 static int ab8500_charge_output_curr_map[] = {
1040 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000,
1041 900000, 1000000, 1100000, 1200000, 1300000, 1400000, 1500000, 1500000,
1042 };
1043
1044 static int ab8500_current_to_regval(struct ab8500_charger *di, int curr_ua)
1045 {
1046 int i;
1047
1048 if (curr_ua < ab8500_charge_output_curr_map[0])
1049 return 0;
1050
1051 for (i = 0; i < ARRAY_SIZE(ab8500_charge_output_curr_map); i++) {
1052 if (curr_ua < ab8500_charge_output_curr_map[i])
1053 return i - 1;
1054 }
1055
1056
1057 i = ARRAY_SIZE(ab8500_charge_output_curr_map) - 1;
1058 if (curr_ua == ab8500_charge_output_curr_map[i])
1059 return i;
1060 else
1061 return -1;
1062 }
1063
1064 static int ab8500_vbus_in_curr_to_regval(struct ab8500_charger *di, int curr_ua)
1065 {
1066 int i;
1067
1068 if (curr_ua < ab8500_charge_input_curr_map[0])
1069 return 0;
1070
1071 for (i = 0; i < ARRAY_SIZE(ab8500_charge_input_curr_map); i++) {
1072 if (curr_ua < ab8500_charge_input_curr_map[i])
1073 return i - 1;
1074 }
1075
1076
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
1086
1087
1088
1089
1090
1091
1092
1093 static int ab8500_charger_get_usb_cur(struct ab8500_charger *di)
1094 {
1095 int ret = 0;
1096 switch (di->usb_state.usb_current_ua) {
1097 case 100000:
1098 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P09;
1099 break;
1100 case 200000:
1101 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P19;
1102 break;
1103 case 300000:
1104 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P29;
1105 break;
1106 case 400000:
1107 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P38;
1108 break;
1109 case 500000:
1110 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5;
1111 break;
1112 default:
1113 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05;
1114 ret = -EPERM;
1115 break;
1116 }
1117 di->max_usb_in_curr.set_max_ua = di->max_usb_in_curr.usb_type_max_ua;
1118 return ret;
1119 }
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130 static bool ab8500_charger_check_continue_stepping(struct ab8500_charger *di,
1131 int reg)
1132 {
1133 if (reg == AB8500_USBCH_IPT_CRNTLVL_REG)
1134 return !di->flags.vbus_drop_end;
1135 else
1136 return true;
1137 }
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152 static int ab8500_charger_set_current(struct ab8500_charger *di,
1153 int ich_ua, int reg)
1154 {
1155 int ret = 0;
1156 int curr_index, prev_curr_index, shift_value, i;
1157 u8 reg_value;
1158 u32 step_udelay;
1159 bool no_stepping = false;
1160
1161 atomic_inc(&di->current_stepping_sessions);
1162
1163 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
1164 reg, ®_value);
1165 if (ret < 0) {
1166 dev_err(di->dev, "%s read failed\n", __func__);
1167 goto exit_set_current;
1168 }
1169
1170 switch (reg) {
1171 case AB8500_MCH_IPT_CURLVL_REG:
1172 shift_value = MAIN_CH_INPUT_CURR_SHIFT;
1173 prev_curr_index = (reg_value >> shift_value);
1174 curr_index = ab8500_current_to_regval(di, ich_ua);
1175 step_udelay = STEP_UDELAY;
1176 if (!di->ac.charger_connected)
1177 no_stepping = true;
1178 break;
1179 case AB8500_USBCH_IPT_CRNTLVL_REG:
1180 shift_value = VBUS_IN_CURR_LIM_SHIFT;
1181 prev_curr_index = (reg_value >> shift_value);
1182 curr_index = ab8500_vbus_in_curr_to_regval(di, ich_ua);
1183 step_udelay = STEP_UDELAY * 100;
1184
1185 if (!di->usb.charger_connected)
1186 no_stepping = true;
1187 break;
1188 case AB8500_CH_OPT_CRNTLVL_REG:
1189 shift_value = 0;
1190 prev_curr_index = (reg_value >> shift_value);
1191 curr_index = ab8500_current_to_regval(di, ich_ua);
1192 step_udelay = STEP_UDELAY;
1193 if (curr_index && (curr_index - prev_curr_index) > 1)
1194 step_udelay *= 100;
1195
1196 if (!di->usb.charger_connected && !di->ac.charger_connected)
1197 no_stepping = true;
1198
1199 break;
1200 default:
1201 dev_err(di->dev, "%s current register not valid\n", __func__);
1202 ret = -ENXIO;
1203 goto exit_set_current;
1204 }
1205
1206 if (curr_index < 0) {
1207 dev_err(di->dev, "requested current limit out-of-range\n");
1208 ret = -ENXIO;
1209 goto exit_set_current;
1210 }
1211
1212
1213 if (prev_curr_index == curr_index) {
1214 dev_dbg(di->dev, "%s current not changed for reg: 0x%02x\n",
1215 __func__, reg);
1216 ret = 0;
1217 goto exit_set_current;
1218 }
1219
1220 dev_dbg(di->dev, "%s set charger current: %d uA for reg: 0x%02x\n",
1221 __func__, ich_ua, reg);
1222
1223 if (no_stepping) {
1224 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1225 reg, (u8)curr_index << shift_value);
1226 if (ret)
1227 dev_err(di->dev, "%s write failed\n", __func__);
1228 } else if (prev_curr_index > curr_index) {
1229 for (i = prev_curr_index - 1; i >= curr_index; i--) {
1230 dev_dbg(di->dev, "curr change_1 to: %x for 0x%02x\n",
1231 (u8) i << shift_value, reg);
1232 ret = abx500_set_register_interruptible(di->dev,
1233 AB8500_CHARGER, reg, (u8)i << shift_value);
1234 if (ret) {
1235 dev_err(di->dev, "%s write failed\n", __func__);
1236 goto exit_set_current;
1237 }
1238 if (i != curr_index)
1239 usleep_range(step_udelay, step_udelay * 2);
1240 }
1241 } else {
1242 bool allow = true;
1243 for (i = prev_curr_index + 1; i <= curr_index && allow; i++) {
1244 dev_dbg(di->dev, "curr change_2 to: %x for 0x%02x\n",
1245 (u8)i << shift_value, reg);
1246 ret = abx500_set_register_interruptible(di->dev,
1247 AB8500_CHARGER, reg, (u8)i << shift_value);
1248 if (ret) {
1249 dev_err(di->dev, "%s write failed\n", __func__);
1250 goto exit_set_current;
1251 }
1252 if (i != curr_index)
1253 usleep_range(step_udelay, step_udelay * 2);
1254
1255 allow = ab8500_charger_check_continue_stepping(di, reg);
1256 }
1257 }
1258
1259 exit_set_current:
1260 atomic_dec(&di->current_stepping_sessions);
1261
1262 return ret;
1263 }
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273 static int ab8500_charger_set_vbus_in_curr(struct ab8500_charger *di,
1274 int ich_in_ua)
1275 {
1276 int min_value;
1277 int ret;
1278
1279
1280 min_value = min(di->bm->chg_params->usb_curr_max_ua, ich_in_ua);
1281 if (di->max_usb_in_curr.set_max_ua > 0)
1282 min_value = min(di->max_usb_in_curr.set_max_ua, min_value);
1283
1284 if (di->usb_state.usb_current_ua >= 0)
1285 min_value = min(di->usb_state.usb_current_ua, min_value);
1286
1287 switch (min_value) {
1288 case 100000:
1289 if (di->vbat < VBAT_TRESH_IP_CUR_RED)
1290 min_value = USB_CH_IP_CUR_LVL_0P05;
1291 break;
1292 case 500000:
1293 if (di->vbat < VBAT_TRESH_IP_CUR_RED)
1294 min_value = USB_CH_IP_CUR_LVL_0P45;
1295 break;
1296 default:
1297 break;
1298 }
1299
1300 dev_info(di->dev, "VBUS input current limit set to %d uA\n", min_value);
1301
1302 mutex_lock(&di->usb_ipt_crnt_lock);
1303 ret = ab8500_charger_set_current(di, min_value,
1304 AB8500_USBCH_IPT_CRNTLVL_REG);
1305 mutex_unlock(&di->usb_ipt_crnt_lock);
1306
1307 return ret;
1308 }
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318 static int ab8500_charger_set_main_in_curr(struct ab8500_charger *di,
1319 int ich_in_ua)
1320 {
1321 return ab8500_charger_set_current(di, ich_in_ua,
1322 AB8500_MCH_IPT_CURLVL_REG);
1323 }
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333 static int ab8500_charger_set_output_curr(struct ab8500_charger *di,
1334 int ich_out_ua)
1335 {
1336 return ab8500_charger_set_current(di, ich_out_ua,
1337 AB8500_CH_OPT_CRNTLVL_REG);
1338 }
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348 static int ab8500_charger_led_en(struct ab8500_charger *di, int on)
1349 {
1350 int ret;
1351
1352 if (on) {
1353
1354 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1355 AB8500_LED_INDICATOR_PWM_CTRL,
1356 (LED_IND_CUR_5MA | LED_INDICATOR_PWM_ENA));
1357 if (ret) {
1358 dev_err(di->dev, "Power ON LED failed\n");
1359 return ret;
1360 }
1361
1362 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1363 AB8500_LED_INDICATOR_PWM_DUTY,
1364 LED_INDICATOR_PWM_DUTY_252_256);
1365 if (ret) {
1366 dev_err(di->dev, "Set LED PWM duty cycle failed\n");
1367 return ret;
1368 }
1369 } else {
1370
1371 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1372 AB8500_LED_INDICATOR_PWM_CTRL,
1373 LED_INDICATOR_PWM_DIS);
1374 if (ret) {
1375 dev_err(di->dev, "Power-off LED failed\n");
1376 return ret;
1377 }
1378 }
1379
1380 return ret;
1381 }
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393 static int ab8500_charger_ac_en(struct ux500_charger *charger,
1394 int enable, int vset_uv, int iset_ua)
1395 {
1396 int ret;
1397 int volt_index;
1398 int curr_index;
1399 int input_curr_index;
1400 u8 overshoot = 0;
1401
1402 struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger);
1403
1404 if (enable) {
1405
1406 if (!di->ac.charger_connected) {
1407 dev_err(di->dev, "AC charger not connected\n");
1408 return -ENXIO;
1409 }
1410
1411
1412 dev_dbg(di->dev, "Enable AC: %duV %duA\n", vset_uv, iset_ua);
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424 if (!di->vddadc_en_ac) {
1425 ret = regulator_enable(di->regu);
1426 if (ret)
1427 dev_warn(di->dev,
1428 "Failed to enable regulator\n");
1429 else
1430 di->vddadc_en_ac = true;
1431 }
1432
1433
1434 volt_index = ab8500_voltage_to_regval(vset_uv);
1435 curr_index = ab8500_current_to_regval(di, iset_ua);
1436 input_curr_index = ab8500_current_to_regval(di,
1437 di->bm->chg_params->ac_curr_max_ua);
1438 if (volt_index < 0 || curr_index < 0 || input_curr_index < 0) {
1439 dev_err(di->dev,
1440 "Charger voltage or current too high, "
1441 "charging not started\n");
1442 return -ENXIO;
1443 }
1444
1445
1446 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1447 AB8500_CH_VOLT_LVL_REG, (u8) volt_index);
1448 if (ret) {
1449 dev_err(di->dev, "%s write failed\n", __func__);
1450 return ret;
1451 }
1452
1453 ret = ab8500_charger_set_main_in_curr(di,
1454 di->bm->chg_params->ac_curr_max_ua);
1455 if (ret) {
1456 dev_err(di->dev, "%s Failed to set MainChInputCurr\n",
1457 __func__);
1458 return ret;
1459 }
1460
1461 ret = ab8500_charger_set_output_curr(di, iset_ua);
1462 if (ret) {
1463 dev_err(di->dev, "%s "
1464 "Failed to set ChOutputCurentLevel\n",
1465 __func__);
1466 return ret;
1467 }
1468
1469
1470 if (!di->bm->enable_overshoot)
1471 overshoot = MAIN_CH_NO_OVERSHOOT_ENA_N;
1472
1473
1474 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1475 AB8500_MCH_CTRL1, MAIN_CH_ENA | overshoot);
1476 if (ret) {
1477 dev_err(di->dev, "%s write failed\n", __func__);
1478 return ret;
1479 }
1480
1481
1482 ret = ab8500_charger_led_en(di, true);
1483 if (ret < 0)
1484 dev_err(di->dev, "failed to enable LED\n");
1485
1486 di->ac.charger_online = 1;
1487 } else {
1488
1489 if (is_ab8500_1p1_or_earlier(di->parent)) {
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500 if (di->ac_conn) {
1501 queue_delayed_work(di->charger_wq,
1502 &di->kick_wd_work,
1503 round_jiffies(WD_KICK_INTERVAL));
1504 }
1505
1506
1507
1508
1509
1510
1511
1512
1513 ret = abx500_set_register_interruptible(di->dev,
1514 AB8500_CHARGER,
1515 AB8500_CH_VOLT_LVL_REG, CH_VOL_LVL_3P5);
1516 if (ret) {
1517 dev_err(di->dev,
1518 "%s write failed\n", __func__);
1519 return ret;
1520 }
1521
1522 ret = ab8500_charger_set_output_curr(di, 0);
1523 if (ret) {
1524 dev_err(di->dev, "%s "
1525 "Failed to set ChOutputCurentLevel\n",
1526 __func__);
1527 return ret;
1528 }
1529 } else {
1530 ret = abx500_set_register_interruptible(di->dev,
1531 AB8500_CHARGER,
1532 AB8500_MCH_CTRL1, 0);
1533 if (ret) {
1534 dev_err(di->dev,
1535 "%s write failed\n", __func__);
1536 return ret;
1537 }
1538 }
1539
1540 ret = ab8500_charger_led_en(di, false);
1541 if (ret < 0)
1542 dev_err(di->dev, "failed to disable LED\n");
1543
1544 di->ac.charger_online = 0;
1545 di->ac.wd_expired = false;
1546
1547
1548 if (di->vddadc_en_ac) {
1549 regulator_disable(di->regu);
1550 di->vddadc_en_ac = false;
1551 }
1552
1553 dev_dbg(di->dev, "%s Disabled AC charging\n", __func__);
1554 }
1555 ab8500_power_supply_changed(di, di->ac_chg.psy);
1556
1557 return ret;
1558 }
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570 static int ab8500_charger_usb_en(struct ux500_charger *charger,
1571 int enable, int vset_uv, int ich_out_ua)
1572 {
1573 int ret;
1574 int volt_index;
1575 int curr_index;
1576 u8 overshoot = 0;
1577
1578 struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger);
1579
1580 if (enable) {
1581
1582 if (!di->usb.charger_connected) {
1583 dev_err(di->dev, "USB charger not connected\n");
1584 return -ENXIO;
1585 }
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597 if (!di->vddadc_en_usb) {
1598 ret = regulator_enable(di->regu);
1599 if (ret)
1600 dev_warn(di->dev,
1601 "Failed to enable regulator\n");
1602 else
1603 di->vddadc_en_usb = true;
1604 }
1605
1606
1607 dev_dbg(di->dev, "Enable USB: %d uV %d uA\n", vset_uv, ich_out_ua);
1608
1609
1610 volt_index = ab8500_voltage_to_regval(vset_uv);
1611 curr_index = ab8500_current_to_regval(di, ich_out_ua);
1612 if (volt_index < 0 || curr_index < 0) {
1613 dev_err(di->dev,
1614 "Charger voltage or current too high, "
1615 "charging not started\n");
1616 return -ENXIO;
1617 }
1618
1619
1620
1621
1622
1623 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1624 AB8500_CH_VOLT_LVL_REG, (u8) volt_index);
1625 if (ret) {
1626 dev_err(di->dev, "%s write failed\n", __func__);
1627 return ret;
1628 }
1629
1630 if (!di->bm->enable_overshoot)
1631 overshoot = USB_CHG_NO_OVERSHOOT_ENA_N;
1632
1633
1634 dev_dbg(di->dev,
1635 "Enabling USB with write to AB8500_USBCH_CTRL1_REG\n");
1636 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1637 AB8500_USBCH_CTRL1_REG, USB_CH_ENA | overshoot);
1638 if (ret) {
1639 dev_err(di->dev, "%s write failed\n", __func__);
1640 return ret;
1641 }
1642
1643
1644 ret = ab8500_charger_led_en(di, true);
1645 if (ret < 0)
1646 dev_err(di->dev, "failed to enable LED\n");
1647
1648 di->usb.charger_online = 1;
1649
1650
1651 ret = ab8500_charger_set_vbus_in_curr(di,
1652 di->max_usb_in_curr.usb_type_max_ua);
1653 if (ret) {
1654 dev_err(di->dev, "setting USBChInputCurr failed\n");
1655 return ret;
1656 }
1657
1658
1659 ret = ab8500_charger_set_output_curr(di, ich_out_ua);
1660 if (ret) {
1661 dev_err(di->dev, "%s "
1662 "Failed to set ChOutputCurentLevel\n",
1663 __func__);
1664 return ret;
1665 }
1666
1667 queue_delayed_work(di->charger_wq, &di->check_vbat_work, HZ);
1668
1669 } else {
1670
1671 dev_dbg(di->dev, "%s Disabled USB charging\n", __func__);
1672 ret = abx500_set_register_interruptible(di->dev,
1673 AB8500_CHARGER,
1674 AB8500_USBCH_CTRL1_REG, 0);
1675 if (ret) {
1676 dev_err(di->dev,
1677 "%s write failed\n", __func__);
1678 return ret;
1679 }
1680
1681 ret = ab8500_charger_led_en(di, false);
1682 if (ret < 0)
1683 dev_err(di->dev, "failed to disable LED\n");
1684
1685 ret = ab8500_charger_set_vbus_in_curr(di, 0);
1686 if (ret) {
1687 dev_err(di->dev, "setting USBChInputCurr failed\n");
1688 return ret;
1689 }
1690
1691
1692 ret = ab8500_charger_set_output_curr(di, 0);
1693 if (ret) {
1694 dev_err(di->dev, "%s "
1695 "Failed to reset ChOutputCurentLevel\n",
1696 __func__);
1697 return ret;
1698 }
1699 di->usb.charger_online = 0;
1700 di->usb.wd_expired = false;
1701
1702
1703 if (di->vddadc_en_usb) {
1704 regulator_disable(di->regu);
1705 di->vddadc_en_usb = false;
1706 }
1707
1708 dev_dbg(di->dev, "%s Disabled USB charging\n", __func__);
1709
1710
1711 cancel_delayed_work(&di->check_vbat_work);
1712
1713 }
1714 ab8500_power_supply_changed(di, di->usb_chg.psy);
1715
1716 return ret;
1717 }
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728 static int ab8500_charger_usb_check_enable(struct ux500_charger *charger,
1729 int vset_uv, int iset_ua)
1730 {
1731 u8 usbch_ctrl1 = 0;
1732 int ret = 0;
1733
1734 struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger);
1735
1736 if (!di->usb.charger_connected)
1737 return ret;
1738
1739 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
1740 AB8500_USBCH_CTRL1_REG, &usbch_ctrl1);
1741 if (ret < 0) {
1742 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
1743 return ret;
1744 }
1745 dev_dbg(di->dev, "USB charger ctrl: 0x%02x\n", usbch_ctrl1);
1746
1747 if (!(usbch_ctrl1 & USB_CH_ENA)) {
1748 dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n");
1749
1750 ret = abx500_mask_and_set_register_interruptible(di->dev,
1751 AB8500_CHARGER, AB8500_CHARGER_CTRL,
1752 DROP_COUNT_RESET, DROP_COUNT_RESET);
1753 if (ret < 0) {
1754 dev_err(di->dev, "ab8500 write failed %d\n", __LINE__);
1755 return ret;
1756 }
1757
1758 ret = ab8500_charger_usb_en(&di->usb_chg, true, vset_uv, iset_ua);
1759 if (ret < 0) {
1760 dev_err(di->dev, "Failed to enable VBUS charger %d\n",
1761 __LINE__);
1762 return ret;
1763 }
1764 }
1765 return ret;
1766 }
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777 static int ab8500_charger_ac_check_enable(struct ux500_charger *charger,
1778 int vset_uv, int iset_ua)
1779 {
1780 u8 mainch_ctrl1 = 0;
1781 int ret = 0;
1782
1783 struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger);
1784
1785 if (!di->ac.charger_connected)
1786 return ret;
1787
1788 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
1789 AB8500_MCH_CTRL1, &mainch_ctrl1);
1790 if (ret < 0) {
1791 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
1792 return ret;
1793 }
1794 dev_dbg(di->dev, "AC charger ctrl: 0x%02x\n", mainch_ctrl1);
1795
1796 if (!(mainch_ctrl1 & MAIN_CH_ENA)) {
1797 dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n");
1798
1799 ret = abx500_mask_and_set_register_interruptible(di->dev,
1800 AB8500_CHARGER, AB8500_CHARGER_CTRL,
1801 DROP_COUNT_RESET, DROP_COUNT_RESET);
1802
1803 if (ret < 0) {
1804 dev_err(di->dev, "ab8500 write failed %d\n", __LINE__);
1805 return ret;
1806 }
1807
1808 ret = ab8500_charger_ac_en(&di->usb_chg, true, vset_uv, iset_ua);
1809 if (ret < 0) {
1810 dev_err(di->dev, "failed to enable AC charger %d\n",
1811 __LINE__);
1812 return ret;
1813 }
1814 }
1815 return ret;
1816 }
1817
1818
1819
1820
1821
1822
1823
1824
1825 static int ab8500_charger_watchdog_kick(struct ux500_charger *charger)
1826 {
1827 int ret;
1828 struct ab8500_charger *di;
1829
1830 if (charger->psy->desc->type == POWER_SUPPLY_TYPE_MAINS)
1831 di = to_ab8500_charger_ac_device_info(charger);
1832 else if (charger->psy->desc->type == POWER_SUPPLY_TYPE_USB)
1833 di = to_ab8500_charger_usb_device_info(charger);
1834 else
1835 return -ENXIO;
1836
1837 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1838 AB8500_CHARG_WD_CTRL, CHARG_WD_KICK);
1839 if (ret)
1840 dev_err(di->dev, "Failed to kick WD!\n");
1841
1842 return ret;
1843 }
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853 static int ab8500_charger_update_charger_current(struct ux500_charger *charger,
1854 int ich_out_ua)
1855 {
1856 int ret;
1857 struct ab8500_charger *di;
1858
1859 if (charger->psy->desc->type == POWER_SUPPLY_TYPE_MAINS)
1860 di = to_ab8500_charger_ac_device_info(charger);
1861 else if (charger->psy->desc->type == POWER_SUPPLY_TYPE_USB)
1862 di = to_ab8500_charger_usb_device_info(charger);
1863 else
1864 return -ENXIO;
1865
1866 ret = ab8500_charger_set_output_curr(di, ich_out_ua);
1867 if (ret) {
1868 dev_err(di->dev, "%s "
1869 "Failed to set ChOutputCurentLevel\n",
1870 __func__);
1871 return ret;
1872 }
1873
1874
1875 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
1876 AB8500_CHARGER_CTRL, DROP_COUNT_RESET);
1877 if (ret) {
1878 dev_err(di->dev, "%s write failed\n", __func__);
1879 return ret;
1880 }
1881
1882 return ret;
1883 }
1884
1885 static int ab8500_charger_get_ext_psy_data(struct device *dev, void *data)
1886 {
1887 struct power_supply *psy;
1888 struct power_supply *ext = dev_get_drvdata(dev);
1889 const char **supplicants = (const char **)ext->supplied_to;
1890 struct ab8500_charger *di;
1891 union power_supply_propval ret;
1892 int j;
1893 struct ux500_charger *usb_chg;
1894
1895 usb_chg = (struct ux500_charger *)data;
1896 psy = usb_chg->psy;
1897
1898 di = to_ab8500_charger_usb_device_info(usb_chg);
1899
1900
1901
1902
1903
1904
1905 j = match_string(supplicants, ext->num_supplicants, psy->desc->name);
1906 if (j < 0)
1907 return 0;
1908
1909
1910 for (j = 0; j < ext->desc->num_properties; j++) {
1911 enum power_supply_property prop;
1912 prop = ext->desc->properties[j];
1913
1914 if (power_supply_get_property(ext, prop, &ret))
1915 continue;
1916
1917 switch (prop) {
1918 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
1919 switch (ext->desc->type) {
1920 case POWER_SUPPLY_TYPE_BATTERY:
1921
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
1939
1940
1941
1942
1943
1944
1945
1946 static void ab8500_charger_check_vbat_work(struct work_struct *work)
1947 {
1948 int t = 10;
1949 struct ab8500_charger *di = container_of(work,
1950 struct ab8500_charger, check_vbat_work.work);
1951
1952 class_for_each_device(power_supply_class, NULL,
1953 &di->usb_chg, ab8500_charger_get_ext_psy_data);
1954
1955
1956 if (di->old_vbat == 0)
1957 di->old_vbat = di->vbat;
1958
1959 if (!((di->old_vbat <= VBAT_TRESH_IP_CUR_RED &&
1960 di->vbat <= VBAT_TRESH_IP_CUR_RED) ||
1961 (di->old_vbat > VBAT_TRESH_IP_CUR_RED &&
1962 di->vbat > VBAT_TRESH_IP_CUR_RED))) {
1963
1964 dev_dbg(di->dev, "Vbat did cross threshold, curr: %d, new: %d,"
1965 " old: %d\n", di->max_usb_in_curr.usb_type_max_ua,
1966 di->vbat, di->old_vbat);
1967 ab8500_charger_set_vbus_in_curr(di,
1968 di->max_usb_in_curr.usb_type_max_ua);
1969 power_supply_changed(di->usb_chg.psy);
1970 }
1971
1972 di->old_vbat = di->vbat;
1973
1974
1975
1976
1977
1978 if (di->vbat < (VBAT_TRESH_IP_CUR_RED + 100000) &&
1979 (di->vbat > (VBAT_TRESH_IP_CUR_RED - 100000)))
1980 t = 1;
1981
1982 queue_delayed_work(di->charger_wq, &di->check_vbat_work, t * HZ);
1983 }
1984
1985
1986
1987
1988
1989
1990
1991 static void ab8500_charger_check_hw_failure_work(struct work_struct *work)
1992 {
1993 int ret;
1994 u8 reg_value;
1995
1996 struct ab8500_charger *di = container_of(work,
1997 struct ab8500_charger, check_hw_failure_work.work);
1998
1999
2000 if (di->flags.mainextchnotok) {
2001 ret = abx500_get_register_interruptible(di->dev,
2002 AB8500_CHARGER, AB8500_CH_STATUS2_REG, ®_value);
2003 if (ret < 0) {
2004 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2005 return;
2006 }
2007 if (!(reg_value & MAIN_CH_NOK)) {
2008 di->flags.mainextchnotok = false;
2009 ab8500_power_supply_changed(di, di->ac_chg.psy);
2010 }
2011 }
2012 if (di->flags.vbus_ovv) {
2013 ret = abx500_get_register_interruptible(di->dev,
2014 AB8500_CHARGER, AB8500_CH_USBCH_STAT2_REG,
2015 ®_value);
2016 if (ret < 0) {
2017 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2018 return;
2019 }
2020 if (!(reg_value & VBUS_OVV_TH)) {
2021 di->flags.vbus_ovv = false;
2022 ab8500_power_supply_changed(di, di->usb_chg.psy);
2023 }
2024 }
2025
2026 if (di->flags.mainextchnotok || di->flags.vbus_ovv) {
2027 queue_delayed_work(di->charger_wq,
2028 &di->check_hw_failure_work, round_jiffies(HZ));
2029 }
2030 }
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046 static void ab8500_charger_kick_watchdog_work(struct work_struct *work)
2047 {
2048 int ret;
2049
2050 struct ab8500_charger *di = container_of(work,
2051 struct ab8500_charger, kick_wd_work.work);
2052
2053 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
2054 AB8500_CHARG_WD_CTRL, CHARG_WD_KICK);
2055 if (ret)
2056 dev_err(di->dev, "Failed to kick WD!\n");
2057
2058
2059 queue_delayed_work(di->charger_wq,
2060 &di->kick_wd_work, round_jiffies(WD_KICK_INTERVAL));
2061 }
2062
2063
2064
2065
2066
2067
2068
2069 static void ab8500_charger_ac_work(struct work_struct *work)
2070 {
2071 int ret;
2072
2073 struct ab8500_charger *di = container_of(work,
2074 struct ab8500_charger, ac_work);
2075
2076
2077
2078
2079
2080
2081 ret = ab8500_charger_detect_chargers(di, false);
2082 if (ret < 0)
2083 return;
2084
2085 if (ret & AC_PW_CONN) {
2086 di->ac.charger_connected = 1;
2087 di->ac_conn = true;
2088 } else {
2089 di->ac.charger_connected = 0;
2090 }
2091
2092 ab8500_power_supply_changed(di, di->ac_chg.psy);
2093 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present");
2094 }
2095
2096 static void ab8500_charger_usb_attached_work(struct work_struct *work)
2097 {
2098 struct ab8500_charger *di = container_of(work,
2099 struct ab8500_charger,
2100 usb_charger_attached_work.work);
2101 int usbch = (USB_CH_VBUSDROP | USB_CH_VBUSDETDBNC);
2102 int ret, i;
2103 u8 statval;
2104
2105 for (i = 0; i < 10; i++) {
2106 ret = abx500_get_register_interruptible(di->dev,
2107 AB8500_CHARGER,
2108 AB8500_CH_USBCH_STAT1_REG,
2109 &statval);
2110 if (ret < 0) {
2111 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
2112 goto reschedule;
2113 }
2114 if ((statval & usbch) != usbch)
2115 goto reschedule;
2116
2117 msleep(CHARGER_STATUS_POLL);
2118 }
2119
2120 ab8500_charger_usb_en(&di->usb_chg, 0, 0, 0);
2121
2122 mutex_lock(&di->charger_attached_mutex);
2123 mutex_unlock(&di->charger_attached_mutex);
2124
2125 return;
2126
2127 reschedule:
2128 queue_delayed_work(di->charger_wq,
2129 &di->usb_charger_attached_work,
2130 HZ);
2131 }
2132
2133 static void ab8500_charger_ac_attached_work(struct work_struct *work)
2134 {
2135
2136 struct ab8500_charger *di = container_of(work,
2137 struct ab8500_charger,
2138 ac_charger_attached_work.work);
2139 int mainch = (MAIN_CH_STATUS2_MAINCHGDROP |
2140 MAIN_CH_STATUS2_MAINCHARGERDETDBNC);
2141 int ret, i;
2142 u8 statval;
2143
2144 for (i = 0; i < 10; i++) {
2145 ret = abx500_get_register_interruptible(di->dev,
2146 AB8500_CHARGER,
2147 AB8500_CH_STATUS2_REG,
2148 &statval);
2149 if (ret < 0) {
2150 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__);
2151 goto reschedule;
2152 }
2153
2154 if ((statval & mainch) != mainch)
2155 goto reschedule;
2156
2157 msleep(CHARGER_STATUS_POLL);
2158 }
2159
2160 ab8500_charger_ac_en(&di->ac_chg, 0, 0, 0);
2161 queue_work(di->charger_wq, &di->ac_work);
2162
2163 mutex_lock(&di->charger_attached_mutex);
2164 mutex_unlock(&di->charger_attached_mutex);
2165
2166 return;
2167
2168 reschedule:
2169 queue_delayed_work(di->charger_wq,
2170 &di->ac_charger_attached_work,
2171 HZ);
2172 }
2173
2174
2175
2176
2177
2178
2179
2180 static void ab8500_charger_detect_usb_type_work(struct work_struct *work)
2181 {
2182 int ret;
2183
2184 struct ab8500_charger *di = container_of(work,
2185 struct ab8500_charger, detect_usb_type_work);
2186
2187
2188
2189
2190
2191
2192 ret = ab8500_charger_detect_chargers(di, false);
2193 if (ret < 0)
2194 return;
2195
2196 if (!(ret & USB_PW_CONN)) {
2197 dev_dbg(di->dev, "%s di->vbus_detected = false\n", __func__);
2198 di->vbus_detected = false;
2199 ab8500_charger_set_usb_connected(di, false);
2200 ab8500_power_supply_changed(di, di->usb_chg.psy);
2201 } else {
2202 dev_dbg(di->dev, "%s di->vbus_detected = true\n", __func__);
2203 di->vbus_detected = true;
2204
2205 if (is_ab8500_1p1_or_earlier(di->parent)) {
2206 ret = ab8500_charger_detect_usb_type(di);
2207 if (!ret) {
2208 ab8500_charger_set_usb_connected(di, true);
2209 ab8500_power_supply_changed(di,
2210 di->usb_chg.psy);
2211 }
2212 } else {
2213
2214
2215
2216
2217
2218
2219
2220 if (di->vbus_detected_start) {
2221 di->vbus_detected_start = false;
2222 ret = ab8500_charger_detect_usb_type(di);
2223 if (!ret) {
2224 ab8500_charger_set_usb_connected(di,
2225 true);
2226 ab8500_power_supply_changed(di,
2227 di->usb_chg.psy);
2228 }
2229 }
2230 }
2231 }
2232 }
2233
2234
2235
2236
2237
2238
2239
2240 static void ab8500_charger_usb_link_attach_work(struct work_struct *work)
2241 {
2242 struct ab8500_charger *di =
2243 container_of(work, struct ab8500_charger, attach_work.work);
2244 int ret;
2245
2246
2247 if (!di->usb.charger_online) {
2248 ret = ab8500_charger_set_vbus_in_curr(di,
2249 di->max_usb_in_curr.usb_type_max_ua);
2250 if (ret)
2251 return;
2252 }
2253
2254 ab8500_charger_set_usb_connected(di, true);
2255 ab8500_power_supply_changed(di, di->usb_chg.psy);
2256 }
2257
2258
2259
2260
2261
2262
2263
2264 static void ab8500_charger_usb_link_status_work(struct work_struct *work)
2265 {
2266 int detected_chargers;
2267 int ret;
2268 u8 val;
2269 u8 link_status;
2270
2271 struct ab8500_charger *di = container_of(work,
2272 struct ab8500_charger, usb_link_status_work);
2273
2274
2275
2276
2277
2278
2279 detected_chargers = ab8500_charger_detect_chargers(di, false);
2280 if (detected_chargers < 0)
2281 return;
2282
2283
2284
2285
2286
2287
2288
2289 if (is_ab8500(di->parent))
2290 ret = abx500_get_register_interruptible(di->dev, AB8500_USB,
2291 AB8500_USB_LINE_STAT_REG, &val);
2292 else
2293 ret = abx500_get_register_interruptible(di->dev, AB8500_USB,
2294 AB8500_USB_LINK1_STAT_REG, &val);
2295
2296 if (ret >= 0)
2297 dev_dbg(di->dev, "UsbLineStatus register = 0x%02x\n", val);
2298 else
2299 dev_dbg(di->dev, "Error reading USB link status\n");
2300
2301 if (is_ab8500(di->parent))
2302 link_status = AB8500_USB_LINK_STATUS;
2303 else
2304 link_status = AB8505_USB_LINK_STATUS;
2305
2306 if (detected_chargers & USB_PW_CONN) {
2307 if (((val & link_status) >> USB_LINK_STATUS_SHIFT) ==
2308 USB_STAT_NOT_VALID_LINK &&
2309 di->invalid_charger_detect_state == 0) {
2310 dev_dbg(di->dev,
2311 "Invalid charger detected, state= 0\n");
2312
2313 abx500_mask_and_set_register_interruptible(di->dev,
2314 AB8500_CHARGER, AB8500_USBCH_CTRL1_REG,
2315 USB_CH_ENA, USB_CH_ENA);
2316
2317 abx500_mask_and_set_register_interruptible(di->dev,
2318 AB8500_USB, AB8500_USB_LINE_CTRL2_REG,
2319 USB_CH_DET, USB_CH_DET);
2320 di->invalid_charger_detect_state = 1;
2321
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
2329 abx500_mask_and_set_register_interruptible(di->dev,
2330 AB8500_USB, AB8500_USB_LINE_CTRL2_REG,
2331 USB_CH_DET, 0x00);
2332
2333 if (is_ab8500(di->parent))
2334 ret = abx500_get_register_interruptible(di->dev,
2335 AB8500_USB, AB8500_USB_LINE_STAT_REG,
2336 &val);
2337 else
2338 ret = abx500_get_register_interruptible(di->dev,
2339 AB8500_USB, AB8500_USB_LINK1_STAT_REG,
2340 &val);
2341
2342 dev_dbg(di->dev, "USB link status= 0x%02x\n",
2343 (val & link_status) >> USB_LINK_STATUS_SHIFT);
2344 di->invalid_charger_detect_state = 2;
2345 }
2346 } else {
2347 di->invalid_charger_detect_state = 0;
2348 }
2349
2350 if (!(detected_chargers & USB_PW_CONN)) {
2351 di->vbus_detected = false;
2352 ab8500_charger_set_usb_connected(di, false);
2353 ab8500_power_supply_changed(di, di->usb_chg.psy);
2354 return;
2355 }
2356
2357 dev_dbg(di->dev,"%s di->vbus_detected = true\n",__func__);
2358 di->vbus_detected = true;
2359 ret = ab8500_charger_read_usb_type(di);
2360 if (ret) {
2361 if (ret == -ENXIO) {
2362
2363 ab8500_charger_set_usb_connected(di, false);
2364 ab8500_power_supply_changed(di, di->usb_chg.psy);
2365 }
2366 return;
2367 }
2368
2369 if (di->usb_device_is_unrecognised) {
2370 dev_dbg(di->dev,
2371 "Potential Legacy Charger device. "
2372 "Delay work for %d msec for USB enum "
2373 "to finish",
2374 WAIT_ACA_RID_ENUMERATION);
2375 queue_delayed_work(di->charger_wq,
2376 &di->attach_work,
2377 msecs_to_jiffies(WAIT_ACA_RID_ENUMERATION));
2378 } else if (di->is_aca_rid == 1) {
2379
2380 di->is_aca_rid++;
2381 dev_dbg(di->dev,
2382 "%s Wait %d msec for USB enum to finish",
2383 __func__, WAIT_ACA_RID_ENUMERATION);
2384 queue_delayed_work(di->charger_wq,
2385 &di->attach_work,
2386 msecs_to_jiffies(WAIT_ACA_RID_ENUMERATION));
2387 } else {
2388 queue_delayed_work(di->charger_wq,
2389 &di->attach_work,
2390 0);
2391 }
2392 }
2393
2394 static void ab8500_charger_usb_state_changed_work(struct work_struct *work)
2395 {
2396 int ret;
2397 unsigned long flags;
2398
2399 struct ab8500_charger *di = container_of(work,
2400 struct ab8500_charger, usb_state_changed_work.work);
2401
2402 if (!di->vbus_detected) {
2403 dev_dbg(di->dev,
2404 "%s !di->vbus_detected\n",
2405 __func__);
2406 return;
2407 }
2408
2409 spin_lock_irqsave(&di->usb_state.usb_lock, flags);
2410 di->usb_state.state = di->usb_state.state_tmp;
2411 di->usb_state.usb_current_ua = di->usb_state.usb_current_tmp_ua;
2412 spin_unlock_irqrestore(&di->usb_state.usb_lock, flags);
2413
2414 dev_dbg(di->dev, "%s USB state: 0x%02x uA: %d\n",
2415 __func__, di->usb_state.state, di->usb_state.usb_current_ua);
2416
2417 switch (di->usb_state.state) {
2418 case AB8500_BM_USB_STATE_RESET_HS:
2419 case AB8500_BM_USB_STATE_RESET_FS:
2420 case AB8500_BM_USB_STATE_SUSPEND:
2421 case AB8500_BM_USB_STATE_MAX:
2422 ab8500_charger_set_usb_connected(di, false);
2423 ab8500_power_supply_changed(di, di->usb_chg.psy);
2424 break;
2425
2426 case AB8500_BM_USB_STATE_RESUME:
2427
2428
2429
2430
2431 msleep(1000);
2432 fallthrough;
2433 case AB8500_BM_USB_STATE_CONFIGURED:
2434
2435
2436
2437
2438 if (!ab8500_charger_get_usb_cur(di)) {
2439
2440 ret = ab8500_charger_set_vbus_in_curr(di,
2441 di->max_usb_in_curr.usb_type_max_ua);
2442 if (ret)
2443 return;
2444
2445 ab8500_charger_set_usb_connected(di, true);
2446 ab8500_power_supply_changed(di, di->usb_chg.psy);
2447 }
2448 break;
2449
2450 default:
2451 break;
2452 }
2453 }
2454
2455
2456
2457
2458
2459
2460
2461 static void ab8500_charger_check_usbchargernotok_work(struct work_struct *work)
2462 {
2463 int ret;
2464 u8 reg_value;
2465 bool prev_status;
2466
2467 struct ab8500_charger *di = container_of(work,
2468 struct ab8500_charger, check_usbchgnotok_work.work);
2469
2470
2471 ret = abx500_get_register_interruptible(di->dev,
2472 AB8500_CHARGER, AB8500_CH_USBCH_STAT2_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
2482 queue_delayed_work(di->charger_wq,
2483 &di->check_usbchgnotok_work, HZ);
2484 } else {
2485 di->flags.usbchargernotok = false;
2486 di->flags.vbus_collapse = false;
2487 }
2488
2489 if (prev_status != di->flags.usbchargernotok)
2490 ab8500_power_supply_changed(di, di->usb_chg.psy);
2491 }
2492
2493
2494
2495
2496
2497
2498
2499 static void ab8500_charger_check_main_thermal_prot_work(
2500 struct work_struct *work)
2501 {
2502 int ret;
2503 u8 reg_value;
2504
2505 struct ab8500_charger *di = container_of(work,
2506 struct ab8500_charger, check_main_thermal_prot_work);
2507
2508
2509 ret = abx500_get_register_interruptible(di->dev,
2510 AB8500_CHARGER, AB8500_CH_STATUS2_REG, ®_value);
2511 if (ret < 0) {
2512 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2513 return;
2514 }
2515 if (reg_value & MAIN_CH_TH_PROT)
2516 di->flags.main_thermal_prot = true;
2517 else
2518 di->flags.main_thermal_prot = false;
2519
2520 ab8500_power_supply_changed(di, di->ac_chg.psy);
2521 }
2522
2523
2524
2525
2526
2527
2528
2529 static void ab8500_charger_check_usb_thermal_prot_work(
2530 struct work_struct *work)
2531 {
2532 int ret;
2533 u8 reg_value;
2534
2535 struct ab8500_charger *di = container_of(work,
2536 struct ab8500_charger, check_usb_thermal_prot_work);
2537
2538
2539 ret = abx500_get_register_interruptible(di->dev,
2540 AB8500_CHARGER, AB8500_CH_USBCH_STAT2_REG, ®_value);
2541 if (ret < 0) {
2542 dev_err(di->dev, "%s ab8500 read failed\n", __func__);
2543 return;
2544 }
2545 if (reg_value & USB_CH_TH_PROT)
2546 di->flags.usb_thermal_prot = true;
2547 else
2548 di->flags.usb_thermal_prot = false;
2549
2550 ab8500_power_supply_changed(di, di->usb_chg.psy);
2551 }
2552
2553
2554
2555
2556
2557
2558
2559
2560 static irqreturn_t ab8500_charger_mainchunplugdet_handler(int irq, void *_di)
2561 {
2562 struct ab8500_charger *di = _di;
2563
2564 dev_dbg(di->dev, "Main charger unplugged\n");
2565 queue_work(di->charger_wq, &di->ac_work);
2566
2567 cancel_delayed_work_sync(&di->ac_charger_attached_work);
2568 mutex_lock(&di->charger_attached_mutex);
2569 mutex_unlock(&di->charger_attached_mutex);
2570
2571 return IRQ_HANDLED;
2572 }
2573
2574
2575
2576
2577
2578
2579
2580
2581 static irqreturn_t ab8500_charger_mainchplugdet_handler(int irq, void *_di)
2582 {
2583 struct ab8500_charger *di = _di;
2584
2585 dev_dbg(di->dev, "Main charger plugged\n");
2586 queue_work(di->charger_wq, &di->ac_work);
2587
2588 mutex_lock(&di->charger_attached_mutex);
2589 mutex_unlock(&di->charger_attached_mutex);
2590
2591 if (is_ab8500(di->parent))
2592 queue_delayed_work(di->charger_wq,
2593 &di->ac_charger_attached_work,
2594 HZ);
2595 return IRQ_HANDLED;
2596 }
2597
2598
2599
2600
2601
2602
2603
2604
2605 static irqreturn_t ab8500_charger_mainextchnotok_handler(int irq, void *_di)
2606 {
2607 struct ab8500_charger *di = _di;
2608
2609 dev_dbg(di->dev, "Main charger not ok\n");
2610 di->flags.mainextchnotok = true;
2611 ab8500_power_supply_changed(di, di->ac_chg.psy);
2612
2613
2614 queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0);
2615
2616 return IRQ_HANDLED;
2617 }
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627 static irqreturn_t ab8500_charger_mainchthprotr_handler(int irq, void *_di)
2628 {
2629 struct ab8500_charger *di = _di;
2630
2631 dev_dbg(di->dev,
2632 "Die temp above Main charger thermal protection threshold\n");
2633 queue_work(di->charger_wq, &di->check_main_thermal_prot_work);
2634
2635 return IRQ_HANDLED;
2636 }
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646 static irqreturn_t ab8500_charger_mainchthprotf_handler(int irq, void *_di)
2647 {
2648 struct ab8500_charger *di = _di;
2649
2650 dev_dbg(di->dev,
2651 "Die temp ok for Main charger thermal protection threshold\n");
2652 queue_work(di->charger_wq, &di->check_main_thermal_prot_work);
2653
2654 return IRQ_HANDLED;
2655 }
2656
2657 static void ab8500_charger_vbus_drop_end_work(struct work_struct *work)
2658 {
2659 struct ab8500_charger *di = container_of(work,
2660 struct ab8500_charger, vbus_drop_end_work.work);
2661 int ret, curr_ua;
2662 u8 reg_value;
2663
2664 di->flags.vbus_drop_end = false;
2665
2666
2667 abx500_set_register_interruptible(di->dev,
2668 AB8500_CHARGER, AB8500_CHARGER_CTRL, 0x01);
2669
2670 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
2671 AB8500_CH_USBCH_STAT2_REG, ®_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
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
2689
2690
2691 di->max_usb_in_curr.set_max_ua =
2692 di->max_usb_in_curr.calculated_max_ua;
2693 dev_dbg(di->dev,
2694 "VBUS input current limited to %d uA\n",
2695 di->max_usb_in_curr.set_max_ua);
2696 }
2697
2698 if (di->usb.charger_connected)
2699 ab8500_charger_set_vbus_in_curr(di,
2700 di->max_usb_in_curr.usb_type_max_ua);
2701 }
2702
2703
2704
2705
2706
2707
2708
2709
2710 static irqreturn_t ab8500_charger_vbusdetf_handler(int irq, void *_di)
2711 {
2712 struct ab8500_charger *di = _di;
2713
2714 di->vbus_detected = false;
2715 dev_dbg(di->dev, "VBUS falling detected\n");
2716 queue_work(di->charger_wq, &di->detect_usb_type_work);
2717
2718 return IRQ_HANDLED;
2719 }
2720
2721
2722
2723
2724
2725
2726
2727
2728 static irqreturn_t ab8500_charger_vbusdetr_handler(int irq, void *_di)
2729 {
2730 struct ab8500_charger *di = _di;
2731
2732 di->vbus_detected = true;
2733 dev_dbg(di->dev, "VBUS rising detected\n");
2734
2735 queue_work(di->charger_wq, &di->detect_usb_type_work);
2736
2737 return IRQ_HANDLED;
2738 }
2739
2740
2741
2742
2743
2744
2745
2746
2747 static irqreturn_t ab8500_charger_usblinkstatus_handler(int irq, void *_di)
2748 {
2749 struct ab8500_charger *di = _di;
2750
2751 dev_dbg(di->dev, "USB link status changed\n");
2752
2753 queue_work(di->charger_wq, &di->usb_link_status_work);
2754
2755 return IRQ_HANDLED;
2756 }
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766 static irqreturn_t ab8500_charger_usbchthprotr_handler(int irq, void *_di)
2767 {
2768 struct ab8500_charger *di = _di;
2769
2770 dev_dbg(di->dev,
2771 "Die temp above USB charger thermal protection threshold\n");
2772 queue_work(di->charger_wq, &di->check_usb_thermal_prot_work);
2773
2774 return IRQ_HANDLED;
2775 }
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785 static irqreturn_t ab8500_charger_usbchthprotf_handler(int irq, void *_di)
2786 {
2787 struct ab8500_charger *di = _di;
2788
2789 dev_dbg(di->dev,
2790 "Die temp ok for USB charger thermal protection threshold\n");
2791 queue_work(di->charger_wq, &di->check_usb_thermal_prot_work);
2792
2793 return IRQ_HANDLED;
2794 }
2795
2796
2797
2798
2799
2800
2801
2802
2803 static irqreturn_t ab8500_charger_usbchargernotokr_handler(int irq, void *_di)
2804 {
2805 struct ab8500_charger *di = _di;
2806
2807 dev_dbg(di->dev, "Not allowed USB charger detected\n");
2808 queue_delayed_work(di->charger_wq, &di->check_usbchgnotok_work, 0);
2809
2810 return IRQ_HANDLED;
2811 }
2812
2813
2814
2815
2816
2817
2818
2819
2820 static irqreturn_t ab8500_charger_chwdexp_handler(int irq, void *_di)
2821 {
2822 struct ab8500_charger *di = _di;
2823
2824 dev_dbg(di->dev, "Charger watchdog expired\n");
2825
2826
2827
2828
2829
2830 if (di->ac.charger_online) {
2831 di->ac.wd_expired = true;
2832 ab8500_power_supply_changed(di, di->ac_chg.psy);
2833 }
2834 if (di->usb.charger_online) {
2835 di->usb.wd_expired = true;
2836 ab8500_power_supply_changed(di, di->usb_chg.psy);
2837 }
2838
2839 return IRQ_HANDLED;
2840 }
2841
2842
2843
2844
2845
2846
2847
2848
2849 static irqreturn_t ab8500_charger_vbuschdropend_handler(int irq, void *_di)
2850 {
2851 struct ab8500_charger *di = _di;
2852
2853 dev_dbg(di->dev, "VBUS charger drop ended\n");
2854 di->flags.vbus_drop_end = true;
2855
2856
2857
2858
2859
2860 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work,
2861 round_jiffies(VBUS_IN_CURR_LIM_RETRY_SET_TIME * HZ));
2862
2863 return IRQ_HANDLED;
2864 }
2865
2866
2867
2868
2869
2870
2871
2872
2873 static irqreturn_t ab8500_charger_vbusovv_handler(int irq, void *_di)
2874 {
2875 struct ab8500_charger *di = _di;
2876
2877 dev_dbg(di->dev, "VBUS overvoltage detected\n");
2878 di->flags.vbus_ovv = true;
2879 ab8500_power_supply_changed(di, di->usb_chg.psy);
2880
2881
2882 queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0);
2883
2884 return IRQ_HANDLED;
2885 }
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901 static int ab8500_charger_ac_get_property(struct power_supply *psy,
2902 enum power_supply_property psp,
2903 union power_supply_propval *val)
2904 {
2905 struct ab8500_charger *di;
2906 int ret;
2907
2908 di = to_ab8500_charger_ac_device_info(psy_to_ux500_charger(psy));
2909
2910 switch (psp) {
2911 case POWER_SUPPLY_PROP_HEALTH:
2912 if (di->flags.mainextchnotok)
2913 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
2914 else if (di->ac.wd_expired || di->usb.wd_expired)
2915 val->intval = POWER_SUPPLY_HEALTH_DEAD;
2916 else if (di->flags.main_thermal_prot)
2917 val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
2918 else
2919 val->intval = POWER_SUPPLY_HEALTH_GOOD;
2920 break;
2921 case POWER_SUPPLY_PROP_ONLINE:
2922 val->intval = di->ac.charger_online;
2923 break;
2924 case POWER_SUPPLY_PROP_PRESENT:
2925 val->intval = di->ac.charger_connected;
2926 break;
2927 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
2928 ret = ab8500_charger_get_ac_voltage(di);
2929 if (ret >= 0)
2930 di->ac.charger_voltage_uv = ret;
2931
2932 val->intval = di->ac.charger_voltage_uv;
2933 break;
2934 case POWER_SUPPLY_PROP_VOLTAGE_AVG:
2935
2936
2937
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
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968 static int ab8500_charger_usb_get_property(struct power_supply *psy,
2969 enum power_supply_property psp,
2970 union power_supply_propval *val)
2971 {
2972 struct ab8500_charger *di;
2973 int ret;
2974
2975 di = to_ab8500_charger_usb_device_info(psy_to_ux500_charger(psy));
2976
2977 switch (psp) {
2978 case POWER_SUPPLY_PROP_HEALTH:
2979 if (di->flags.usbchargernotok)
2980 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
2981 else if (di->ac.wd_expired || di->usb.wd_expired)
2982 val->intval = POWER_SUPPLY_HEALTH_DEAD;
2983 else if (di->flags.usb_thermal_prot)
2984 val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
2985 else if (di->flags.vbus_ovv)
2986 val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
2987 else
2988 val->intval = POWER_SUPPLY_HEALTH_GOOD;
2989 break;
2990 case POWER_SUPPLY_PROP_ONLINE:
2991 val->intval = di->usb.charger_online;
2992 break;
2993 case POWER_SUPPLY_PROP_PRESENT:
2994 val->intval = di->usb.charger_connected;
2995 break;
2996 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
2997 ret = ab8500_charger_get_vbus_voltage(di);
2998 if (ret >= 0)
2999 di->usb.charger_voltage_uv = ret;
3000 val->intval = di->usb.charger_voltage_uv;
3001 break;
3002 case POWER_SUPPLY_PROP_VOLTAGE_AVG:
3003
3004
3005
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
3019
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
3034
3035
3036
3037
3038
3039 static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
3040 {
3041 int ret = 0;
3042
3043
3044 if (!is_ab8500_1p1_or_earlier(di->parent)) {
3045 ret = abx500_set_register_interruptible(di->dev,
3046 AB8500_CHARGER,
3047 AB8500_CH_VOLT_LVL_MAX_REG, CH_VOL_LVL_4P6);
3048 if (ret) {
3049 dev_err(di->dev,
3050 "failed to set CH_VOLT_LVL_MAX_REG\n");
3051 goto out;
3052 }
3053
3054 ret = abx500_set_register_interruptible(di->dev,
3055 AB8500_CHARGER, AB8500_CH_OPT_CRNTLVL_MAX_REG,
3056 CH_OP_CUR_LVL_1P6);
3057 if (ret) {
3058 dev_err(di->dev,
3059 "failed to set CH_OPT_CRNTLVL_MAX_REG\n");
3060 goto out;
3061 }
3062 }
3063
3064 if (is_ab8505_2p0(di->parent))
3065 ret = abx500_mask_and_set_register_interruptible(di->dev,
3066 AB8500_CHARGER,
3067 AB8500_USBCH_CTRL2_REG,
3068 VBUS_AUTO_IN_CURR_LIM_ENA,
3069 VBUS_AUTO_IN_CURR_LIM_ENA);
3070 else
3071
3072
3073
3074 ret = abx500_set_register_interruptible(di->dev,
3075 AB8500_CHARGER,
3076 AB8500_USBCH_CTRL2_REG,
3077 VBUS_OVV_SELECT_6P3V | VBUS_AUTO_IN_CURR_LIM_ENA);
3078 if (ret) {
3079 dev_err(di->dev,
3080 "failed to set automatic current limitation\n");
3081 goto out;
3082 }
3083
3084
3085 ret = abx500_set_register_interruptible(di->dev,
3086 AB8500_OTP_EMUL, AB8500_OTP_CONF_15, OTP_ENABLE_WD);
3087 if (ret) {
3088 dev_err(di->dev, "failed to enable main WD in OTP\n");
3089 goto out;
3090 }
3091
3092
3093 ret = abx500_set_register_interruptible(di->dev,
3094 AB8500_SYS_CTRL2_BLOCK,
3095 AB8500_MAIN_WDOG_CTRL_REG, MAIN_WDOG_ENA);
3096 if (ret) {
3097 dev_err(di->dev, "failed to enable main watchdog\n");
3098 goto out;
3099 }
3100
3101
3102
3103
3104
3105
3106
3107 udelay(63);
3108
3109
3110 ret = abx500_set_register_interruptible(di->dev,
3111 AB8500_SYS_CTRL2_BLOCK,
3112 AB8500_MAIN_WDOG_CTRL_REG,
3113 (MAIN_WDOG_ENA | MAIN_WDOG_KICK));
3114 if (ret) {
3115 dev_err(di->dev, "failed to kick main watchdog\n");
3116 goto out;
3117 }
3118
3119
3120 ret = abx500_set_register_interruptible(di->dev,
3121 AB8500_SYS_CTRL2_BLOCK,
3122 AB8500_MAIN_WDOG_CTRL_REG, MAIN_WDOG_DIS);
3123 if (ret) {
3124 dev_err(di->dev, "failed to disable main watchdog\n");
3125 goto out;
3126 }
3127
3128
3129 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
3130 AB8500_CH_WD_TIMER_REG, WD_TIMER);
3131 if (ret) {
3132 dev_err(di->dev, "failed to set charger watchdog timeout\n");
3133 goto out;
3134 }
3135
3136 ret = ab8500_charger_led_en(di, false);
3137 if (ret < 0) {
3138 dev_err(di->dev, "failed to disable LED\n");
3139 goto out;
3140 }
3141
3142 ret = abx500_set_register_interruptible(di->dev,
3143 AB8500_RTC,
3144 AB8500_RTC_BACKUP_CHG_REG,
3145 (di->bm->bkup_bat_v & 0x3) | di->bm->bkup_bat_i);
3146 if (ret) {
3147 dev_err(di->dev, "failed to setup backup battery charging\n");
3148 goto out;
3149 }
3150
3151
3152 ret = abx500_mask_and_set_register_interruptible(di->dev,
3153 AB8500_RTC, AB8500_RTC_CTRL_REG,
3154 RTC_BUP_CH_ENA, RTC_BUP_CH_ENA);
3155 if (ret < 0) {
3156 dev_err(di->dev, "%s mask and set failed\n", __func__);
3157 goto out;
3158 }
3159
3160 out:
3161 return ret;
3162 }
3163
3164
3165
3166
3167 static struct ab8500_charger_interrupts ab8500_charger_irq[] = {
3168 {"MAIN_CH_UNPLUG_DET", ab8500_charger_mainchunplugdet_handler},
3169 {"MAIN_CHARGE_PLUG_DET", ab8500_charger_mainchplugdet_handler},
3170 {"MAIN_EXT_CH_NOT_OK", ab8500_charger_mainextchnotok_handler},
3171 {"MAIN_CH_TH_PROT_R", ab8500_charger_mainchthprotr_handler},
3172 {"MAIN_CH_TH_PROT_F", ab8500_charger_mainchthprotf_handler},
3173 {"VBUS_DET_F", ab8500_charger_vbusdetf_handler},
3174 {"VBUS_DET_R", ab8500_charger_vbusdetr_handler},
3175 {"USB_LINK_STATUS", ab8500_charger_usblinkstatus_handler},
3176 {"USB_CH_TH_PROT_R", ab8500_charger_usbchthprotr_handler},
3177 {"USB_CH_TH_PROT_F", ab8500_charger_usbchthprotf_handler},
3178 {"USB_CHARGER_NOT_OKR", ab8500_charger_usbchargernotokr_handler},
3179 {"VBUS_OVV", ab8500_charger_vbusovv_handler},
3180 {"CH_WD_EXP", ab8500_charger_chwdexp_handler},
3181 {"VBUS_CH_DROP_END", ab8500_charger_vbuschdropend_handler},
3182 };
3183
3184 static int ab8500_charger_usb_notifier_call(struct notifier_block *nb,
3185 unsigned long event, void *power)
3186 {
3187 struct ab8500_charger *di =
3188 container_of(nb, struct ab8500_charger, nb);
3189 enum ab8500_usb_state bm_usb_state;
3190
3191
3192
3193
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
3203
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)
3212 bm_usb_state = AB8500_BM_USB_STATE_CONFIGURED;
3213 else
3214 bm_usb_state = AB8500_BM_USB_STATE_RESET_FS;
3215
3216 dev_dbg(di->dev, "%s usb_state: 0x%02x mA: %d\n",
3217 __func__, bm_usb_state, mA);
3218
3219 spin_lock(&di->usb_state.usb_lock);
3220 di->usb_state.state_tmp = bm_usb_state;
3221
3222 di->usb_state.usb_current_tmp_ua = mA * 1000;
3223 spin_unlock(&di->usb_state.usb_lock);
3224
3225
3226
3227
3228
3229 queue_delayed_work(di->charger_wq, &di->usb_state_changed_work, HZ/2);
3230
3231 return NOTIFY_OK;
3232 }
3233
3234 static int __maybe_unused ab8500_charger_resume(struct device *dev)
3235 {
3236 int ret;
3237 struct ab8500_charger *di = dev_get_drvdata(dev);
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248 if (di->ac_conn && is_ab8500_1p1_or_earlier(di->parent)) {
3249 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
3250 AB8500_CHARG_WD_CTRL, CHARG_WD_KICK);
3251 if (ret)
3252 dev_err(di->dev, "Failed to kick WD!\n");
3253
3254
3255 queue_delayed_work(di->charger_wq, &di->kick_wd_work,
3256 round_jiffies(WD_KICK_INTERVAL));
3257 }
3258
3259
3260 if (di->flags.mainextchnotok || di->flags.vbus_ovv) {
3261 queue_delayed_work(di->charger_wq,
3262 &di->check_hw_failure_work, 0);
3263 }
3264
3265 if (di->flags.vbus_drop_end)
3266 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, 0);
3267
3268 return 0;
3269 }
3270
3271 static int __maybe_unused ab8500_charger_suspend(struct device *dev)
3272 {
3273 struct ab8500_charger *di = dev_get_drvdata(dev);
3274
3275
3276 cancel_delayed_work(&di->check_hw_failure_work);
3277 cancel_delayed_work(&di->vbus_drop_end_work);
3278
3279 flush_delayed_work(&di->attach_work);
3280 flush_delayed_work(&di->usb_charger_attached_work);
3281 flush_delayed_work(&di->ac_charger_attached_work);
3282 flush_delayed_work(&di->check_usbchgnotok_work);
3283 flush_delayed_work(&di->check_vbat_work);
3284 flush_delayed_work(&di->kick_wd_work);
3285
3286 flush_work(&di->usb_link_status_work);
3287 flush_work(&di->ac_work);
3288 flush_work(&di->detect_usb_type_work);
3289
3290 if (atomic_read(&di->current_stepping_sessions))
3291 return -EAGAIN;
3292
3293 return 0;
3294 }
3295
3296 static char *supply_interface[] = {
3297 "ab8500_chargalg",
3298 "ab8500_fg",
3299 "ab8500_btemp",
3300 };
3301
3302 static const struct power_supply_desc ab8500_ac_chg_desc = {
3303 .name = "ab8500_ac",
3304 .type = POWER_SUPPLY_TYPE_MAINS,
3305 .properties = ab8500_charger_ac_props,
3306 .num_properties = ARRAY_SIZE(ab8500_charger_ac_props),
3307 .get_property = ab8500_charger_ac_get_property,
3308 };
3309
3310 static const struct power_supply_desc ab8500_usb_chg_desc = {
3311 .name = "ab8500_usb",
3312 .type = POWER_SUPPLY_TYPE_USB,
3313 .properties = ab8500_charger_usb_props,
3314 .num_properties = ARRAY_SIZE(ab8500_charger_usb_props),
3315 .get_property = ab8500_charger_usb_get_property,
3316 };
3317
3318 static int ab8500_charger_bind(struct device *dev)
3319 {
3320 struct ab8500_charger *di = dev_get_drvdata(dev);
3321 int ch_stat;
3322 int ret;
3323
3324
3325 di->charger_wq = alloc_ordered_workqueue("ab8500_charger_wq",
3326 WQ_MEM_RECLAIM);
3327 if (di->charger_wq == NULL) {
3328 dev_err(dev, "failed to create work queue\n");
3329 return -ENOMEM;
3330 }
3331
3332 ch_stat = ab8500_charger_detect_chargers(di, false);
3333
3334 if (ch_stat & AC_PW_CONN) {
3335 if (is_ab8500(di->parent))
3336 queue_delayed_work(di->charger_wq,
3337 &di->ac_charger_attached_work,
3338 HZ);
3339 }
3340 if (ch_stat & USB_PW_CONN) {
3341 if (is_ab8500(di->parent))
3342 queue_delayed_work(di->charger_wq,
3343 &di->usb_charger_attached_work,
3344 HZ);
3345 di->vbus_detected = true;
3346 di->vbus_detected_start = true;
3347 queue_work(di->charger_wq,
3348 &di->detect_usb_type_work);
3349 }
3350
3351 ret = component_bind_all(dev, di);
3352 if (ret) {
3353 dev_err(dev, "can't bind component devices\n");
3354 destroy_workqueue(di->charger_wq);
3355 return ret;
3356 }
3357
3358 return 0;
3359 }
3360
3361 static void ab8500_charger_unbind(struct device *dev)
3362 {
3363 struct ab8500_charger *di = dev_get_drvdata(dev);
3364 int ret;
3365
3366
3367 ab8500_charger_ac_en(&di->ac_chg, false, 0, 0);
3368
3369
3370 ab8500_charger_usb_en(&di->usb_chg, false, 0, 0);
3371
3372
3373 ret = abx500_mask_and_set_register_interruptible(di->dev,
3374 AB8500_RTC, AB8500_RTC_CTRL_REG, RTC_BUP_CH_ENA, 0);
3375 if (ret < 0)
3376 dev_err(di->dev, "%s mask and set failed\n", __func__);
3377
3378
3379 destroy_workqueue(di->charger_wq);
3380
3381
3382 component_unbind_all(dev, di);
3383 }
3384
3385 static const struct component_master_ops ab8500_charger_comp_ops = {
3386 .bind = ab8500_charger_bind,
3387 .unbind = ab8500_charger_unbind,
3388 };
3389
3390 static struct platform_driver *const ab8500_charger_component_drivers[] = {
3391 &ab8500_fg_driver,
3392 &ab8500_btemp_driver,
3393 &ab8500_chargalg_driver,
3394 };
3395
3396 static int ab8500_charger_probe(struct platform_device *pdev)
3397 {
3398 struct device *dev = &pdev->dev;
3399 struct device_node *np = dev->of_node;
3400 struct component_match *match = NULL;
3401 struct power_supply_config ac_psy_cfg = {}, usb_psy_cfg = {};
3402 struct ab8500_charger *di;
3403 int charger_status;
3404 int i, irq;
3405 int ret;
3406
3407 di = devm_kzalloc(dev, sizeof(*di), GFP_KERNEL);
3408 if (!di)
3409 return -ENOMEM;
3410
3411 di->bm = &ab8500_bm_data;
3412
3413 di->autopower_cfg = of_property_read_bool(np, "autopower_cfg");
3414
3415
3416 di->dev = dev;
3417 di->parent = dev_get_drvdata(pdev->dev.parent);
3418
3419
3420 if (!is_ab8505(di->parent)) {
3421 di->adc_main_charger_v = devm_iio_channel_get(dev, "main_charger_v");
3422 if (IS_ERR(di->adc_main_charger_v)) {
3423 ret = dev_err_probe(dev, PTR_ERR(di->adc_main_charger_v),
3424 "failed to get ADC main charger voltage\n");
3425 return ret;
3426 }
3427 di->adc_main_charger_c = devm_iio_channel_get(dev, "main_charger_c");
3428 if (IS_ERR(di->adc_main_charger_c)) {
3429 ret = dev_err_probe(dev, PTR_ERR(di->adc_main_charger_c),
3430 "failed to get ADC main charger current\n");
3431 return ret;
3432 }
3433 }
3434 di->adc_vbus_v = devm_iio_channel_get(dev, "vbus_v");
3435 if (IS_ERR(di->adc_vbus_v)) {
3436 ret = dev_err_probe(dev, PTR_ERR(di->adc_vbus_v),
3437 "failed to get ADC USB charger voltage\n");
3438 return ret;
3439 }
3440 di->adc_usb_charger_c = devm_iio_channel_get(dev, "usb_charger_c");
3441 if (IS_ERR(di->adc_usb_charger_c)) {
3442 ret = dev_err_probe(dev, PTR_ERR(di->adc_usb_charger_c),
3443 "failed to get ADC USB charger current\n");
3444 return ret;
3445 }
3446
3447
3448
3449
3450
3451
3452 di->regu = devm_regulator_get(dev, "vddadc");
3453 if (IS_ERR(di->regu)) {
3454 ret = PTR_ERR(di->regu);
3455 dev_err(dev, "failed to get vddadc regulator\n");
3456 return ret;
3457 }
3458
3459
3460 for (i = 0; i < ARRAY_SIZE(ab8500_charger_irq); i++) {
3461 irq = platform_get_irq_byname(pdev, ab8500_charger_irq[i].name);
3462 if (irq < 0)
3463 return irq;
3464
3465 ret = devm_request_threaded_irq(dev,
3466 irq, NULL, ab8500_charger_irq[i].isr,
3467 IRQF_SHARED | IRQF_NO_SUSPEND | IRQF_ONESHOT,
3468 ab8500_charger_irq[i].name, di);
3469
3470 if (ret != 0) {
3471 dev_err(dev, "failed to request %s IRQ %d: %d\n"
3472 , ab8500_charger_irq[i].name, irq, ret);
3473 return ret;
3474 }
3475 dev_dbg(dev, "Requested %s IRQ %d: %d\n",
3476 ab8500_charger_irq[i].name, irq, ret);
3477 }
3478
3479
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
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
3497
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
3509
3510
3511
3512
3513 if (!is_ab8505(di->parent))
3514 di->ac_chg.enabled = true;
3515
3516
3517
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
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
3544
3545
3546
3547
3548
3549
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
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
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
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
3588 if (di->ac_chg.enabled) {
3589 di->ac_chg.psy = devm_power_supply_register(dev,
3590 &ab8500_ac_chg_desc,
3591 &ac_psy_cfg);
3592 if (IS_ERR(di->ac_chg.psy)) {
3593 dev_err(dev, "failed to register AC charger\n");
3594 return PTR_ERR(di->ac_chg.psy);
3595 }
3596 }
3597
3598
3599 di->usb_chg.psy = devm_power_supply_register(dev,
3600 &ab8500_usb_chg_desc,
3601 &usb_psy_cfg);
3602 if (IS_ERR(di->usb_chg.psy)) {
3603 dev_err(dev, "failed to register USB charger\n");
3604 return PTR_ERR(di->usb_chg.psy);
3605 }
3606
3607
3608
3609
3610
3611 ret = ab8500_bm_of_probe(di->usb_chg.psy, di->bm);
3612 if (ret)
3613 return dev_err_probe(dev, ret,
3614 "failed to get battery information\n");
3615
3616
3617 charger_status = ab8500_charger_detect_chargers(di, true);
3618 if (charger_status & AC_PW_CONN) {
3619 di->ac.charger_connected = 1;
3620 di->ac_conn = true;
3621 ab8500_power_supply_changed(di, di->ac_chg.psy);
3622 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present");
3623 }
3624
3625 platform_set_drvdata(pdev, di);
3626
3627
3628 for (i = 0; i < ARRAY_SIZE(ab8500_charger_component_drivers); i++) {
3629 struct device_driver *drv = &ab8500_charger_component_drivers[i]->driver;
3630 struct device *p = NULL, *d;
3631
3632 while ((d = platform_find_device_by_driver(p, drv))) {
3633 put_device(p);
3634 component_match_add(dev, &match, component_compare_dev, d);
3635 p = d;
3636 }
3637 put_device(p);
3638 }
3639 if (!match) {
3640 dev_err(dev, "no matching components\n");
3641 ret = -ENODEV;
3642 goto remove_ab8500_bm;
3643 }
3644 if (IS_ERR(match)) {
3645 dev_err(dev, "could not create component match\n");
3646 ret = PTR_ERR(match);
3647 goto remove_ab8500_bm;
3648 }
3649
3650 di->usb_phy = usb_get_phy(USB_PHY_TYPE_USB2);
3651 if (IS_ERR_OR_NULL(di->usb_phy)) {
3652 dev_err(dev, "failed to get usb transceiver\n");
3653 ret = -EINVAL;
3654 goto remove_ab8500_bm;
3655 }
3656 di->nb.notifier_call = ab8500_charger_usb_notifier_call;
3657 ret = usb_register_notifier(di->usb_phy, &di->nb);
3658 if (ret) {
3659 dev_err(dev, "failed to register usb notifier\n");
3660 goto put_usb_phy;
3661 }
3662
3663 ret = component_master_add_with_match(&pdev->dev,
3664 &ab8500_charger_comp_ops,
3665 match);
3666 if (ret) {
3667 dev_err(dev, "failed to add component master\n");
3668 goto free_notifier;
3669 }
3670
3671 return 0;
3672
3673 free_notifier:
3674 usb_unregister_notifier(di->usb_phy, &di->nb);
3675 put_usb_phy:
3676 usb_put_phy(di->usb_phy);
3677 remove_ab8500_bm:
3678 ab8500_bm_of_remove(di->usb_chg.psy, di->bm);
3679 return ret;
3680 }
3681
3682 static int ab8500_charger_remove(struct platform_device *pdev)
3683 {
3684 struct ab8500_charger *di = platform_get_drvdata(pdev);
3685
3686 component_master_del(&pdev->dev, &ab8500_charger_comp_ops);
3687
3688 usb_unregister_notifier(di->usb_phy, &di->nb);
3689 ab8500_bm_of_remove(di->usb_chg.psy, di->bm);
3690 usb_put_phy(di->usb_phy);
3691
3692 return 0;
3693 }
3694
3695 static SIMPLE_DEV_PM_OPS(ab8500_charger_pm_ops, ab8500_charger_suspend, ab8500_charger_resume);
3696
3697 static const struct of_device_id ab8500_charger_match[] = {
3698 { .compatible = "stericsson,ab8500-charger", },
3699 { },
3700 };
3701 MODULE_DEVICE_TABLE(of, ab8500_charger_match);
3702
3703 static struct platform_driver ab8500_charger_driver = {
3704 .probe = ab8500_charger_probe,
3705 .remove = ab8500_charger_remove,
3706 .driver = {
3707 .name = "ab8500-charger",
3708 .of_match_table = ab8500_charger_match,
3709 .pm = &ab8500_charger_pm_ops,
3710 },
3711 };
3712
3713 static int __init ab8500_charger_init(void)
3714 {
3715 int ret;
3716
3717 ret = platform_register_drivers(ab8500_charger_component_drivers,
3718 ARRAY_SIZE(ab8500_charger_component_drivers));
3719 if (ret)
3720 return ret;
3721
3722 return platform_driver_register(&ab8500_charger_driver);
3723 }
3724
3725 static void __exit ab8500_charger_exit(void)
3726 {
3727 platform_unregister_drivers(ab8500_charger_component_drivers,
3728 ARRAY_SIZE(ab8500_charger_component_drivers));
3729 platform_driver_unregister(&ab8500_charger_driver);
3730 }
3731
3732 module_init(ab8500_charger_init);
3733 module_exit(ab8500_charger_exit);
3734
3735 MODULE_LICENSE("GPL v2");
3736 MODULE_AUTHOR("Johan Palsson, Karl Komierowski, Arun R Murthy");
3737 MODULE_ALIAS("platform:ab8500-charger");
3738 MODULE_DESCRIPTION("AB8500 charger management driver");