Lines Matching +full:calibration +full:- +full:data
1 // SPDX-License-Identifier: GPL-2.0
67 * Thermal zone data
82 return container_of(s, struct qoriq_tmu_data, sensor[s->id]); in qoriq_sensor_to_data()
109 if (regmap_read_poll_timeout(qdata->regmap, in tmu_get_temp()
110 REGS_TRITSR(qsensor->id), in tmu_get_temp()
115 return -ENODATA; in tmu_get_temp()
117 if (qdata->ver == TMU_VER1) in tmu_get_temp()
134 if (qdata->ver == TMU_VER1) { in qoriq_tmu_register_tmu_zone()
135 regmap_write(qdata->regmap, REGS_TMR, in qoriq_tmu_register_tmu_zone()
138 regmap_write(qdata->regmap, REGS_V2_TMSR, TMR_MSITE_ALL); in qoriq_tmu_register_tmu_zone()
139 regmap_write(qdata->regmap, REGS_TMR, TMR_ME | TMR_ALPF_V2); in qoriq_tmu_register_tmu_zone()
144 struct qoriq_sensor *sensor = &qdata->sensor[id]; in qoriq_tmu_register_tmu_zone()
147 sensor->id = id; in qoriq_tmu_register_tmu_zone()
154 if (ret == -ENODEV) in qoriq_tmu_register_tmu_zone()
157 regmap_write(qdata->regmap, REGS_TMR, TMR_DISABLE); in qoriq_tmu_register_tmu_zone()
171 struct qoriq_tmu_data *data) in qoriq_tmu_calibration() argument
175 const u32 *calibration; in qoriq_tmu_calibration() local
176 struct device_node *np = dev->of_node; in qoriq_tmu_calibration()
178 len = of_property_count_u32_elems(np, "fsl,tmu-range"); in qoriq_tmu_calibration()
180 dev_err(dev, "invalid range data.\n"); in qoriq_tmu_calibration()
184 val = of_property_read_u32_array(np, "fsl,tmu-range", range, len); in qoriq_tmu_calibration()
186 dev_err(dev, "failed to read range data.\n"); in qoriq_tmu_calibration()
192 regmap_write(data->regmap, REGS_TTRnCR(i), range[i]); in qoriq_tmu_calibration()
194 calibration = of_get_property(np, "fsl,tmu-calibration", &len); in qoriq_tmu_calibration()
195 if (calibration == NULL || len % 8) { in qoriq_tmu_calibration()
196 dev_err(dev, "invalid calibration data.\n"); in qoriq_tmu_calibration()
197 return -ENODEV; in qoriq_tmu_calibration()
200 for (i = 0; i < len; i += 8, calibration += 2) { in qoriq_tmu_calibration()
201 val = of_read_number(calibration, 1); in qoriq_tmu_calibration()
202 regmap_write(data->regmap, REGS_TTCFGR, val); in qoriq_tmu_calibration()
203 val = of_read_number(calibration + 1, 1); in qoriq_tmu_calibration()
204 regmap_write(data->regmap, REGS_TSCFGR, val); in qoriq_tmu_calibration()
210 static void qoriq_tmu_init_device(struct qoriq_tmu_data *data) in qoriq_tmu_init_device() argument
215 regmap_write(data->regmap, REGS_TIER, TIER_DISABLE); in qoriq_tmu_init_device()
219 if (data->ver == TMU_VER1) { in qoriq_tmu_init_device()
220 regmap_write(data->regmap, REGS_TMTMIR, TMTMIR_DEFAULT); in qoriq_tmu_init_device()
222 regmap_write(data->regmap, REGS_V2_TMTMIR, TMTMIR_DEFAULT); in qoriq_tmu_init_device()
223 regmap_write(data->regmap, REGS_V2_TEUMR(0), TEUMR0_V2); in qoriq_tmu_init_device()
225 regmap_write(data->regmap, REGS_V2_TMSAR(i), TMSARA_V2); in qoriq_tmu_init_device()
229 regmap_write(data->regmap, REGS_TMR, TMR_DISABLE); in qoriq_tmu_init_device()
244 .n_yes_ranges = ARRAY_SIZE(qoriq_yes_ranges) - 1,
254 struct qoriq_tmu_data *data = p; in qoriq_tmu_action() local
256 regmap_write(data->regmap, REGS_TMR, TMR_DISABLE); in qoriq_tmu_action()
257 clk_disable_unprepare(data->clk); in qoriq_tmu_action()
264 struct qoriq_tmu_data *data; in qoriq_tmu_probe() local
265 struct device_node *np = pdev->dev.of_node; in qoriq_tmu_probe()
266 struct device *dev = &pdev->dev; in qoriq_tmu_probe()
267 const bool little_endian = of_property_read_bool(np, "little-endian"); in qoriq_tmu_probe()
281 data = devm_kzalloc(dev, sizeof(struct qoriq_tmu_data), in qoriq_tmu_probe()
283 if (!data) in qoriq_tmu_probe()
284 return -ENOMEM; in qoriq_tmu_probe()
293 data->regmap = devm_regmap_init_mmio(dev, base, ®map_config); in qoriq_tmu_probe()
294 ret = PTR_ERR_OR_ZERO(data->regmap); in qoriq_tmu_probe()
300 data->clk = devm_clk_get_optional(dev, NULL); in qoriq_tmu_probe()
301 if (IS_ERR(data->clk)) in qoriq_tmu_probe()
302 return PTR_ERR(data->clk); in qoriq_tmu_probe()
304 ret = clk_prepare_enable(data->clk); in qoriq_tmu_probe()
310 ret = devm_add_action_or_reset(dev, qoriq_tmu_action, data); in qoriq_tmu_probe()
315 ret = regmap_read(data->regmap, REGS_IPBRR(0), &ver); in qoriq_tmu_probe()
317 dev_err(&pdev->dev, "Failed to read IP block version\n"); in qoriq_tmu_probe()
320 data->ver = (ver >> 8) & 0xff; in qoriq_tmu_probe()
322 qoriq_tmu_init_device(data); /* TMU initialization */ in qoriq_tmu_probe()
324 ret = qoriq_tmu_calibration(dev, data); /* TMU calibration */ in qoriq_tmu_probe()
328 ret = qoriq_tmu_register_tmu_zone(dev, data); in qoriq_tmu_probe()
334 platform_set_drvdata(pdev, data); in qoriq_tmu_probe()
341 struct qoriq_tmu_data *data = dev_get_drvdata(dev); in qoriq_tmu_suspend() local
344 ret = regmap_update_bits(data->regmap, REGS_TMR, TMR_ME, 0); in qoriq_tmu_suspend()
348 clk_disable_unprepare(data->clk); in qoriq_tmu_suspend()
356 struct qoriq_tmu_data *data = dev_get_drvdata(dev); in qoriq_tmu_resume() local
358 ret = clk_prepare_enable(data->clk); in qoriq_tmu_resume()
363 return regmap_update_bits(data->regmap, REGS_TMR, TMR_ME, TMR_ME); in qoriq_tmu_resume()
370 { .compatible = "fsl,qoriq-tmu", },
371 { .compatible = "fsl,imx8mq-tmu", },