rk2928 lcdc:support fb and layer remap interface
authoryxj <yxj@rock-chips.com>
Wed, 8 Aug 2012 14:19:58 +0000 (22:19 +0800)
committeryxj <yxj@rock-chips.com>
Wed, 8 Aug 2012 14:21:05 +0000 (22:21 +0800)
drivers/video/rockchip/chips/rk2928_lcdc.c

index 71146072f545c2533a747758edfc1670abe1622c..df7b28ee423dada145d8a9c0eb48e0c97ca63d87 100755 (executable)
@@ -685,6 +685,53 @@ static int rk2928_lcdc_fps_mgr(struct rk_lcdc_device_driver *dev_drv,int fps,boo
        screen->ft = 1000/fps ;  //one frame time in ms
        return fps;
 }
+
+
+static int rk2928_fb_layer_remap(struct rk_lcdc_device_driver *dev_drv,
+        enum fb_win_map_order order)
+{
+        mutex_lock(&dev_drv->fb_win_id_mutex);
+       if(order == FB_DEFAULT_ORDER)
+       {
+               order = FB0_WIN0_FB1_WIN1_FB2_WIN2;
+       }
+        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 rk2928_fb_get_layer(struct rk_lcdc_device_driver *dev_drv,const char *id)
+{
+        int layer_id = 0;
+        mutex_lock(&dev_drv->fb_win_id_mutex);
+        if(!strcmp(id,"fb0"))
+        {
+                layer_id = dev_drv->fb0_win_id;
+        }
+        else if(!strcmp(id,"fb1"))
+        {
+                layer_id = dev_drv->fb1_win_id;
+        }
+        else if(!strcmp(id,"fb2"))
+        {
+                layer_id = dev_drv->fb2_win_id;
+        }
+        else
+        {
+                printk(KERN_ERR "%s>>un supported %s\n",__func__,id);
+                layer_id = -1;
+        }
+        mutex_unlock(&dev_drv->fb_win_id_mutex);
+
+        return  layer_id;
+}
+
 int rk2928_lcdc_early_suspend(struct rk_lcdc_device_driver *dev_drv)
 {
        struct rk2928_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk2928_lcdc_device,driver);
@@ -792,6 +839,8 @@ static struct rk_lcdc_device_driver lcdc_driver = {
        .ovl_mgr                = rk2928_lcdc_ovl_mgr,
        .get_disp_info          = rk2928_lcdc_get_disp_info,
        .fps_mgr                = rk2928_lcdc_fps_mgr,
+       .fb_get_layer           = rk2928_fb_get_layer,
+       .fb_layer_remap         = rk2928_fb_layer_remap,
 };
 #ifdef CONFIG_PM
 static int rk2928_lcdc_suspend(struct platform_device *pdev, pm_message_t state)