[PATCH v3 2/5] video: rockchip: Fix vop modes for rk3399

Kever Yang kever.yang at rock-chips.com
Thu Apr 2 14:47:29 CEST 2020


On 2020/4/2 下午7:41, Jagan Teki wrote:
> VOP display endpoint pipeline configuration is differs
> between rk3288 vs rk3399.
>
> These VOP pipeline configuration depends on how the
> different display interfaces connected in sequence to
> IN and OUT ports like for,
>
> RK3288:
>
> vopb_out: port {
> 	#address-cells = <1>;
> 	#size-cells = <0>;
> 	vopb_out_edp: endpoint at 0 {
> 		reg = <0>;
> 		remote-endpoint = <&edp_in_vopb>;
> 	};
> 	vopb_out_hdmi: endpoint at 1 {
> 		reg = <1>;
>                  remote-endpoint = <&hdmi_in_vopb>;
>          };
>          vopb_out_lvds: endpoint at 2 {
>                  reg = <2>;
>                  remote-endpoint = <&lvds_in_vopb>;
>          };
>          vopb_out_mipi: endpoint at 3 {
>                  reg = <3>;
>                  remote-endpoint = <&mipi_in_vopb>;
>          };
> };
>
> RK3399:
>
> vopb_out: port {
>           #address-cells = <1>;
>           #size-cells = <0>;
>           vopb_out_edp: endpoint at 0 {
>                  reg = <0>;
>                  remote-endpoint = <&edp_in_vopb>;
>           };
>           vopb_out_mipi: endpoint at 1 {
>                  reg = <1>;
>                  remote-endpoint = <&mipi_in_vopb>;
>           };
>           vopb_out_hdmi: endpoint at 2 {
>                  reg = <2>;
>                  remote-endpoint = <&hdmi_in_vopb>;
>           };
>           vopb_out_mipi1: endpoint at 3 {
>                  reg = <3>;
>                  remote-endpoint = <&mipi1_in_vopb>;
>           };
>           vopb_out_dp: endpoint at 4 {
>                  reg = <4>;
>                  remote-endpoint = <&dp_in_vopb>;
>           };
> };
>
> here, HDMI interface has endpoint 1 in rk3288 and 2 in rk3399.
>
> The rockchip vop driver often depends on this determined endpoint
> number and stored in vop_mode. So based on this vop_mode the bpp
> and pin polarity would configure on detected display interface.
>
> Since, the existing driver using rk3288 vop mode settings enabling
> the same will result wrong display interface configuration for rk3399.
>
> Add the patch for fixing these vop modes for rk3399.
>
> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>



Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever
> ---
>   arch/arm/include/asm/arch-rockchip/vop_rk3288.h | 11 +++++++++++
>   drivers/video/rockchip/rk3399_vop.c             |  2 --
>   drivers/video/rockchip/rk_vop.c                 |  4 ++++
>   3 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/include/asm/arch-rockchip/vop_rk3288.h b/arch/arm/include/asm/arch-rockchip/vop_rk3288.h
> index 8398249509..872a158b71 100644
> --- a/arch/arm/include/asm/arch-rockchip/vop_rk3288.h
> +++ b/arch/arm/include/asm/arch-rockchip/vop_rk3288.h
> @@ -85,6 +85,16 @@ enum {
>   	LB_RGB_1280X8 = 0x5
>   };
>   
> +#if defined(CONFIG_ROCKCHIP_RK3399)
> +enum vop_modes {
> +	VOP_MODE_EDP = 0,
> +	VOP_MODE_MIPI,
> +	VOP_MODE_HDMI,
> +	VOP_MODE_MIPI1,
> +	VOP_MODE_DP,
> +	VOP_MODE_NONE,
> +};
> +#else
>   enum vop_modes {
>   	VOP_MODE_EDP = 0,
>   	VOP_MODE_HDMI,
> @@ -94,6 +104,7 @@ enum vop_modes {
>   	VOP_MODE_AUTO_DETECT,
>   	VOP_MODE_UNKNOWN,
>   };
> +#endif
>   
>   /* VOP_VERSION_INFO */
>   #define M_FPGA_VERSION (0xffff << 16)
> diff --git a/drivers/video/rockchip/rk3399_vop.c b/drivers/video/rockchip/rk3399_vop.c
> index 81c122d7a9..1d5b3931a6 100644
> --- a/drivers/video/rockchip/rk3399_vop.c
> +++ b/drivers/video/rockchip/rk3399_vop.c
> @@ -45,8 +45,6 @@ static void rk3399_set_pin_polarity(struct udevice *dev,
>   				V_RK3399_DSP_MIPI_POL(polarity));
>   		break;
>   
> -	case VOP_MODE_LVDS:
> -		/* The RK3399 has neither parallel RGB nor LVDS output. */
>   	default:
>   		debug("%s: unsupported output mode %x\n", __func__, mode);
>   	}
> diff --git a/drivers/video/rockchip/rk_vop.c b/drivers/video/rockchip/rk_vop.c
> index e91d4dfa7f..e1bd656bee 100644
> --- a/drivers/video/rockchip/rk_vop.c
> +++ b/drivers/video/rockchip/rk_vop.c
> @@ -118,10 +118,12 @@ static void rkvop_enable_output(struct udevice *dev, enum vop_modes mode)
>   				V_EDP_OUT_EN(1));
>   		break;
>   
> +#if defined(CONFIG_ROCKCHIP_RK3288)
>   	case VOP_MODE_LVDS:
>   		clrsetbits_le32(&regs->sys_ctrl, M_ALL_OUT_EN,
>   				V_RGB_OUT_EN(1));
>   		break;
> +#endif
>   
>   	case VOP_MODE_MIPI:
>   		clrsetbits_le32(&regs->sys_ctrl, M_ALL_OUT_EN,
> @@ -313,7 +315,9 @@ static int rk_display_init(struct udevice *dev, ulong fbbase, ofnode ep_node)
>   	/* Set bitwidth for vop display according to vop mode */
>   	switch (vop_id) {
>   	case VOP_MODE_EDP:
> +#if defined(CONFIG_ROCKCHIP_RK3288)
>   	case VOP_MODE_LVDS:
> +#endif
>   		l2bpp = VIDEO_BPP16;
>   		break;
>   	case VOP_MODE_HDMI:




More information about the U-Boot mailing list