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