Skip to content
This repository was archived by the owner on Jan 8, 2025. It is now read-only.

Commit

Permalink
target: add api to get battery info
Browse files Browse the repository at this point in the history
Add api to get battery's voltage and add safeguards such as
refusing to flash if minimum battery levels are not present or
be bypass if the device doesn't have a battery

Change-Id: Ie9fc45cd2d3a5f588acedef4fd9b0ffdcb2eae24
  • Loading branch information
lijuang authored and vijay kumar committed Nov 5, 2015
1 parent dbe82f8 commit 0e05d81
Show file tree
Hide file tree
Showing 13 changed files with 148 additions and 1 deletion.
4 changes: 4 additions & 0 deletions include/target.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,8 @@ bool target_build_variant_user();
uint32_t get_vibration_type();
#endif

uint32_t target_get_battery_voltage();
bool target_battery_soc_ok();
bool target_battery_is_present();
uint32_t target_get_pmic();
#endif
6 changes: 6 additions & 0 deletions platform/msm_shared/smem.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,12 @@ typedef enum
PMIC_IS_PM8019 = 3,
PMIC_IS_PM8026 = 4,
PMIC_IS_PM8110 = 5,
PMIC_IS_PM8916 = 11,
PMIC_IS_PM8909 = 13,
PMIC_IS_PMI8950 = 17,
PMIC_IS_PMI8994 = 10,
PMIC_IS_PMI8996 = 19,

} pm_model_type_bfly;

struct smem_board_info_v3 {
Expand Down
102 changes: 101 additions & 1 deletion target/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,25 @@
#include <dload_util.h>
#include <sdhci_msm.h>
#if PON_VIB_SUPPORT
#include <smem.h>
#include <vibrator.h>
#include <board.h>
#endif

#include <smem.h>
#include <pm8x41_adc.h>
#include <pm8x41_hw.h>

#if CHECK_BAT_VOLTAGE
#include <pm_fg_adc_usr.h>
#endif

#define EXPAND(NAME) #NAME
#define TARGET(NAME) EXPAND(NAME)

#define BATTERY_MIN_VOLTAGE 3600000 //uv
#define PMIC_SLAVE_ID 0x20000
#define BAT_IF_BAT_PRES_STATUS 0x1208

/*
* default implementations of these routines, if the target code
* chooses not to implement.
Expand Down Expand Up @@ -268,3 +280,91 @@ __WEAK bool target_build_variant_user()
return false;
#endif
}

__WEAK uint32_t target_get_pmic()
{
return PMIC_IS_UNKNOWN;
}

/* Check battery if it's exist */
bool target_battery_is_present()
{
bool batt_is_exist;
uint8_t value = 0;
uint32_t pmic;

pmic = target_get_pmic();

switch(pmic)
{
case PMIC_IS_PM8909:
case PMIC_IS_PM8916:
case PMIC_IS_PM8941:
value = REG_READ(BAT_IF_BAT_PRES_STATUS);
break;
case PMIC_IS_PMI8950:
case PMIC_IS_PMI8994:
case PMIC_IS_PMI8996:
value = REG_READ(PMIC_SLAVE_ID|
BAT_IF_BAT_PRES_STATUS);
break;
default:
dprintf(CRITICAL, "ERROR: Couldn't get the pmic type\n");
break;
}

batt_is_exist = value >> 7;

return batt_is_exist;

}

#if CHECK_BAT_VOLTAGE
/* Return battery voltage */
uint32_t target_get_battery_voltage()
{
uint32_t pmic;
uint32_t vbat = 0;

pmic = target_get_pmic();

switch(pmic)
{
case PMIC_IS_PM8909:
case PMIC_IS_PM8916:
case PMIC_IS_PM8941:
vbat = pm8x41_get_batt_voltage(); //uv
break;
case PMIC_IS_PMI8950:
case PMIC_IS_PMI8994:
case PMIC_IS_PMI8996:
if (!pm_fg_usr_get_vbat(1, &vbat)) {
vbat = vbat*1000; //uv
} else {
dprintf(CRITICAL, "ERROR: Get battery voltage failed!!!\n");
}
break;
default:
dprintf(CRITICAL, "ERROR: Couldn't get the pmic type\n");
break;
}

return vbat;
}

/* Add safeguards such as refusing to flash if minimum battery levels
* are not present or be bypass if the device doesn't have a battery
*/
bool target_battery_soc_ok()
{
if (!target_battery_is_present()) {
dprintf(INFO, "battery is not present\n");
return true;
}

if (target_get_battery_voltage() >= BATTERY_MIN_VOLTAGE)
return true;

return false;
}
#endif
6 changes: 6 additions & 0 deletions target/msm8909/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
#include <gpio.h>
#include <rpm-smd.h>
#include <qpic_nand.h>
#include <smem.h>

#if LONG_PRESS_POWER_ON
#include <shutdown_detect.h>
Expand Down Expand Up @@ -690,3 +691,8 @@ uint32_t target_get_hlos_subtype()
{
return board_hlos_subtype();
}

uint32_t target_get_pmic()
{
return PMIC_IS_PM8909;
}
1 change: 1 addition & 0 deletions target/msm8909/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ MODULES += \
lib/ptable \
dev/gcdb/display \
dev/pmic/pm8x41 \
dev/pmic/pmi8994 \
lib/libfdt

DEFINES += \
Expand Down
6 changes: 6 additions & 0 deletions target/msm8916/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include <crypto5_wrapper.h>
#include <partition_parser.h>
#include <stdlib.h>
#include <smem.h>

#if LONG_PRESS_POWER_ON
#include <shutdown_detect.h>
Expand Down Expand Up @@ -516,3 +517,8 @@ uint32_t target_get_hlos_subtype()
{
return board_hlos_subtype();
}

uint32_t target_get_pmic()
{
return PMIC_IS_PM8916;
}
1 change: 1 addition & 0 deletions target/msm8916/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ MODULES += \
lib/ptable \
dev/pmic/pm8x41 \
lib/libfdt \
dev/pmic/pmi8994 \
dev/gcdb/display

DEFINES += \
Expand Down
6 changes: 6 additions & 0 deletions target/msm8952/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
#include <clock.h>
#include <secapp_loader.h>
#include <rpmb.h>
#include <smem.h>

#include "target/display.h"

Expand Down Expand Up @@ -670,3 +671,8 @@ void target_crypto_init_params()

crypto_init_params(&ce_params);
}

uint32_t target_get_pmic()
{
return PMIC_IS_PMI8950;
}
5 changes: 5 additions & 0 deletions target/msm8974/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -826,3 +826,8 @@ void target_usb_phy_mux_configure(void)
tcsr_hs_phy_mux_configure();
}
}

uint32_t target_get_pmic()
{
return PMIC_IS_PM8941;
}
1 change: 1 addition & 0 deletions target/msm8974/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ MODULES += \
dev/keys \
dev/pmic/pm8x41 \
dev/gcdb/display \
dev/pmic/pmi8994 \
lib/ptable \
lib/libfdt

Expand Down
5 changes: 5 additions & 0 deletions target/msm8994/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -583,3 +583,8 @@ uint32_t target_ddr_cfg_val()
{
return DDR_CFG_DLY_VAL;
}

uint32_t target_get_pmic()
{
return PMIC_IS_PMI8994;
}
1 change: 1 addition & 0 deletions target/msm8994/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ MODULES += \
dev/qpnp_led \
lib/ptable \
dev/gcdb/display \
dev/pmic/pmi8994 \
lib/libfdt

DEFINES += \
Expand Down
5 changes: 5 additions & 0 deletions target/msm8996/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -508,3 +508,8 @@ void shutdown_device()

ASSERT(0);
}

uint32_t target_get_pmic()
{
return PMIC_IS_PMI8996;
}

0 comments on commit 0e05d81

Please sign in to comment.