From a7bce9c97d4dbb2a55e1f364b16bab6212cceb04 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Tue, 12 May 2015 15:37:06 +0800 Subject: [PATCH] HDMI:rk3128/rk3036: 1. For MID, remove interlace mode support and set default mode to be enabled. 2. If HDMI is disabled, disable hotplug irq. Signed-off-by: Zheng Yang --- .../hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c | 21 +++++++++---------- .../hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c | 13 +++++++++--- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c b/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c index 5feb1f8e6c6e..c81f766375d6 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c @@ -198,8 +198,7 @@ static irqreturn_t rockchip_hdmiv1_irq_func(int irq, void *dev_id) { struct hdmi *hdmi_drv = hdmi_dev->hdmi; - if ((hdmi_drv->sleep == 0) && (hdmi_drv->enable == 1)) - rockchip_hdmiv1_irq(hdmi_drv); + rockchip_hdmiv1_irq(hdmi_drv); return IRQ_HANDLED; } @@ -322,8 +321,9 @@ static int rockchip_hdmiv1_probe(struct platform_device *pdev) rockchip_hdmiv1_dev_init_ops(&rockchip_hdmiv1_ops); rockchip_hdmiv1_property.name = (char *)pdev->name; rockchip_hdmiv1_property.priv = hdmi_dev; - rockchip_hdmiv1_property.feature |= SUPPORT_1080I | - SUPPORT_480I_576I; + if (rk_fb_get_display_policy() == DISPLAY_POLICY_BOX) + rockchip_hdmiv1_property.feature |= SUPPORT_1080I | + SUPPORT_480I_576I; hdmi_dev->hdmi = rockchip_hdmi_register(&rockchip_hdmiv1_property, &rockchip_hdmiv1_ops); if (hdmi_dev->hdmi == NULL) { @@ -336,13 +336,12 @@ static int rockchip_hdmiv1_probe(struct platform_device *pdev) fb_register_client(&rockchip_hdmiv1_fb_notifier); rockchip_hdmiv1_initial(hdmi_dev->hdmi); - if (rk_fb_get_display_policy() == DISPLAY_POLICY_BOX) { - rk_display_device_enable(hdmi_dev->hdmi->ddev); - delay_work = hdmi_submit_work(hdmi_dev->hdmi, - HDMI_HPD_CHANGE, 0, NULL); - if (delay_work) - flush_delayed_work(delay_work); - } + rk_display_device_enable(hdmi_dev->hdmi->ddev); + delay_work = hdmi_submit_work(hdmi_dev->hdmi, + HDMI_HPD_CHANGE, 0, NULL); + if (delay_work) + flush_delayed_work(delay_work); + #if defined(CONFIG_DEBUG_FS) hdmi_dev->debugfs_dir = debugfs_create_dir("rockchip_hdmiv1", NULL); if (IS_ERR(hdmi_dev->debugfs_dir)) { diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c b/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c index 50889c7aa67c..37351e193833 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c @@ -866,8 +866,11 @@ static int rockchip_hdmiv1_enable(struct hdmi *hdmi_drv) { struct hdmi_dev *hdmi_dev = hdmi_drv->property->priv; - if (!hdmi_dev->enable) + if (!hdmi_dev->enable) { hdmi_dev->enable = 1; + hdmi_msk_reg(hdmi_dev, HDMI_STATUS, + m_MASK_INT_HOTPLUG, v_MASK_INT_HOTPLUG(1)); + } hdmi_submit_work(hdmi_drv, HDMI_HPD_CHANGE, 10, NULL); return 0; } @@ -876,9 +879,11 @@ static int rockchip_hdmiv1_disable(struct hdmi *hdmi_drv) { struct hdmi_dev *hdmi_dev = hdmi_drv->property->priv; - if (hdmi_dev->enable) + if (hdmi_dev->enable) { hdmi_dev->enable = 0; - + hdmi_msk_reg(hdmi_dev, HDMI_STATUS, + m_MASK_INT_HOTPLUG, v_MASK_INT_HOTPLUG(0)); + } return 0; } @@ -948,6 +953,8 @@ int rockchip_hdmiv1_initial(struct hdmi *hdmi_drv) if (!hdmi_drv->uboot) { rockchip_hdmiv1_reset_pclk(); rockchip_hdmiv1_reset(hdmi_drv); + hdmi_msk_reg(hdmi_dev, HDMI_STATUS, + m_MASK_INT_HOTPLUG, v_MASK_INT_HOTPLUG(0)); } else if (hdmi_drv->ops->getstatus(hdmi_drv) == HDMI_HPD_REMOVED) { rockchip_hdmiv1_removed(hdmi_drv); hdmi_drv->lcdc->uboot_logo = 0; -- 2.34.1