Lines Matching +full:thermal +full:- +full:diode
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Dove thermal sensor driver
14 #include <linux/thermal.h>
19 /* Dove Thermal Manager Control and Status Register */
23 /* Dove Theraml Diode Control 0 Register */
32 /* Dove Thermal Diode Control 1 Register */
36 /* Dove Thermal Sensor Dev Structure */
47 /* Configure the Diode Control Register #0 */ in dove_init_sensor()
48 reg = readl_relaxed(priv->control); in dove_init_sensor()
61 writel(reg, priv->control); in dove_init_sensor()
64 reg = readl_relaxed(priv->control); in dove_init_sensor()
65 writel((reg | PMU_TDC0_SW_RST_MASK), priv->control); in dove_init_sensor()
66 writel(reg, priv->control); in dove_init_sensor()
69 reg = readl_relaxed(priv->sensor); in dove_init_sensor()
71 writel(reg, priv->sensor); in dove_init_sensor()
75 reg = readl_relaxed(priv->sensor); in dove_init_sensor()
81 return -EIO; in dove_init_sensor()
86 static int dove_get_temp(struct thermal_zone_device *thermal, in dove_get_temp() argument
90 struct dove_thermal_priv *priv = thermal_zone_device_priv(thermal); in dove_get_temp()
93 reg = readl_relaxed(priv->control + PMU_TEMP_DIOD_CTRL1_REG); in dove_get_temp()
95 return -EIO; in dove_get_temp()
100 * Celsius = (322-reg)/1.3625 in dove_get_temp()
102 reg = readl_relaxed(priv->sensor); in dove_get_temp()
104 *temp = ((3220000000UL - (10000000UL * reg)) / 13625); in dove_get_temp()
114 { .compatible = "marvell,dove-thermal" },
120 struct thermal_zone_device *thermal = NULL; in dove_thermal_probe() local
124 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in dove_thermal_probe()
126 return -ENOMEM; in dove_thermal_probe()
128 priv->sensor = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); in dove_thermal_probe()
129 if (IS_ERR(priv->sensor)) in dove_thermal_probe()
130 return PTR_ERR(priv->sensor); in dove_thermal_probe()
132 priv->control = devm_platform_get_and_ioremap_resource(pdev, 1, NULL); in dove_thermal_probe()
133 if (IS_ERR(priv->control)) in dove_thermal_probe()
134 return PTR_ERR(priv->control); in dove_thermal_probe()
138 dev_err(&pdev->dev, "Failed to initialize sensor\n"); in dove_thermal_probe()
142 thermal = thermal_tripless_zone_device_register("dove_thermal", priv, in dove_thermal_probe()
144 if (IS_ERR(thermal)) { in dove_thermal_probe()
145 dev_err(&pdev->dev, in dove_thermal_probe()
146 "Failed to register thermal zone device\n"); in dove_thermal_probe()
147 return PTR_ERR(thermal); in dove_thermal_probe()
150 ret = thermal_zone_device_enable(thermal); in dove_thermal_probe()
152 thermal_zone_device_unregister(thermal); in dove_thermal_probe()
156 platform_set_drvdata(pdev, thermal); in dove_thermal_probe()
183 MODULE_DESCRIPTION("Dove thermal driver");