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