diff mbox

[U-Boot,v3,06/11] rockchip: video: vop: Set different bitwidth for different display mode

Message ID 1492605590-8581-7-git-send-email-eric.gao@rock-chips.com
State Superseded
Delegated to: Simon Glass
Headers show

Commit Message

eric.gao@rock-chips.com April 19, 2017, 12:39 p.m. UTC
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>

---

Changes in v3: None
Changes in v2:
-Change the bitwidth for different display mode.

 drivers/video/rockchip/rk_vop.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

Comments

Eddie Cai April 20, 2017, 1:58 a.m. UTC | #1
2017-04-19 20:39 GMT+08:00 Eric Gao <eric.gao@rock-chips.com>:
> 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>
Review-by: Eddie Cai <eddie.cai.linux@gmail.com>
>
> ---
>
> Changes in v3: None
> Changes in v2:
> -Change the bitwidth for different display mode.
>
>  drivers/video/rockchip/rk_vop.c | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/video/rockchip/rk_vop.c b/drivers/video/rockchip/rk_vop.c
> index 84d6627..a637f7d 100644
> --- a/drivers/video/rockchip/rk_vop.c
> +++ b/drivers/video/rockchip/rk_vop.c
> @@ -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)
> --
> 1.9.1
>
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> https://lists.denx.de/listinfo/u-boot
diff mbox

Patch

diff --git a/drivers/video/rockchip/rk_vop.c b/drivers/video/rockchip/rk_vop.c
index 84d6627..a637f7d 100644
--- a/drivers/video/rockchip/rk_vop.c
+++ b/drivers/video/rockchip/rk_vop.c
@@ -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)