mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 21:22:09 -04:00
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:
parent
d4aeb6d6f2
commit
8975cef12d
3 changed files with 57 additions and 0 deletions
|
|
@ -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>;
|
||||
};
|
||||
|
||||
==========================
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue