diff options
author | Dongfang Shi <dshi@nvidia.com> | 2012-05-03 16:40:49 -0700 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-07-16 20:13:21 -0700 |
commit | 9aed57c5b382154e89bb08ca160a413162e0e17d (patch) | |
tree | 4685974c8428b2047a7f706e2b576339f314171f /drivers/video/tegra/dc/hdmi.c | |
parent | 7013f2d625dbf31479b3a67de25503a01ecd02c2 (diff) |
ARM: tegra: p1852: Dual-display support for all SKUs
Ported Peter's original change 86413 to main.
board-p1852-panel.c:
Add support for primary and secondary LVDS displays, and secondary HDMI display.
board-p1852-pinmux.c:
Add configuration for HDMI and LVDS
board-p1852.c:
board-p1852.h:
Support for determining which p1852 sku is in use
hdmi.c:If no edid retrieved, but there's a hardwired mode, enable it
(used to support HDMI->LVDS output on p1852 sku 2)
devices.c:added secondary display data.
Bug 977859
Bug 994011
Change-Id: Ide8fb6bf7dd873b1d50269fb98d7c1687e4d9073
Signed-off-by: Dongfang Shi <dshi@nvidia.com>
Reviewed-on: http://git-master/r/100438
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'drivers/video/tegra/dc/hdmi.c')
-rw-r--r-- | drivers/video/tegra/dc/hdmi.c | 65 |
1 files changed, 45 insertions, 20 deletions
diff --git a/drivers/video/tegra/dc/hdmi.c b/drivers/video/tegra/dc/hdmi.c index 79478ea48f83..55d9163d4faf 100644 --- a/drivers/video/tegra/dc/hdmi.c +++ b/drivers/video/tegra/dc/hdmi.c @@ -1370,18 +1370,31 @@ bool tegra_dc_hdmi_detect_test(struct tegra_dc *dc, unsigned char *edid_ptr) err = tegra_edid_get_monspecs_test(hdmi->edid, &specs, edid_ptr); if (err < 0) { - dev_err(&dc->ndev->dev, "error reading edid\n"); - goto fail; - } + /* Check if there's a hard-wired mode, if so, enable it */ + if (dc->out->n_modes) + tegra_dc_enable(dc); + else { + dev_err(&dc->ndev->dev, "error reading edid\n"); + goto fail; + } +#ifdef CONFIG_SWITCH + hdmi->hpd_switch.state = 0; + switch_set_state(&hdmi->hpd_switch, 1); +#endif + dev_info(&dc->ndev->dev, "display detected\n"); - err = tegra_edid_get_eld(hdmi->edid, &hdmi->eld); - if (err < 0) { - dev_err(&dc->ndev->dev, "error populating eld\n"); - goto fail; - } - hdmi->eld_retrieved = true; + dc->connected = true; + tegra_dc_ext_process_hotplug(dc->ndev->id); + } else { + err = tegra_edid_get_eld(hdmi->edid, &hdmi->eld); + if (err < 0) { + dev_err(&dc->ndev->dev, "error populating eld\n"); + goto fail; + } + hdmi->eld_retrieved = true; - tegra_dc_hdmi_detect_config(dc, &specs); + tegra_dc_hdmi_detect_config(dc, &specs); + } return true; @@ -1406,18 +1419,30 @@ static bool tegra_dc_hdmi_detect(struct tegra_dc *dc) err = tegra_edid_get_monspecs(hdmi->edid, &specs); if (err < 0) { - dev_err(&dc->ndev->dev, "error reading edid\n"); - goto fail; - } + if (dc->out->n_modes) + tegra_dc_enable(dc); + else { + dev_err(&dc->ndev->dev, "error reading edid\n"); + goto fail; + } +#ifdef CONFIG_SWITCH + hdmi->hpd_switch.state = 0; + switch_set_state(&hdmi->hpd_switch, 1); +#endif + dev_info(&dc->ndev->dev, "display detected\n"); - err = tegra_edid_get_eld(hdmi->edid, &hdmi->eld); - if (err < 0) { - dev_err(&dc->ndev->dev, "error populating eld\n"); - goto fail; - } - hdmi->eld_retrieved = true; + dc->connected = true; + tegra_dc_ext_process_hotplug(dc->ndev->id); + } else { + err = tegra_edid_get_eld(hdmi->edid, &hdmi->eld); + if (err < 0) { + dev_err(&dc->ndev->dev, "error populating eld\n"); + goto fail; + } + hdmi->eld_retrieved = true; - tegra_dc_hdmi_detect_config(dc, &specs); + tegra_dc_hdmi_detect_config(dc, &specs); + } return true; |