diff options
Diffstat (limited to 'drivers/video/omap2/dss/hdmi4.c')
-rw-r--r-- | drivers/video/omap2/dss/hdmi4.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/video/omap2/dss/hdmi4.c b/drivers/video/omap2/dss/hdmi4.c index e1400961433..4a74538f9ea 100644 --- a/drivers/video/omap2/dss/hdmi4.c +++ b/drivers/video/omap2/dss/hdmi4.c @@ -95,7 +95,8 @@ static int hdmi_init_regulator(void) reg = devm_regulator_get(&hdmi.pdev->dev, "VDAC"); if (IS_ERR(reg)) { - DSSERR("can't get VDDA_HDMI_DAC regulator\n"); + if (PTR_ERR(reg) != -EPROBE_DEFER) + DSSERR("can't get VDDA_HDMI_DAC regulator\n"); return PTR_ERR(reg); } @@ -148,8 +149,6 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev) if (r) return r; - dss_mgr_disable(mgr); - p = &hdmi.cfg.timings; DSSDBG("hdmi_power_on x_res= %d y_res = %d\n", p->x_res, p->y_res); @@ -158,8 +157,6 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev) hdmi_pll_compute(&hdmi.pll, clk_get_rate(hdmi.sys_clk), phy); - hdmi_wp_video_stop(&hdmi.wp); - /* config the PLL and PHY hdmi_set_pll_pwrfirst */ r = hdmi_pll_enable(&hdmi.pll, &hdmi.wp); if (r) { @@ -218,14 +215,12 @@ static void hdmi_power_off_full(struct omap_dss_device *dssdev) static int hdmi_display_check_timing(struct omap_dss_device *dssdev, struct omap_video_timings *timings) { - struct hdmi_cm cm; + struct omap_dss_device *out = &hdmi.output; - cm = hdmi_get_code(timings); - if (cm.code == -1) + if (!dispc_mgr_timings_ok(out->dispc_channel, timings)) return -EINVAL; return 0; - } static void hdmi_display_set_timing(struct omap_dss_device *dssdev, @@ -244,8 +239,17 @@ static void hdmi_display_set_timing(struct omap_dss_device *dssdev, hdmi.cfg = *t; dispc_set_tv_pclk(t->timings.pixel_clock * 1000); + } else { + hdmi.cfg.timings = *timings; + hdmi.cfg.cm.code = 0; + hdmi.cfg.cm.mode = HDMI_DVI; + + dispc_set_tv_pclk(timings->pixel_clock * 1000); } + DSSDBG("using mode: %s, code %d\n", hdmi.cfg.cm.mode == HDMI_DVI ? + "DVI" : "HDMI", hdmi.cfg.cm.code); + mutex_unlock(&hdmi.lock); } |