Hawao+oled: the 2nd fg(sm5602)set 97% to 100%

add some parameters to set 97% to 100%
sm5602_fg_mmi/sm5602_fg.c

Change-Id: I03bf1f17c9c7ecd0c42ddec06d1509e12f90d1dd
Reviewed-on: https://gerrit.mot.com/2209091
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Wang Wang <wangwang1@lenovo.com>
Reviewed-by: Qiong Xie <xieq2@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
tinno18 2022-03-07 21:48:45 +08:00
commit 3bdaf9ab9a

View file

@ -47,6 +47,13 @@
#define queue_delayed_work_time 8000//8000
#define queue_start_work_time 50
#define SM_CUR_UNIT 1000
#define ENABLE_MAP_SOC
#ifdef ENABLE_MAP_SOC
#define MAP_MAX_SOC 97
#define MAP_RATE_SOC 975
#define MAP_MIN_SOC 4
#endif
enum sm_fg_reg_idx {
SM_FG_REG_DEVICE_ID = 0,
@ -254,7 +261,6 @@ struct sm_fg_chip {
struct power_supply *batt_psy;
struct power_supply *bms_psy;
//struct power_supply fg_psy;
struct power_supply_desc *fg_psy;
};
static int show_registers(struct seq_file *m, void *data);
@ -926,7 +932,11 @@ static int fg_get_charge_counter(struct sm_fg_chip *sm)
int ui_soc;
full_capacity = fg_read_fcc(sm) * 1000;
#ifdef ENABLE_MAP_SOC
ui_soc = (((100*(sm->batt_soc*10+MAP_MAX_SOC))/MAP_RATE_SOC)-MAP_MIN_SOC)/10;
#else
ui_soc = sm->batt_soc/10;
#endif
charge_counter = div_s64(full_capacity * ui_soc, 100);
return charge_counter;
@ -1005,7 +1015,12 @@ static int fg_get_property(struct power_supply *psy, enum power_supply_property
if (ret >= 0)
sm->batt_soc = ret;
//val->intval = sm->batt_soc;
#ifdef ENABLE_MAP_SOC
val->intval = (((100*(sm->batt_soc*10+MAP_MAX_SOC))/MAP_RATE_SOC)-MAP_MIN_SOC)/10;
#else
val->intval = sm->batt_soc/10;
#endif
pr_info("fg POWER_SUPPLY_PROP_STATUS:%d\n", val->intval);
mutex_unlock(&sm->data_lock);
break;
@ -1247,7 +1262,6 @@ static void fg_refresh_status(struct sm_fg_chip *sm)
}
// sm->last_update = jiffies;
}
#endif
@ -1305,7 +1319,8 @@ static int sm_update_data(struct sm_fg_chip *sm)
sm->batt_temp = -ENODATA;
fg_cal_carc(sm);
pr_info("RSOC:%d, Volt:%d, Current:%d, Temperature:%d, OCV:%d\n",
pr_info("RSOC:%d, Volt:%d, Current:%d, Temperature:%d, OCV:%d\n",
sm->batt_soc, sm->batt_volt, sm->batt_curr, sm->batt_temp, sm->batt_ocv);
}
@ -2403,85 +2418,85 @@ static int fg_common_parse_dt(struct sm_fg_chip *sm)
}
static const char *get_battery_serialnumber(void)
{
struct device_node *np = of_find_node_by_path("/chosen");
const char *battsn_buf;
int retval;
battsn_buf = NULL;
if (np)
retval = of_property_read_string(np, "mmi,battid",
&battsn_buf);
else
return NULL;
if ((retval == -EINVAL) || !battsn_buf) {
{
struct device_node *np = of_find_node_by_path("/chosen");
const char *battsn_buf;
int retval;
battsn_buf = NULL;
if (np)
retval = of_property_read_string(np, "mmi,battid",
&battsn_buf);
else
return NULL;
if ((retval == -EINVAL) || !battsn_buf) {
pr_info(" Battsn unused\n");
of_node_put(np);
return NULL;
} else
of_node_put(np);
return NULL;
} else
pr_info("Battsn = %s\n", battsn_buf);
of_node_put(np);
return battsn_buf;
}
of_node_put(np);
return battsn_buf;
}
static struct device_node *get_profile_by_serialnumber(
const struct device_node *np)
{
struct device_node *node, *df_node, *sn_node;
const char *sn_buf, *df_sn, *dev_sn;
int rc;
if (!np)
return NULL;
dev_sn = NULL;
df_sn = NULL;
sn_buf = NULL;
df_node = NULL;
sn_node = NULL;
const struct device_node *np)
{
struct device_node *node, *df_node, *sn_node;
const char *sn_buf, *df_sn, *dev_sn;
int rc;
if (!np)
return NULL;
dev_sn = NULL;
df_sn = NULL;
sn_buf = NULL;
df_node = NULL;
sn_node = NULL;
dev_sn = get_battery_serialnumber();
rc = of_property_read_string(np, "df-serialnum",
&df_sn);
if (rc)
rc = of_property_read_string(np, "df-serialnum",
&df_sn);
if (rc)
pr_info("No Default Serial Number defined\n");
else if (df_sn)
else if (df_sn)
pr_info("Default Serial Number %s\n", df_sn);
for_each_child_of_node(np, node) {
rc = of_property_read_string(node, "serialnum",
&sn_buf);
if (!rc && sn_buf) {
if (dev_sn)
if (strnstr(dev_sn, sn_buf, 32))
sn_node = node;
if (df_sn)
if (strnstr(df_sn, sn_buf, 32))
df_node = node;
}
}
if (sn_node) {
node = sn_node;
df_node = NULL;
for_each_child_of_node(np, node) {
rc = of_property_read_string(node, "serialnum",
&sn_buf);
if (!rc && sn_buf) {
if (dev_sn)
if (strnstr(dev_sn, sn_buf, 32))
sn_node = node;
if (df_sn)
if (strnstr(df_sn, sn_buf, 32))
df_node = node;
}
}
if (sn_node) {
node = sn_node;
df_node = NULL;
pr_info("Battery Match Found using %s\n", sn_node->name);
} else if (df_node) {
node = df_node;
sn_node = NULL;
} else if (df_node) {
node = df_node;
sn_node = NULL;
pr_info("Battery Match Found using default %s\n",
df_node->name);
} else {
df_node->name);
} else {
pr_info("No Battery Match Found!\n");
return NULL;
}
return node;
return NULL;
}
return node;
}
static int fg_battery_parse_dt(struct sm_fg_chip *sm)