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