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 142aa57..a49a018 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 4cbefe8..4178987 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;