Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30384d11 authored by Srikanth Rajagopalan's avatar Srikanth Rajagopalan Committed by Ajay Singh Parmar
Browse files

drm/msm: add sink capabilities for HDR support



Populate HDR sink capabilities to a DRM blob.

These capabilities are used by the userspace
to calculate the sink HDR properties and set them.

CRs-Fixed: 2110071
Change-Id: I7c2dbca375c456052ad73889b011553090bcf8f1
Signed-off-by: default avatarSrikanth Rajagopalan <rasrik@codeaurora.org>
Signed-off-by: default avatarAjay Singh Parmar <aparmar@codeaurora.org>
parent 902b1499
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -163,6 +163,7 @@ enum msm_mdp_conn_property {
	/* blob properties, always put these first */
	CONNECTOR_PROP_SDE_INFO,
	CONNECTOR_PROP_HDR_INFO,
	CONNECTOR_PROP_EXT_HDR_INFO,
	CONNECTOR_PROP_PP_DITHER,

	/* # of blob properties */
+35 −1
Original line number Diff line number Diff line
@@ -1025,6 +1025,29 @@ void sde_connector_commit_reset(struct drm_connector *connector, ktime_t ts)
	sde_fence_signal(&to_sde_connector(connector)->retire_fence, ts, true);
}

static void sde_connector_update_hdr_props(struct drm_connector *connector)
{
	struct sde_connector *c_conn = to_sde_connector(connector);
	struct drm_msm_ext_hdr_properties hdr = {};

	hdr.hdr_supported = connector->hdr_supported;

	if (hdr.hdr_supported) {
		hdr.hdr_eotf = connector->hdr_eotf;
		hdr.hdr_metadata_type_one = connector->hdr_metadata_type_one;
		hdr.hdr_max_luminance = connector->hdr_max_luminance;
		hdr.hdr_avg_luminance = connector->hdr_avg_luminance;
		hdr.hdr_min_luminance = connector->hdr_min_luminance;

		msm_property_set_blob(&c_conn->property_info,
			      &c_conn->blob_ext_hdr,
			      &hdr,
			      sizeof(hdr),
			      CONNECTOR_PROP_EXT_HDR_INFO);

	}
}

static enum drm_connector_status
sde_connector_detect(struct drm_connector *connector, bool force)
{
@@ -1251,6 +1274,7 @@ static const struct drm_connector_funcs sde_connector_ops = {
static int sde_connector_get_modes(struct drm_connector *connector)
{
	struct sde_connector *c_conn;
	int ret = 0;

	if (!connector) {
		SDE_ERROR("invalid connector\n");
@@ -1262,8 +1286,11 @@ static int sde_connector_get_modes(struct drm_connector *connector)
		SDE_DEBUG("missing get_modes callback\n");
		return 0;
	}
	ret = c_conn->ops.get_modes(connector, c_conn->display);
	if (ret)
		sde_connector_update_hdr_props(connector);

	return c_conn->ops.get_modes(connector, c_conn->display);
	return ret;
}

static enum drm_mode_status
@@ -1560,6 +1587,13 @@ struct drm_connector *sde_connector_init(struct drm_device *dev,
	/* install PP_DITHER properties */
	_sde_connector_install_dither_property(dev, sde_kms, c_conn);

	if (connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
		msm_property_install_blob(&c_conn->property_info,
				"ext_hdr_properties",
				DRM_MODE_PROP_IMMUTABLE,
				CONNECTOR_PROP_EXT_HDR_INFO);
	}

	msm_property_install_range(&c_conn->property_info, "RETIRE_FENCE",
			0x0, 0, INR_OPEN_MAX, 0, CONNECTOR_PROP_RETIRE_FENCE);

+1 −0
Original line number Diff line number Diff line
@@ -298,6 +298,7 @@ struct sde_connector {
	struct msm_property_data property_data[CONNECTOR_PROP_COUNT];
	struct drm_property_blob *blob_caps;
	struct drm_property_blob *blob_hdr;
	struct drm_property_blob *blob_ext_hdr;
	struct drm_property_blob *blob_dither;

	bool fb_kmap;
+15 −0
Original line number Diff line number Diff line
@@ -61,6 +61,21 @@ struct drm_msm_timespec {
	__s64 tv_nsec;         /* nanoseconds */
};

/**
 * HDR sink properties
 * These are defined as per EDID spec and shall be used by the userspace
 * to determine the HDR properties to be set to the sink.
 */
#define DRM_MSM_EXT_HDR_PROPERTIES
struct drm_msm_ext_hdr_properties {
	__u8 hdr_metadata_type_one;   /* static metadata type one */
	__u32 hdr_supported;          /* HDR supported */
	__u32 hdr_eotf;               /* electro optical transfer function */
	__u32 hdr_max_luminance;      /* Max luminance */
	__u32 hdr_avg_luminance;      /* Avg luminance */
	__u32 hdr_min_luminance;      /* Min Luminance */
};

#define MSM_PARAM_GPU_ID     0x01
#define MSM_PARAM_GMEM_SIZE  0x02
#define MSM_PARAM_CHIP_ID    0x03