Re: [PATCH v3 6/9] OMAP4 : DSS2 : HDMI: HDMI panel driver addition in the DSS

2011-03-07 Thread Tomi Valkeinen
On Fri, 2011-03-04 at 01:48 -0600, K, Mythri P wrote:
 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
 
snip

 +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) {

Here you could check if (dssdev-state != OMAP_DSS_DISPLAY_ACTIVE)

 + 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;
 +
 + mutex_lock(hdmi.hdmi_lock);
 +
 + if (dssdev-state == OMAP_DSS_DISPLAY_ACTIVE) {

Here you should check if (dssdev-state != OMAP_DSS_DISPLAY_SUSPENDED)

 Tomi


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 6/9] OMAP4 : DSS2 : HDMI: HDMI panel driver addition in the DSS

2011-03-03 Thread Mythri P K
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;
+
+