diff mbox series

[RFC,v2,81/96] cl8k: add temperature.h

Message ID 20220524113502.1094459-82-viktor.barna@celeno.com
State New
Headers show
Series wireless: cl8k driver for Celeno IEEE 802.11ax devices | expand

Commit Message

Viktor Barna May 24, 2022, 11:34 a.m. UTC
From: Viktor Barna <viktor.barna@celeno.com>

(Part of the split. Please, take a look at the cover letter for more
details).

Signed-off-by: Viktor Barna <viktor.barna@celeno.com>
---
 .../net/wireless/celeno/cl8k/temperature.h    | 71 +++++++++++++++++++
 1 file changed, 71 insertions(+)
 create mode 100644 drivers/net/wireless/celeno/cl8k/temperature.h
diff mbox series

Patch

diff --git a/drivers/net/wireless/celeno/cl8k/temperature.h b/drivers/net/wireless/celeno/cl8k/temperature.h
new file mode 100644
index 000000000000..e5ab770199e8
--- /dev/null
+++ b/drivers/net/wireless/celeno/cl8k/temperature.h
@@ -0,0 +1,71 @@ 
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
+/* Copyright(c) 2019-2022, Celeno Communications Ltd. */
+
+#ifndef CL_TEMPERATURE_H
+#define CL_TEMPERATURE_H
+
+#include <net/mac80211.h>
+
+#define CL_TEMP_PROTECT_INTERVAL_MS       40000
+#define CL_TEMP_PROTECT_NUM_SAMPLES       4
+#define CL_TEMP_PROTECT_RADIO_OFF_HYST    10
+#define CL_TEMP_COMP_ITERATIONS           4
+#define CL_TEMPERATURE_TIMER_INTERVAL_MS  4000
+#define CL_TEMPERATURE_UPDATE_INTERVAL_MS (CL_TEMPERATURE_TIMER_INTERVAL_MS - 100)
+
+enum cl_temp_state {
+	TEMP_PROTECT_OFF,
+	TEMP_PROTECT_INTERNAL,
+	TEMP_PROTECT_EXTERNAL,
+	TEMP_PROTECT_DIFF
+};
+
+enum cl_temp_mode {
+	TEMP_MODE_INTERNAL,
+	TEMP_MODE_EXTERNAL
+};
+
+struct cl_temp_comp_db {
+	s8 calib_temperature;
+	s8 power_offset;
+	s32 acc_temp_delta;
+	s32 avg_temp_delta;
+};
+
+struct cl_temp_protect_db {
+	bool force_radio_off;
+	u8 duty_cycle;
+	u8 test_mode_duty_cycle;
+	u8 curr_idx;
+	s16 last_samples[CL_TEMP_PROTECT_NUM_SAMPLES];
+	unsigned long last_timestamp;
+};
+
+struct cl_temperature {
+	s8 diff_internal_external;
+	u8 comp_iterations;
+	struct cl_temp_protect_db protect_db;
+	struct task_struct *kthread;
+	wait_queue_head_t wait_done;
+	wait_queue_head_t measurement_done;
+	s16 internal_last;
+	s16 external_last;
+	unsigned long internal_read_timestamp;
+	unsigned long external_read_timestamp;
+	struct mutex mutex;
+	struct mutex hw_lock;
+	unsigned long used_hw_map;
+};
+
+struct cl_chip;
+
+void cl_temperature_init(struct cl_chip *chip);
+void cl_temperature_close(struct cl_chip *chip);
+s8 cl_temperature_read(struct cl_hw *cl_hw, enum cl_temp_mode mode);
+void cl_temperature_recovery(struct cl_hw *cl_hw);
+int cl_temperature_diff_e2p_read(struct cl_hw *cl_hw);
+s16 cl_temperature_calib_calc(struct cl_hw *cl_hw, u16 raw_bits);
+void cl_temperature_comp_update_calib(struct cl_hw *cl_hw);
+void cl_temperature_wait_for_measurement(struct cl_chip *chip, u8 tcv_idx);
+
+#endif /* CL_TEMPERATURE_H */