diff --git a/drivers/gpu/drm/mediatek/mtk_lvds.c b/drivers/gpu/drm/mediatek/mtk_lvds.c
index 4b7e7df194ef5444ae43f5271a156972141956f0..3943f87b373bd9ac4cbcd82ae620ef1baf385fb7 100644
--- a/drivers/gpu/drm/mediatek/mtk_lvds.c
+++ b/drivers/gpu/drm/mediatek/mtk_lvds.c
@@ -181,6 +181,13 @@ return 0;
 	return ret;
 }
 
+static void mtk_lvds_disable_clks(struct mtk_lvds *lvds)
+{
+	clk_disable_unprepare(lvds->lvdstx_dig_clk);
+	clk_disable_unprepare(lvds->lvdstx_pxl_clk);
+	clk_disable_unprepare(lvds->lvdstx_cts_clk);
+}
+
 static const struct mtk_ddp_comp_funcs mtk_lvds_funcs = {
 	.config = mtk_lvds_config,
 	.start = mtk_lvds_start,
@@ -297,9 +304,7 @@ static int mtk_lvds_probe(struct platform_device *pdev)
 	return 0;
 
 err_comp:
-	clk_disable_unprepare(lvds->lvdstx_dig_clk);
-	clk_disable_unprepare(lvds->lvdstx_pxl_clk);
-	clk_disable_unprepare(lvds->lvdstx_cts_clk);
+	mtk_lvds_disable_clks(lvds);
 
 	return ret;
 }
@@ -310,12 +315,38 @@ static int mtk_lvds_remove(struct platform_device *pdev)
 
 	component_del(&pdev->dev, &mtk_lvds_component_ops);
 
-	clk_disable_unprepare(lvds->lvdstx_dig_clk);
-	clk_disable_unprepare(lvds->lvdstx_pxl_clk);
-	clk_disable_unprepare(lvds->lvdstx_cts_clk);
+	mtk_lvds_disable_clks(lvds);
+
+	return 0;
+}
+
+
+#ifdef CONFIG_PM_SLEEP
+static int mtk_lvds_suspend(struct device *dev)
+{
+	struct mtk_lvds *lvds = dev_get_drvdata(dev);
+	mtk_lvds_disable_clks(lvds);
+
+	return 0;
+}
+
+static int mtk_lvds_resume(struct device *dev)
+{
+	struct mtk_lvds *lvds = dev_get_drvdata(dev);
+	int ret = 0;
+	ret = mtk_lvds_enable_clks(lvds);
+	if (ret) {
+		dev_err(dev, "lvds resume failed!\n");
+		return ret;
+	}
+
+	mtk_lvds_soft_reset(lvds);
 
 	return 0;
 }
+#endif
+static SIMPLE_DEV_PM_OPS(mtk_lvds_pm_ops,
+			 mtk_lvds_suspend, mtk_lvds_resume);
 
 static const struct of_device_id mtk_lvds_of_ids[] = {
 	{ .compatible = "mediatek,mt8365-lvds",},
@@ -329,6 +360,7 @@ struct platform_driver mtk_lvds_driver = {
 	.driver = {
 		.name = "mediatek-lvds",
 		.of_match_table = mtk_lvds_of_ids,
+		.pm = &mtk_lvds_pm_ops,
 	},
 };