mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
power: supply: ab8500: Drop AB8540/9540 support
The AB8540 was an evolved version of the AB8500, but it was never mass produced or put into products, only reference designs exist. The upstream support was never completed and it is unlikely that this will happen so drop the support for now to simplify maintenance of the AB8500. Cc: Loic Pallardy <loic.pallardy@st.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
This commit is contained in:
parent
8c2fac99f2
commit
4c4268dc97
8 changed files with 30 additions and 338 deletions
|
@ -430,13 +430,6 @@ static const struct abx500_maxim_parameters ab8500_maxi_params = {
|
|||
.charger_curr_step = 100,
|
||||
};
|
||||
|
||||
static const struct abx500_maxim_parameters abx540_maxi_params = {
|
||||
.ena_maxi = true,
|
||||
.chg_curr = 3000,
|
||||
.wait_cycles = 10,
|
||||
.charger_curr_step = 200,
|
||||
};
|
||||
|
||||
static const struct abx500_bm_charger_parameters chg = {
|
||||
.usb_volt_max = 5500,
|
||||
.usb_curr_max = 1500,
|
||||
|
@ -453,17 +446,6 @@ static int ab8500_charge_output_curr_map[] = {
|
|||
900, 1000, 1100, 1200, 1300, 1400, 1500, 1500,
|
||||
};
|
||||
|
||||
static int ab8540_charge_output_curr_map[] = {
|
||||
0, 0, 0, 75, 100, 125, 150, 175,
|
||||
200, 225, 250, 275, 300, 325, 350, 375,
|
||||
400, 425, 450, 475, 500, 525, 550, 575,
|
||||
600, 625, 650, 675, 700, 725, 750, 775,
|
||||
800, 825, 850, 875, 900, 925, 950, 975,
|
||||
1000, 1025, 1050, 1075, 1100, 1125, 1150, 1175,
|
||||
1200, 1225, 1250, 1275, 1300, 1325, 1350, 1375,
|
||||
1400, 1425, 1450, 1500, 1600, 1700, 1900, 2000,
|
||||
};
|
||||
|
||||
/*
|
||||
* This array maps the raw hex value to charger input current used by the
|
||||
* AB8500 values
|
||||
|
@ -473,17 +455,6 @@ static int ab8500_charge_input_curr_map[] = {
|
|||
700, 800, 900, 1000, 1100, 1300, 1400, 1500,
|
||||
};
|
||||
|
||||
static int ab8540_charge_input_curr_map[] = {
|
||||
25, 50, 75, 100, 125, 150, 175, 200,
|
||||
225, 250, 275, 300, 325, 350, 375, 400,
|
||||
425, 450, 475, 500, 525, 550, 575, 600,
|
||||
625, 650, 675, 700, 725, 750, 775, 800,
|
||||
825, 850, 875, 900, 925, 950, 975, 1000,
|
||||
1025, 1050, 1075, 1100, 1125, 1150, 1175, 1200,
|
||||
1225, 1250, 1275, 1300, 1325, 1350, 1375, 1400,
|
||||
1425, 1450, 1475, 1500, 1500, 1500, 1500, 1500,
|
||||
};
|
||||
|
||||
struct abx500_bm_data ab8500_bm_data = {
|
||||
.temp_under = 3,
|
||||
.temp_low = 8,
|
||||
|
@ -518,40 +489,6 @@ struct abx500_bm_data ab8500_bm_data = {
|
|||
.n_chg_in_curr = ARRAY_SIZE(ab8500_charge_input_curr_map),
|
||||
};
|
||||
|
||||
struct abx500_bm_data ab8540_bm_data = {
|
||||
.temp_under = 3,
|
||||
.temp_low = 8,
|
||||
.temp_high = 43,
|
||||
.temp_over = 48,
|
||||
.main_safety_tmr_h = 4,
|
||||
.temp_interval_chg = 20,
|
||||
.temp_interval_nochg = 120,
|
||||
.usb_safety_tmr_h = 4,
|
||||
.bkup_bat_v = BUP_VCH_SEL_2P6V,
|
||||
.bkup_bat_i = BUP_ICH_SEL_150UA,
|
||||
.no_maintenance = false,
|
||||
.capacity_scaling = false,
|
||||
.adc_therm = ABx500_ADC_THERM_BATCTRL,
|
||||
.chg_unknown_bat = false,
|
||||
.enable_overshoot = false,
|
||||
.fg_res = 100,
|
||||
.cap_levels = &cap_levels,
|
||||
.bat_type = bat_type_thermistor,
|
||||
.n_btypes = ARRAY_SIZE(bat_type_thermistor),
|
||||
.batt_id = 0,
|
||||
.interval_charging = 5,
|
||||
.interval_not_charging = 120,
|
||||
.temp_hysteresis = 3,
|
||||
.gnd_lift_resistance = 0,
|
||||
.maxi = &abx540_maxi_params,
|
||||
.chg_params = &chg,
|
||||
.fg_params = &fg,
|
||||
.chg_output_curr = ab8540_charge_output_curr_map,
|
||||
.n_chg_out_curr = ARRAY_SIZE(ab8540_charge_output_curr_map),
|
||||
.chg_input_curr = ab8540_charge_input_curr_map,
|
||||
.n_chg_in_curr = ARRAY_SIZE(ab8540_charge_input_curr_map),
|
||||
};
|
||||
|
||||
int ab8500_bm_of_probe(struct device *dev,
|
||||
struct device_node *np,
|
||||
struct abx500_bm_data *bm)
|
||||
|
|
|
@ -214,22 +214,10 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
|
|||
/* Only do this for batteries with internal NTC */
|
||||
if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && enable) {
|
||||
|
||||
if (is_ab8540(di->parent)) {
|
||||
if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_60UA)
|
||||
curr = BAT_CTRL_60U_ENA;
|
||||
else
|
||||
curr = BAT_CTRL_120U_ENA;
|
||||
} else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
|
||||
if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_16UA)
|
||||
curr = BAT_CTRL_16U_ENA;
|
||||
else
|
||||
curr = BAT_CTRL_18U_ENA;
|
||||
} else {
|
||||
if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_7UA)
|
||||
curr = BAT_CTRL_7U_ENA;
|
||||
else
|
||||
curr = BAT_CTRL_20U_ENA;
|
||||
}
|
||||
if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_7UA)
|
||||
curr = BAT_CTRL_7U_ENA;
|
||||
else
|
||||
curr = BAT_CTRL_20U_ENA;
|
||||
|
||||
dev_dbg(di->dev, "Set BATCTRL %duA\n", di->curr_source);
|
||||
|
||||
|
@ -260,28 +248,12 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
|
|||
} else if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && !enable) {
|
||||
dev_dbg(di->dev, "Disable BATCTRL curr source\n");
|
||||
|
||||
if (is_ab8540(di->parent)) {
|
||||
/* Write 0 to the curr bits */
|
||||
ret = abx500_mask_and_set_register_interruptible(
|
||||
di->dev,
|
||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||
BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA,
|
||||
~(BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA));
|
||||
} else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
|
||||
/* Write 0 to the curr bits */
|
||||
ret = abx500_mask_and_set_register_interruptible(
|
||||
di->dev,
|
||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||
BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA,
|
||||
~(BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA));
|
||||
} else {
|
||||
/* Write 0 to the curr bits */
|
||||
ret = abx500_mask_and_set_register_interruptible(
|
||||
di->dev,
|
||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||
BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
|
||||
~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
|
||||
}
|
||||
/* Write 0 to the curr bits */
|
||||
ret = abx500_mask_and_set_register_interruptible(
|
||||
di->dev,
|
||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||
BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
|
||||
~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
|
||||
|
||||
if (ret) {
|
||||
dev_err(di->dev, "%s failed disabling current source\n",
|
||||
|
@ -324,25 +296,11 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
|
|||
* if we got an error above
|
||||
*/
|
||||
disable_curr_source:
|
||||
if (is_ab8540(di->parent)) {
|
||||
/* Write 0 to the curr bits */
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||
BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA,
|
||||
~(BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA));
|
||||
} else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
|
||||
/* Write 0 to the curr bits */
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||
BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA,
|
||||
~(BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA));
|
||||
} else {
|
||||
/* Write 0 to the curr bits */
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||
BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
|
||||
~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
|
||||
}
|
||||
/* Write 0 to the curr bits */
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||
BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
|
||||
~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
|
||||
|
||||
if (ret) {
|
||||
dev_err(di->dev, "%s failed disabling current source\n",
|
||||
|
@ -556,13 +514,8 @@ static int ab8500_btemp_id(struct ab8500_btemp *di)
|
|||
{
|
||||
int res;
|
||||
u8 i;
|
||||
if (is_ab8540(di->parent))
|
||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_60UA;
|
||||
else if (is_ab9540(di->parent) || is_ab8505(di->parent))
|
||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA;
|
||||
else
|
||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA;
|
||||
|
||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA;
|
||||
di->bm->batt_id = BATTERY_UNKNOWN;
|
||||
|
||||
res = ab8500_btemp_get_batctrl_res(di);
|
||||
|
@ -600,18 +553,8 @@ static int ab8500_btemp_id(struct ab8500_btemp *di)
|
|||
*/
|
||||
if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL &&
|
||||
di->bm->batt_id == 1) {
|
||||
if (is_ab8540(di->parent)) {
|
||||
dev_dbg(di->dev,
|
||||
"Set BATCTRL current source to 60uA\n");
|
||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_60UA;
|
||||
} else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
|
||||
dev_dbg(di->dev,
|
||||
"Set BATCTRL current source to 16uA\n");
|
||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA;
|
||||
} else {
|
||||
dev_dbg(di->dev, "Set BATCTRL current source to 20uA\n");
|
||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_20UA;
|
||||
}
|
||||
dev_dbg(di->dev, "Set BATCTRL current source to 20uA\n");
|
||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_20UA;
|
||||
}
|
||||
|
||||
return di->bm->batt_id;
|
||||
|
|
|
@ -58,9 +58,7 @@
|
|||
|
||||
#define MAIN_CH_INPUT_CURR_SHIFT 4
|
||||
#define VBUS_IN_CURR_LIM_SHIFT 4
|
||||
#define AB8540_VBUS_IN_CURR_LIM_SHIFT 2
|
||||
#define AUTO_VBUS_IN_CURR_LIM_SHIFT 4
|
||||
#define AB8540_AUTO_VBUS_IN_CURR_MASK 0x3F
|
||||
#define VBUS_IN_CURR_LIM_RETRY_SET_TIME 30 /* seconds */
|
||||
|
||||
#define LED_INDICATOR_PWM_ENA 0x01
|
||||
|
@ -1138,10 +1136,7 @@ static int ab8500_charger_set_current(struct ab8500_charger *di,
|
|||
no_stepping = true;
|
||||
break;
|
||||
case AB8500_USBCH_IPT_CRNTLVL_REG:
|
||||
if (is_ab8540(di->parent))
|
||||
shift_value = AB8540_VBUS_IN_CURR_LIM_SHIFT;
|
||||
else
|
||||
shift_value = VBUS_IN_CURR_LIM_SHIFT;
|
||||
shift_value = VBUS_IN_CURR_LIM_SHIFT;
|
||||
prev_curr_index = (reg_value >> shift_value);
|
||||
curr_index = ab8500_vbus_in_curr_to_regval(di, ich);
|
||||
step_udelay = STEP_UDELAY * 100;
|
||||
|
@ -1865,67 +1860,6 @@ static int ab8500_charger_update_charger_current(struct ux500_charger *charger,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* ab8540_charger_power_path_enable() - enable usb power path mode
|
||||
* @charger: pointer to the ux500_charger structure
|
||||
* @enable: enable/disable flag
|
||||
*
|
||||
* Enable or disable the power path for usb mode
|
||||
* Returns error code in case of failure else 0(on success)
|
||||
*/
|
||||
static int ab8540_charger_power_path_enable(struct ux500_charger *charger,
|
||||
bool enable)
|
||||
{
|
||||
int ret;
|
||||
struct ab8500_charger *di;
|
||||
|
||||
if (charger->psy->desc->type == POWER_SUPPLY_TYPE_USB)
|
||||
di = to_ab8500_charger_usb_device_info(charger);
|
||||
else
|
||||
return -ENXIO;
|
||||
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8540_USB_PP_MODE_REG,
|
||||
BUS_POWER_PATH_MODE_ENA, enable);
|
||||
if (ret) {
|
||||
dev_err(di->dev, "%s write failed\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ab8540_charger_usb_pre_chg_enable() - enable usb pre change
|
||||
* @charger: pointer to the ux500_charger structure
|
||||
* @enable: enable/disable flag
|
||||
*
|
||||
* Enable or disable the pre-chage for usb mode
|
||||
* Returns error code in case of failure else 0(on success)
|
||||
*/
|
||||
static int ab8540_charger_usb_pre_chg_enable(struct ux500_charger *charger,
|
||||
bool enable)
|
||||
{
|
||||
int ret;
|
||||
struct ab8500_charger *di;
|
||||
|
||||
if (charger->psy->desc->type == POWER_SUPPLY_TYPE_USB)
|
||||
di = to_ab8500_charger_usb_device_info(charger);
|
||||
else
|
||||
return -ENXIO;
|
||||
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8540_USB_PP_CHR_REG,
|
||||
BUS_POWER_PATH_PRECHG_ENA, enable);
|
||||
if (ret) {
|
||||
dev_err(di->dev, "%s write failed\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ab8500_charger_get_ext_psy_data(struct device *dev, void *data)
|
||||
{
|
||||
struct power_supply *psy;
|
||||
|
@ -2704,23 +2638,15 @@ static void ab8500_charger_vbus_drop_end_work(struct work_struct *work)
|
|||
abx500_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8500_CHARGER_CTRL, 0x01);
|
||||
|
||||
if (is_ab8540(di->parent))
|
||||
ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
|
||||
AB8540_CH_USBCH_STAT3_REG, ®_value);
|
||||
else
|
||||
ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
|
||||
AB8500_CH_USBCH_STAT2_REG, ®_value);
|
||||
ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
|
||||
AB8500_CH_USBCH_STAT2_REG, ®_value);
|
||||
if (ret < 0) {
|
||||
dev_err(di->dev, "%s read failed\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_ab8540(di->parent))
|
||||
curr = di->bm->chg_input_curr[
|
||||
reg_value & AB8540_AUTO_VBUS_IN_CURR_MASK];
|
||||
else
|
||||
curr = di->bm->chg_input_curr[
|
||||
reg_value >> AUTO_VBUS_IN_CURR_LIM_SHIFT];
|
||||
curr = di->bm->chg_input_curr[
|
||||
reg_value >> AUTO_VBUS_IN_CURR_LIM_SHIFT];
|
||||
|
||||
if (di->max_usb_in_curr.calculated_max != curr) {
|
||||
/* USB source is collapsing */
|
||||
|
@ -3097,14 +3023,9 @@ static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (is_ab8540(di->parent))
|
||||
ret = abx500_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8500_CH_OPT_CRNTLVL_MAX_REG,
|
||||
CH_OP_CUR_LVL_2P);
|
||||
else
|
||||
ret = abx500_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8500_CH_OPT_CRNTLVL_MAX_REG,
|
||||
CH_OP_CUR_LVL_1P6);
|
||||
ret = abx500_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8500_CH_OPT_CRNTLVL_MAX_REG,
|
||||
CH_OP_CUR_LVL_1P6);
|
||||
if (ret) {
|
||||
dev_err(di->dev,
|
||||
"failed to set CH_OPT_CRNTLVL_MAX_REG\n");
|
||||
|
@ -3112,8 +3033,7 @@ static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
|
|||
}
|
||||
}
|
||||
|
||||
if (is_ab9540_2p0(di->parent) || is_ab9540_3p0(di->parent)
|
||||
|| is_ab8505_2p0(di->parent) || is_ab8540(di->parent))
|
||||
if (is_ab8505_2p0(di->parent))
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER,
|
||||
AB8500_USBCH_CTRL2_REG,
|
||||
|
@ -3205,17 +3125,6 @@ static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
|
|||
dev_err(di->dev, "failed to setup backup battery charging\n");
|
||||
goto out;
|
||||
}
|
||||
if (is_ab8540(di->parent)) {
|
||||
ret = abx500_set_register_interruptible(di->dev,
|
||||
AB8500_RTC,
|
||||
AB8500_RTC_CTRL1_REG,
|
||||
bup_vch_range | vbup33_vrtcn);
|
||||
if (ret) {
|
||||
dev_err(di->dev,
|
||||
"failed to setup backup battery charging\n");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
/* Enable backup battery charging */
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
|
@ -3226,25 +3135,6 @@ static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (is_ab8540(di->parent)) {
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8540_USB_PP_MODE_REG,
|
||||
BUS_VSYS_VOL_SELECT_MASK, BUS_VSYS_VOL_SELECT_3P6V);
|
||||
if (ret) {
|
||||
dev_err(di->dev,
|
||||
"failed to setup usb power path vsys voltage\n");
|
||||
goto out;
|
||||
}
|
||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||
AB8500_CHARGER, AB8540_USB_PP_CHR_REG,
|
||||
BUS_PP_PRECHG_CURRENT_MASK, 0);
|
||||
if (ret) {
|
||||
dev_err(di->dev,
|
||||
"failed to setup usb power path precharge current\n");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
@ -3529,8 +3419,6 @@ static int ab8500_charger_probe(struct platform_device *pdev)
|
|||
di->usb_chg.ops.check_enable = &ab8500_charger_usb_check_enable;
|
||||
di->usb_chg.ops.kick_wd = &ab8500_charger_watchdog_kick;
|
||||
di->usb_chg.ops.update_curr = &ab8500_charger_update_charger_current;
|
||||
di->usb_chg.ops.pp_enable = &ab8540_charger_power_path_enable;
|
||||
di->usb_chg.ops.pre_chg_enable = &ab8540_charger_usb_pre_chg_enable;
|
||||
di->usb_chg.max_out_volt = ab8500_charger_voltage_map[
|
||||
ARRAY_SIZE(ab8500_charger_voltage_map) - 1];
|
||||
di->usb_chg.max_out_curr =
|
||||
|
@ -3538,7 +3426,6 @@ static int ab8500_charger_probe(struct platform_device *pdev)
|
|||
di->usb_chg.wdt_refresh = CHG_WD_INTERVAL;
|
||||
di->usb_chg.enabled = di->bm->usb_enabled;
|
||||
di->usb_chg.external = false;
|
||||
di->usb_chg.power_path = di->bm->usb_power_path;
|
||||
di->usb_state.usb_current = -1;
|
||||
|
||||
/* Create a work queue for the charger */
|
||||
|
|
|
@ -2326,9 +2326,7 @@ static int ab8500_fg_init_hw_registers(struct ab8500_fg *di)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (((is_ab8505(di->parent) || is_ab9540(di->parent)) &&
|
||||
abx500_get_chip_id(di->dev) >= AB8500_CUT2P0)
|
||||
|| is_ab8540(di->parent)) {
|
||||
if (is_ab8505(di->parent)) {
|
||||
ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
|
||||
AB8505_RTC_PCUT_MAX_TIME_REG, di->bm->fg_params->pcut_max_time);
|
||||
|
||||
|
@ -2915,9 +2913,7 @@ static int ab8500_fg_sysfs_psy_create_attrs(struct ab8500_fg *di)
|
|||
{
|
||||
unsigned int i;
|
||||
|
||||
if (((is_ab8505(di->parent) || is_ab9540(di->parent)) &&
|
||||
abx500_get_chip_id(di->dev) >= AB8500_CUT2P0)
|
||||
|| is_ab8540(di->parent)) {
|
||||
if (is_ab8505(di->parent)) {
|
||||
for (i = 0; i < ARRAY_SIZE(ab8505_fg_sysfs_psy_attrs); i++)
|
||||
if (device_create_file(&di->fg_psy->dev,
|
||||
&ab8505_fg_sysfs_psy_attrs[i]))
|
||||
|
@ -2937,9 +2933,7 @@ static void ab8500_fg_sysfs_psy_remove_attrs(struct ab8500_fg *di)
|
|||
{
|
||||
unsigned int i;
|
||||
|
||||
if (((is_ab8505(di->parent) || is_ab9540(di->parent)) &&
|
||||
abx500_get_chip_id(di->dev) >= AB8500_CUT2P0)
|
||||
|| is_ab8540(di->parent)) {
|
||||
if (is_ab8505(di->parent)) {
|
||||
for (i = 0; i < ARRAY_SIZE(ab8505_fg_sysfs_psy_attrs); i++)
|
||||
(void)device_remove_file(&di->fg_psy->dev,
|
||||
&ab8505_fg_sysfs_psy_attrs[i]);
|
||||
|
|
|
@ -44,9 +44,6 @@
|
|||
/* Five minutes expressed in seconds */
|
||||
#define FIVE_MINUTES_IN_SECONDS 300
|
||||
|
||||
/* Plus margin for the low battery threshold */
|
||||
#define BAT_PLUS_MARGIN (100)
|
||||
|
||||
#define CHARGALG_CURR_STEP_LOW 0
|
||||
#define CHARGALG_CURR_STEP_HIGH 100
|
||||
|
||||
|
@ -101,7 +98,6 @@ enum abx500_chargalg_states {
|
|||
STATE_HW_TEMP_PROTECT_INIT,
|
||||
STATE_HW_TEMP_PROTECT,
|
||||
STATE_NORMAL_INIT,
|
||||
STATE_USB_PP_PRE_CHARGE,
|
||||
STATE_NORMAL,
|
||||
STATE_WAIT_FOR_RECHARGE_INIT,
|
||||
STATE_WAIT_FOR_RECHARGE,
|
||||
|
@ -133,7 +129,6 @@ static const char *states[] = {
|
|||
"HW_TEMP_PROTECT_INIT",
|
||||
"HW_TEMP_PROTECT",
|
||||
"NORMAL_INIT",
|
||||
"USB_PP_PRE_CHARGE",
|
||||
"NORMAL",
|
||||
"WAIT_FOR_RECHARGE_INIT",
|
||||
"WAIT_FOR_RECHARGE",
|
||||
|
@ -603,37 +598,6 @@ static int abx500_chargalg_usb_en(struct abx500_chargalg *di, int enable,
|
|||
return di->usb_chg->ops.enable(di->usb_chg, enable, vset, iset);
|
||||
}
|
||||
|
||||
/**
|
||||
* ab8540_chargalg_usb_pp_en() - Enable/ disable USB power path
|
||||
* @di: pointer to the abx500_chargalg structure
|
||||
* @enable: power path enable/disable
|
||||
*
|
||||
* The USB power path will be enable/ disable
|
||||
*/
|
||||
static int ab8540_chargalg_usb_pp_en(struct abx500_chargalg *di, bool enable)
|
||||
{
|
||||
if (!di->usb_chg || !di->usb_chg->ops.pp_enable)
|
||||
return -ENXIO;
|
||||
|
||||
return di->usb_chg->ops.pp_enable(di->usb_chg, enable);
|
||||
}
|
||||
|
||||
/**
|
||||
* ab8540_chargalg_usb_pre_chg_en() - Enable/ disable USB pre-charge
|
||||
* @di: pointer to the abx500_chargalg structure
|
||||
* @enable: USB pre-charge enable/disable
|
||||
*
|
||||
* The USB USB pre-charge will be enable/ disable
|
||||
*/
|
||||
static int ab8540_chargalg_usb_pre_chg_en(struct abx500_chargalg *di,
|
||||
bool enable)
|
||||
{
|
||||
if (!di->usb_chg || !di->usb_chg->ops.pre_chg_enable)
|
||||
return -ENXIO;
|
||||
|
||||
return di->usb_chg->ops.pre_chg_enable(di->usb_chg, enable);
|
||||
}
|
||||
|
||||
/**
|
||||
* abx500_chargalg_update_chg_curr() - Update charger current
|
||||
* @di: pointer to the abx500_chargalg structure
|
||||
|
@ -833,9 +797,6 @@ static void abx500_chargalg_end_of_charge(struct abx500_chargalg *di)
|
|||
di->batt_data.avg_curr > 0) {
|
||||
if (++di->eoc_cnt >= EOC_COND_CNT) {
|
||||
di->eoc_cnt = 0;
|
||||
if ((di->chg_info.charger_type & USB_CHG) &&
|
||||
(di->usb_chg->power_path))
|
||||
ab8540_chargalg_usb_pp_en(di, true);
|
||||
di->charge_status = POWER_SUPPLY_STATUS_FULL;
|
||||
di->maintenance_chg = true;
|
||||
dev_dbg(di->dev, "EOC reached!\n");
|
||||
|
@ -1536,22 +1497,6 @@ static void abx500_chargalg_algorithm(struct abx500_chargalg *di)
|
|||
break;
|
||||
|
||||
case STATE_NORMAL_INIT:
|
||||
if ((di->chg_info.charger_type & USB_CHG) &&
|
||||
di->usb_chg->power_path) {
|
||||
if (di->batt_data.volt >
|
||||
(di->bm->fg_params->lowbat_threshold +
|
||||
BAT_PLUS_MARGIN)) {
|
||||
ab8540_chargalg_usb_pre_chg_en(di, false);
|
||||
ab8540_chargalg_usb_pp_en(di, false);
|
||||
} else {
|
||||
ab8540_chargalg_usb_pp_en(di, true);
|
||||
ab8540_chargalg_usb_pre_chg_en(di, true);
|
||||
abx500_chargalg_state_to(di,
|
||||
STATE_USB_PP_PRE_CHARGE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (di->curr_status.curr_step == CHARGALG_CURR_STEP_LOW)
|
||||
abx500_chargalg_stop_charging(di);
|
||||
else {
|
||||
|
@ -1575,13 +1520,6 @@ static void abx500_chargalg_algorithm(struct abx500_chargalg *di)
|
|||
|
||||
break;
|
||||
|
||||
case STATE_USB_PP_PRE_CHARGE:
|
||||
if (di->batt_data.volt >
|
||||
(di->bm->fg_params->lowbat_threshold +
|
||||
BAT_PLUS_MARGIN))
|
||||
abx500_chargalg_state_to(di, STATE_NORMAL_INIT);
|
||||
break;
|
||||
|
||||
case STATE_NORMAL:
|
||||
handle_maxim_chg_curr(di);
|
||||
if (di->charge_status == POWER_SUPPLY_STATUS_FULL &&
|
||||
|
|
|
@ -271,7 +271,6 @@ struct abx500_bm_data {
|
|||
bool autopower_cfg;
|
||||
bool ac_enabled;
|
||||
bool usb_enabled;
|
||||
bool usb_power_path;
|
||||
bool no_maintenance;
|
||||
bool capacity_scaling;
|
||||
bool chg_unknown_bat;
|
||||
|
|
|
@ -248,8 +248,6 @@ enum bup_vch_sel {
|
|||
#define BAT_CTRL_20U_ENA 0x02
|
||||
#define BAT_CTRL_18U_ENA 0x01
|
||||
#define BAT_CTRL_16U_ENA 0x02
|
||||
#define BAT_CTRL_60U_ENA 0x01
|
||||
#define BAT_CTRL_120U_ENA 0x02
|
||||
#define BAT_CTRL_CMP_ENA 0x04
|
||||
#define FORCE_BAT_CTRL_CMP_HIGH 0x08
|
||||
#define BAT_CTRL_PULL_UP_ENA 0x10
|
||||
|
|
|
@ -25,8 +25,6 @@ struct ux500_charger_ops {
|
|||
int (*check_enable) (struct ux500_charger *, int, int);
|
||||
int (*kick_wd) (struct ux500_charger *);
|
||||
int (*update_curr) (struct ux500_charger *, int);
|
||||
int (*pp_enable) (struct ux500_charger *, bool);
|
||||
int (*pre_chg_enable) (struct ux500_charger *, bool);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -37,7 +35,6 @@ struct ux500_charger_ops {
|
|||
* @max_out_curr maximum output charger current in mA
|
||||
* @enabled indicates if this charger is used or not
|
||||
* @external external charger unit (pm2xxx)
|
||||
* @power_path USB power path support
|
||||
*/
|
||||
struct ux500_charger {
|
||||
struct power_supply *psy;
|
||||
|
@ -47,7 +44,6 @@ struct ux500_charger {
|
|||
int wdt_refresh;
|
||||
bool enabled;
|
||||
bool external;
|
||||
bool power_path;
|
||||
};
|
||||
|
||||
extern struct blocking_notifier_head charger_notifier_list;
|
||||
|
|
Loading…
Reference in a new issue