rk3036 lcdc:
authorZheng Yang <zhengyang@rock-chips.com>
Tue, 18 Nov 2014 03:07:02 +0000 (11:07 +0800)
committerZheng Yang <zhengyang@rock-chips.com>
Tue, 18 Nov 2014 03:07:02 +0000 (11:07 +0800)
        If same layer is closed twice, atv_layer_cnt may be
        set to zero, so vop go to standy. Now win0、win1、hwc
        is mapped to atv_layer_cnt bit[0-2]. When open/close
        layer, set coresponding atv_layer_cnt bit to one/zero.

drivers/video/rockchip/lcdc/rk3036_lcdc.c

index c278bb51d82f4910b91836e1091d481a5e074e16..aeb0b353af5b678a91aebe0b3efa277a180b0350 100755 (executable)
@@ -349,9 +349,9 @@ static void lcdc_layer_enable(struct lcdc_device *lcdc_dev,
                                         "wakeup from standby!\n");
                                lcdc_dev->standby = 0;
                        }
-                       lcdc_dev->atv_layer_cnt++;
-               } else if ((lcdc_dev->atv_layer_cnt > 0) && (!open)) {
-                       lcdc_dev->atv_layer_cnt--;
+                       lcdc_dev->atv_layer_cnt |= (1 << win_id);
+               } else if ((lcdc_dev->atv_layer_cnt & (1 << win_id)) && (!open)) {
+                       lcdc_dev->atv_layer_cnt &= ~(1 << win_id);
                }
                lcdc_dev->driver.win[win_id]->state = open;
                if (!open) {