<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">From a1d874ef3376295ee8ed89b3b5315f4c840ff00b Mon Sep 17 00:00:00 2001
From: Balsam CHIHI &lt;bchihi@baylibre.com&gt;
Date: Tue, 17 Oct 2023 21:05:42 +0200
Subject: [PATCH 40/42] thermal/drivers/mediatek/lvts_thermal: Add suspend and
 resume
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Add suspend and resume support to LVTS driver.

Signed-off-by: Balsam CHIHI &lt;bchihi@baylibre.com&gt;
[bero@baylibre.com: suspend/resume in noirq phase]
Co-developed-by: Bernhard RosenkrÃ¤nzer &lt;bero@baylibre.com&gt;
Signed-off-by: Bernhard RosenkrÃ¤nzer &lt;bero@baylibre.com&gt;
Reviewed-by: Matthias Brugger &lt;matthias.bgg@gmail.com&gt;
Reviewed-by: Alexandre Mergnat &lt;amergnat@baylibre.com&gt;
Reviewed-by: AngeloGioacchino Del Regno &lt;angelogioacchino.delregno@collabora.com&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Link: https://lore.kernel.org/r/20231017190545.157282-3-bero@baylibre.com
---
 drivers/thermal/mediatek/lvts_thermal.c | 37 +++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -1299,6 +1299,38 @@ static const struct lvts_ctrl_data mt798
 	}
 };
 
+static int lvts_suspend(struct device *dev)
+{
+	struct lvts_domain *lvts_td;
+	int i;
+
+	lvts_td = dev_get_drvdata(dev);
+
+	for (i = 0; i &lt; lvts_td-&gt;num_lvts_ctrl; i++)
+		lvts_ctrl_set_enable(&amp;lvts_td-&gt;lvts_ctrl[i], false);
+
+	clk_disable_unprepare(lvts_td-&gt;clk);
+
+	return 0;
+}
+
+static int lvts_resume(struct device *dev)
+{
+	struct lvts_domain *lvts_td;
+	int i, ret;
+
+	lvts_td = dev_get_drvdata(dev);
+
+	ret = clk_prepare_enable(lvts_td-&gt;clk);
+	if (ret)
+		return ret;
+
+	for (i = 0; i &lt; lvts_td-&gt;num_lvts_ctrl; i++)
+		lvts_ctrl_set_enable(&amp;lvts_td-&gt;lvts_ctrl[i], true);
+
+	return 0;
+}
+
 static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
 	{
 		.cal_offset = { 0x04, 0x07 },
@@ -1407,12 +1439,17 @@ static const struct of_device_id lvts_of
 };
 MODULE_DEVICE_TABLE(of, lvts_of_match);
 
+static const struct dev_pm_ops lvts_pm_ops = {
+	NOIRQ_SYSTEM_SLEEP_PM_OPS(lvts_suspend, lvts_resume)
+};
+
 static struct platform_driver lvts_driver = {
 	.probe = lvts_probe,
 	.remove_new = lvts_remove,
 	.driver = {
 		.name = "mtk-lvts-thermal",
 		.of_match_table = lvts_of_match,
+		.pm = &amp;lvts_pm_ops,
 	},
 };
 module_platform_driver(lvts_driver);
</pre></body></html>