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