Back to home page

OSCL-LXR

 
 

    


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