rockchip: video: vop: Set different bitwidth for different display mode
authorEric Gao <eric.gao@rock-chips.com>
Tue, 2 May 2017 10:23:53 +0000 (18:23 +0800)
committerSimon Glass <sjg@chromium.org>
Wed, 10 May 2017 19:37:22 +0000 (13:37 -0600)
Because the bitwidth is different for different display mode, so we need
to set them according to demand.

Signed-off-by: Eric Gao <eric.gao@rock-chips.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/video/rockchip/rk_vop.c

index 6809246d24d7dfea5dff7c177e20b469a3568165..6e0fffab2eb909dd2d205af1d9964cf9e259da1f 100644 (file)
@@ -181,13 +181,11 @@ void rkvop_mode_set(struct rk3288_vop *regs,
  *
  * @dev:       VOP device that we want to connect to the display
  * @fbbase:    Frame buffer address
- * @l2bpp      Log2 of bits-per-pixels for the display
  * @ep_node:   Device tree node to process - this is the offset of an endpoint
  *             node within the VOP's 'port' list.
  * @return 0 if OK, -ve if something went wrong
  */
-int rk_display_init(struct udevice *dev, ulong fbbase,
-                   enum video_log2_bpp l2bpp, int ep_node)
+int rk_display_init(struct udevice *dev, ulong fbbase, int ep_node)
 {
        struct video_priv *uc_priv = dev_get_uclass_priv(dev);
        const void *blob = gd->fdt_blob;
@@ -199,6 +197,7 @@ int rk_display_init(struct udevice *dev, ulong fbbase,
        int ret, remote, i, offset;
        struct display_plat *disp_uc_plat;
        struct clk clk;
+       enum video_log2_bpp l2bpp;
 
        vop_id = fdtdec_get_int(blob, ep_node, "reg", -1);
        debug("vop_id=%d\n", vop_id);
@@ -253,6 +252,19 @@ int rk_display_init(struct udevice *dev, ulong fbbase,
                return ret;
        }
 
+       /* Set bitwidth for vop display according to vop mode */
+       switch (vop_id) {
+       case VOP_MODE_EDP:
+       case VOP_MODE_HDMI:
+       case VOP_MODE_LVDS:
+               l2bpp = VIDEO_BPP16;
+               break;
+       case VOP_MODE_MIPI:
+               l2bpp = VIDEO_BPP32;
+               break;
+       default:
+               l2bpp = VIDEO_BPP16;
+       }
        rkvop_mode_set(regs, &timing, vop_id);
 
        rkvop_enable(regs, fbbase, 1 << l2bpp, &timing);
@@ -330,7 +342,7 @@ static int rk_vop_probe(struct udevice *dev)
        for (node = fdt_first_subnode(blob, port);
             node > 0;
             node = fdt_next_subnode(blob, node)) {
-               ret = rk_display_init(dev, plat->base, VIDEO_BPP16, node);
+               ret = rk_display_init(dev, plat->base, node);
                if (ret)
                        debug("Device failed: ret=%d\n", ret);
                if (!ret)