Lines Matching +full:thermal +full:- +full:sensors

1 // SPDX-License-Identifier: GPL-2.0
16 #include <linux/thermal.h>
35 #define VER2_TEMP_LOW_LIMIT -40000
57 struct tmu_sensor sensors[]; member
63 struct imx8mm_tmu *tmu = sensor->priv; in imx8mm_tmu_get_temp()
66 val = readl_relaxed(tmu->base + TRITSR) & TRITSR_TEMP0_VAL_MASK; in imx8mm_tmu_get_temp()
69 return -EAGAIN; in imx8mm_tmu_get_temp()
77 struct imx8mm_tmu *tmu = sensor->priv; in imx8mp_tmu_get_temp()
81 val = readl_relaxed(tmu->base + TRITSR); in imx8mp_tmu_get_temp()
82 ready = test_bit(probe_status_offset(sensor->hw_id), &val); in imx8mp_tmu_get_temp()
84 return -EAGAIN; in imx8mp_tmu_get_temp()
86 val = sensor->hw_id ? FIELD_GET(TRITSR_TEMP1_VAL_MASK, val) : in imx8mp_tmu_get_temp()
93 return -EAGAIN; in imx8mp_tmu_get_temp()
101 struct imx8mm_tmu *tmu = sensor->priv; in tmu_get_temp()
103 return tmu->socdata->get_temp(data, temp); in tmu_get_temp()
114 val = readl_relaxed(tmu->base + TER); in imx8mm_tmu_enable()
116 writel_relaxed(val, tmu->base + TER); in imx8mm_tmu_enable()
123 val = readl_relaxed(tmu->base + TPS); in imx8mm_tmu_probe_sel_all()
125 writel_relaxed(val, tmu->base + TPS); in imx8mm_tmu_probe_sel_all()
135 data = of_device_get_match_data(&pdev->dev); in imx8mm_tmu_probe()
137 tmu = devm_kzalloc(&pdev->dev, struct_size(tmu, sensors, in imx8mm_tmu_probe()
138 data->num_sensors), GFP_KERNEL); in imx8mm_tmu_probe()
140 return -ENOMEM; in imx8mm_tmu_probe()
142 tmu->socdata = data; in imx8mm_tmu_probe()
144 tmu->base = devm_platform_ioremap_resource(pdev, 0); in imx8mm_tmu_probe()
145 if (IS_ERR(tmu->base)) in imx8mm_tmu_probe()
146 return PTR_ERR(tmu->base); in imx8mm_tmu_probe()
148 tmu->clk = devm_clk_get(&pdev->dev, NULL); in imx8mm_tmu_probe()
149 if (IS_ERR(tmu->clk)) in imx8mm_tmu_probe()
150 return dev_err_probe(&pdev->dev, PTR_ERR(tmu->clk), in imx8mm_tmu_probe()
153 ret = clk_prepare_enable(tmu->clk); in imx8mm_tmu_probe()
155 dev_err(&pdev->dev, "failed to enable tmu clock: %d\n", ret); in imx8mm_tmu_probe()
162 for (i = 0; i < data->num_sensors; i++) { in imx8mm_tmu_probe()
163 tmu->sensors[i].priv = tmu; in imx8mm_tmu_probe()
164 tmu->sensors[i].tzd = in imx8mm_tmu_probe()
165 devm_thermal_zone_of_sensor_register(&pdev->dev, i, in imx8mm_tmu_probe()
166 &tmu->sensors[i], in imx8mm_tmu_probe()
168 if (IS_ERR(tmu->sensors[i].tzd)) { in imx8mm_tmu_probe()
169 dev_err(&pdev->dev, in imx8mm_tmu_probe()
170 "failed to register thermal zone sensor[%d]: %d\n", in imx8mm_tmu_probe()
172 return PTR_ERR(tmu->sensors[i].tzd); in imx8mm_tmu_probe()
174 tmu->sensors[i].hw_id = i; in imx8mm_tmu_probe()
180 if (tmu->socdata->version == TMU_VER2) in imx8mm_tmu_probe()
196 clk_disable_unprepare(tmu->clk); in imx8mm_tmu_remove()
215 { .compatible = "fsl,imx8mm-tmu", .data = &imx8mm_tmu_data, },
216 { .compatible = "fsl,imx8mp-tmu", .data = &imx8mp_tmu_data, },
232 MODULE_DESCRIPTION("i.MX8MM Thermal Monitor Unit driver");