google_battery: move the fan limit setting to device tree
Bug: 264887730
Change-Id: Ic93f6a95dabf1c67e033475108d3e2bd70b73d2e
Signed-off-by: yihsiangpeng <[email protected]>
diff --git a/google_battery.c b/google_battery.c
index a37833c..b0e520b 100644
--- a/google_battery.c
+++ b/google_battery.c
@@ -402,7 +402,7 @@
int resume_delay_time;
int last_idx;
};
-
+#define NB_FAN_BT_LIMITS 4
/* battery driver state */
struct batt_drv {
struct device *device;
@@ -537,6 +537,7 @@
/* Fan control */
int fan_level;
+ int fan_bt_limits[NB_FAN_BT_LIMITS];
/* AACR: Aged Adjusted Charging Rate */
enum batt_aacr_state aacr_state;
@@ -1114,13 +1115,13 @@
return level;
}
- if (temp <= FAN_BT_LIMIT_NOT_CARE)
+ if (temp <= batt_drv->fan_bt_limits[0])
level = FAN_LVL_NOT_CARE;
- else if (temp <= FAN_BT_LIMIT_LOW)
+ else if (temp <= batt_drv->fan_bt_limits[1])
level = FAN_LVL_LOW;
- else if (temp <= FAN_BT_LIMIT_MED)
- level = FAN_LVL_LOW;
- else if (temp <= FAN_BT_LIMIT_HIGH)
+ else if (temp <= batt_drv->fan_bt_limits[2])
+ level = FAN_LVL_MED;
+ else if (temp <= batt_drv->fan_bt_limits[3])
level = FAN_LVL_HIGH;
else
level = FAN_LVL_ALARM;
@@ -8566,6 +8567,38 @@
return 0;
}
+static void batt_fan_bt_init(struct batt_drv *batt_drv) {
+ int nb_fan_bt, ret;
+
+ nb_fan_bt = of_property_count_elems_of_size(batt_drv->device->of_node,
+ "google,fan-bt-limits", sizeof(u32));
+ if (nb_fan_bt == NB_FAN_BT_LIMITS) {
+ ret = of_property_read_u32_array(batt_drv->device->of_node,
+ "google,fan-bt-limits",
+ batt_drv->fan_bt_limits,
+ nb_fan_bt);
+ if (ret == 0) {
+ int i;
+
+ pr_info("FAN_BT_LIMITS: ");
+ for (i = 0; i < nb_fan_bt; i++)
+ pr_info("%d ", batt_drv->fan_bt_limits[i]);
+
+ return;
+ } else {
+ pr_err("Fail to read google,fan-bt-limits from dtsi, ret=%d\n", ret);
+ }
+ }
+ batt_drv->fan_bt_limits[0] = FAN_BT_LIMIT_NOT_CARE;
+ batt_drv->fan_bt_limits[1] = FAN_BT_LIMIT_LOW;
+ batt_drv->fan_bt_limits[2] = FAN_BT_LIMIT_MED;
+ batt_drv->fan_bt_limits[3] = FAN_BT_LIMIT_HIGH;
+
+ pr_info("Use default FAN_BT_LIMITS: %d %d %d %d\n", batt_drv->fan_bt_limits[0],
+ batt_drv->fan_bt_limits[1],
+ batt_drv->fan_bt_limits[2],
+ batt_drv->fan_bt_limits[3]);
+}
static int batt_prop_iter(int index, gbms_tag_t *tag, void *ptr)
{
@@ -9049,6 +9082,8 @@
thermal_zone_device_update(batt_drv->tz_dev, THERMAL_DEVICE_UP);
}
+ /* Fan levels limits from battery temperature */
+ batt_fan_bt_init(batt_drv);
batt_drv->fan_level = -1;
batt_drv->fan_last_level = -1;
batt_drv->fan_level_votable =