Lines Matching +full:uniphier +full:- +full:ld20 +full:- +full:thermal
1 // SPDX-License-Identifier: GPL-2.0
3 * uniphier_thermal.c - Socionext UniPhier thermal driver
5 * Copyright 2016-2017 Socionext Inc.
17 #include <linux/thermal.h>
73 /* SoC specific thermal sensor data */
90 struct regmap *map = tdev->regmap; in uniphier_tm_initialize_sensor()
96 regmap_write_bits(map, tdev->data->block_base + PVTCTLEN, in uniphier_tm_initialize_sensor()
101 * TMODCOEF shows non-zero and PVT refers the value internally. in uniphier_tm_initialize_sensor()
106 ret = regmap_read(map, tdev->data->map_base + TMODCOEF, &val); in uniphier_tm_initialize_sensor()
111 ret = of_property_read_u32_array(tdev->dev->of_node, in uniphier_tm_initialize_sensor()
112 "socionext,tmod-calibration", in uniphier_tm_initialize_sensor()
118 regmap_write(map, tdev->data->tmod_setup_addr, in uniphier_tm_initialize_sensor()
124 regmap_write_bits(map, tdev->data->block_base + PVTCTLMODE, in uniphier_tm_initialize_sensor()
128 regmap_write_bits(map, tdev->data->block_base + EMONREPEAT, in uniphier_tm_initialize_sensor()
133 regmap_write_bits(map, tdev->data->map_base + PVTCTLSEL, in uniphier_tm_initialize_sensor()
142 struct regmap *map = tdev->regmap; in uniphier_tm_set_alert()
145 regmap_write_bits(map, tdev->data->map_base + SETALERT0 + (ch << 2), in uniphier_tm_set_alert()
153 struct regmap *map = tdev->regmap; in uniphier_tm_enable_sensor()
158 if (tdev->alert_en[i]) in uniphier_tm_enable_sensor()
162 regmap_write_bits(map, tdev->data->map_base + PMALERTINTCTL, in uniphier_tm_enable_sensor()
166 regmap_write_bits(map, tdev->data->block_base + PVTCTLEN, in uniphier_tm_enable_sensor()
174 struct regmap *map = tdev->regmap; in uniphier_tm_disable_sensor()
177 regmap_write_bits(map, tdev->data->map_base + PMALERTINTCTL, in uniphier_tm_disable_sensor()
181 regmap_write_bits(map, tdev->data->block_base + PVTCTLEN, in uniphier_tm_disable_sensor()
190 struct regmap *map = tdev->regmap; in uniphier_tm_get_temp()
194 ret = regmap_read(map, tdev->data->map_base + TMOD, &temp); in uniphier_tm_get_temp()
199 *out_temp = sign_extend32(temp, TMOD_WIDTH - 1) * 1000; in uniphier_tm_get_temp()
219 regmap_write_bits(tdev->regmap, in uniphier_tm_irq_clear()
220 tdev->data->map_base + PMALERTINTCTL, mask, bits); in uniphier_tm_irq_clear()
237 thermal_zone_device_update(tdev->tz_dev, THERMAL_EVENT_UNSPECIFIED); in uniphier_tm_alarm_irq_thread()
244 struct device *dev = &pdev->dev; in uniphier_tm_probe()
252 return -ENOMEM; in uniphier_tm_probe()
253 tdev->dev = dev; in uniphier_tm_probe()
255 tdev->data = of_device_get_match_data(dev); in uniphier_tm_probe()
256 if (WARN_ON(!tdev->data)) in uniphier_tm_probe()
257 return -EINVAL; in uniphier_tm_probe()
264 parent = of_get_parent(dev->of_node); /* parent should be syscon node */ in uniphier_tm_probe()
272 tdev->regmap = regmap; in uniphier_tm_probe()
282 0, "thermal", tdev); in uniphier_tm_probe()
288 tdev->tz_dev = devm_thermal_of_zone_register(dev, 0, tdev, in uniphier_tm_probe()
290 if (IS_ERR(tdev->tz_dev)) { in uniphier_tm_probe()
292 return PTR_ERR(tdev->tz_dev); in uniphier_tm_probe()
296 for (i = 0; i < thermal_zone_get_num_trips(tdev->tz_dev); i++) { in uniphier_tm_probe()
299 ret = thermal_zone_get_trip(tdev->tz_dev, i, &trip); in uniphier_tm_probe()
307 tdev->alert_en[i] = true; in uniphier_tm_probe()
312 return -EINVAL; in uniphier_tm_probe()
344 .compatible = "socionext,uniphier-pxs2-thermal",
348 .compatible = "socionext,uniphier-ld20-thermal",
352 .compatible = "socionext,uniphier-pxs3-thermal",
356 .compatible = "socionext,uniphier-nx1-thermal",
367 .name = "uniphier-thermal",
374 MODULE_DESCRIPTION("UniPhier thermal driver");