xref: /aosp_15_r20/external/arm-trusted-firmware/drivers/marvell/thermal.c (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (C) 2018 Marvell International Ltd.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier:	BSD-3-Clause
5*54fd6939SJiyong Park  * https://spdx.org/licenses
6*54fd6939SJiyong Park  */
7*54fd6939SJiyong Park 
8*54fd6939SJiyong Park /* Driver for thermal unit located in Marvell ARMADA 8K and compatible SoCs */
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <common/debug.h>
11*54fd6939SJiyong Park #include <drivers/marvell/thermal.h>
12*54fd6939SJiyong Park 
marvell_thermal_init(struct tsen_config * tsen_cfg)13*54fd6939SJiyong Park int marvell_thermal_init(struct tsen_config *tsen_cfg)
14*54fd6939SJiyong Park {
15*54fd6939SJiyong Park 	if (tsen_cfg->tsen_ready == 1) {
16*54fd6939SJiyong Park 		INFO("thermal sensor is already initialized\n");
17*54fd6939SJiyong Park 		return 0;
18*54fd6939SJiyong Park 	}
19*54fd6939SJiyong Park 
20*54fd6939SJiyong Park 	if (tsen_cfg->ptr_tsen_probe == NULL) {
21*54fd6939SJiyong Park 		ERROR("initial thermal sensor configuration is missing\n");
22*54fd6939SJiyong Park 		return -1;
23*54fd6939SJiyong Park 	}
24*54fd6939SJiyong Park 
25*54fd6939SJiyong Park 	if (tsen_cfg->ptr_tsen_probe(tsen_cfg)) {
26*54fd6939SJiyong Park 		ERROR("thermal sensor initialization failed\n");
27*54fd6939SJiyong Park 		return -1;
28*54fd6939SJiyong Park 	}
29*54fd6939SJiyong Park 
30*54fd6939SJiyong Park 	VERBOSE("thermal sensor was initialized\n");
31*54fd6939SJiyong Park 
32*54fd6939SJiyong Park 	return 0;
33*54fd6939SJiyong Park }
34*54fd6939SJiyong Park 
marvell_thermal_read(struct tsen_config * tsen_cfg,int * temp)35*54fd6939SJiyong Park int marvell_thermal_read(struct tsen_config *tsen_cfg, int *temp)
36*54fd6939SJiyong Park {
37*54fd6939SJiyong Park 	if (temp == NULL) {
38*54fd6939SJiyong Park 		ERROR("NULL pointer for temperature read\n");
39*54fd6939SJiyong Park 		return -1;
40*54fd6939SJiyong Park 	}
41*54fd6939SJiyong Park 
42*54fd6939SJiyong Park 	if (tsen_cfg->ptr_tsen_read == NULL ||
43*54fd6939SJiyong Park 	    tsen_cfg->tsen_ready == 0) {
44*54fd6939SJiyong Park 		ERROR("thermal sensor was not initialized\n");
45*54fd6939SJiyong Park 		return -1;
46*54fd6939SJiyong Park 	}
47*54fd6939SJiyong Park 
48*54fd6939SJiyong Park 	if (tsen_cfg->ptr_tsen_read(tsen_cfg, temp)) {
49*54fd6939SJiyong Park 		ERROR("temperature read failed\n");
50*54fd6939SJiyong Park 		return -1;
51*54fd6939SJiyong Park 	}
52*54fd6939SJiyong Park 
53*54fd6939SJiyong Park 	return 0;
54*54fd6939SJiyong Park }
55