drm/rockchip: dw_hdmi: add power domain control
authorxuhuicong <xhc@rock-chips.com>
Wed, 29 Mar 2017 03:39:26 +0000 (11:39 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Sat, 1 Apr 2017 01:26:39 +0000 (09:26 +0800)
close pd when suspend, no when plug out because hotplug detect need it.

make hdmi probe before dp otherwise the shared power domain will be
close after dp probe and cause splash screen when starting kernel if
hdmi uboot logo display

Change-Id: I82ba1abdaf7567173df9ad900d57eca0e6be3932
Signed-off-by: xuhuicong <xhc@rock-chips.com>
drivers/gpu/drm/rockchip/Makefile
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c

index 142aa57e99f0ee4eaf3f3bac9db2eb4f7f47278d..a49a0189ef109556f458ba49fe1cafce1bb421e8 100644 (file)
@@ -7,9 +7,9 @@ rockchipdrm-y := rockchip_drm_drv.o rockchip_drm_fb.o \
 rockchipdrm-$(CONFIG_DRM_FBDEV_EMULATION) += rockchip_drm_fbdev.o
 
 obj-$(CONFIG_ROCKCHIP_DRM_RGA) += rockchip_drm_rga.o
+obj-$(CONFIG_ROCKCHIP_DW_HDMI) += dw_hdmi-rockchip.o
 obj-$(CONFIG_ROCKCHIP_CDN_DP) += cdn-dp.o
 cdn-dp-objs := cdn-dp-core.o cdn-dp-reg.o
-obj-$(CONFIG_ROCKCHIP_DW_HDMI) += dw_hdmi-rockchip.o
 obj-$(CONFIG_ROCKCHIP_DW_MIPI_DSI) += dw-mipi-dsi.o
 obj-$(CONFIG_ROCKCHIP_ANALOGIX_DP) += analogix_dp-rockchip.o
 obj-$(CONFIG_ROCKCHIP_INNO_HDMI) += inno_hdmi.o
index 4cbefe86b6ef9be93ac2f5ab48ab61884053d883..41789871bf4a0e4e94b5c4cb54806d763e1e8fcc 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/regmap.h>
+#include <linux/pm_runtime.h>
 
 #include <drm/drm_of.h>
 #include <drm/drmP.h>
@@ -454,12 +455,16 @@ static const struct component_ops dw_hdmi_rockchip_ops = {
 
 static int dw_hdmi_rockchip_probe(struct platform_device *pdev)
 {
+       pm_runtime_enable(&pdev->dev);
+       pm_runtime_get_sync(&pdev->dev);
+
        return component_add(&pdev->dev, &dw_hdmi_rockchip_ops);
 }
 
 static int dw_hdmi_rockchip_remove(struct platform_device *pdev)
 {
        component_del(&pdev->dev, &dw_hdmi_rockchip_ops);
+       pm_runtime_disable(&pdev->dev);
 
        return 0;
 }
@@ -467,12 +472,14 @@ static int dw_hdmi_rockchip_remove(struct platform_device *pdev)
 static int dw_hdmi_rockchip_suspend(struct device *dev)
 {
        dw_hdmi_suspend(dev);
+       pm_runtime_put_sync(dev);
 
        return 0;
 }
 
 static int dw_hdmi_rockchip_resume(struct device *dev)
 {
+       pm_runtime_get_sync(dev);
        dw_hdmi_resume(dev);
 
        return  0;