Merge ab1e3c58366864a0795dd1fff31d74a20c61a70d on remote branch
Change-Id: Ib8df6e35ae3d6be4c85ee5d83312f3a99e4c8dcc
diff --git a/android.hardware.thermal@2.0-service.qti-v2.rc b/android.hardware.thermal@2.0-service.qti-v2.rc
index a1100b6..29d9cbc 100644
--- a/android.hardware.thermal@2.0-service.qti-v2.rc
+++ b/android.hardware.thermal@2.0-service.qti-v2.rc
@@ -1,4 +1,5 @@
# Copyright (c) 2021, The Linux Foundation. All rights reserved.
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -32,7 +33,3 @@
class hal
user root
group root
-
-on boot
- wait /sys/kernel/boot_adsp/boot
- restart android.thermal-hal
diff --git a/thermalMonitorNetlink.cpp b/thermalMonitorNetlink.cpp
index b8e7128..f081363 100644
--- a/thermalMonitorNetlink.cpp
+++ b/thermalMonitorNetlink.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -73,11 +74,13 @@
}
ThermalMonitor::ThermalMonitor(const eventMonitorCB &inp_event_cb,
- const eventMonitorCB &inp_sample_cb):
+ const eventMonitorCB &inp_sample_cb,
+ const eventCreateMonitorCB &inp_event_create_cb):
event_group(-1),
sample_group(-1),
event_cb(inp_event_cb),
- sample_cb(inp_sample_cb)
+ sample_cb(inp_sample_cb),
+ event_create_cb(inp_event_create_cb)
{
monitor_shutdown = false;
}
@@ -99,6 +102,7 @@
struct genlmsghdr *hdr = genlmsg_hdr(nl_hdr);
struct nlattr *attrs[THERMAL_GENL_ATTR_MAX + 1];
int tzn = -1, trip = -1;
+ const char *tz_name = "";
genlmsg_parse(nl_hdr, 0, attrs, THERMAL_GENL_ATTR_MAX, NULL);
@@ -111,10 +115,19 @@
if (attrs[THERMAL_GENL_ATTR_TZ_TRIP_ID])
trip = nla_get_u32(
attrs[THERMAL_GENL_ATTR_TZ_TRIP_ID]);
- LOG(INFO) << "thermal_nl_event: TZ:" << tzn << " Trip:"
- << trip << "event:" << hdr->cmd << std::endl;
+ LOG(DEBUG) << "thermal_nl_event: TZ:" << tzn << " Trip:"
+ << trip << "event:" << (int)hdr->cmd << std::endl;
event_cb(tzn, trip);
break;
+ case THERMAL_GENL_EVENT_TZ_CREATE:
+ if (attrs[THERMAL_GENL_ATTR_TZ_ID])
+ tzn = nla_get_u32(attrs[THERMAL_GENL_ATTR_TZ_ID]);
+ if (attrs[THERMAL_GENL_ATTR_TZ_NAME])
+ tz_name = nla_get_string(attrs[THERMAL_GENL_ATTR_TZ_NAME]);
+ LOG(DEBUG) << "thermal_nl_event: TZ_CREATE: TZ:" << tzn << " TZ_NAME:"
+ << tz_name << "event:" << (int)hdr->cmd << std::endl;
+ event_create_cb(tzn, tz_name);
+ break;
}
return 0;
diff --git a/thermalMonitorNetlink.h b/thermalMonitorNetlink.h
index 7ad87dd..7e42690 100644
--- a/thermalMonitorNetlink.h
+++ b/thermalMonitorNetlink.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -46,11 +47,13 @@
namespace implementation {
using eventMonitorCB = std::function<void(int, int)>;
+using eventCreateMonitorCB = std::function<void(int, const char *)>;
class ThermalMonitor {
public:
ThermalMonitor(const eventMonitorCB &inp_event_cb,
- const eventMonitorCB &inp_sample_cb);
+ const eventMonitorCB &inp_sample_cb,
+ const eventCreateMonitorCB &inp_event_create_cb);
~ThermalMonitor();
void parse_and_notify(char *inp_buf, ssize_t len);
@@ -68,6 +71,7 @@
int event_group, sample_group;
bool monitor_shutdown;
eventMonitorCB event_cb, sample_cb;
+ eventCreateMonitorCB event_create_cb;
int fetch_group_id();
int send_nl_msg(struct nl_msg *msg);
diff --git a/thermalUtilsNetlink.cpp b/thermalUtilsNetlink.cpp
index b709404..2b340f8 100644
--- a/thermalUtilsNetlink.cpp
+++ b/thermalUtilsNetlink.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -52,6 +53,9 @@
std::placeholders::_2),
std::bind(&ThermalUtils::sampleParse, this,
std::placeholders::_1,
+ std::placeholders::_2),
+ std::bind(&ThermalUtils::eventCreateParse, this,
+ std::placeholders::_1,
std::placeholders::_2)),
cb(inp_cb)
{
@@ -72,8 +76,8 @@
cmnInst.estimateSeverity(sens);
cmnInst.initThreshold(sens);
}
- monitor.start();
}
+ monitor.start();
ret = cmnInst.initCdev();
if (ret > 0) {
is_cdev_init = true;
@@ -121,6 +125,45 @@
return Notify(sens);
}
+void ThermalUtils::eventCreateParse(int tzn, const char *name)
+{
+ int ret = 0;
+ std::vector<struct therm_sensor> sensorList;
+ std::vector<struct target_therm_cfg> therm_cfg = cfg.fetchConfig();
+ std::vector<struct target_therm_cfg>::iterator it_vec;
+ std::vector<std::string>::iterator it;
+
+ if (isSensorInitialized())
+ return;
+ for (it_vec = therm_cfg.begin();
+ it_vec != therm_cfg.end(); it_vec++) {
+ for (it = it_vec->sensor_list.begin();
+ it != it_vec->sensor_list.end(); it++) {
+ if (!it->compare(name))
+ break;
+ }
+ if (it != it_vec->sensor_list.end())
+ break;
+ }
+ if (it_vec == therm_cfg.end()) {
+ LOG(DEBUG) << "sensor is not monitored:" << tzn
+ << std::endl;
+ return;
+ }
+ ret = cmnInst.initThermalZones(therm_cfg);
+ if (ret > 0) {
+ is_sensor_init = true;
+ sensorList = cmnInst.fetch_sensor_list();
+ std::lock_guard<std::mutex> _lock(sens_cb_mutex);
+ for (struct therm_sensor sens: sensorList) {
+ thermalConfig[sens.tzn] = sens;
+ cmnInst.read_temperature(sens);
+ cmnInst.estimateSeverity(sens);
+ cmnInst.initThreshold(sens);
+ }
+ }
+}
+
int ThermalUtils::readTemperatures(hidl_vec<Temperature_1_0>& temp)
{
std::unordered_map<int, struct therm_sensor>::iterator it;
diff --git a/thermalUtilsNetlink.h b/thermalUtilsNetlink.h
index 7d9abff..dc72f5c 100644
--- a/thermalUtilsNetlink.h
+++ b/thermalUtilsNetlink.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -81,6 +82,7 @@
void eventParse(int tzn, int trip);
void sampleParse(int tzn, int temp);
+ void eventCreateParse(int tzn, const char *name);
void Notify(struct therm_sensor& sens);
};