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