summaryrefslogtreecommitdiff
path: root/drivers/power/palmas-charger.c
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2013-07-03 12:54:52 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:33:49 -0700
commit014f199cb4f8b15eabe724bd0cdc846c367b17c5 (patch)
tree7603fae82d4b9a02cd5148bdf727ea5e4df3bfd3 /drivers/power/palmas-charger.c
parent254499e06cab3dab3f53be38f9fa48ddccebbe0d (diff)
power: battery-charger: refactor thermal charging effect
For implementing the thermal effect, the battery charger driver just need to pass the correct parameter as part of battery charger driver registration. It need not to have thermal charger registration and hence reduce the code. Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/244667 (cherry picked from commit bde3c1327f11bae141e4b7c433c60ed367db0f97) Change-Id: Ia35bc41f6c05764f166ad51bbc13a0d30e0243b7 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/253367 Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'drivers/power/palmas-charger.c')
-rw-r--r--drivers/power/palmas-charger.c118
1 files changed, 43 insertions, 75 deletions
diff --git a/drivers/power/palmas-charger.c b/drivers/power/palmas-charger.c
index 3ccc37d4123a..5c7548f26baf 100644
--- a/drivers/power/palmas-charger.c
+++ b/drivers/power/palmas-charger.c
@@ -82,8 +82,6 @@ struct palmas_charger_chip {
bool battery_presense;
int charging_state;
int cable_connected;
-
- struct battery_charger_thermal_dev *bc_therm_dev;
};
/* input current limit */
@@ -318,50 +316,6 @@ int palmas_half_current_enable(struct palmas_charger_chip *palmas_chip)
return 0;
}
-static int palams_charger_thermal_configure(
- struct battery_charger_thermal_dev *bct_dev,
- int temp, bool enable_charger, bool enable_charg_half_current,
- int battery_voltage)
-{
- struct palmas_charger_chip *chip;
- int temperature;
-
- chip = battery_charger_thermal_get_drvdata(bct_dev);
- if (!chip->cable_connected)
- return 0;
-
- temperature = temp;
- dev_info(chip->dev, "Battery temp %d\n", temperature);
- if (enable_charger) {
- if (!enable_charg_half_current &&
- chip->charging_state != ENABLED_FULL_IBAT) {
- palmas_full_current_enable(chip);
- battery_charging_status_update(chip->bc_dev,
- BATTERY_CHARGING);
- } else if (enable_charg_half_current &&
- chip->charging_state != ENABLED_HALF_IBAT)
- palmas_half_current_enable(chip);
- battery_charging_status_update(chip->bc_dev,
- BATTERY_CHARGING);
- } else {
- if (chip->charging_state != DISABLED) {
- palmas_charger_disable(chip);
- battery_charging_status_update(chip->bc_dev,
- BATTERY_DISCHARGING);
- }
- }
- return 0;
-}
-
-struct battery_charger_thermal_ops palams_charger_thermal_ops = {
- .thermal_configure = palams_charger_thermal_configure,
-};
-
-struct battery_charger_thermal_info palams_charger_thermal_info = {
- .cell_id = 0,
- .bct_ops = &palams_charger_thermal_ops,
-};
-
static int palmas_charger_init(struct palmas_charger_chip *palmas_chip)
{
int ret;
@@ -487,8 +441,7 @@ static int palmas_set_charging_current(struct regulator_dev *rdev,
goto error;
battery_charging_status_update(palmas_chip->bc_dev,
BATTERY_DISCHARGING);
- battery_charger_thermal_stop_monitoring(
- palmas_chip->bc_therm_dev);
+ battery_charger_thermal_stop_monitoring(palmas_chip->bc_dev);
} else {
palmas_chip->cable_connected = 1;
palmas_chip->chg_status = BATTERY_CHARGING;
@@ -497,8 +450,7 @@ static int palmas_set_charging_current(struct regulator_dev *rdev,
goto error;
battery_charging_status_update(palmas_chip->bc_dev,
BATTERY_CHARGING);
- battery_charger_thermal_start_monitoring(
- palmas_chip->bc_therm_dev);
+ battery_charger_thermal_start_monitoring(palmas_chip->bc_dev);
}
return 0;
error:
@@ -930,8 +882,43 @@ static int palmas_charger_get_status(struct battery_charger_dev *bc_dev)
return chip->chg_status;
}
+static int palams_charger_thermal_configure(
+ struct battery_charger_dev *bc_dev,
+ int temp, bool enable_charger, bool enable_charg_half_current,
+ int battery_voltage)
+{
+ struct palmas_charger_chip *chip = battery_charger_get_drvdata(bc_dev);
+ int temperature;
+
+ if (!chip->cable_connected)
+ return 0;
+
+ temperature = temp;
+ dev_info(chip->dev, "Battery temp %d\n", temperature);
+ if (enable_charger) {
+ if (!enable_charg_half_current &&
+ chip->charging_state != ENABLED_FULL_IBAT) {
+ palmas_full_current_enable(chip);
+ battery_charging_status_update(chip->bc_dev,
+ BATTERY_CHARGING);
+ } else if (enable_charg_half_current &&
+ chip->charging_state != ENABLED_HALF_IBAT)
+ palmas_half_current_enable(chip);
+ battery_charging_status_update(chip->bc_dev,
+ BATTERY_CHARGING);
+ } else {
+ if (chip->charging_state != DISABLED) {
+ palmas_charger_disable(chip);
+ battery_charging_status_update(chip->bc_dev,
+ BATTERY_DISCHARGING);
+ }
+ }
+ return 0;
+}
+
static struct battery_charging_ops palmas_charger_bci_ops = {
.get_charging_status = palmas_charger_get_status,
+ .thermal_configure = palams_charger_thermal_configure,
};
static struct battery_charger_info palmas_charger_bci = {
@@ -997,6 +984,10 @@ static int palmas_probe(struct platform_device *pdev)
goto scrub_vbus_reg;
}
+ palmas_charger_bci.polling_time_sec =
+ pdata->bcharger_pdata->temperature_poll_period_secs;
+ palmas_charger_bci.tz_name =
+ pdata->bcharger_pdata->battery_tz_name;
palmas_chip->bc_dev = battery_charger_register(&pdev->dev,
&palmas_charger_bci, palmas_chip);
if (IS_ERR(palmas_chip->bc_dev)) {
@@ -1006,29 +997,12 @@ static int palmas_probe(struct platform_device *pdev)
goto scrub_bcharger_init;
}
- palams_charger_thermal_info.polling_time_sec =
- pdata->bcharger_pdata->temperature_poll_period_secs;
- palams_charger_thermal_info.tz_name =
- pdata->bcharger_pdata->battery_tz_name;
-
- if (!palams_charger_thermal_info.polling_time_sec)
- goto skip_bcharger_init;
-
- palmas_chip->bc_therm_dev = battery_charger_thermal_register(&pdev->dev,
- &palams_charger_thermal_info, palmas_chip);
- if (IS_ERR(palmas_chip->bc_therm_dev)) {
- ret = PTR_ERR(palmas_chip->bc_therm_dev);
- dev_err(&pdev->dev,
- "battery charger thermal register failed: %d\n", ret);
- goto scrub_bcharger_reg;
- }
-
skip_bcharger_init:
ret = palmas_fault_clear_sts(palmas_chip);
if (ret < 0) {
dev_err(palmas_chip->dev,
"fault clear status failed %d\n", ret);
- goto scrub_thermal_chg_reg;
+ goto scrub_bcharger_reg;
}
ret = request_threaded_irq(palmas_chip->irq, NULL,
@@ -1037,7 +1011,7 @@ skip_bcharger_init:
if (ret < 0) {
dev_err(palmas_chip->dev, "request IRQ %d fail, err = %d\n",
palmas_chip->irq, ret);
- goto scrub_thermal_chg_reg;
+ goto scrub_bcharger_reg;
}
if (pdata->bcharger_pdata) {
@@ -1050,9 +1024,6 @@ skip_bcharger_init:
scrub_irq:
free_irq(palmas_chip->irq, palmas_chip);
-scrub_thermal_chg_reg:
- if (palmas_chip->bc_therm_dev)
- battery_charger_thermal_unregister(palmas_chip->bc_therm_dev);
scrub_bcharger_reg:
if (pdata->bcharger_pdata)
battery_charger_unregister(palmas_chip->bc_dev);
@@ -1072,9 +1043,6 @@ static int palmas_remove(struct platform_device *pdev)
free_irq(palmas_chip->irq, palmas_chip);
if (palmas_chip->battery_presense) {
- if (palmas_chip->bc_therm_dev)
- battery_charger_thermal_unregister(
- palmas_chip->bc_therm_dev);
battery_charger_unregister(palmas_chip->bc_dev);
palmas_bcharger_deinit(palmas_chip);
}