| /* | |
| * Copyright (C) 2012 Samsung Electronics | |
| * Lukasz Majewski <l.majewski@samsung.com> | |
| * | |
| * SPDX-License-Identifier: GPL-2.0+ | |
| */ | |
| #include <common.h> | |
| #include <power/pmic.h> | |
| #include <power/battery.h> | |
| #include <power/max8997_pmic.h> | |
| #include <errno.h> | |
| static struct battery battery_trats; | |
| static int power_battery_charge(struct pmic *bat) | |
| { | |
| struct power_battery *p_bat = bat->pbat; | |
| struct battery *battery = p_bat->bat; | |
| int k; | |
| if (bat->chrg->chrg_state(p_bat->chrg, CHARGER_ENABLE, 450)) | |
| return -1; | |
| for (k = 0; bat->chrg->chrg_bat_present(p_bat->chrg) && | |
| bat->chrg->chrg_type(p_bat->muic) && | |
| battery->state_of_chrg < 100; k++) { | |
| udelay(2000000); | |
| if (!(k % 5)) | |
| puts("."); | |
| bat->fg->fg_battery_update(p_bat->fg, bat); | |
| if (k == 200) { | |
| debug(" %d [V]", battery->voltage_uV); | |
| puts("\n"); | |
| k = 0; | |
| } | |
| if (ctrlc()) { | |
| printf("\nCharging disabled on request.\n"); | |
| goto exit; | |
| } | |
| } | |
| exit: | |
| bat->chrg->chrg_state(p_bat->chrg, CHARGER_DISABLE, 0); | |
| return 0; | |
| } | |
| static int power_battery_init_trats(struct pmic *bat_, | |
| struct pmic *fg_, | |
| struct pmic *chrg_, | |
| struct pmic *muic_) | |
| { | |
| bat_->pbat->fg = fg_; | |
| bat_->pbat->chrg = chrg_; | |
| bat_->pbat->muic = muic_; | |
| bat_->fg = fg_->fg; | |
| bat_->chrg = chrg_->chrg; | |
| bat_->chrg->chrg_type = muic_->chrg->chrg_type; | |
| return 0; | |
| } | |
| static struct power_battery power_bat_trats = { | |
| .bat = &battery_trats, | |
| .battery_init = power_battery_init_trats, | |
| .battery_charge = power_battery_charge, | |
| }; | |
| int power_bat_init(unsigned char bus) | |
| { | |
| static const char name[] = "BAT_TRATS"; | |
| struct pmic *p = pmic_alloc(); | |
| if (!p) { | |
| printf("%s: POWER allocation error!\n", __func__); | |
| return -ENOMEM; | |
| } | |
| debug("Board BAT init\n"); | |
| p->interface = PMIC_NONE; | |
| p->name = name; | |
| p->bus = bus; | |
| p->pbat = &power_bat_trats; | |
| return 0; | |
| } |