diff options
-rw-r--r-- | arch/arm64/boot/dts/freescale/imx8mp.dtsi | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/imx/dw_hdmi-imx.c | 11 | ||||
-rw-r--r-- | drivers/gpu/imx/lcdifv3/lcdifv3-common.c | 13 |
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; } |