Lines Matching refs:data

222 static void imx_set_panic_temp(struct imx_thermal_data *data,  in imx_set_panic_temp()  argument
225 const struct thermal_soc_data *soc_data = data->socdata; in imx_set_panic_temp()
226 struct regmap *map = data->tempmon; in imx_set_panic_temp()
229 critical_value = (data->c2 - panic_temp) / data->c1; in imx_set_panic_temp()
237 static void imx_set_alarm_temp(struct imx_thermal_data *data, in imx_set_alarm_temp() argument
240 struct regmap *map = data->tempmon; in imx_set_alarm_temp()
241 const struct thermal_soc_data *soc_data = data->socdata; in imx_set_alarm_temp()
244 data->alarm_temp = alarm_temp; in imx_set_alarm_temp()
246 if (data->socdata->version == TEMPMON_IMX7D) in imx_set_alarm_temp()
247 alarm_value = alarm_temp / 1000 + data->c1 - 25; in imx_set_alarm_temp()
249 alarm_value = (data->c2 - alarm_temp) / data->c1; in imx_set_alarm_temp()
259 struct imx_thermal_data *data = tz->devdata; in imx_get_temp() local
260 const struct thermal_soc_data *soc_data = data->socdata; in imx_get_temp()
261 struct regmap *map = data->tempmon; in imx_get_temp()
266 if (data->mode == THERMAL_DEVICE_ENABLED) { in imx_get_temp()
293 if (data->mode != THERMAL_DEVICE_ENABLED) { in imx_get_temp()
309 if (data->socdata->version == TEMPMON_IMX7D) in imx_get_temp()
310 *temp = (n_meas - data->c1 + 25) * 1000; in imx_get_temp()
312 *temp = data->c2 - n_meas * data->c1; in imx_get_temp()
315 if (data->socdata->version == TEMPMON_IMX6Q) { in imx_get_temp()
316 if (data->alarm_temp == data->temp_passive && in imx_get_temp()
317 *temp >= data->temp_passive) in imx_get_temp()
318 imx_set_alarm_temp(data, data->temp_critical); in imx_get_temp()
319 if (data->alarm_temp == data->temp_critical && in imx_get_temp()
320 *temp < data->temp_passive) { in imx_get_temp()
321 imx_set_alarm_temp(data, data->temp_passive); in imx_get_temp()
323 data->alarm_temp / 1000); in imx_get_temp()
327 if (*temp != data->last_temp) { in imx_get_temp()
329 data->last_temp = *temp; in imx_get_temp()
333 if (!data->irq_enabled && *temp < data->alarm_temp) { in imx_get_temp()
334 data->irq_enabled = true; in imx_get_temp()
335 enable_irq(data->irq); in imx_get_temp()
344 struct imx_thermal_data *data = tz->devdata; in imx_get_mode() local
346 *mode = data->mode; in imx_get_mode()
354 struct imx_thermal_data *data = tz->devdata; in imx_set_mode() local
355 struct regmap *map = data->tempmon; in imx_set_mode()
356 const struct thermal_soc_data *soc_data = data->socdata; in imx_set_mode()
367 if (!data->irq_enabled) { in imx_set_mode()
368 data->irq_enabled = true; in imx_set_mode()
369 enable_irq(data->irq); in imx_set_mode()
380 if (data->irq_enabled) { in imx_set_mode()
381 disable_irq(data->irq); in imx_set_mode()
382 data->irq_enabled = false; in imx_set_mode()
386 data->mode = mode; in imx_set_mode()
402 struct imx_thermal_data *data = tz->devdata; in imx_get_crit_temp() local
404 *temp = data->temp_critical; in imx_get_crit_temp()
411 struct imx_thermal_data *data = tz->devdata; in imx_get_trip_temp() local
413 *temp = (trip == IMX_TRIP_PASSIVE) ? data->temp_passive : in imx_get_trip_temp()
414 data->temp_critical; in imx_get_trip_temp()
421 struct imx_thermal_data *data = tz->devdata; in imx_set_trip_temp() local
428 if (temp < 0 || temp > data->temp_critical) in imx_set_trip_temp()
431 data->temp_passive = temp; in imx_set_trip_temp()
433 imx_set_alarm_temp(data, temp); in imx_set_trip_temp()
487 struct imx_thermal_data *data = platform_get_drvdata(pdev); in imx_init_calib() local
500 if (data->socdata->version == TEMPMON_IMX7D) { in imx_init_calib()
501 data->c1 = (ocotp_ana1 >> 9) & 0x1ff; in imx_init_calib()
529 data->c1 = temp64; in imx_init_calib()
530 data->c2 = n1 * data->c1 + 28581; in imx_init_calib()
537 struct imx_thermal_data *data = platform_get_drvdata(pdev); in imx_init_temp_grade() local
542 data->temp_grade = "Commercial"; in imx_init_temp_grade()
543 data->temp_max = 95000; in imx_init_temp_grade()
546 data->temp_grade = "Extended Commercial"; in imx_init_temp_grade()
547 data->temp_max = 105000; in imx_init_temp_grade()
550 data->temp_grade = "Industrial"; in imx_init_temp_grade()
551 data->temp_max = 105000; in imx_init_temp_grade()
554 data->temp_grade = "Automotive"; in imx_init_temp_grade()
555 data->temp_max = 125000; in imx_init_temp_grade()
563 data->temp_critical = data->temp_max - (1000 * 5); in imx_init_temp_grade()
564 data->temp_passive = data->temp_max - (1000 * 10); in imx_init_temp_grade()
623 struct imx_thermal_data *data = dev; in imx_thermal_alarm_irq() local
626 data->irq_enabled = false; in imx_thermal_alarm_irq()
633 struct imx_thermal_data *data = dev; in imx_thermal_alarm_irq_thread() local
635 dev_dbg(&data->tz->device, "THERMAL ALARM: T > %d\n", in imx_thermal_alarm_irq_thread()
636 data->alarm_temp / 1000); in imx_thermal_alarm_irq_thread()
638 thermal_zone_device_update(data->tz, THERMAL_EVENT_UNSPECIFIED); in imx_thermal_alarm_irq_thread()
644 { .compatible = "fsl,imx6q-tempmon", .data = &thermal_imx6q_data, },
645 { .compatible = "fsl,imx6sx-tempmon", .data = &thermal_imx6sx_data, },
646 { .compatible = "fsl,imx7d-tempmon", .data = &thermal_imx7d_data, },
656 static int imx_thermal_register_legacy_cooling(struct imx_thermal_data *data) in imx_thermal_register_legacy_cooling() argument
661 data->policy = cpufreq_cpu_get(0); in imx_thermal_register_legacy_cooling()
662 if (!data->policy) { in imx_thermal_register_legacy_cooling()
667 np = of_get_cpu_node(data->policy->cpu, NULL); in imx_thermal_register_legacy_cooling()
670 data->cdev = cpufreq_cooling_register(data->policy); in imx_thermal_register_legacy_cooling()
671 if (IS_ERR(data->cdev)) { in imx_thermal_register_legacy_cooling()
672 ret = PTR_ERR(data->cdev); in imx_thermal_register_legacy_cooling()
673 cpufreq_cpu_put(data->policy); in imx_thermal_register_legacy_cooling()
681 static void imx_thermal_unregister_legacy_cooling(struct imx_thermal_data *data) in imx_thermal_unregister_legacy_cooling() argument
683 cpufreq_cooling_unregister(data->cdev); in imx_thermal_unregister_legacy_cooling()
684 cpufreq_cpu_put(data->policy); in imx_thermal_unregister_legacy_cooling()
689 static inline int imx_thermal_register_legacy_cooling(struct imx_thermal_data *data) in imx_thermal_register_legacy_cooling() argument
694 static inline void imx_thermal_unregister_legacy_cooling(struct imx_thermal_data *data) in imx_thermal_unregister_legacy_cooling() argument
701 struct imx_thermal_data *data; in imx_thermal_probe() local
706 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); in imx_thermal_probe()
707 if (!data) in imx_thermal_probe()
716 data->tempmon = map; in imx_thermal_probe()
718 data->socdata = of_device_get_match_data(&pdev->dev); in imx_thermal_probe()
719 if (!data->socdata) { in imx_thermal_probe()
725 if (data->socdata->version == TEMPMON_IMX6SX) { in imx_thermal_probe()
733 regmap_write(map, data->socdata->low_alarm_ctrl + REG_SET, in imx_thermal_probe()
734 data->socdata->low_alarm_mask); in imx_thermal_probe()
737 data->irq = platform_get_irq(pdev, 0); in imx_thermal_probe()
738 if (data->irq < 0) in imx_thermal_probe()
739 return data->irq; in imx_thermal_probe()
741 platform_set_drvdata(pdev, data); in imx_thermal_probe()
762 regmap_write(map, data->socdata->sensor_ctrl + REG_CLR, in imx_thermal_probe()
763 data->socdata->power_down_mask); in imx_thermal_probe()
764 regmap_write(map, data->socdata->sensor_ctrl + REG_CLR, in imx_thermal_probe()
765 data->socdata->measure_temp_mask); in imx_thermal_probe()
766 regmap_write(map, data->socdata->measure_freq_ctrl + REG_CLR, in imx_thermal_probe()
767 data->socdata->measure_freq_mask); in imx_thermal_probe()
768 if (data->socdata->version != TEMPMON_IMX7D) in imx_thermal_probe()
771 regmap_write(map, data->socdata->sensor_ctrl + REG_SET, in imx_thermal_probe()
772 data->socdata->power_down_mask); in imx_thermal_probe()
774 ret = imx_thermal_register_legacy_cooling(data); in imx_thermal_probe()
784 data->thermal_clk = devm_clk_get(&pdev->dev, NULL); in imx_thermal_probe()
785 if (IS_ERR(data->thermal_clk)) { in imx_thermal_probe()
786 ret = PTR_ERR(data->thermal_clk); in imx_thermal_probe()
800 ret = clk_prepare_enable(data->thermal_clk); in imx_thermal_probe()
806 data->tz = thermal_zone_device_register("imx_thermal_zone", in imx_thermal_probe()
808 BIT(IMX_TRIP_PASSIVE), data, in imx_thermal_probe()
812 if (IS_ERR(data->tz)) { in imx_thermal_probe()
813 ret = PTR_ERR(data->tz); in imx_thermal_probe()
820 " critical:%dC passive:%dC\n", data->temp_grade, in imx_thermal_probe()
821 data->temp_max / 1000, data->temp_critical / 1000, in imx_thermal_probe()
822 data->temp_passive / 1000); in imx_thermal_probe()
825 regmap_write(map, data->socdata->measure_freq_ctrl + REG_CLR, in imx_thermal_probe()
826 data->socdata->measure_freq_mask); in imx_thermal_probe()
828 regmap_write(map, data->socdata->measure_freq_ctrl + REG_SET, in imx_thermal_probe()
829 measure_freq << data->socdata->measure_freq_shift); in imx_thermal_probe()
830 imx_set_alarm_temp(data, data->temp_passive); in imx_thermal_probe()
832 if (data->socdata->version == TEMPMON_IMX6SX) in imx_thermal_probe()
833 imx_set_panic_temp(data, data->temp_critical); in imx_thermal_probe()
835 regmap_write(map, data->socdata->sensor_ctrl + REG_CLR, in imx_thermal_probe()
836 data->socdata->power_down_mask); in imx_thermal_probe()
837 regmap_write(map, data->socdata->sensor_ctrl + REG_SET, in imx_thermal_probe()
838 data->socdata->measure_temp_mask); in imx_thermal_probe()
840 data->irq_enabled = true; in imx_thermal_probe()
841 data->mode = THERMAL_DEVICE_ENABLED; in imx_thermal_probe()
843 ret = devm_request_threaded_irq(&pdev->dev, data->irq, in imx_thermal_probe()
845 0, "imx_thermal", data); in imx_thermal_probe()
854 thermal_zone_device_unregister(data->tz); in imx_thermal_probe()
856 clk_disable_unprepare(data->thermal_clk); in imx_thermal_probe()
858 imx_thermal_unregister_legacy_cooling(data); in imx_thermal_probe()
865 struct imx_thermal_data *data = platform_get_drvdata(pdev); in imx_thermal_remove() local
866 struct regmap *map = data->tempmon; in imx_thermal_remove()
869 regmap_write(map, data->socdata->sensor_ctrl + REG_SET, in imx_thermal_remove()
870 data->socdata->power_down_mask); in imx_thermal_remove()
871 if (!IS_ERR(data->thermal_clk)) in imx_thermal_remove()
872 clk_disable_unprepare(data->thermal_clk); in imx_thermal_remove()
874 thermal_zone_device_unregister(data->tz); in imx_thermal_remove()
875 cpufreq_cooling_unregister(data->cdev); in imx_thermal_remove()
876 cpufreq_cpu_put(data->policy); in imx_thermal_remove()
884 struct imx_thermal_data *data = dev_get_drvdata(dev); in imx_thermal_suspend() local
885 struct regmap *map = data->tempmon; in imx_thermal_suspend()
893 regmap_write(map, data->socdata->sensor_ctrl + REG_CLR, in imx_thermal_suspend()
894 data->socdata->measure_temp_mask); in imx_thermal_suspend()
895 regmap_write(map, data->socdata->sensor_ctrl + REG_SET, in imx_thermal_suspend()
896 data->socdata->power_down_mask); in imx_thermal_suspend()
897 data->mode = THERMAL_DEVICE_DISABLED; in imx_thermal_suspend()
898 clk_disable_unprepare(data->thermal_clk); in imx_thermal_suspend()
905 struct imx_thermal_data *data = dev_get_drvdata(dev); in imx_thermal_resume() local
906 struct regmap *map = data->tempmon; in imx_thermal_resume()
909 ret = clk_prepare_enable(data->thermal_clk); in imx_thermal_resume()
913 regmap_write(map, data->socdata->sensor_ctrl + REG_CLR, in imx_thermal_resume()
914 data->socdata->power_down_mask); in imx_thermal_resume()
915 regmap_write(map, data->socdata->sensor_ctrl + REG_SET, in imx_thermal_resume()
916 data->socdata->measure_temp_mask); in imx_thermal_resume()
917 data->mode = THERMAL_DEVICE_ENABLED; in imx_thermal_resume()