xref: /rk3399_rockchip-uboot/drivers/thermal/fp9931_thermal.c (revision 2f6c020d95ebda22b28d3a31f574ec547a9281fb)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2024 Rockchip Electronics Co., Ltd.
4  */
5 
6 #include <common.h>
7 #include <dm.h>
8 #include <thermal.h>
9 #include <power/pmic.h>
10 #include <power/fp9931.h>
11 
12 DECLARE_GLOBAL_DATA_PTR;
13 
14 static int fp9931_get_temp(struct udevice *dev, int *temp)
15 {
16 	struct udevice *pmic = dev_get_parent(dev);
17 	int ret;
18 
19 	ret = pmic_reg_read(pmic, FP9931_TMST_VALUE);
20 	if (ret < 0)
21 		return ret;
22 
23 	*temp = *((signed char *)&ret);
24 
25 	return 0;
26 }
27 
28 static const struct dm_thermal_ops fp9931_thermal_ops = {
29 	.get_temp = fp9931_get_temp,
30 };
31 
32 static const struct udevice_id fp9931_thermal_of_match[] = {
33 	{ .compatible = FP9931_THERMAL_COMTATIBLE_NAME },
34 	{ }
35 };
36 
37 U_BOOT_DRIVER(fp9931_thermal) = {
38 	.name		= FP9931_THERMAL_COMTATIBLE_NAME,
39 	.id		= UCLASS_THERMAL,
40 	.of_match	= fp9931_thermal_of_match,
41 	.ops		= &fp9931_thermal_ops,
42 };
43