add paired id to support paired battery notification

Add paired id used to support multiple batteries notification between
reference battery and target battery.

Change-Id: I2e1d991d055834a68c38eb7372c7fae17eb297e1
Signed-off-by: yanyh2 <yanyh2@motorola.com>
Reviewed-on: https://gerrit.mot.com/2186431
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
yanyh2 2022-02-09 14:16:21 +08:00 • committed by Yonghua Yan
commit 8975cef12d
3 changed files with 57 additions and 0 deletions

View file

@ -245,6 +245,15 @@ for each line is defined by the target user of the profile data.
Definition: Unlimited array of arrays. Each internal array specifics a power supply
name, the change of which the battery is sensitive to.
- mmi,paired-id
Usage: optional
Value Type: <u32>
Definition: It will define the paired id for dual battery matching, high-16bits is used
for reference battery paired id, low-16bits is used for target battery paired id,
Only when the target battery paired id is equal to reference battery, then reference battery
information will be notified to the target battery when it is updated.
If not defined, defaults to 0.
Example:
qti_glink_charger: mmi,qti-glink-charger {
compatible = "mmi,qti-glink-charger";
@ -280,6 +289,7 @@ qti_glink_charger: mmi,qti-glink-charger {
<45 4350 3000 2000>,
<60 4200 2185 0>;
profile-ids-map = "0", "unknown-sn", "100750", "SB18C85232";
mmi,paired-id = <0x00010000>;
};
Single-battery Pack:
@ -328,6 +338,7 @@ pm7250b_mmi: qcom,qpnp-smb5-mmi {
<15 0 608 608>,
<45 4450 1210 1200>,
<60 4200 608 0>;
mmi,paired-id = <0x00010000>;
};
&flip_battery {
@ -343,6 +354,7 @@ pm7250b_mmi: qcom,qpnp-smb5-mmi {
<15 0 750 750>,
<45 4450 1250 1200>,
<60 4200 750 0>;
mmi,paired-id = <0x00000001>;
};
==========================

View file

@ -35,6 +35,9 @@
#define WARM_TEMP 45
#define COOL_TEMP 0
#define BATT_PAIR_ID_BITS 16
#define BATT_PAIR_ID_MASK ((1 << BATT_PAIR_ID_BITS) - 1)
#define HEARTBEAT_DELAY_MS 60000
#define HEARTBEAT_FACTORY_MS 1000
#define HEARTBEAT_DISCHARGE_MS 100000
@ -129,6 +132,8 @@ struct mmi_battery_pack {
int reference;
int charger_rate;
int soc_cycles_start;
int paired_id;
struct mmi_battery_pack *paired_batt;
struct mmi_battery_info *info;
char sn[MMI_BATT_SN_LEN];
struct list_head list;
@ -1313,6 +1318,39 @@ exit:
}
}
static void mmi_update_paired_battery(
struct mmi_charger_chip *chip,
struct mmi_battery_pack *battery)
{
struct mmi_battery_pack *batt = NULL;
if (!battery->paired_id) {
battery->paired_batt = NULL;
return;
}
list_for_each_entry(batt, &chip->battery_list, list) {
if ((batt->paired_id >> BATT_PAIR_ID_BITS) ==
(battery->paired_id & BATT_PAIR_ID_MASK)) {
battery->paired_batt = batt;
}
if ((battery->paired_id >> BATT_PAIR_ID_BITS) ==
(batt->paired_id & BATT_PAIR_ID_MASK)) {
batt->paired_batt = battery;
}
}
}
static void mmi_notify_paired_battery(struct mmi_charger *charger)
{
if (!charger->battery->paired_batt ||
!charger->driver->notify_paired_battery)
return;
charger->driver->notify_paired_battery(charger->driver->data,
charger->battery->paired_batt->info);
}
static void mmi_get_charger_info(struct mmi_charger_chip *chip,
struct mmi_charger *charger)
{
@ -1561,6 +1599,7 @@ static void mmi_configure_charger(struct mmi_charger_chip *chip,
cfg->charging_disable = false;
}
mmi_notify_paired_battery(charger);
charger->driver->set_constraint(charger->driver->data, &charger->constraint);
charger->driver->config_charge(charger->driver->data, cfg);
@ -1992,6 +2031,8 @@ static void mmi_charger_heartbeat_work(struct work_struct *work)
mmi_update_charger_profile(chip, charger);
mmi_reset_charger_configure(chip, charger);
mmi_update_charger_status(chip, charger);
}
list_for_each_entry(charger, &chip->charger_list, list) {
mmi_configure_charger(chip, charger);
}
mmi_update_battery_status(chip);
@ -2257,6 +2298,9 @@ int mmi_register_charger_driver(struct mmi_charger_driver *driver)
battery->cycles = 0;
battery->soc_cycles_start = 100;
memcpy(battery->sn, batt_info.batt_sn, MMI_BATT_SN_LEN);
of_property_read_u32(driver->dev->of_node, "mmi,paired-id",
&battery->paired_id);
mmi_update_paired_battery(chip, battery);
mutex_lock(&chip->battery_lock);
list_add_tail(&battery->list, &chip->battery_list);

View file

@ -110,6 +110,7 @@ struct mmi_charger_driver {
bool (*is_charge_tapered)(void *data, int tapered_ma);
bool (*is_charge_halt)(void *data);
void (*set_constraint)(void *data, struct mmi_charger_constraint *constraint);
void (*notify_paired_battery)(void *data, struct mmi_battery_info *batt_info);
void *data;
};