• Home
  • Raw
  • Download

Lines Matching +full:thermal +full:- +full:sensor

2  * Dove thermal sensor driver
23 #include <linux/thermal.h>
28 /* Dove Thermal Manager Control and Status Register */
41 /* Dove Thermal Diode Control 1 Register */
45 /* Dove Thermal Sensor Dev Structure */
47 void __iomem *sensor; member
57 reg = readl_relaxed(priv->control); in dove_init_sensor()
70 writel(reg, priv->control); in dove_init_sensor()
72 /* Reset the sensor */ in dove_init_sensor()
73 reg = readl_relaxed(priv->control); in dove_init_sensor()
74 writel((reg | PMU_TDC0_SW_RST_MASK), priv->control); in dove_init_sensor()
75 writel(reg, priv->control); in dove_init_sensor()
77 /* Enable the sensor */ in dove_init_sensor()
78 reg = readl_relaxed(priv->sensor); in dove_init_sensor()
80 writel(reg, priv->sensor); in dove_init_sensor()
82 /* Poll the sensor for the first reading */ in dove_init_sensor()
84 reg = readl_relaxed(priv->sensor); in dove_init_sensor()
90 return -EIO; in dove_init_sensor()
95 static int dove_get_temp(struct thermal_zone_device *thermal, in dove_get_temp() argument
99 struct dove_thermal_priv *priv = thermal->devdata; in dove_get_temp()
102 reg = readl_relaxed(priv->control + PMU_TEMP_DIOD_CTRL1_REG); in dove_get_temp()
104 dev_err(&thermal->device, in dove_get_temp()
105 "Temperature sensor reading not valid\n"); in dove_get_temp()
106 return -EIO; in dove_get_temp()
112 * Celsius = (322-reg)/1.3625 in dove_get_temp()
114 reg = readl_relaxed(priv->sensor); in dove_get_temp()
116 *temp = ((3220000000UL - (10000000UL * reg)) / 13625); in dove_get_temp()
126 { .compatible = "marvell,dove-thermal" },
132 struct thermal_zone_device *thermal = NULL; in dove_thermal_probe() local
137 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in dove_thermal_probe()
139 return -ENOMEM; in dove_thermal_probe()
142 priv->sensor = devm_ioremap_resource(&pdev->dev, res); in dove_thermal_probe()
143 if (IS_ERR(priv->sensor)) in dove_thermal_probe()
144 return PTR_ERR(priv->sensor); in dove_thermal_probe()
147 priv->control = devm_ioremap_resource(&pdev->dev, res); in dove_thermal_probe()
148 if (IS_ERR(priv->control)) in dove_thermal_probe()
149 return PTR_ERR(priv->control); in dove_thermal_probe()
153 dev_err(&pdev->dev, "Failed to initialize sensor\n"); in dove_thermal_probe()
157 thermal = thermal_zone_device_register("dove_thermal", 0, 0, in dove_thermal_probe()
159 if (IS_ERR(thermal)) { in dove_thermal_probe()
160 dev_err(&pdev->dev, in dove_thermal_probe()
161 "Failed to register thermal zone device\n"); in dove_thermal_probe()
162 return PTR_ERR(thermal); in dove_thermal_probe()
165 platform_set_drvdata(pdev, thermal); in dove_thermal_probe()
194 MODULE_DESCRIPTION("Dove thermal driver");