diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c index 78f7bc1f6d74..0322641101af 100644 --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c @@ -54,6 +54,9 @@ #define RK3288_LVDS_CON_CLKINV(x) HIWORD_UPDATE(x, 8, 8) #define RK3288_LVDS_CON_TTL_EN(x) HIWORD_UPDATE(x, 6, 6) +#define RK3506_GRF_SOC_CON2 0x0008 +#define RK3506_GRF_VOP_DATA_BYPASS(v) HIWORD_UPDATE(v, 1, 2) + #define RK3562_GRF_IOC_VO_IO_CON 0x10500 #define RK3562_RGB_DATA_BYPASS(v) HIWORD_UPDATE(v, 6, 6) @@ -1080,6 +1083,22 @@ static const struct rockchip_rgb_data rk3288_rgb = { .funcs = &rk3288_rgb_funcs, }; +static void rk3506_rgb_enable(struct rockchip_rgb *rgb) +{ + regmap_write(rgb->grf, RK3506_GRF_SOC_CON2, + RK3506_GRF_VOP_DATA_BYPASS(rgb->data_sync_bypass ? 0x3 : 0x0)); +} + +static const struct rockchip_rgb_funcs rk3506_rgb_funcs = { + .enable = rk3506_rgb_enable, +}; + +static const struct rockchip_rgb_data rk3506_rgb = { + .rgb_max_dclk_rate = 120000, + .mcu_max_dclk_rate = 120000, + .funcs = &rk3506_rgb_funcs, +}; + static void rk3562_rgb_enable(struct rockchip_rgb *rgb) { regmap_write(rgb->grf, RK3562_GRF_IOC_VO_IO_CON, @@ -1167,6 +1186,7 @@ static const struct of_device_id rockchip_rgb_dt_ids[] = { { .compatible = "rockchip,rk3288-rgb", .data = &rk3288_rgb }, { .compatible = "rockchip,rk3308-rgb", }, { .compatible = "rockchip,rk3368-rgb", }, + { .compatible = "rockchip,rk3506-rgb", .data = &rk3506_rgb }, { .compatible = "rockchip,rk3562-rgb", .data = &rk3562_rgb }, { .compatible = "rockchip,rk3568-rgb", .data = &rk3568_rgb }, { .compatible = "rockchip,rk3576-rgb", .data = &rk3576_rgb },