drm/rockchip: dw_hdmi: Unified HDMI properties name to rk standard names

Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
Change-Id: I80977bd6da6faa9ac4c355da860c9559f7643a55
This commit is contained in:
Algea Cao
2022-01-24 15:33:32 +08:00
committed by Tao Huang
parent 0171f55e64
commit 925a72f42b

View File

@@ -137,27 +137,6 @@ struct rockchip_hdmi_chip_data {
u32 lcdsel_lit;
};
/* HDMI output pixel format */
enum drm_hdmi_output_type {
DRM_HDMI_OUTPUT_DEFAULT_RGB, /* default RGB */
DRM_HDMI_OUTPUT_YCBCR444, /* YCBCR 444 */
DRM_HDMI_OUTPUT_YCBCR422, /* YCBCR 422 */
DRM_HDMI_OUTPUT_YCBCR420, /* YCBCR 420 */
DRM_HDMI_OUTPUT_YCBCR_HQ, /* Highest subsampled YUV */
DRM_HDMI_OUTPUT_YCBCR_LQ, /* Lowest subsampled YUV */
DRM_HDMI_OUTPUT_INVALID, /* Guess what ? */
};
enum dw_hdmi_rockchip_color_depth {
ROCKCHIP_HDMI_DEPTH_8,
ROCKCHIP_HDMI_DEPTH_10,
ROCKCHIP_HDMI_DEPTH_12,
ROCKCHIP_HDMI_DEPTH_16,
ROCKCHIP_HDMI_DEPTH_420_10,
ROCKCHIP_HDMI_DEPTH_420_12,
ROCKCHIP_HDMI_DEPTH_420_16
};
enum hdmi_frl_rate_per_lane {
FRL_12G_PER_LANE = 12,
FRL_10G_PER_LANE = 10,
@@ -220,7 +199,7 @@ struct rockchip_hdmi {
unsigned int colorimetry;
unsigned int hdmi_quant_range;
unsigned int phy_bus_width;
enum drm_hdmi_output_type hdmi_output;
enum rk_if_color_format hdmi_output;
struct rockchip_drm_sub_dev sub_dev;
u8 max_frl_rate_per_lane;
@@ -1690,56 +1669,56 @@ dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state,
if (!hdmi->is_hdmi_qp)
sink_is_hdmi = dw_hdmi_get_output_whether_hdmi(hdmi->hdmi);
*color_format = DRM_HDMI_OUTPUT_DEFAULT_RGB;
*color_format = RK_IF_FORMAT_RGB;
switch (hdmi->hdmi_output) {
case DRM_HDMI_OUTPUT_YCBCR_HQ:
case RK_IF_FORMAT_YCBCR_HQ:
if (info->color_formats & DRM_COLOR_FORMAT_YCRCB444)
*color_format = DRM_HDMI_OUTPUT_YCBCR444;
*color_format = RK_IF_FORMAT_YCBCR444;
else if (info->color_formats & DRM_COLOR_FORMAT_YCRCB422)
*color_format = DRM_HDMI_OUTPUT_YCBCR422;
*color_format = RK_IF_FORMAT_YCBCR422;
else if (conn_state->connector->ycbcr_420_allowed &&
drm_mode_is_420(info, mode) &&
(pixclock >= 594000 && !hdmi->is_hdmi_qp))
*color_format = DRM_HDMI_OUTPUT_YCBCR420;
*color_format = RK_IF_FORMAT_YCBCR420;
break;
case DRM_HDMI_OUTPUT_YCBCR_LQ:
case RK_IF_FORMAT_YCBCR_LQ:
if (conn_state->connector->ycbcr_420_allowed &&
drm_mode_is_420(info, mode) && pixclock >= 594000)
*color_format = DRM_HDMI_OUTPUT_YCBCR420;
*color_format = RK_IF_FORMAT_YCBCR420;
else if (info->color_formats & DRM_COLOR_FORMAT_YCRCB422)
*color_format = DRM_HDMI_OUTPUT_YCBCR422;
*color_format = RK_IF_FORMAT_YCBCR422;
else if (info->color_formats & DRM_COLOR_FORMAT_YCRCB444)
*color_format = DRM_HDMI_OUTPUT_YCBCR444;
*color_format = RK_IF_FORMAT_YCBCR444;
break;
case DRM_HDMI_OUTPUT_YCBCR420:
case RK_IF_FORMAT_YCBCR420:
if (conn_state->connector->ycbcr_420_allowed &&
drm_mode_is_420(info, mode) && pixclock >= 594000)
*color_format = DRM_HDMI_OUTPUT_YCBCR420;
*color_format = RK_IF_FORMAT_YCBCR420;
break;
case DRM_HDMI_OUTPUT_YCBCR422:
case RK_IF_FORMAT_YCBCR422:
if (info->color_formats & DRM_COLOR_FORMAT_YCRCB422)
*color_format = DRM_HDMI_OUTPUT_YCBCR422;
*color_format = RK_IF_FORMAT_YCBCR422;
break;
case DRM_HDMI_OUTPUT_YCBCR444:
case RK_IF_FORMAT_YCBCR444:
if (info->color_formats & DRM_COLOR_FORMAT_YCRCB444)
*color_format = DRM_HDMI_OUTPUT_YCBCR444;
*color_format = RK_IF_FORMAT_YCBCR444;
break;
case DRM_HDMI_OUTPUT_DEFAULT_RGB:
case RK_IF_FORMAT_RGB:
default:
break;
}
if (*color_format == DRM_HDMI_OUTPUT_DEFAULT_RGB &&
if (*color_format == RK_IF_FORMAT_RGB &&
info->edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_30)
support_dc = true;
if (*color_format == DRM_HDMI_OUTPUT_YCBCR444 &&
if (*color_format == RK_IF_FORMAT_YCBCR444 &&
info->edid_hdmi_dc_modes &
(DRM_EDID_HDMI_DC_Y444 | DRM_EDID_HDMI_DC_30))
support_dc = true;
if (*color_format == DRM_HDMI_OUTPUT_YCBCR422)
if (*color_format == RK_IF_FORMAT_YCBCR422)
support_dc = true;
if (*color_format == DRM_HDMI_OUTPUT_YCBCR420 &&
if (*color_format == RK_IF_FORMAT_YCBCR420 &&
info->hdmi.y420_dc_modes & DRM_EDID_YCBCR420_DC_30)
support_dc = true;
@@ -1749,7 +1728,7 @@ dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state,
color_depth = 8;
if (!sink_is_hdmi) {
*color_format = DRM_HDMI_OUTPUT_DEFAULT_RGB;
*color_format = RK_IF_FORMAT_RGB;
color_depth = 8;
}
@@ -1779,15 +1758,15 @@ dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state,
color_depth = 10;
/* We prefer use YCbCr422 to send 10bit */
if (info->color_formats & DRM_COLOR_FORMAT_YCRCB422)
*color_format = DRM_HDMI_OUTPUT_YCBCR422;
*color_format = RK_IF_FORMAT_YCBCR422;
if (hdmi->is_hdmi_qp) {
if (info->color_formats & DRM_COLOR_FORMAT_YCRCB420) {
if (mode->clock >= 340000)
*color_format = DRM_HDMI_OUTPUT_YCBCR420;
*color_format = RK_IF_FORMAT_YCBCR420;
else
*color_format = DRM_HDMI_OUTPUT_DEFAULT_RGB;
*color_format = RK_IF_FORMAT_RGB;
} else {
*color_format = DRM_HDMI_OUTPUT_DEFAULT_RGB;
*color_format = RK_IF_FORMAT_RGB;
}
}
}
@@ -1798,12 +1777,12 @@ dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state,
DRM_MODE_FLAG_3D_FRAME_PACKING)
pixclock *= 2;
if (*color_format == DRM_HDMI_OUTPUT_YCBCR422 || color_depth == 8)
if (*color_format == RK_IF_FORMAT_YCBCR422 || color_depth == 8)
tmdsclock = pixclock;
else
tmdsclock = pixclock * (color_depth) / 8;
if (*color_format == DRM_HDMI_OUTPUT_YCBCR420)
if (*color_format == RK_IF_FORMAT_YCBCR420)
tmdsclock /= 2;
/* XXX: max_tmds_clock of some sink is 0, we think it is 340MHz. */
@@ -1817,18 +1796,18 @@ dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state,
color_depth = 8;
} else if (max_tmds_clock > 340000) {
if (drm_mode_is_420(info, mode) || tmdsclock >= 594000)
*color_format = DRM_HDMI_OUTPUT_YCBCR420;
*color_format = RK_IF_FORMAT_YCBCR420;
} else {
color_depth = 8;
if (drm_mode_is_420(info, mode) || tmdsclock >= 594000)
*color_format = DRM_HDMI_OUTPUT_YCBCR420;
*color_format = RK_IF_FORMAT_YCBCR420;
}
}
if (mode->clock >= 340000 && hdmi->is_hdmi_qp)
*color_format = DRM_HDMI_OUTPUT_YCBCR420;
*color_format = RK_IF_FORMAT_YCBCR420;
if (*color_format == DRM_HDMI_OUTPUT_YCBCR420) {
if (*color_format == RK_IF_FORMAT_YCBCR420) {
*output_mode = ROCKCHIP_OUT_MODE_YUV420;
if (color_depth > 8)
*bus_format = MEDIA_BUS_FMT_UYYVYY10_0_5X30;
@@ -1838,19 +1817,19 @@ dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state,
} else {
*output_mode = ROCKCHIP_OUT_MODE_AAAA;
if (color_depth > 8) {
if (*color_format != DRM_HDMI_OUTPUT_DEFAULT_RGB &&
if (*color_format != RK_IF_FORMAT_RGB &&
!hdmi->unsupported_yuv_input)
*bus_format = MEDIA_BUS_FMT_YUV10_1X30;
else
*bus_format = MEDIA_BUS_FMT_RGB101010_1X30;
} else {
if (*color_format != DRM_HDMI_OUTPUT_DEFAULT_RGB &&
if (*color_format != RK_IF_FORMAT_RGB &&
!hdmi->unsupported_yuv_input)
*bus_format = MEDIA_BUS_FMT_YUV8_1X24;
else
*bus_format = MEDIA_BUS_FMT_RGB888_1X24;
}
if (*color_format == DRM_HDMI_OUTPUT_YCBCR422)
if (*color_format == RK_IF_FORMAT_YCBCR422)
*bus_width = 8;
else
*bus_width = color_depth;
@@ -1858,7 +1837,7 @@ dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state,
hdmi->bus_format = *bus_format;
if (*color_format == DRM_HDMI_OUTPUT_YCBCR422) {
if (*color_format == RK_IF_FORMAT_YCBCR422) {
if (color_depth == 12)
hdmi->output_bus_format = MEDIA_BUS_FMT_UYVY12_1X24;
else if (color_depth == 10)
@@ -1964,7 +1943,7 @@ dw_hdmi_rockchip_encoder_atomic_check(struct drm_encoder *encoder,
if (hdmi->enc_out_encoding == V4L2_YCBCR_ENC_BT2020)
s->color_space = V4L2_COLORSPACE_BT2020;
else if (colorformat == DRM_HDMI_OUTPUT_DEFAULT_RGB)
else if (colorformat == RK_IF_FORMAT_RGB)
s->color_space = V4L2_COLORSPACE_DEFAULT;
else if (hdmi->enc_out_encoding == V4L2_YCBCR_ENC_709)
s->color_space = V4L2_COLORSPACE_REC709;
@@ -2104,13 +2083,13 @@ static const struct drm_prop_enum_list color_depth_enum_list[] = {
};
static const struct drm_prop_enum_list drm_hdmi_output_enum_list[] = {
{ DRM_HDMI_OUTPUT_DEFAULT_RGB, "output_rgb" },
{ DRM_HDMI_OUTPUT_YCBCR444, "output_ycbcr444" },
{ DRM_HDMI_OUTPUT_YCBCR422, "output_ycbcr422" },
{ DRM_HDMI_OUTPUT_YCBCR420, "output_ycbcr420" },
{ DRM_HDMI_OUTPUT_YCBCR_HQ, "output_ycbcr_high_subsampling" },
{ DRM_HDMI_OUTPUT_YCBCR_LQ, "output_ycbcr_low_subsampling" },
{ DRM_HDMI_OUTPUT_INVALID, "invalid_output" },
{ RK_IF_FORMAT_RGB, "rgb" },
{ RK_IF_FORMAT_YCBCR444, "ycbcr444" },
{ RK_IF_FORMAT_YCBCR422, "ycbcr422" },
{ RK_IF_FORMAT_YCBCR420, "ycbcr420" },
{ RK_IF_FORMAT_YCBCR_HQ, "ycbcr_high_subsampling" },
{ RK_IF_FORMAT_YCBCR_LQ, "ycbcr_low_subsampling" },
{ RK_IF_FORMAT_MAX, "invalid_output" },
};
static const struct drm_prop_enum_list quant_range_enum_list[] = {
@@ -2146,41 +2125,41 @@ dw_hdmi_rockchip_attach_properties(struct drm_connector *connector,
switch (color) {
case MEDIA_BUS_FMT_RGB101010_1X30:
hdmi->hdmi_output = DRM_HDMI_OUTPUT_DEFAULT_RGB;
hdmi->hdmi_output = RK_IF_FORMAT_RGB;
hdmi->colordepth = 10;
break;
case MEDIA_BUS_FMT_YUV8_1X24:
hdmi->hdmi_output = DRM_HDMI_OUTPUT_YCBCR444;
hdmi->hdmi_output = RK_IF_FORMAT_YCBCR444;
hdmi->colordepth = 8;
break;
case MEDIA_BUS_FMT_YUV10_1X30:
hdmi->hdmi_output = DRM_HDMI_OUTPUT_YCBCR444;
hdmi->hdmi_output = RK_IF_FORMAT_YCBCR444;
hdmi->colordepth = 10;
break;
case MEDIA_BUS_FMT_UYVY10_1X20:
hdmi->hdmi_output = DRM_HDMI_OUTPUT_YCBCR422;
hdmi->hdmi_output = RK_IF_FORMAT_YCBCR422;
hdmi->colordepth = 10;
break;
case MEDIA_BUS_FMT_UYVY8_1X16:
hdmi->hdmi_output = DRM_HDMI_OUTPUT_YCBCR422;
hdmi->hdmi_output = RK_IF_FORMAT_YCBCR422;
hdmi->colordepth = 8;
break;
case MEDIA_BUS_FMT_UYYVYY8_0_5X24:
hdmi->hdmi_output = DRM_HDMI_OUTPUT_YCBCR420;
hdmi->hdmi_output = RK_IF_FORMAT_YCBCR420;
hdmi->colordepth = 8;
break;
case MEDIA_BUS_FMT_UYYVYY10_0_5X30:
hdmi->hdmi_output = DRM_HDMI_OUTPUT_YCBCR420;
hdmi->hdmi_output = RK_IF_FORMAT_YCBCR420;
hdmi->colordepth = 10;
break;
default:
hdmi->hdmi_output = DRM_HDMI_OUTPUT_DEFAULT_RGB;
hdmi->hdmi_output = RK_IF_FORMAT_RGB;
hdmi->colordepth = 8;
}
hdmi->bus_format = color;
if (hdmi->hdmi_output == DRM_HDMI_OUTPUT_YCBCR422) {
if (hdmi->hdmi_output == RK_IF_FORMAT_YCBCR422) {
if (hdmi->colordepth == 12)
hdmi->output_bus_format = MEDIA_BUS_FMT_UYVY12_1X24;
else if (hdmi->colordepth == 10)
@@ -2194,7 +2173,7 @@ dw_hdmi_rockchip_attach_properties(struct drm_connector *connector,
/* RK3368 does not support deep color mode */
if (!hdmi->color_depth_property && !hdmi->unsupported_deep_color) {
prop = drm_property_create_enum(connector->dev, 0,
"hdmi_output_depth",
RK_IF_PROP_COLOR_DEPTH,
color_depth_enum_list,
ARRAY_SIZE(color_depth_enum_list));
if (prop) {
@@ -2203,7 +2182,7 @@ dw_hdmi_rockchip_attach_properties(struct drm_connector *connector,
}
}
prop = drm_property_create_enum(connector->dev, 0, "hdmi_output_format",
prop = drm_property_create_enum(connector->dev, 0, RK_IF_PROP_COLOR_FORMAT,
drm_hdmi_output_enum_list,
ARRAY_SIZE(drm_hdmi_output_enum_list));
if (prop) {
@@ -2220,16 +2199,16 @@ dw_hdmi_rockchip_attach_properties(struct drm_connector *connector,
drm_object_attach_property(&connector->base, prop, 0);
}
prop = drm_property_create_range(connector->dev, DRM_MODE_PROP_IMMUTABLE,
"hdmi_color_depth_capacity",
prop = drm_property_create_range(connector->dev, 0,
RK_IF_PROP_COLOR_DEPTH_CAPS,
0, 0xff);
if (prop) {
hdmi->colordepth_capacity = prop;
drm_object_attach_property(&connector->base, prop, 0);
}
prop = drm_property_create_range(connector->dev, DRM_MODE_PROP_IMMUTABLE,
"hdmi_output_mode_capacity",
prop = drm_property_create_range(connector->dev, 0,
RK_IF_PROP_COLOR_FORMAT_CAPS,
0, 0xf);
if (prop) {
hdmi->outputmode_capacity = prop;
@@ -2264,7 +2243,7 @@ dw_hdmi_rockchip_attach_properties(struct drm_connector *connector,
drm_object_attach_property(&connector->base, prop, 0);
}
prop = drm_property_create_enum(connector->dev, DRM_MODE_PROP_IMMUTABLE,
prop = drm_property_create_enum(connector->dev, 0,
"output_type_capacity",
output_type_cap_list,
ARRAY_SIZE(output_type_cap_list));
@@ -2399,6 +2378,12 @@ dw_hdmi_rockchip_set_property(struct drm_connector *connector,
hdmi->force_output = val;
dw_hdmi_set_output_type(hdmi->hdmi, val);
return 0;
} else if (property == hdmi->colordepth_capacity) {
return 0;
} else if (property == hdmi->outputmode_capacity) {
return 0;
} else if (property == hdmi->output_type_capacity) {
return 0;
}
DRM_ERROR("Unknown property [PROP:%d:%s]\n",
@@ -2425,32 +2410,32 @@ dw_hdmi_rockchip_get_property(struct drm_connector *connector,
*val = hdmi->hdmi_output;
return 0;
} else if (property == hdmi->colordepth_capacity) {
*val = BIT(ROCKCHIP_HDMI_DEPTH_8);
*val = BIT(RK_IF_DEPTH_8);
/* RK3368 only support 8bit */
if (hdmi->unsupported_deep_color)
return 0;
if (info->edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_30)
*val |= BIT(ROCKCHIP_HDMI_DEPTH_10);
*val |= BIT(RK_IF_DEPTH_10);
if (info->edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_36)
*val |= BIT(ROCKCHIP_HDMI_DEPTH_12);
*val |= BIT(RK_IF_DEPTH_12);
if (info->edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_48)
*val |= BIT(ROCKCHIP_HDMI_DEPTH_16);
*val |= BIT(RK_IF_DEPTH_16);
if (info->hdmi.y420_dc_modes & DRM_EDID_YCBCR420_DC_30)
*val |= BIT(ROCKCHIP_HDMI_DEPTH_420_10);
*val |= BIT(RK_IF_DEPTH_420_10);
if (info->hdmi.y420_dc_modes & DRM_EDID_YCBCR420_DC_36)
*val |= BIT(ROCKCHIP_HDMI_DEPTH_420_12);
*val |= BIT(RK_IF_DEPTH_420_12);
if (info->hdmi.y420_dc_modes & DRM_EDID_YCBCR420_DC_48)
*val |= BIT(ROCKCHIP_HDMI_DEPTH_420_16);
*val |= BIT(RK_IF_DEPTH_420_16);
return 0;
} else if (property == hdmi->outputmode_capacity) {
*val = BIT(DRM_HDMI_OUTPUT_DEFAULT_RGB);
*val = BIT(RK_IF_FORMAT_RGB);
if (info->color_formats & DRM_COLOR_FORMAT_YCRCB444)
*val |= BIT(DRM_HDMI_OUTPUT_YCBCR444);
*val |= BIT(RK_IF_FORMAT_YCBCR444);
if (info->color_formats & DRM_COLOR_FORMAT_YCRCB422)
*val |= BIT(DRM_HDMI_OUTPUT_YCBCR422);
*val |= BIT(RK_IF_FORMAT_YCBCR422);
if (connector->ycbcr_420_allowed &&
info->color_formats & DRM_COLOR_FORMAT_YCRCB420)
*val |= BIT(DRM_HDMI_OUTPUT_YCBCR420);
*val |= BIT(RK_IF_FORMAT_YCBCR420);
return 0;
} else if (property == hdmi->quant_range) {
*val = hdmi->hdmi_quant_range;