From fe856df701d979dbfcb1a9b18521a807dfe34a39 Mon Sep 17 00:00:00 2001
From: yxj <yxj@rock-chips.com>
Date: Fri, 10 Aug 2012 10:14:46 +0800
Subject: [PATCH] rk30 lcdc: add layer remap interface

---
 drivers/video/rockchip/chips/rk30_lcdc.c | 58 ++++++++++++++----------
 1 file changed, 34 insertions(+), 24 deletions(-)

diff --git a/drivers/video/rockchip/chips/rk30_lcdc.c b/drivers/video/rockchip/chips/rk30_lcdc.c
index b66560db5342..c2d13a49d8e9 100644
--- a/drivers/video/rockchip/chips/rk30_lcdc.c
+++ b/drivers/video/rockchip/chips/rk30_lcdc.c
@@ -851,33 +851,43 @@ static int rk30_lcdc_fps_mgr(struct rk_lcdc_device_driver *dev_drv,int fps,bool
 	return fps;
 }
 
-static int rk30_fb_layer_remap(struct rk_lcdc_device_driver *dev_drv,
-        enum fb_win_map_order order)
+static int rk30_fb_layer_remap(struct rk_lcdc_device_driver *dev_drv,int order)
 {
-        return 0;
+       mutex_lock(&dev_drv->fb_win_id_mutex);
+       if(order == FB_DEFAULT_ORDER )
+	{
+		order = FB0_WIN2_FB1_WIN0_FB2_WIN1;
+	}
+       dev_drv->fb2_win_id  = order/100;
+       dev_drv->fb1_win_id = (order/10)%10;
+       dev_drv->fb0_win_id = order%10;
+       mutex_unlock(&dev_drv->fb_win_id_mutex);
+
+       printk("fb0:win%d\nfb1:win%d\nfb2:win%d\n",dev_drv->fb0_win_id,dev_drv->fb1_win_id,
+               dev_drv->fb2_win_id);
+
+       return 0;
 }
 
 static int rk30_fb_get_layer(struct rk_lcdc_device_driver *dev_drv,const char *id)
 {
-	int layer_id;
-
-        mutex_lock(&dev_drv->fb_win_id_mutex);
-	if (!strcmp(id,"fb1") || !strcmp(id,"fb3"))
-	{
-		layer_id = 0;
-	}
-	else if (!strcmp(id,"fb0") || !strcmp(id,"fb2"))
-	{
-		layer_id = 1;
-	}
-	else
-	{
-		printk(KERN_ERR "%s: unsupported %s", __func__, id);
-		layer_id = -ENODEV;
-	}
-        mutex_unlock(&dev_drv->fb_win_id_mutex);
-
-	return layer_id;
+       int layer_id;
+       mutex_lock(&dev_drv->fb_win_id_mutex);
+       if(!strcmp(id,"fb0")||!strcmp(id,"fb4"))
+       {
+               layer_id = dev_drv->fb0_win_id;
+       }
+       else if(!strcmp(id,"fb1")||!strcmp(id,"fb5"))
+       {
+               layer_id = dev_drv->fb1_win_id;
+       }
+       else if(!strcmp(id,"fb2")||!strcmp(id,"fb6"))
+       {
+               layer_id = dev_drv->fb2_win_id;
+       }
+       mutex_unlock(&dev_drv->fb_win_id_mutex);
+
+       return  layer_id;
 }
 
 int rk30_lcdc_early_suspend(struct rk_lcdc_device_driver *dev_drv)
@@ -986,8 +996,8 @@ static struct rk_lcdc_device_driver lcdc_driver = {
 	.ovl_mgr		= rk30_lcdc_ovl_mgr,
 	.get_disp_info		= rk30_lcdc_get_disp_info,
 	.fps_mgr		= rk30_lcdc_fps_mgr,
-	.fb_get_layer		= rk30_fb_get_layer,
-	.fb_layer_remap		= rk30_fb_layer_remap,
+	.fb_get_layer           = rk30_fb_get_layer,
+	.fb_layer_remap         = rk30_fb_layer_remap,
 };
 #ifdef CONFIG_PM
 static int rk30_lcdc_suspend(struct platform_device *pdev, pm_message_t state)
-- 
2.34.1