1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2012 Samsung Electronics 4 * Lukasz Majewski <l.majewski@samsung.com> 5 */ 6 7 #include <common.h> 8 #include <console.h> 9 #include <power/pmic.h> 10 #include <power/battery.h> 11 #include <power/max8997_pmic.h> 12 #include <errno.h> 13 14 static struct battery battery_trats; 15 16 static int power_battery_charge(struct pmic *bat) 17 { 18 struct power_battery *p_bat = bat->pbat; 19 struct battery *battery = p_bat->bat; 20 int k; 21 22 if (bat->chrg->chrg_state(p_bat->chrg, PMIC_CHARGER_ENABLE, 450)) 23 return -1; 24 25 for (k = 0; bat->chrg->chrg_bat_present(p_bat->chrg) && 26 bat->chrg->chrg_type(p_bat->muic) && 27 battery->state_of_chrg < 100; k++) { 28 udelay(2000000); 29 if (!(k % 5)) 30 puts("."); 31 bat->fg->fg_battery_update(p_bat->fg, bat); 32 33 if (k == 200) { 34 debug(" %d [V]", battery->voltage_uV); 35 puts("\n"); 36 k = 0; 37 } 38 39 if (ctrlc()) { 40 printf("\nCharging disabled on request.\n"); 41 goto exit; 42 } 43 } 44 exit: 45 bat->chrg->chrg_state(p_bat->chrg, PMIC_CHARGER_DISABLE, 0); 46 47 return 0; 48 } 49 50 static int power_battery_init_trats(struct pmic *bat_, 51 struct pmic *fg_, 52 struct pmic *chrg_, 53 struct pmic *muic_) 54 { 55 bat_->pbat->fg = fg_; 56 bat_->pbat->chrg = chrg_; 57 bat_->pbat->muic = muic_; 58 59 bat_->fg = fg_->fg; 60 bat_->chrg = chrg_->chrg; 61 bat_->chrg->chrg_type = muic_->chrg->chrg_type; 62 return 0; 63 } 64 65 static struct power_battery power_bat_trats = { 66 .bat = &battery_trats, 67 .battery_init = power_battery_init_trats, 68 .battery_charge = power_battery_charge, 69 }; 70 71 int power_bat_init(unsigned char bus) 72 { 73 static const char name[] = "BAT_TRATS"; 74 struct pmic *p = pmic_alloc(); 75 76 if (!p) { 77 printf("%s: POWER allocation error!\n", __func__); 78 return -ENOMEM; 79 } 80 81 debug("Board BAT init\n"); 82 83 p->interface = PMIC_NONE; 84 p->name = name; 85 p->bus = bus; 86 87 p->pbat = &power_bat_trats; 88 return 0; 89 } 90