fbdev fixes for 3.3

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
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.12 (GNU/Linux)
 
 iQIcBAABAgAGBQJPUTAuAAoJECSVL5KnPj1PwIoP/3BosrH3mE7hDAXLI6EoXTmo
 SaePt271FV+RqlG5Tjd07IDceXaCz3zf+ZyS9sKZXvGi9QNMKKs52Ah0PeWDfalM
 MJVtRh2FBvaSKFvSqKjN3Fzv+bHpJZwekQBLDaHYHNdtQjWNW8Nnkth6n9xNDwau
 Xp5owI/p9ZECoCcj/D17LF59t8kiynqKdDOmhzZ1bp/c1LgL4waSXnP5/ToQxmcL
 zjUrvR4u3RNDqTxJmScswyDZq4u8qLx4fovhScoPe1OpU2cVXV69UdivzoF4A30c
 t02ZPEE+NM5tFfPMtUNn3zCEN+I893e4ABHoZlDfzS8Ab7JJjnDFduvUzJdSPa8H
 3kMZH7YmQhs1KhbrEcZPeBuxmZaNXpojRYmlbnw7w+kHtcaxVUxhR87TI8kYZIaS
 oqsTXmO+f9T8cMy3WbhUylj+uUpcBQYbIHd4QUhGFvylU24mrrJJQtwsPTFTElE7
 CBKPavbtFMkQepeXRX0Sig/xwVcKA7UUfdvirsD4BjfxZqsOxWeBCQN/scEDcSwo
 KOsLN4Kc4T3On3vNHc2fdq4f+sd2rlGeB9tH/NRtt7UBjGhxK+9lD5YmiavUopyH
 ectsoEMXg9FMQS1GwmQZwQx7r1QXRylBRgrHV/l1XwBU/QfQp3WFqBrVTFZkw4rg
 9U0wHlmQYnnU66rUChUt
 =+UnE
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Linus Torvalds 2012-03-02 15:21:15 -08:00
commit d085a09cf3
5 changed files with 35 additions and 10 deletions

View file

@ -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.

View file

@ -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)
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;

View file

@ -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)
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)

View file

@ -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,

View file

@ -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 */