OMAP3 display patches

2010-06-29 Thread Nagarajan, Rajkumar

Tomi,

Would you please check if there are no further comments and can you please pull 
the following patches in?

https://patchwork.kernel.org/patch/106498/
https://patchwork.kernel.org/patch/106670/
https://patchwork.kernel.org/patch/107547/

Regards,
Rajkumar N.--
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


RE: [PATCH] OMAP: DSS: Fix for dsi_pll to dpll4 clk switch

2010-06-29 Thread Nagarajan, Rajkumar
 

 -Original Message-
 From: Tomi Valkeinen [mailto:tomi.valkei...@nokia.com] 
 Sent: Thursday, June 24, 2010 4:21 PM
 To: Nagarajan, Rajkumar
 Cc: linux-omap@vger.kernel.org
 Subject: Re: [PATCH] OMAP: DSS: Fix for dsi_pll to dpll4 clk switch
 
 On Thu, 2010-06-17 at 07:12 +0200, ext Nagarajan, Rajkumar wrote:
  When switching between clocks, The new functional clock is
  effective when the next vertical blanking interval occurs.
  GOLCD bit has to be set for the new clock to take effect.
 
 Where did you encounter this problem?
 
Raj: The below experiments will make you to understand the significance of the 
patch:

1. Select dsi_pll as default clock.
2. After the zoom3 display comes up,switch the default screen on LCD to TV 
using below commands.
echo 0  /sys/devices/platform/omapdss/overlay0/enabled
echo 720,574  /sys/devices/platform/omapdss/overlay0/input_size
echo 720,574  /sys/devices/platform/omapdss/overlay0/output_size
echo tv   /sys/devices/platform/omapdss/overlay0/manager
echo 1  /sys/devices/platform/omapdss/display1/enabled
echo 1  /sys/devices/platform/omapdss/overlay0/enabled
3. Now the display is appearing on TV.So, Now switch the display back to LCD 
using the below commands.
echo 0  /sys/devices/platform/omapdss/overlay0/enabled
echo 800,480  /sys/devices/platform/omapdss/overlay0/input_size
echo 800,480  /sys/devices/platform/omapdss/overlay0/output_size
echo lcd   /sys/devices/platform/omapdss/overlay0/manager
echo 1  /sys/devices/platform/omapdss/display1/enabled
echo 1  /sys/devices/platform/omapdss/overlay0/enabled
4. Now the display will not appear on LCD,if the patch is not included.
But,the display will appear on LCD, if the patch is included.

  Signed-off-by: Kishore Y kishor...@ti.com
  Signed-off-by: Mukund Mittal mmit...@ti.com
  Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
  ---
   drivers/video/omap2/dss/dpi.c |5 +
   1 files changed, 5 insertions(+), 0 deletions(-)
  
  diff --git a/drivers/video/omap2/dss/dpi.c 
 b/drivers/video/omap2/dss/dpi.c
  index 960e977..5d778d6 100644
  --- a/drivers/video/omap2/dss/dpi.c
  +++ b/drivers/video/omap2/dss/dpi.c
  @@ -214,10 +214,15 @@ void 
 omapdss_dpi_display_disable(struct omap_dss_device *dssdev)
   
   #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
  dss_select_dispc_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
  +   dispc_go(OMAP_DSS_CHANNEL_LCD);
 
 I don't think GO does anything here, as the channel has already been
 disabled.
Raj:This is the actual fix.So, the above experiment that I explained will be 
the usecase to understand the need of this statement.
 
  +   while   (dispc_go_busy(OMAP_DSS_CHANNEL_LCD))
  +   ;
 
 Busy looping is not good.
Raj: will replace with non blocking call in the next version of this patch.
 
  dsi_pll_uninit();
  dss_clk_disable(DSS_CLK_FCK2);
   #endif
   
  +   dispc_enable_channel(OMAP_DSS_CHANNEL_LCD, 0);
  +
 
 The channel has already been disabled above, in
 dssdev-manager-disable(dssdev-manager);
Raj: will remove this statement in the next version of this patch.
 
  Tomi
 
 
 

[PATCH] OMAP:DSS: Enable TV Detection support

2010-06-26 Thread Nagarajan, Rajkumar

Enabled TVDET and created a sysfs entry for TV Detection

To detect if tv set is connected run this command
cat /sys/devices/platform/omapdss/display1/device_state
1: TV set connected
0: TV set disconnected

Signed-off-by: Axel Castaneda Gonzalez x0055...@ti.com
Signed-off-by: Kishore Y kishor...@ti.com
Signed-off-by: Mukund Mittal mmit...@ti.com
Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
---
 arch/arm/plat-omap/include/plat/display.h |2 +
 drivers/video/omap2/dss/display.c |   23 +
 drivers/video/omap2/dss/venc.c|   52 +
 3 files changed, 77 insertions(+), 0 deletions(-)

diff --git a/arch/arm/plat-omap/include/plat/display.h 
b/arch/arm/plat-omap/include/plat/display.h
index 7842efa..522240b 100644
--- a/arch/arm/plat-omap/include/plat/display.h
+++ b/arch/arm/plat-omap/include/plat/display.h
@@ -464,6 +464,8 @@ struct omap_dss_device {
 
enum omap_dss_display_state state;
 
+   u32 (*get_device_state)(struct omap_dss_device *dssdev);
+
/* platform specific  */
int (*platform_enable)(struct omap_dss_device *dssdev);
void (*platform_disable)(struct omap_dss_device *dssdev);
diff --git a/drivers/video/omap2/dss/display.c 
b/drivers/video/omap2/dss/display.c
index ef8c852..2b937fe 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/omap2/dss/display.c
@@ -278,6 +278,26 @@ static ssize_t display_wss_store(struct device *dev,
return size;
 }
 
+static ssize_t device_state_show(struct device *dev,
+   struct device_attribute *attr, char *buf)
+{
+   struct omap_dss_device *dssdev = to_dss_device(dev);
+   unsigned int device_state;
+
+   if (!dssdev-get_device_state)
+   return -ENOENT;
+
+   device_state = dssdev-get_device_state(dssdev);
+
+   return snprintf(buf, PAGE_SIZE, %u\n, device_state);
+}
+
+static ssize_t device_state_store(struct device *dev,
+   struct device_attribute *attr, const char *buf, size_t size)
+{
+   return size;
+}
+
 static DEVICE_ATTR(enabled, S_IRUGO|S_IWUSR,
display_enabled_show, display_enabled_store);
 static DEVICE_ATTR(update_mode, S_IRUGO|S_IWUSR,
@@ -290,6 +310,8 @@ static DEVICE_ATTR(rotate, S_IRUGO|S_IWUSR,
display_rotate_show, display_rotate_store);
 static DEVICE_ATTR(mirror, S_IRUGO|S_IWUSR,
display_mirror_show, display_mirror_store);
+static DEVICE_ATTR(device_state, S_IRUGO|S_IWUSR,
+   device_state_show, device_state_store);
 static DEVICE_ATTR(wss, S_IRUGO|S_IWUSR,
display_wss_show, display_wss_store);
 
@@ -301,6 +323,7 @@ static struct device_attribute *display_sysfs_attrs[] = {
dev_attr_rotate,
dev_attr_mirror,
dev_attr_wss,
+   dev_attr_device_state,
NULL
 };
 
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index eff3505..3b5093b 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -33,12 +33,15 @@
 #include linux/seq_file.h
 #include linux/platform_device.h
 #include linux/regulator/consumer.h
+#include linux/gpio.h
 
 #include plat/display.h
 #include plat/cpu.h
 
 #include dss.h
 
+#define TV_INT_GPIO33
+#define TV_DETECT_DELAY40 /*Delay for TV detection 
logic*/
 #define VENC_BASE  0x48050C00
 
 /* Venc registers */
@@ -612,6 +615,46 @@ static int venc_set_wss(struct omap_dss_device *dssdev,
u32 wss)
return 0;
 }
 
+/**
+ * Enables TVDET pulse generation
+ */
+static void venc_enable_tv_detect(void)
+{
+   u32 l;
+
+   l = venc_read_reg(VENC_GEN_CTRL);
+   /* TVDET Active High Setting */
+   l |= FLD_VAL(1, 16, 16);
+   /* Enable TVDET pulse generation */
+   l |= FLD_VAL(1, 0, 0);
+   venc_write_reg(VENC_GEN_CTRL, l);
+}
+
+/**
+ * Disables TVDET pulse generation
+ */
+static void venc_disable_tv_detect(void)
+{
+   u32 l;
+
+   /* Disable TVDET pulse generation */
+   l = venc_read_reg(VENC_GEN_CTRL);
+   l |= FLD_VAL(0, 0, 0);
+   venc_write_reg(VENC_GEN_CTRL, l);
+}
+
+static u32 venc_detect_device(struct omap_dss_device *dssdev)
+{
+   u32 tv_state;
+
+   venc_enable_tv_detect();
+   mdelay(TV_DETECT_DELAY);
+   tv_state = gpio_get_value(TV_INT_GPIO);
+   venc_disable_tv_detect();
+
+   return tv_state;
+}
+
 static struct omap_dss_driver venc_driver = {
.probe  = venc_panel_probe,
.remove = venc_panel_remove,
@@ -646,6 +689,7 @@ static struct omap_dss_driver venc_driver = {
 int venc_init(struct platform_device *pdev)
 {
u8 rev_id;
+   int ret;
 
mutex_init(venc.venc_lock);
 
@@ -671,7 +715,14 @@ int venc_init(struct platform_device *pdev)
 
venc_enable_clocks(0);
 
+   ret = gpio_request(TV_INT_GPIO, tv_detect);
+   if (ret)
+   pr_err(Failed to get TV_INT_GPIO gpio_33.\n);
+   

[PATCH] OMAP: DSS2: DMA optimization using scaler line buffers

2010-06-22 Thread Nagarajan, Rajkumar

DISPC DMA optimization has been enabled and vrfb calls changed as required.
Optimization reduces the memory traffic (DDR memory) when rotation is set
to 90- and 270- degree and SMS-VRFB rotation engine is used.

With this change,
L3 interconnect traffic is reduced by a factor 2x for YUV422  UYVY
DDR memory traffic is reduced by a factor 2x for YUV422  UYVY.

Signed-off-by: Mukund Mittal mmit...@ti.com
Signed-off-by: Kishore Y kishor...@ti.com
Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
---
 arch/arm/plat-omap/include/plat/vrfb.h   |6 +++-
 drivers/media/video/omap/omap_vout.c |2 +-
 drivers/video/omap2/dss/dispc.c  |   39 +++---
 drivers/video/omap2/omapfb/omapfb-main.c |2 +-
 drivers/video/omap2/vrfb.c   |   18 ++---
 5 files changed, 50 insertions(+), 17 deletions(-)

diff --git a/arch/arm/plat-omap/include/plat/vrfb.h 
b/arch/arm/plat-omap/include/plat/vrfb.h
index d8a03ce..fba9ecd 100644
--- a/arch/arm/plat-omap/include/plat/vrfb.h
+++ b/arch/arm/plat-omap/include/plat/vrfb.h
@@ -23,6 +23,8 @@
 
 #define OMAP_VRFB_LINE_LEN 2048
 
+#include plat/display.h
+
 struct vrfb {
u8 context;
void __iomem *vaddr[4];
@@ -42,8 +44,8 @@ extern void omap_vrfb_adjust_size(u16 *width, u16 *height,
 extern u32 omap_vrfb_min_phys_size(u16 width, u16 height, u8 bytespp);
 extern u16 omap_vrfb_max_height(u32 phys_size, u16 width, u8 bytespp);
 extern void omap_vrfb_setup(struct vrfb *vrfb, unsigned long paddr,
-   u16 width, u16 height,
-   unsigned bytespp, bool yuv_mode);
+   u16 width, u16 height, unsigned bytespp,
+   enum omap_color_mode color_mode, int rotation);
 extern int omap_vrfb_map_angle(struct vrfb *vrfb, u16 height, u8 rot);
 extern void omap_vrfb_restore_context(void);
 
diff --git a/drivers/media/video/omap/omap_vout.c 
b/drivers/media/video/omap/omap_vout.c
index b74884b..b3f94ca 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -465,7 +465,7 @@ static int omap_vout_vrfb_buffer_setup(struct 
omap_vout_device *vout,
for (i = 0; i  *count; i++)
omap_vrfb_setup(vout-vrfb_context[i],
vout-smsshado_phy_addr[i], vout-pix.width,
-   vout-pix.height, vout-bpp, yuv_mode);
+   vout-pix.height, vout-bpp, vout-dss_mode, 
vout-rotation);
 
return 0;
 }
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index e777e35..cb8eba4 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -1059,12 +1059,16 @@ static void _dispc_set_vid_accu1(enum omap_plane plane, 
int haccu, int vaccu)
dispc_write_reg(ac1_reg[plane-1], val);
 }
 
+static void _dispc_set_vdma_attrs(enum omap_plane plane, bool enable)
+{
+   REG_FLD_MOD(dispc_reg_att[plane], enable ? 1 : 0, 20, 20);
+}
 
 static void _dispc_set_scaling(enum omap_plane plane,
u16 orig_width, u16 orig_height,
u16 out_width, u16 out_height,
bool ilace, bool five_taps,
-   bool fieldmode)
+   bool fieldmode, bool vdma)
 {
int fir_hinc;
int fir_vinc;
@@ -1080,12 +1084,12 @@ static void _dispc_set_scaling(enum omap_plane plane,
 
_dispc_set_scale_coef(plane, hscaleup, vscaleup, five_taps);
 
-   if (!orig_width || orig_width == out_width)
+   if (!orig_width || (!vdma  (orig_width == out_width)))
fir_hinc = 0;
else
fir_hinc = 1024 * orig_width / out_width;
 
-   if (!orig_height || orig_height == out_height)
+   if (!orig_height || (!vdma  (orig_height == out_height)))
fir_vinc = 0;
else
fir_vinc = 1024 * orig_height / out_height;
@@ -1164,10 +1168,6 @@ static void _dispc_set_rotation_attrs(enum omap_plane 
plane, u8 rotation,
 
REG_FLD_MOD(dispc_reg_att[plane], vidrot, 13, 12);
 
-   if (rotation == OMAP_DSS_ROT_90 || rotation == OMAP_DSS_ROT_270)
-   REG_FLD_MOD(dispc_reg_att[plane], 0x1, 18, 18);
-   else
-   REG_FLD_MOD(dispc_reg_att[plane], 0x0, 18, 18);
} else {
REG_FLD_MOD(dispc_reg_att[plane], 0, 13, 12);
REG_FLD_MOD(dispc_reg_att[plane], 0, 18, 18);
@@ -1504,6 +1504,17 @@ static unsigned long calc_fclk(u16 width, u16 height,
return dispc_pclk_rate() * vf * hf;
 }
 
+static int dispc_is_vdma_req(u8 rotation, enum omap_color_mode color_mode)
+{
+/* TODO: VDMA support for RGB16 mode */
+   if (cpu_is_omap3630())
+   if ((color_mode == OMAP_DSS_COLOR_YUV2) ||
+   (color_mode == OMAP_DSS_COLOR_UYVY))
+   if ((rotation == 1) || (rotation == 3))
+   return true;
+   return false;
+}
+
 void 

[PATCH v3] OMAP3630: DSS2: Enable Pre-Multiplied Alpha Support

2010-06-17 Thread Nagarajan, Rajkumar

Enables dss to process color formats with pre-mulitplied alpha.
With this we can have alpha values defined for each pixel
and hence can have different blending values for each pixel.
sysfs entry has been created for this and pre-multiplied alpha
support is turned of by default.

Signed-off-by: Mukund Mittal mmit...@ti.com
Signed-off-by: Sudeep Basavaraj sudeep.basava...@ti.com
Signed-off-by: Kishore Y kishor...@ti.com
Signed-off-by: Sujeet Kumar Baranwal s-baran...@ti.com
Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
---
 arch/arm/plat-omap/include/plat/display.h |1 +
 drivers/video/omap2/dss/dispc.c   |   17 +++--
 drivers/video/omap2/dss/dss.h |3 +-
 drivers/video/omap2/dss/manager.c |5 +++-
 drivers/video/omap2/dss/overlay.c |   35 +
 5 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/arch/arm/plat-omap/include/plat/display.h 
b/arch/arm/plat-omap/include/plat/display.h
index 1c529ce..187d8dd 100644
--- a/arch/arm/plat-omap/include/plat/display.h
+++ b/arch/arm/plat-omap/include/plat/display.h
@@ -299,6 +299,7 @@ struct omap_overlay_info {
u16 out_width;  /* if 0, out_width == width */
u16 out_height; /* if 0, out_height == height */
u8 global_alpha;
+   u8 pre_mult_alpha;
 };
 
 struct omap_overlay {
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index e777e35..5c03c2f 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -788,6 +788,11 @@ static void _dispc_set_vid_size(enum omap_plane plane, int 
width, int height)
dispc_write_reg(vsi_reg[plane-1], val);
 }
 
+static void _dispc_set_alpha_blend_attrs(enum omap_plane plane, bool enable)
+{
+   REG_FLD_MOD(dispc_reg_att[plane], enable ? 1 : 0, 28, 28);
+}
+
 static void _dispc_setup_global_alpha(enum omap_plane plane, u8 global_alpha)
 {
 
@@ -1520,7 +1525,8 @@ static int _dispc_setup_plane(enum omap_plane plane,
bool ilace,
enum omap_dss_rotation_type rotation_type,
u8 rotation, int mirror,
-   u8 global_alpha)
+   u8 global_alpha,
+   u8 pre_mult_alpha)
 {
const int maxdownscale = cpu_is_omap34xx() ? 4 : 2;
bool five_taps = 0;
@@ -1703,6 +1709,9 @@ static int _dispc_setup_plane(enum omap_plane plane,
 
_dispc_set_rotation_attrs(plane, rotation, mirror, color_mode);
 
+   if (cpu_is_omap3630()  (plane != OMAP_DSS_VIDEO1))
+   _dispc_set_alpha_blend_attrs(plane, pre_mult_alpha);
+
if (plane != OMAP_DSS_VIDEO1)
_dispc_setup_global_alpha(plane, global_alpha);
 
@@ -3151,7 +3160,8 @@ int dispc_setup_plane(enum omap_plane plane,
   enum omap_color_mode color_mode,
   bool ilace,
   enum omap_dss_rotation_type rotation_type,
-  u8 rotation, bool mirror, u8 global_alpha)
+  u8 rotation, bool mirror, u8 global_alpha,
+  u8 pre_mult_alpha)
 {
int r = 0;
 
@@ -3173,7 +3183,8 @@ int dispc_setup_plane(enum omap_plane plane,
   color_mode, ilace,
   rotation_type,
   rotation, mirror,
-  global_alpha);
+  global_alpha,
+  pre_mult_alpha);
 
enable_clocks(0);
 
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 24326a5..5ae766a 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -320,7 +320,8 @@ int dispc_setup_plane(enum omap_plane plane,
  bool ilace,
  enum omap_dss_rotation_type rotation_type,
  u8 rotation, bool mirror,
- u8 global_alpha);
+ u8 global_alpha,
+ u8 pre_mult_alpha);
 
 bool dispc_go_busy(enum omap_channel channel);
 void dispc_go(enum omap_channel channel);
diff --git a/drivers/video/omap2/dss/manager.c 
b/drivers/video/omap2/dss/manager.c
index 32ec2ff..8800033 100644
--- a/drivers/video/omap2/dss/manager.c
+++ b/drivers/video/omap2/dss/manager.c
@@ -405,6 +405,7 @@ struct overlay_cache_data {
u16 out_width;  /* if 0, out_width == width */
u16 out_height; /* if 0, out_height == height */
u8 global_alpha;
+   u8 pre_mult_alpha;
 
enum omap_channel channel;
bool replication;
@@ -816,7 +817,8 @@ static int configure_overlay(enum omap_plane plane)
c-rotation_type,
c-rotation,
c-mirror,
-   c-global_alpha);
+   c-global_alpha,
+   c-pre_mult_alpha);
 
if (r) {
/* this shouldn't happen */
@@ -1219,6 +1221,7 @@ static int omap_dss_mgr_apply(struct 

[PATCH] OMAP: DSS2: Switching GFX from LCD to TV

2010-06-16 Thread Nagarajan, Rajkumar
From 53711271c3f22c8038f4961a9f9c2035b3e82d7f Mon Sep 17 00:00:00 2001
From: Sujeet Baranwal s-baran...@ti.com
Date: Tue, 1 Jun 2010 19:29:24 +0530
Subject: [PATCH] OMAP: DSS2: Switching GFX from LCD to TV

1. Added a sysfs entry for setting overlay  input_size
in order to switch the GFX pipeline from LCD to TV.
2. the following sysfx entry has been added

echo width,height  /sys/devices/platform/omapdss/overlay0/input_size

Signed-off-by: Srinivas Pulukuru srinivas.puluk...@ti.com
Signed-off-by: Sujeet Baranwal s-baran...@ti.com
Acked-by: Axel Castaneda x0055...@ti.com
Signed-off-by: Mukund Mittal mmit...@ti.com
Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
---
 drivers/video/omap2/dss/overlay.c|   33 +-
 drivers/video/omap2/omapfb/omapfb-main.c |7 ++
 2 files changed, 39 insertions(+), 1 deletions(-)

diff --git a/drivers/video/omap2/dss/overlay.c 
b/drivers/video/omap2/dss/overlay.c
index 8233658..4e9966f 100644
--- a/drivers/video/omap2/dss/overlay.c
+++ b/drivers/video/omap2/dss/overlay.c
@@ -117,6 +117,36 @@ static ssize_t overlay_input_size_show(struct omap_overlay 
*ovl, char *buf)
ovl-info.width, ovl-info.height);
 }
 
+static ssize_t overlay_input_size_store(struct omap_overlay *ovl,
+   const char *buf, size_t size)
+{
+   int r;
+   char *last;
+   struct omap_overlay_info info;
+
+   ovl-get_overlay_info(ovl, info);
+
+   info.width = simple_strtoul(buf, last, 10);
+   ++last;
+   if (last - buf = size)
+   return -EINVAL;
+
+   info.height = simple_strtoul(last, last, 10);
+
+   r = ovl-set_overlay_info(ovl, info);
+   if (r)
+   return r;
+
+   if (ovl-manager) {
+   r = ovl-manager-apply(ovl-manager);
+   if (r)
+   return r;
+   }
+
+   return size;
+}
+
+
 static ssize_t overlay_screen_width_show(struct omap_overlay *ovl, char *buf)
 {
return snprintf(buf, PAGE_SIZE, %d\n, ovl-info.screen_width);
@@ -268,7 +298,8 @@ struct overlay_attribute {
 static OVERLAY_ATTR(name, S_IRUGO, overlay_name_show, NULL);
 static OVERLAY_ATTR(manager, S_IRUGO|S_IWUSR,
overlay_manager_show, overlay_manager_store);
-static OVERLAY_ATTR(input_size, S_IRUGO, overlay_input_size_show, NULL);
+static OVERLAY_ATTR(input_size, S_IRUGO|S_IWUSR,
+   overlay_input_size_show, overlay_input_size_store);
 static OVERLAY_ATTR(screen_width, S_IRUGO, overlay_screen_width_show, NULL);
 static OVERLAY_ATTR(position, S_IRUGO|S_IWUSR,
overlay_position_show, overlay_position_store);
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c 
b/drivers/video/omap2/omapfb/omapfb-main.c
index 4b4506d..73ecc9f 100644
--- a/drivers/video/omap2/omapfb/omapfb-main.c
+++ b/drivers/video/omap2/omapfb/omapfb-main.c
@@ -46,6 +46,8 @@ static char *def_vram;
 static int def_vrfb;
 static int def_rotate;
 static int def_mirror;
+unsigned int omapfb_size;
+module_param_named(fb_size, omapfb_size, int, 0644);
 
 #ifdef DEBUG
 unsigned int omapfb_debug;
@@ -1444,6 +1446,11 @@ static int omapfb_alloc_fbmem_display(struct fb_info 
*fbi, unsigned long size,
}
}
 
+   if (omapfb_size){
+   if (omapfb_size  size)
+   size = omapfb_size;
+   }
+
if (!size)
return 0;
 
-- 
1.5.4.3
--
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] OMAP: DSS: Fix for dsi_pll to dpll4 clk switch

2010-06-16 Thread Nagarajan, Rajkumar

When switching between clocks, The new functional clock is
effective when the next vertical blanking interval occurs.
GOLCD bit has to be set for the new clock to take effect.

Signed-off-by: Kishore Y kishor...@ti.com
Signed-off-by: Mukund Mittal mmit...@ti.com
Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
---
 drivers/video/omap2/dss/dpi.c |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index 960e977..5d778d6 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -214,10 +214,15 @@ void omapdss_dpi_display_disable(struct omap_dss_device 
*dssdev)
 
 #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
dss_select_dispc_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
+   dispc_go(OMAP_DSS_CHANNEL_LCD);
+   while   (dispc_go_busy(OMAP_DSS_CHANNEL_LCD))
+   ;
dsi_pll_uninit();
dss_clk_disable(DSS_CLK_FCK2);
 #endif
 
+   dispc_enable_channel(OMAP_DSS_CHANNEL_LCD, 0);
+
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
 
if (cpu_is_omap34xx())
-- 
1.5.4.3
--
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


Alternative for defconfig

2010-06-11 Thread Nagarajan, Rajkumar
Hi,

1. What is the alternative way of submitting defconfig changes/files to LO? 

2. Can any of you give me examples? 

Regards,
Rajkumar N.

 -Original Message-
 From: Laurent Pinchart [mailto:laurent.pinch...@ideasonboard.com] 
 Sent: Wednesday, June 09, 2010 3:57 PM
 To: Nagarajan, Rajkumar
 Cc: linux-me...@vger.kernel.org
 Subject: Re: [PATCH] OMAP: V4L2: Enable V4L2 on ZOOM2/3  3630SDP
 
 Hi Rajkumar,
 
 On Wednesday 09 June 2010 11:51:45 Nagarajan, Rajkumar wrote:
  Defconfig changes to enable V4L2 on zoom2, zoom3 and 3630sdp boards.
 
 Defconfigs on ARM are going away. See the 
 http://lkml.org/lkml/2010/6/2/472 
 thread on LKML. There's also a lengthy discussion about that 
 on LAKML. Linus 
 will not accept any change to the defconfig files anymore and 
 currently plans 
 to remove them completely for 2.6.36.
 
 -- 
 Regards,
 
 Laurent Pinchart
 --
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 1/2 V7] OMAP: ZOOM2/3SDP3630: Add display board file for zoom boards

2010-05-21 Thread Nagarajan, Rajkumar

board-zoom-display.c added as a common file for display functionality
on boards zoom2, zoom3 and 3630sdp

Signed-off-by: Mukund Mittal mmit...@ti.com
Signed-off-by: Kishore Y kishor...@ti.com
Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
Reviewed-by: Gadiyar, Anand gadi...@ti.com
---
 arch/arm/mach-omap2/Makefile  |3 +
 arch/arm/mach-omap2/board-3630sdp.c   |1 +
 arch/arm/mach-omap2/board-zoom-display.c  |  158 +
 arch/arm/mach-omap2/board-zoom-peripherals.c  |   48 -
 arch/arm/mach-omap2/board-zoom2.c |1 +
 arch/arm/mach-omap2/board-zoom3.c |1 +
 arch/arm/mach-omap2/include/mach/board-zoom.h |3 +
 7 files changed, 214 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-zoom-display.c

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index b03cbb4..a79e6f0 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -125,14 +125,17 @@ obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o 
\
   board-rx51-video.o \
   hsmmc.o
 obj-$(CONFIG_MACH_OMAP_ZOOM2)  += board-zoom2.o \
+   board-zoom-display.o \
   board-zoom-peripherals.o \
   hsmmc.o \
   board-zoom-debugboard.o
 obj-$(CONFIG_MACH_OMAP_ZOOM3)  += board-zoom3.o \
+   board-zoom-display.o \
   board-zoom-peripherals.o \
   hsmmc.o \
   board-zoom-debugboard.o
 obj-$(CONFIG_MACH_OMAP_3630SDP)+= board-3630sdp.o \
+   board-zoom-display.o \
   board-zoom-peripherals.o \
   hsmmc.o
 obj-$(CONFIG_MACH_CM_T35)  += board-cm-t35.o \
diff --git a/arch/arm/mach-omap2/board-3630sdp.c 
b/arch/arm/mach-omap2/board-3630sdp.c
index a0a2a11..048afe3 100644
--- a/arch/arm/mach-omap2/board-3630sdp.c
+++ b/arch/arm/mach-omap2/board-3630sdp.c
@@ -97,6 +97,7 @@ static void __init omap_sdp_init(void)
 {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
zoom_peripherals_init();
+   zoom_display_init(OMAP_DSS_VENC_TYPE_SVIDEO);
board_smc91x_init();
enable_board_wakeup_source();
usb_ehci_init(ehci_pdata);
diff --git a/arch/arm/mach-omap2/board-zoom-display.c 
b/arch/arm/mach-omap2/board-zoom-display.c
new file mode 100644
index 000..e6e4f08
--- /dev/null
+++ b/arch/arm/mach-omap2/board-zoom-display.c
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2010 Texas Instruments Inc.
+ *
+ * Modified from mach-omap2/board-zoom-peripherals.c
+ *
+ * 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.
+ */
+
+#include linux/kernel.h
+#include linux/init.h
+#include linux/platform_device.h
+#include linux/gpio.h
+#include linux/i2c/twl.h
+#include linux/spi/spi.h
+#include plat/common.h
+#include plat/control.h
+#include plat/mcspi.h
+#include plat/display.h
+
+#define LCD_PANEL_ENABLE_GPIO  (7 + OMAP_MAX_GPIO_LINES)
+#define LCD_PANEL_RESET_GPIO_PROD  96
+#define LCD_PANEL_RESET_GPIO_PILOT 55
+#define LCD_PANEL_QVGA_GPIO56
+#define TV_PANEL_ENABLE_GPIO   95
+
+static void zoom_lcd_tv_panel_init(void)
+{
+   int ret;
+   unsigned char lcd_panel_reset_gpio;
+
+   lcd_panel_reset_gpio = (omap_rev()  OMAP3430_REV_ES3_0) ?
+   LCD_PANEL_RESET_GPIO_PROD :
+   LCD_PANEL_RESET_GPIO_PILOT;
+
+   ret = gpio_request(lcd_panel_reset_gpio, lcd reset);
+   if (ret) {
+   pr_err(Failed to get LCD reset GPIO (gpio%d)\n,
+   lcd_panel_reset_gpio);
+   return;
+   }
+   gpio_direction_output(lcd_panel_reset_gpio, 1);
+
+   ret = gpio_request(LCD_PANEL_QVGA_GPIO, lcd qvga);
+   if (ret) {
+   pr_err(Failed to get LCD_PANEL_QVGA_GPIO (gpio%d).\n,
+   LCD_PANEL_QVGA_GPIO);
+   goto err0;
+   }
+   gpio_direction_output(LCD_PANEL_QVGA_GPIO, 1);
+
+   ret = gpio_request(TV_PANEL_ENABLE_GPIO, tv panel);
+   if (ret) {
+   pr_err(Failed to get TV_PANEL_ENABLE_GPIO (gpio%d).\n,
+   TV_PANEL_ENABLE_GPIO);
+   goto err1;
+   }
+   gpio_direction_output(TV_PANEL_ENABLE_GPIO, 1);
+
+   return;
+
+err1:
+   gpio_free(LCD_PANEL_QVGA_GPIO);
+err0:
+   gpio_free(lcd_panel_reset_gpio);
+}
+
+static int 

[PATCH 2/2 V7] OMAP: ZOOM2/3SDP3630: Enable display on ZOOM2/3 3630SDP

2010-05-21 Thread Nagarajan, Rajkumar

Enable dss and framebuffer on zoom2, zoom3 and 3630sdp boards.

Signed-off-by: Mukund Mittal mmit...@ti.com
Signed-off-by: Kishore Y kishor...@ti.com
Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
Reviewed-by: Gadiyar, Anand gadi...@ti.com
---
 arch/arm/configs/omap_3630sdp_defconfig |   60 ++-
 arch/arm/configs/omap_zoom2_defconfig   |   60 ++-
 arch/arm/configs/omap_zoom3_defconfig   |   60 ++-
 3 files changed, 177 insertions(+), 3 deletions(-)

diff --git a/arch/arm/configs/omap_3630sdp_defconfig 
b/arch/arm/configs/omap_3630sdp_defconfig
index 609f348..57c1c4f 100644
--- a/arch/arm/configs/omap_3630sdp_defconfig
+++ b/arch/arm/configs/omap_3630sdp_defconfig
@@ -886,7 +886,57 @@ CONFIG_REGULATOR_TWL4030=y
 #
 # CONFIG_VGASTATE is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_OMAP2_VRAM=y
+CONFIG_OMAP2_VRFB=y
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_VRAM_SIZE=4
+# CONFIG_OMAP2_DSS_DEBUG_SUPPORT is not set
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+# CONFIG_OMAP2_DSS_SDI is not set
+# CONFIG_OMAP2_DSS_DSI is not set
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4
+CONFIG_FB_OMAP2=y
+# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+
+#
+# OMAP2/3 Display Device Drivers
+#
+# CONFIG_PANEL_GENERIC is not set
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+CONFIG_PANEL_NEC_NL8048HL11_01B=y
 # CONFIG_BACKLIGHT_LCD_SUPPORT is not set
 
 #
@@ -899,6 +949,14 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 #
 # CONFIG_VGA_CONSOLE is not set
 CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
 CONFIG_SOUND=y
 # CONFIG_SOUND_OSS_CORE is not set
 CONFIG_SND=y
diff --git a/arch/arm/configs/omap_zoom2_defconfig 
b/arch/arm/configs/omap_zoom2_defconfig
index f5c6e11..50b2bb8 100644
--- a/arch/arm/configs/omap_zoom2_defconfig
+++ b/arch/arm/configs/omap_zoom2_defconfig
@@ -860,7 +860,57 @@ CONFIG_DAB=y
 #
 # CONFIG_VGASTATE is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_OMAP2_VRAM=y
+CONFIG_OMAP2_VRFB=y
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_VRAM_SIZE=4
+# CONFIG_OMAP2_DSS_DEBUG_SUPPORT is not set
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+# CONFIG_OMAP2_DSS_SDI is not set
+# CONFIG_OMAP2_DSS_DSI is not set
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4
+CONFIG_FB_OMAP2=y
+# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+
+#
+# OMAP2/3 Display Device Drivers
+#
+# CONFIG_PANEL_GENERIC is not set
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+CONFIG_PANEL_NEC_NL8048HL11_01B=y
 # CONFIG_BACKLIGHT_LCD_SUPPORT is not set
 
 #
@@ -873,6 +923,14 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 #
 # CONFIG_VGA_CONSOLE is not set
 CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set

[PATCH V6] OMAP: DSS: Add NEC NL8048HL11-01B display panel

2010-05-21 Thread Nagarajan, Rajkumar
From e0bfb90c4a24f13896e49e565118677aae5d9ed4 Mon Sep 17 00:00:00 2001
From: Erik Gilling konk...@android.com
Date: Tue, 18 May 2010 12:30:43 +0530
Subject: [PATCH] OMAP: DSS: Add NEC NL8048HL11-01B display panel

NEC WVGA LCD NL8048HL11-01B support has been added.

Signed-off-by: Mukund Mittal mmit...@ti.com
Signed-off-by: Kishore Y kishor...@ti.com
Signed-off-by: Rajkumar N rajkumar.nagara...@ti.com
Reviewed-by: Gadiyar, Anand gadi...@ti.com
---
 drivers/video/omap2/displays/Kconfig   |6 +
 drivers/video/omap2/displays/Makefile  |1 +
 .../omap2/displays/panel-nec-nl8048hl11-01b.c  |  281 
 3 files changed, 288 insertions(+), 0 deletions(-)
 create mode 100644 drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c

diff --git a/drivers/video/omap2/displays/Kconfig 
b/drivers/video/omap2/displays/Kconfig
index 5f568a2..83f3224 100644
--- a/drivers/video/omap2/displays/Kconfig
+++ b/drivers/video/omap2/displays/Kconfig
@@ -37,6 +37,12 @@ config PANEL_TPO_TD043MTEA1
 help
   LCD Panel used in OMAP3 Pandora
 
+config PANEL_NEC_NL8048HL11_01B
+tristate NEC NL8048HL11-01B Panel support
+depends on OMAP2_DSS
+help
+  LCD Panel from NEC.
+
 config PANEL_ACX565AKM
tristate ACX565AKM Panel
depends on OMAP2_DSS_SDI
diff --git a/drivers/video/omap2/displays/Makefile 
b/drivers/video/omap2/displays/Makefile
index aa38609..fc8aca3 100644
--- a/drivers/video/omap2/displays/Makefile
+++ b/drivers/video/omap2/displays/Makefile
@@ -5,4 +5,5 @@ obj-$(CONFIG_PANEL_SHARP_LQ043T1DG01) += 
panel-sharp-lq043t1dg01.o
 obj-$(CONFIG_PANEL_TAAL) += panel-taal.o
 obj-$(CONFIG_PANEL_TOPPOLY_TDO35S) += panel-toppoly-tdo35s.o
 obj-$(CONFIG_PANEL_TPO_TD043MTEA1) += panel-tpo-td043mtea1.o
+obj-$(CONFIG_PANEL_NEC_NL8048HL11_01B) += panel-nec-nl8048hl11-01b.o
 obj-$(CONFIG_PANEL_ACX565AKM) += panel-acx565akm.o
diff --git a/drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c 
b/drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
new file mode 100644
index 000..ced8df2
--- /dev/null
+++ b/drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
@@ -0,0 +1,281 @@
+/*
+ * NEC panel support
+ *
+ * Copyright (C) 2010 Texas Instruments Inc.
+ *
+ * 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/module.h
+#include linux/delay.h
+#include linux/spi/spi.h
+
+#include plat/display.h
+
+#define LCD_XRES   800
+#define LCD_YRES   480
+/* NEC PIX Clock Ratings
+ * MIN:21.8MHz TYP:23.8MHz MAX:25.7MHz
+ */
+#define LCD_PIXEL_CLOCK23800
+
+/* NEC NL8048HL11-01B  Manual
+ * defines HFB, HSW, HBP, VFP, VSW, VBP as shown below
+ */
+
+static struct omap_video_timings nec_8048_panel_timings = {
+   /* 800 x 480 @ 60 Hz  Reduced blanking VESA CVT 0.31M3-R */
+   .x_res  = LCD_XRES,
+   .y_res  = LCD_YRES,
+   .pixel_clock= LCD_PIXEL_CLOCK,
+   .hfp= 6,
+   .hsw= 1,
+   .hbp= 4,
+   .vfp= 3,
+   .vsw= 1,
+   .vbp= 4,
+};
+
+static int nec_8048_panel_probe(struct omap_dss_device *dssdev)
+{
+   dssdev-panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
+   OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_RF |
+   OMAP_DSS_LCD_ONOFF;
+   dssdev-panel.timings = nec_8048_panel_timings;
+
+   return 0;
+}
+
+static void nec_8048_panel_remove(struct omap_dss_device *dssdev)
+{
+}
+
+static int nec_8048_panel_enable(struct omap_dss_device *dssdev)
+{
+   int r = 0;
+
+   if (dssdev-platform_enable)
+   r = dssdev-platform_enable(dssdev);
+   omapdss_dpi_display_enable(dssdev);
+
+   return r;
+}
+
+static void nec_8048_panel_disable(struct omap_dss_device *dssdev)
+{
+   omapdss_dpi_display_disable(dssdev);
+   if (dssdev-platform_disable)
+   dssdev-platform_disable(dssdev);
+}
+
+static int nec_8048_panel_suspend(struct omap_dss_device *dssdev)
+{
+   nec_8048_panel_disable(dssdev);
+   return 0;
+}
+
+static int nec_8048_panel_resume(struct omap_dss_device *dssdev)
+{
+   return nec_8048_panel_enable(dssdev);
+}
+
+static int nec_8048_recommended_bpp(struct omap_dss_device *dssdev)
+{
+   return 16;
+}
+
+static struct omap_dss_driver nec_8048_driver = {
+   .probe  = nec_8048_panel_probe,