The panel driver(hdmi_omap4_panel.c) in omap2/dss acts as a controller
to manage the enable and disable requests and synchronize audio and video.
Signed-off-by: Mythri P K mythr...@ti.com
---
drivers/video/omap2/dss/Kconfig|8 +
drivers/video/omap2/dss/Makefile |1 +
drivers/video/omap2/dss/hdmi_omap4_panel.c | 206
3 files changed, 215 insertions(+), 0 deletions(-)
create mode 100644 drivers/video/omap2/dss/hdmi_omap4_panel.c
diff --git a/drivers/video/omap2/dss/Kconfig b/drivers/video/omap2/dss/Kconfig
index 7749ddb..7bac3b8 100644
--- a/drivers/video/omap2/dss/Kconfig
+++ b/drivers/video/omap2/dss/Kconfig
@@ -125,4 +125,12 @@ config OMAP2_DSS_MIN_FCK_PER_PCK
Max FCK is 173MHz, so this doesn't work if your PCK
is very high.
+config OMAP4_PANEL_HDMI
+ tristate HDMI panel support
+ depends on OMAP2_DSS_HDMI
+default n
+ help
+ HDMI panel. This adds the High Definition Multimedia panel.
+ See http://www.hdmi.org/ for HDMI specification.
+
endif
diff --git a/drivers/video/omap2/dss/Makefile b/drivers/video/omap2/dss/Makefile
index 5998b69..95234d4 100644
--- a/drivers/video/omap2/dss/Makefile
+++ b/drivers/video/omap2/dss/Makefile
@@ -6,3 +6,4 @@ omapdss-$(CONFIG_OMAP2_DSS_VENC) += venc.o
omapdss-$(CONFIG_OMAP2_DSS_SDI) += sdi.o
omapdss-$(CONFIG_OMAP2_DSS_DSI) += dsi.o
omapdss-$(CONFIG_OMAP2_DSS_HDMI) += hdmi.o
+obj-$(CONFIG_OMAP4_PANEL_HDMI) += hdmi_omap4_panel.o
diff --git a/drivers/video/omap2/dss/hdmi_omap4_panel.c
b/drivers/video/omap2/dss/hdmi_omap4_panel.c
new file mode 100644
index 000..187c013
--- /dev/null
+++ b/drivers/video/omap2/dss/hdmi_omap4_panel.c
@@ -0,0 +1,206 @@
+/*
+ * hdmi_omap4_panel.c
+ *
+ * HDMI library support functions for TI OMAP4 processors.
+ *
+ * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Authors:MythriPk mythr...@ti.com
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+#include linux/kernel.h
+#include linux/err.h
+#include linux/io.h
+#include linux/mutex.h
+#include linux/module.h
+#include plat/display.h
+
+#include dss.h
+
+static struct {
+ struct mutex hdmi_lock;
+} hdmi;
+
+
+static int hdmi_panel_probe(struct omap_dss_device *dssdev)
+{
+ DSSDBG(ENTER hdmi_panel_probe\n);
+
+ dssdev-panel.config = OMAP_DSS_LCD_TFT |
+ OMAP_DSS_LCD_IVS | OMAP_DSS_LCD_IHS;
+
+ /*
+* Initialize the timings to 1920 * 1080
+* This is only for framebuffer update not for TV timing setting
+* Setting TV timing will be done only on enable
+*/
+ dssdev-panel.timings.x_res = 1920;
+ dssdev-panel.timings.y_res = 1080;
+
+ DSSDBG(hdmi_panel_probe x_res= %d y_res = %d\n,
+ dssdev-panel.timings.x_res,
+ dssdev-panel.timings.y_res);
+ return 0;
+}
+
+static void hdmi_panel_remove(struct omap_dss_device *dssdev)
+{
+
+}
+
+static int hdmi_panel_enable(struct omap_dss_device *dssdev)
+{
+ int r = 0;
+ DSSDBG(ENTER hdmi_panel_enable\n);
+
+ mutex_lock(hdmi.hdmi_lock);
+
+ if (dssdev-state != OMAP_DSS_DISPLAY_DISABLED) {
+ r = -EINVAL;
+ goto err;
+ }
+
+ r = omapdss_hdmi_display_enable(dssdev);
+ if (r) {
+ DSSERR(failed to power on\n);
+ goto err;
+ }
+
+ dssdev-state = OMAP_DSS_DISPLAY_ACTIVE;
+
+err:
+ mutex_unlock(hdmi.hdmi_lock);
+
+ return r;
+}
+
+static void hdmi_panel_disable(struct omap_dss_device *dssdev)
+{
+ mutex_lock(hdmi.hdmi_lock);
+
+ if (dssdev-state == OMAP_DSS_DISPLAY_ACTIVE)
+ omapdss_hdmi_display_disable(dssdev);
+
+ dssdev-state = OMAP_DSS_DISPLAY_DISABLED;
+
+ mutex_unlock(hdmi.hdmi_lock);
+}
+
+static int hdmi_panel_suspend(struct omap_dss_device *dssdev)
+{
+ int r = 0;
+
+ mutex_lock(hdmi.hdmi_lock);
+
+ if (dssdev-state == OMAP_DSS_DISPLAY_DISABLED ||
+ dssdev-state == OMAP_DSS_DISPLAY_SUSPENDED) {
+ r = -EINVAL;
+ goto err;
+ }
+
+ dssdev-state = OMAP_DSS_DISPLAY_SUSPENDED;
+
+ omapdss_hdmi_display_disable(dssdev);
+
+err:
+ mutex_unlock(hdmi.hdmi_lock);
+
+ return r;
+}
+
+static int hdmi_panel_resume(struct omap_dss_device *dssdev)
+{
+ int r = 0;
+
+