Lines Matching +full:calibration +full:- +full:data

1 // SPDX-License-Identifier: GPL-2.0
70 * Thermal zone data
86 return container_of(s, struct qoriq_tmu_data, sensor[s->id]); in qoriq_sensor_to_data()
114 regmap_read(qdata->regmap, REGS_TMR, &val); in tmu_get_temp()
116 return -EAGAIN; in tmu_get_temp()
118 if (regmap_read_poll_timeout(qdata->regmap, in tmu_get_temp()
119 REGS_TRITSR(qsensor->id), in tmu_get_temp()
124 return -ENODATA; in tmu_get_temp()
126 if (qdata->ver == TMU_VER1) { in tmu_get_temp()
150 struct qoriq_sensor *sensor = &qdata->sensor[id]; in qoriq_tmu_register_tmu_zone()
153 sensor->id = id; in qoriq_tmu_register_tmu_zone()
160 if (ret == -ENODEV) in qoriq_tmu_register_tmu_zone()
166 if (qdata->ver == TMU_VER1) in qoriq_tmu_register_tmu_zone()
167 sites |= 0x1 << (15 - id); in qoriq_tmu_register_tmu_zone()
175 if (qdata->ver == TMU_VER1) { in qoriq_tmu_register_tmu_zone()
176 regmap_write(qdata->regmap, REGS_TMR, TMR_ME | TMR_ALPF | sites); in qoriq_tmu_register_tmu_zone()
178 regmap_write(qdata->regmap, REGS_V2_TMSR, sites); in qoriq_tmu_register_tmu_zone()
179 regmap_write(qdata->regmap, REGS_TMR, TMR_ME | TMR_ALPF_V2); in qoriq_tmu_register_tmu_zone()
187 struct qoriq_tmu_data *data) in qoriq_tmu_calibration() argument
190 const u32 *calibration; in qoriq_tmu_calibration() local
191 struct device_node *np = dev->of_node; in qoriq_tmu_calibration()
193 len = of_property_count_u32_elems(np, "fsl,tmu-range"); in qoriq_tmu_calibration()
194 if (len < 0 || (data->ver == TMU_VER1 && len > NUM_TTRCR_V1) || in qoriq_tmu_calibration()
195 (data->ver > TMU_VER1 && len > NUM_TTRCR_MAX)) { in qoriq_tmu_calibration()
196 dev_err(dev, "invalid range data.\n"); in qoriq_tmu_calibration()
200 val = of_property_read_u32_array(np, "fsl,tmu-range", data->ttrcr, len); in qoriq_tmu_calibration()
202 dev_err(dev, "failed to read range data.\n"); in qoriq_tmu_calibration()
208 regmap_write(data->regmap, REGS_TTRnCR(i), data->ttrcr[i]); in qoriq_tmu_calibration()
210 calibration = of_get_property(np, "fsl,tmu-calibration", &len); in qoriq_tmu_calibration()
211 if (calibration == NULL || len % 8) { in qoriq_tmu_calibration()
212 dev_err(dev, "invalid calibration data.\n"); in qoriq_tmu_calibration()
213 return -ENODEV; in qoriq_tmu_calibration()
216 for (i = 0; i < len; i += 8, calibration += 2) { in qoriq_tmu_calibration()
217 val = of_read_number(calibration, 1); in qoriq_tmu_calibration()
218 regmap_write(data->regmap, REGS_TTCFGR, val); in qoriq_tmu_calibration()
219 val = of_read_number(calibration + 1, 1); in qoriq_tmu_calibration()
220 regmap_write(data->regmap, REGS_TSCFGR, val); in qoriq_tmu_calibration()
226 static void qoriq_tmu_init_device(struct qoriq_tmu_data *data) in qoriq_tmu_init_device() argument
229 regmap_write(data->regmap, REGS_TIER, TIER_DISABLE); in qoriq_tmu_init_device()
233 if (data->ver == TMU_VER1) { in qoriq_tmu_init_device()
234 regmap_write(data->regmap, REGS_TMTMIR, TMTMIR_DEFAULT); in qoriq_tmu_init_device()
236 regmap_write(data->regmap, REGS_V2_TMTMIR, TMTMIR_DEFAULT); in qoriq_tmu_init_device()
237 regmap_write(data->regmap, REGS_V2_TEUMR(0), TEUMR0_V2); in qoriq_tmu_init_device()
241 regmap_write(data->regmap, REGS_TMR, TMR_DISABLE); in qoriq_tmu_init_device()
256 .n_yes_ranges = ARRAY_SIZE(qoriq_yes_ranges) - 1,
266 struct qoriq_tmu_data *data = p; in qoriq_tmu_action() local
268 regmap_write(data->regmap, REGS_TMR, TMR_DISABLE); in qoriq_tmu_action()
269 clk_disable_unprepare(data->clk); in qoriq_tmu_action()
276 struct qoriq_tmu_data *data; in qoriq_tmu_probe() local
277 struct device_node *np = pdev->dev.of_node; in qoriq_tmu_probe()
278 struct device *dev = &pdev->dev; in qoriq_tmu_probe()
279 const bool little_endian = of_property_read_bool(np, "little-endian"); in qoriq_tmu_probe()
293 data = devm_kzalloc(dev, sizeof(struct qoriq_tmu_data), in qoriq_tmu_probe()
295 if (!data) in qoriq_tmu_probe()
296 return -ENOMEM; in qoriq_tmu_probe()
305 data->regmap = devm_regmap_init_mmio(dev, base, &regmap_config); in qoriq_tmu_probe()
306 ret = PTR_ERR_OR_ZERO(data->regmap); in qoriq_tmu_probe()
312 data->clk = devm_clk_get_optional(dev, NULL); in qoriq_tmu_probe()
313 if (IS_ERR(data->clk)) in qoriq_tmu_probe()
314 return PTR_ERR(data->clk); in qoriq_tmu_probe()
316 ret = clk_prepare_enable(data->clk); in qoriq_tmu_probe()
322 ret = devm_add_action_or_reset(dev, qoriq_tmu_action, data); in qoriq_tmu_probe()
327 ret = regmap_read(data->regmap, REGS_IPBRR(0), &ver); in qoriq_tmu_probe()
329 dev_err(&pdev->dev, "Failed to read IP block version\n"); in qoriq_tmu_probe()
332 data->ver = (ver >> 8) & 0xff; in qoriq_tmu_probe()
334 qoriq_tmu_init_device(data); /* TMU initialization */ in qoriq_tmu_probe()
336 ret = qoriq_tmu_calibration(dev, data); /* TMU calibration */ in qoriq_tmu_probe()
340 ret = qoriq_tmu_register_tmu_zone(dev, data); in qoriq_tmu_probe()
346 platform_set_drvdata(pdev, data); in qoriq_tmu_probe()
353 struct qoriq_tmu_data *data = dev_get_drvdata(dev); in qoriq_tmu_suspend() local
356 ret = regmap_update_bits(data->regmap, REGS_TMR, TMR_ME, 0); in qoriq_tmu_suspend()
360 if (data->ver > TMU_VER1) { in qoriq_tmu_suspend()
361 ret = regmap_set_bits(data->regmap, REGS_TMR, TMR_CMD); in qoriq_tmu_suspend()
366 clk_disable_unprepare(data->clk); in qoriq_tmu_suspend()
374 struct qoriq_tmu_data *data = dev_get_drvdata(dev); in qoriq_tmu_resume() local
376 ret = clk_prepare_enable(data->clk); in qoriq_tmu_resume()
380 if (data->ver > TMU_VER1) { in qoriq_tmu_resume()
381 ret = regmap_clear_bits(data->regmap, REGS_TMR, TMR_CMD); in qoriq_tmu_resume()
387 return regmap_update_bits(data->regmap, REGS_TMR, TMR_ME, TMR_ME); in qoriq_tmu_resume()
394 { .compatible = "fsl,qoriq-tmu", },
395 { .compatible = "fsl,imx8mq-tmu", },