From 3fde221e69e4ee9e71f3ce28aaef8ef5de44386d Mon Sep 17 00:00:00 2001
From: Phil Edworthy <phil.edworthy@renesas.com>
Date: Thu, 16 Dec 2010 11:55:18 +0000
Subject: [PATCH 2/4] sh772x: Update calls to libshbeu for new api

Tested on MS7724 board (SH7724) using df_andi

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
---
 gfxdrivers/sh772x/sh7722.c       |   26 ++++++++++++-------
 gfxdrivers/sh772x/sh7722_layer.c |   51 +++++++++++++++++++------------------
 gfxdrivers/sh772x/sh7722_types.h |    4 +-
 3 files changed, 44 insertions(+), 37 deletions(-)

diff --git a/gfxdrivers/sh772x/sh7722.c b/gfxdrivers/sh772x/sh7722.c
index 0b2b9c8..a038e09 100644
--- a/gfxdrivers/sh772x/sh7722.c
+++ b/gfxdrivers/sh772x/sh7722.c
@@ -54,6 +54,7 @@ DFB_GRAPHICS_DRIVER( sh7722 )
 
 /* libshbeu */
 #include <shbeu/shbeu.h>
+#include <uiomux/uiomux.h>
 
 D_DEBUG_DOMAIN( SH7722_Driver, "SH7722/Driver", "Renesas SH7722 Driver" );
 
@@ -241,7 +242,7 @@ driver_init_device( CoreGraphicsDevice *device,
      	  struct fb_var_screeninfo vsi;
 		  int fbdev;
 
-		  if ((fbdev = open("/dev/fb0", O_RDONLY)) < 0) {
+		  if ((fbdev = open("/dev/fb0", O_RDWR)) < 0) {
 			   D_ERROR( "SH7722/Driver: Can't open fbdev to get LCDC info!\n" );
 			   return DFB_FAILURE;
 		  }
@@ -264,7 +265,6 @@ driver_init_device( CoreGraphicsDevice *device,
 		  sdev->lcd_size   = fsi.smem_len;
 		  sdev->lcd_offset = 0;
 		  sdev->lcd_phys   = fsi.smem_start;
-#if 0
 		  sdrv->lcd_virt   = mmap(NULL, fsi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED,
 				  				  fbdev, 0);
 		  if (sdrv->lcd_virt == MAP_FAILED) {
@@ -273,6 +273,7 @@ driver_init_device( CoreGraphicsDevice *device,
 			   return DFB_FAILURE;
 		  }
 
+
           /* Clear LCD buffer. */
           switch (sdev->lcd_format) {
                case DSPF_RGB16:
@@ -288,7 +289,9 @@ driver_init_device( CoreGraphicsDevice *device,
                     D_BUG( "unsupported format" );
                     return DFB_BUG;
           }
-#endif
+
+          /* Register the framebuffer with UIOMux */
+          uiomux_register (sdrv->lcd_virt, sdev->lcd_phys, sdev->lcd_size);
 
 		  close(fbdev);
      }     
@@ -400,12 +403,15 @@ driver_init_device( CoreGraphicsDevice *device,
      /* Set output pixel format of the BEU. */
      switch (sdev->lcd_format) {
           case DSPF_RGB16:
-               sdev->shbeu_dest.format = V4L2_PIX_FMT_RGB565; 
+               sdev->shbeu_dest.s.pc = NULL;
+               sdev->shbeu_dest.s.pa = NULL;
+               sdev->shbeu_dest.s.format = REN_RGB565;
                break;
 
           case DSPF_NV16:
-               sdev->shbeu_dest.pa = sdev->lcd_phys + sdev->lcd_height * sdev->lcd_pitch;
-               sdev->shbeu_dest.format = V4L2_PIX_FMT_NV16; 
+               sdev->shbeu_dest.s.pc = sdrv->lcd_virt + sdev->lcd_height * sdev->lcd_pitch;
+               sdev->shbeu_dest.s.pa = NULL;
+               sdev->shbeu_dest.s.format = REN_NV16;
                break;
 
           default:
@@ -423,11 +429,11 @@ driver_init_device( CoreGraphicsDevice *device,
      fusion_skirmish_init( &sdev->beu_lock, "BEU", dfb_core_world(sdrv->core) );
 
      /* libshbeu */
-     sdev->shbeu_dest.py = sdev->lcd_phys;
-     sdev->shbeu_dest.width = sdev->lcd_width;
-     sdev->shbeu_dest.height =sdev->lcd_height;
+     sdev->shbeu_dest.s.py = sdrv->lcd_virt;
+     sdev->shbeu_dest.s.w = sdev->lcd_width;
+     sdev->shbeu_dest.s.h =sdev->lcd_height;
+     sdev->shbeu_dest.s.pitch = sdev->lcd_pitch/DFB_BYTES_PER_PIXEL(sdev->lcd_format);
      sdev->shbeu_dest.alpha = 0xff;
-     sdev->shbeu_dest.pitch = sdev->lcd_pitch/DFB_BYTES_PER_PIXEL(sdev->lcd_format);
      sdev->shbeu_dest.x = 0;
      sdev->shbeu_dest.y = 0;
      
diff --git a/gfxdrivers/sh772x/sh7722_layer.c b/gfxdrivers/sh772x/sh7722_layer.c
index 1c36b9d..edafbe1 100644
--- a/gfxdrivers/sh772x/sh7722_layer.c
+++ b/gfxdrivers/sh772x/sh7722_layer.c
@@ -90,13 +90,13 @@ sh7722InitLayer( CoreLayer                  *layer,
      config->options     = DLOP_ALPHACHANNEL;
      
      /* libshbeu */
+     sdev->shbeu_src[data->layer].s.w = sdev->lcd_width;
+     sdev->shbeu_src[data->layer].s.h = sdev->lcd_height;
+     sdev->shbeu_src[data->layer].s.pitch = sdev->lcd_pitch/DFB_BYTES_PER_PIXEL(config->pixelformat);
+     sdev->shbeu_src[data->layer].s.format = REN_RGB565;
      sdev->shbeu_src[data->layer].alpha = 0xff;
-     sdev->shbeu_src[data->layer].width = sdev->lcd_width;
-     sdev->shbeu_src[data->layer].height = sdev->lcd_height;
-     sdev->shbeu_src[data->layer].pitch = sdev->lcd_pitch/DFB_BYTES_PER_PIXEL(config->pixelformat);
      sdev->shbeu_src[data->layer].x = 0;
      sdev->shbeu_src[data->layer].y = 0;
-     sdev->shbeu_src[data->layer].format = V4L2_PIX_FMT_RGB565;
 
 
      return DFB_OK;
@@ -238,8 +238,8 @@ sh7722SetRegion( CoreLayer                  *layer,
                ch = sdev->lcd_height - config->dest.y;
 
           /* libshbeu: Set width and height. */
-          sdev->shbeu_src[n].height = ch;
-          sdev->shbeu_src[n].width  = cw;
+          sdev->shbeu_src[n].s.h = ch;
+          sdev->shbeu_src[n].s.w  = cw;
 
      }
 
@@ -248,22 +248,22 @@ sh7722SetRegion( CoreLayer                  *layer,
           CoreSurfaceBuffer *buffer = lock->buffer;
 
           /* libshbeu: Set buffer pitch. */
-          sdev->shbeu_src[n].pitch = lock->pitch / DFB_BYTES_PER_PIXEL(buffer->format);
+          sdev->shbeu_src[n].s.pitch = lock->pitch / DFB_BYTES_PER_PIXEL(buffer->format);
 
           /* libshbeu: Set buffer offset (Y plane or RGB packed). */
-          sdev->shbeu_src[n].py = lock->phys;
+          sdev->shbeu_src[n].s.py = lock->addr;
+          sdev->shbeu_src[n].s.pc = NULL;
+          sdev->shbeu_src[n].s.pa = NULL;
 
           /* libshbeu: Set alpha plane to same physical address as RGB plane if layer uses alpha */
           if (DFB_PIXELFORMAT_HAS_ALPHA(buffer->format) && (config->options & DLOP_ALPHACHANNEL))
-               sdev->shbeu_src[n].pa = lock->phys;
-          else
-               sdev->shbeu_src[n].pa = 0;
+               sdev->shbeu_src[n].s.pa = lock->addr;
           
           /* Set buffer offset (UV plane). */
           if (DFB_PLANAR_PIXELFORMAT(buffer->format)) {
                D_ASSUME( buffer->format == DSPF_NV12 || buffer->format == DSPF_NV16 );
 
-               sdev->shbeu_src[n].pc = lock->phys + lock->pitch * surface->config.size.h;
+               sdev->shbeu_src[n].s.pc = lock->addr + lock->pitch * surface->config.size.h;
           }
 
           sreg->surface = surface;
@@ -274,30 +274,31 @@ sh7722SetRegion( CoreLayer                  *layer,
           /* Set pixel format. */
           switch (config->format) {
                case DSPF_NV12:
-                    sdev->shbeu_src[n].format = V4L2_PIX_FMT_NV12;
+                    sdev->shbeu_src[n].s.format = REN_NV12;
                     break;
 
                case DSPF_NV16:
-                    sdev->shbeu_src[n].format = V4L2_PIX_FMT_NV16;
+                    sdev->shbeu_src[n].s.format = REN_NV16;
                     break;
 
                case DSPF_ARGB:
                case DSPF_RGB32:
-                    sdev->shbeu_src[n].format = V4L2_PIX_FMT_RGB32; 
+                    sdev->shbeu_src[n].s.format = REN_RGB32;
                     break;
 
                case DSPF_RGB24:
-                    sdev->shbeu_src[n].format = V4L2_PIX_FMT_RGB24; //FIXME: implement in libshbeu
+                    sdev->shbeu_src[n].s.format = REN_RGB24; //FIXME: implement in libshbeu
                     break;
 
                case DSPF_RGB16:
-                    sdev->shbeu_src[n].format = V4L2_PIX_FMT_RGB565;
+                    sdev->shbeu_src[n].s.format = REN_RGB565;
                     break;
  
+/* Currently not supported
                case DSPF_LUT8:
-                    sdev->shbeu_src[n].format = V4L2_PIX_FMT_PAL8; //FIXME: implement in libshbeu
+                    sdev->shbeu_src[n].s.format = REN_PAL8; //FIXME: implement in libshbeu
                     break;
-
+*/
                default:
                     break;
           }
@@ -311,9 +312,9 @@ sh7722SetRegion( CoreLayer                  *layer,
 
           /* libshbeu: Enable/disable alpha channel. */
           if ((config->options & DLOP_ALPHACHANNEL) && DFB_PIXELFORMAT_HAS_ALPHA(config->format))
-               sdev->shbeu_src[n].pa = sdev->shbeu_src[n].py;
+               sdev->shbeu_src[n].s.pa = sdev->shbeu_src[n].s.py;
           else
-               sdev->shbeu_src[n].pa = 0;
+               sdev->shbeu_src[n].s.pa = 0;
      }
 
 //TODO: Implement CLUT in libshbeu
@@ -372,7 +373,7 @@ sh7722RemoveRegion( CoreLayer *layer,
 
      /* libshbeu: reorder src surfaces and start blending. */
      if (sdev->input_mask) {
-          beu_surface_t* src[3] = {NULL, NULL, NULL};
+          struct shbeu_surface * src[3] = {NULL, NULL, NULL};
           int nr_surfaces = 0;
           if (sdev->input_mask & 1) {
                src[nr_surfaces] = &sdev->shbeu_src[0];
@@ -427,11 +428,11 @@ sh7722FlipRegion( CoreLayer             *layer,
      fusion_skirmish_prevail( &sdev->beu_lock );
 
      /* set new physical address for layer */
-     sdev->shbeu_src[n].py = lock->phys;
+     sdev->shbeu_src[n].s.py = lock->addr;
 
      /* libshbeu: reorder src surfaces and start blending. */
      if (sdev->input_mask) {
-          beu_surface_t* src[3] = {NULL, NULL, NULL};
+          struct shbeu_surface * src[3] = {NULL, NULL, NULL};
           int nr_surfaces = 0;
           if (sdev->input_mask & 1) {
                src[nr_surfaces] = &sdev->shbeu_src[0];
@@ -475,7 +476,7 @@ sh7722UpdateRegion( CoreLayer             *layer,
 
      /* libshbeu: reorder src surfaces and start blending. */
      if (sdev->input_mask) {
-          beu_surface_t* src[3] = {NULL, NULL, NULL};
+          struct shbeu_surface * src[3] = {NULL, NULL, NULL};
           int nr_surfaces = 0;
           if (sdev->input_mask & 1) {
                src[nr_surfaces] = &sdev->shbeu_src[0];
diff --git a/gfxdrivers/sh772x/sh7722_types.h b/gfxdrivers/sh772x/sh7722_types.h
index db2a4d1..6007bb3 100644
--- a/gfxdrivers/sh772x/sh7722_types.h
+++ b/gfxdrivers/sh772x/sh7722_types.h
@@ -107,8 +107,8 @@ typedef struct {
      u32                      color16;
 
      /* libshbeu */
-     beu_surface_t            shbeu_src[3];
-     beu_surface_t            shbeu_dest;
+     struct shbeu_surface     shbeu_src[3];
+     struct shbeu_surface     shbeu_dest;
 
 } SH7722DeviceData;
 
-- 
1.7.1

