summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm64/boot/dts/freescale/imx8mp.dtsi1
-rw-r--r--drivers/gpu/drm/imx/dw_hdmi-imx.c11
-rw-r--r--drivers/gpu/imx/lcdifv3/lcdifv3-common.c13
3 files changed, 13 insertions, 12 deletions
diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
index 9e0880992566..863aaad5e667 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
@@ -1968,6 +1968,7 @@
interrupts = <8 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&irqsteer_hdmi>;
resets = <&hdmi_blk_ctrl IMX8MP_HDMI_BLK_CTRL_LCDIF_RESET>;
+ fsl,gpr = <&hdmi_blk_ctrl>;
power-domains = <&hdmimix_pd>;
status = "disabled";
diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c b/drivers/gpu/drm/imx/dw_hdmi-imx.c
index 5b3c58c7f289..283a9675901f 100644
--- a/drivers/gpu/drm/imx/dw_hdmi-imx.c
+++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c
@@ -285,7 +285,6 @@ static int imx8mp_hdmi_phy_init(struct dw_hdmi *dw_hdmi, void *data,
static void imx8mp_hdmi_phy_disable(struct dw_hdmi *dw_hdmi, void *data)
{
struct imx_hdmi *hdmi = (struct imx_hdmi *)data;
- int val;
dev_dbg(hdmi->dev, "%s\n", __func__);
if (!hdmi->phy)
@@ -294,16 +293,6 @@ static void imx8mp_hdmi_phy_disable(struct dw_hdmi *dw_hdmi, void *data)
/* disable PVI */
imx8mp_hdmi_pvi_disable();
imx8mp_hdmi_pavi_powerdown();
-
- /* TODO */
- regmap_read(hdmi->regmap, 0x200, &val);
- /* Disable CEC */
- val &= ~0x2;
- /* Power down HDMI PHY
- * TODO move PHY power off to hdmi phy driver
- * val |= 0x8;
- * regmap_write(hdmi->regmap, 0x200, val);
- */
}
static int imx8mp_hdmimix_setup(struct imx_hdmi *hdmi)
diff --git a/drivers/gpu/imx/lcdifv3/lcdifv3-common.c b/drivers/gpu/imx/lcdifv3/lcdifv3-common.c
index 8dab74c3fdad..c61ad6bbc192 100644
--- a/drivers/gpu/imx/lcdifv3/lcdifv3-common.c
+++ b/drivers/gpu/imx/lcdifv3/lcdifv3-common.c
@@ -734,7 +734,8 @@ static int imx_lcdifv3_probe(struct platform_device *pdev)
if (IS_ERR(lcdifv3->base))
return PTR_ERR(lcdifv3->base);
- if (of_device_is_compatible(np, "fsl,imx93-lcdif")) {
+ if (of_device_is_compatible(np, "fsl,imx93-lcdif") ||
+ of_device_is_compatible(np, "fsl,imx8mp-lcdif3")) {
lcdifv3->gpr = syscon_regmap_lookup_by_phandle(np, "fsl,gpr");
if (IS_ERR(lcdifv3->gpr)) {
ret = PTR_ERR(lcdifv3->gpr);
@@ -797,6 +798,7 @@ static int imx_lcdifv3_remove(struct platform_device *pdev)
static int imx_lcdifv3_runtime_suspend(struct device *dev)
{
struct lcdifv3_soc *lcdifv3 = dev_get_drvdata(dev);
+ int val;
if (atomic_inc_return(&lcdifv3->rpm_suspended) > 1)
return 0;
@@ -809,6 +811,15 @@ static int imx_lcdifv3_runtime_suspend(struct device *dev)
if (of_device_is_compatible(dev->of_node, "fsl,imx93-lcdif"))
regmap_write(lcdifv3->gpr, 0xc, 0x0);
+ if (of_device_is_compatible(dev->of_node, "fsl,imx8mp-lcdif3")) {
+ regmap_read(lcdifv3->gpr, 0x200, &val);
+ /* Disable CEC */
+ val &= ~0x2;
+ /* Power Down HDMI PHY */
+ val |= 0x8;
+ regmap_write(lcdifv3->gpr, 0x200, val);
+ }
+
return 0;
}