Commit d085a09c authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'fbdev-fixes-for-3.3-2' of git://github.com/schandinat/linux-2.6

fbdev fixes for 3.3 from Florian Tobias Schandinat

It includes:
 - two fixes for OMAP HDMI
 - one fix to make new OMAP functions behave as they are supposed to
 - one Kconfig dependency fix
 - two fixes for viafb for modesetting on VX900 hardware

* tag 'fbdev-fixes-for-3.3-2' of git://github.com/schandinat/linux-2.6:
  OMAPDSS: APPLY: make ovl_enable/disable synchronous
  OMAPDSS: panel-dvi: Add Kconfig dependency on I2C
  viafb: fix IGA1 modesetting on VX900
  viafb: select HW scaling on VX900 for IGA2
  OMAPDSS: HDMI: hot plug detect fix
  OMAPDSS: HACK: Ensure DSS clock domain gets out of idle when HDMI is enabled
parents 5e8063d7 a3d0e4ae
...@@ -12,7 +12,7 @@ config PANEL_GENERIC_DPI ...@@ -12,7 +12,7 @@ config PANEL_GENERIC_DPI
config PANEL_DVI config PANEL_DVI
tristate "DVI output" tristate "DVI output"
depends on OMAP2_DSS_DPI depends on OMAP2_DSS_DPI && I2C
help help
Driver for external monitors, connected via DVI. The driver uses i2c Driver for external monitors, connected via DVI. The driver uses i2c
to read EDID information from the monitor. to read EDID information from the monitor.
......
...@@ -1276,6 +1276,9 @@ int dss_ovl_enable(struct omap_overlay *ovl) ...@@ -1276,6 +1276,9 @@ int dss_ovl_enable(struct omap_overlay *ovl)
spin_unlock_irqrestore(&data_lock, flags); spin_unlock_irqrestore(&data_lock, flags);
/* wait for overlay to be enabled */
wait_pending_extra_info_updates();
mutex_unlock(&apply_lock); mutex_unlock(&apply_lock);
return 0; return 0;
...@@ -1313,6 +1316,9 @@ int dss_ovl_disable(struct omap_overlay *ovl) ...@@ -1313,6 +1316,9 @@ int dss_ovl_disable(struct omap_overlay *ovl)
spin_unlock_irqrestore(&data_lock, flags); spin_unlock_irqrestore(&data_lock, flags);
/* wait for the overlay to be disabled */
wait_pending_extra_info_updates();
mutex_unlock(&apply_lock); mutex_unlock(&apply_lock);
return 0; return 0;
......
...@@ -165,9 +165,25 @@ static int hdmi_runtime_get(void) ...@@ -165,9 +165,25 @@ static int hdmi_runtime_get(void)
DSSDBG("hdmi_runtime_get\n"); DSSDBG("hdmi_runtime_get\n");
/*
* HACK: Add dss_runtime_get() to ensure DSS clock domain is enabled.
* This should be removed later.
*/
r = dss_runtime_get();
if (r < 0)
goto err_get_dss;
r = pm_runtime_get_sync(&hdmi.pdev->dev); r = pm_runtime_get_sync(&hdmi.pdev->dev);
WARN_ON(r < 0); WARN_ON(r < 0);
return r < 0 ? r : 0; if (r < 0)
goto err_get_hdmi;
return 0;
err_get_hdmi:
dss_runtime_put();
err_get_dss:
return r;
} }
static void hdmi_runtime_put(void) static void hdmi_runtime_put(void)
...@@ -178,6 +194,12 @@ static void hdmi_runtime_put(void) ...@@ -178,6 +194,12 @@ static void hdmi_runtime_put(void)
r = pm_runtime_put_sync(&hdmi.pdev->dev); r = pm_runtime_put_sync(&hdmi.pdev->dev);
WARN_ON(r < 0); WARN_ON(r < 0);
/*
* HACK: This is added to complement the dss_runtime_get() call in
* hdmi_runtime_get(). This should be removed later.
*/
dss_runtime_put();
} }
int hdmi_init_display(struct omap_dss_device *dssdev) int hdmi_init_display(struct omap_dss_device *dssdev)
......
...@@ -479,14 +479,7 @@ int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data, ...@@ -479,14 +479,7 @@ int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data,
bool ti_hdmi_4xxx_detect(struct hdmi_ip_data *ip_data) bool ti_hdmi_4xxx_detect(struct hdmi_ip_data *ip_data)
{ {
int r; return gpio_get_value(ip_data->hpd_gpio);
void __iomem *base = hdmi_core_sys_base(ip_data);
/* HPD */
r = REG_GET(base, HDMI_CORE_SYS_SYS_STAT, 1, 1);
return r == 1;
} }
static void hdmi_core_init(struct hdmi_core_video_config *video_cfg, static void hdmi_core_init(struct hdmi_core_video_config *video_cfg,
......
...@@ -1810,7 +1810,11 @@ static void hw_init(void) ...@@ -1810,7 +1810,11 @@ static void hw_init(void)
break; break;
} }
/* magic required on VX900 for correct modesetting on IGA1 */
via_write_reg_mask(VIACR, 0x45, 0x00, 0x01);
/* probably this should go to the scaling code one day */ /* probably this should go to the scaling code one day */
via_write_reg_mask(VIACR, 0xFD, 0, 0x80); /* VX900 hw scale on IGA2 */
viafb_write_regx(scaling_parameters, ARRAY_SIZE(scaling_parameters)); viafb_write_regx(scaling_parameters, ARRAY_SIZE(scaling_parameters));
/* Fill VPIT Parameters */ /* Fill VPIT Parameters */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment