[patch 1/8] RFC: drivers/video/rockchip/rk_vop.c: Use endpoint compatible string to find VOP mode
Kever Yang
kever.yang at rock-chips.com
Mon Sep 28 04:44:54 CEST 2020
Add Andy for this patch review.
Thanks,
- Kever
On 2020/9/26 上午2:36, Arnaud Patard (Rtp) wrote:
> The current code is using an hard coded enum and the of node reg value of
> endpoint to find out if the endpoint is mipi/hdmi/lvds/edp/dp. The order
> is different between rk3288, rk3399 vop little, rk3399 vop big.
>
> A possible solution would be to make sure that the rk3288.dtsi and
> rk3399.dtsi files have "expected" reg value or an other solution is
> to find the kind of endpoint by comparing the endpoint compatible value.
>
> This patch is implementing the more flexible second solution.
>
> Signed-off-by: Arnaud Patard <arnaud.patard at rtp-net.org>
>
> Index: u-boot/arch/arm/include/asm/arch-rockchip/vop_rk3288.h
> ===================================================================
> --- u-boot.orig/arch/arm/include/asm/arch-rockchip/vop_rk3288.h
> +++ u-boot/arch/arm/include/asm/arch-rockchip/vop_rk3288.h
> @@ -85,26 +85,13 @@ 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,
> VOP_MODE_LVDS,
> - VOP_MODE_MIPI,
> - VOP_MODE_NONE,
> - VOP_MODE_AUTO_DETECT,
> - VOP_MODE_UNKNOWN,
> + VOP_MODE_DP,
> };
> -#endif
>
> /* VOP_VERSION_INFO */
> #define M_FPGA_VERSION (0xffff << 16)
> Index: u-boot/drivers/video/rockchip/rk_vop.c
> ===================================================================
> --- u-boot.orig/drivers/video/rockchip/rk_vop.c
> +++ u-boot/drivers/video/rockchip/rk_vop.c
> @@ -235,12 +235,11 @@ static int rk_display_init(struct udevic
> struct clk clk;
> enum video_log2_bpp l2bpp;
> ofnode remote;
> + const char *compat;
>
> debug("%s(%s, %lu, %s)\n", __func__,
> dev_read_name(dev), fbbase, ofnode_get_name(ep_node));
>
> - vop_id = ofnode_read_s32_default(ep_node, "reg", -1);
> - debug("vop_id=%d\n", vop_id);
> ret = ofnode_read_u32(ep_node, "remote-endpoint", &remote_phandle);
> if (ret)
> return ret;
> @@ -282,6 +281,28 @@ static int rk_display_init(struct udevic
> if (disp)
> break;
> };
> + compat = ofnode_get_property(remote, "compatible", NULL);
> + if (!compat) {
> + debug("%s(%s): Failed to find compatible property\n",
> + __func__, dev_read_name(dev));
> + return -EINVAL;
> + }
> + if (strstr(compat, "edp")) {
> + vop_id = VOP_MODE_EDP;
> + } else if (strstr(compat, "mipi")) {
> + vop_id = VOP_MODE_MIPI;
> + } else if (strstr(compat, "hdmi")) {
> + vop_id = VOP_MODE_HDMI;
> + } else if (strstr(compat, "cdn-dp")) {
> + vop_id = VOP_MODE_DP;
> + } else if (strstr(compat, "lvds")) {
> + vop_id = VOP_MODE_LVDS;
> + } else {
> + debug("%s(%s): Failed to find vop mode for %s\n",
> + __func__, dev_read_name(dev), compat);
> + return -EINVAL;
> + }
> + debug("vop_id=%d\n", vop_id);
>
> disp_uc_plat = dev_get_uclass_platdata(disp);
> debug("Found device '%s', disp_uc_priv=%p\n", disp->name, disp_uc_plat);
>
>
>
>
More information about the U-Boot
mailing list