[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 
---
 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 
+ *
+ * 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 .
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#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;
+
+   mutex_lock(&hdmi.hdmi_lock);
+
+   if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) 

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


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