summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMarvin Zhang <mzhang@nvidia.com>2012-06-13 18:02:33 -0700
committerRyan Wong <ryanw@nvidia.com>2012-06-14 13:28:17 -0700
commit64655badec17cea1c3ad43a5fff4ed92ad862aed (patch)
treee2b044fdf86d46c1593a94bb62b4971dae301b7b /drivers
parentdadd7b60d43d97d088c40f3fc7019219bc74a057 (diff)
Revert "video: tegra: dc: Set default videomode"
This reverts commit dfd813141283891e397d73958aabad38eddfe350. It causes HDMI HDCP test to fail. bug 991805 Conflicts: drivers/video/tegra/dc/dc.c Change-Id: I6c5d9049a2bd53b12b6da9f8578f9e2e901f8f9a Reviewed-on: http://git-master/r/108724 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Marvin Zhang <mzhang@nvidia.com> Tested-by: Marvin Zhang <mzhang@nvidia.com> Reviewed-by: Ryan Wong <ryanw@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/tegra/dc/dc.c69
-rw-r--r--drivers/video/tegra/dc/hdmi.c10
2 files changed, 22 insertions, 57 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c
index 935f18bc8cfd..7df507ffad3b 100644
--- a/drivers/video/tegra/dc/dc.c
+++ b/drivers/video/tegra/dc/dc.c
@@ -33,7 +33,6 @@
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <linux/backlight.h>
-#include <linux/gpio.h>
#include <video/tegrafb.h>
#include <drm/drm_fixed.h>
#ifdef CONFIG_SWITCH
@@ -66,20 +65,6 @@
#endif
static int no_vsync;
-static struct fb_videomode tegra_dc_hdmi_fallback_mode = {
- .refresh = 60,
- .xres = 640,
- .yres = 480,
- .pixclock = KHZ2PICOS(25200),
- .hsync_len = 96, /* h_sync_width */
- .vsync_len = 2, /* v_sync_width */
- .left_margin = 48, /* h_back_porch */
- .upper_margin = 33, /* v_back_porch */
- .right_margin = 16, /* h_front_porch */
- .lower_margin = 10, /* v_front_porch */
- .vmode = 0,
- .sync = 0,
-};
static void _tegra_dc_controller_disable(struct tegra_dc *dc);
@@ -636,20 +621,6 @@ bool tegra_dc_get_connected(struct tegra_dc *dc)
}
EXPORT_SYMBOL(tegra_dc_get_connected);
-bool tegra_dc_hpd(struct tegra_dc *dc)
-{
- int sense;
- int level;
-
- level = gpio_get_value(dc->out->hotplug_gpio);
-
- sense = dc->out->flags & TEGRA_DC_OUT_HOTPLUG_MASK;
-
- return (sense == TEGRA_DC_OUT_HOTPLUG_HIGH && level) ||
- (sense == TEGRA_DC_OUT_HOTPLUG_LOW && !level);
-}
-EXPORT_SYMBOL(tegra_dc_hpd);
-
static u32 blend_topwin(u32 flags)
{
if (flags & TEGRA_WIN_FLAG_BLEND_COVERAGE)
@@ -2666,35 +2637,10 @@ static bool _tegra_dc_controller_reset_enable(struct tegra_dc *dc)
}
#endif
-static int _tegra_dc_set_default_videomode(struct tegra_dc *dc)
-{
- return tegra_dc_set_fb_mode(dc, &tegra_dc_hdmi_fallback_mode, 0);
-}
-
static bool _tegra_dc_enable(struct tegra_dc *dc)
{
- if (dc->mode.pclk == 0) {
- switch (dc->out->type) {
- case TEGRA_DC_OUT_HDMI:
- /* DC enable called but no videomode is loaded.
- Check if HDMI is connected, then set fallback mdoe */
- if (tegra_dc_hpd(dc)) {
- if (_tegra_dc_set_default_videomode(dc))
- return false;
- } else
- return false;
-
- break;
-
- /* Do nothing for other outputs for now */
- case TEGRA_DC_OUT_RGB:
-
- case TEGRA_DC_OUT_DSI:
-
- default:
- return false;
- }
- }
+ if (dc->mode.pclk == 0)
+ return false;
if (!dc->out)
return false;
@@ -3009,6 +2955,9 @@ static int tegra_dc_probe(struct nvhost_device *ndev,
*/
dc->emc_clk_rate = 0;
+ if (dc->pdata->flags & TEGRA_DC_FLAG_ENABLED)
+ dc->enabled = true;
+
mutex_init(&dc->lock);
mutex_init(&dc->one_shot_lock);
init_completion(&dc->frame_end_complete);
@@ -3075,6 +3024,14 @@ static int tegra_dc_probe(struct nvhost_device *ndev,
goto err_put_emc_clk;
}
+ /* hack to balance enable_irq calls in _tegra_dc_enable() */
+ disable_dc_irq(dc->irq);
+
+ mutex_lock(&dc->lock);
+ if (dc->enabled)
+ _tegra_dc_enable(dc);
+ mutex_unlock(&dc->lock);
+
tegra_dc_create_debugfs(dc);
dev_info(&ndev->dev, "probed\n");
diff --git a/drivers/video/tegra/dc/hdmi.c b/drivers/video/tegra/dc/hdmi.c
index 59b9afcec0e4..eb670c38bacc 100644
--- a/drivers/video/tegra/dc/hdmi.c
+++ b/drivers/video/tegra/dc/hdmi.c
@@ -1344,7 +1344,15 @@ static bool tegra_dc_hdmi_mode_filter(const struct tegra_dc *dc,
static bool tegra_dc_hdmi_hpd(struct tegra_dc *dc)
{
- return tegra_dc_hpd(dc);
+ int sense;
+ int level;
+
+ level = gpio_get_value(dc->out->hotplug_gpio);
+
+ sense = dc->out->flags & TEGRA_DC_OUT_HOTPLUG_MASK;
+
+ return (sense == TEGRA_DC_OUT_HOTPLUG_HIGH && level) ||
+ (sense == TEGRA_DC_OUT_HOTPLUG_LOW && !level);
}