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

Commit 53e62414 authored by Abhinav Kumar's avatar Abhinav Kumar
Browse files

drm/msm/sde: add sde_connector kickoff callbacks



Add a callback into the connector framework to allow sending
per-frame parameters at kickoff time.

This is needed to support the HDR feature where the HDR
metadata shall be sent to the sink on a per-frame basis.

Change-Id: I48a3616509e2226ea9bf0f490f0f47873ca74781
Signed-off-by: default avatarAbhinav Kumar <abhinavk@codeaurora.org>
parent 79d9dc2c
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2203,6 +2203,13 @@ sde_hdmi_connector_detect(struct drm_connector *connector,
	return status;
}

int sde_hdmi_pre_kickoff(struct drm_connector *connector,
	void *display,
	struct msm_display_kickoff_params *params)
{
	return 0;
}

int sde_hdmi_connector_get_modes(struct drm_connector *connector, void *display)
{
	struct sde_hdmi *hdmi_display = (struct sde_hdmi *)display;
+11 −0
Original line number Diff line number Diff line
@@ -452,6 +452,17 @@ bool sde_hdmi_tx_is_panel_on(struct sde_hdmi *hdmi_ctrl);
int sde_hdmi_start_hdcp(struct drm_connector *connector);
void sde_hdmi_hdcp_off(struct sde_hdmi *hdmi_ctrl);


/*
 * sde_hdmi_pre_kickoff - program kickoff-time features
 * @display: Pointer to private display structure
 * @params: Parameters for kickoff-time programming
 * Returns: Zero on success
 */
int sde_hdmi_pre_kickoff(struct drm_connector *connector,
		void *display,
		struct msm_display_kickoff_params *params);

#else /*#ifdef CONFIG_DRM_SDE_HDMI*/

static inline u32 sde_hdmi_get_num_of_displays(void)
+8 −0
Original line number Diff line number Diff line
@@ -235,6 +235,14 @@ struct msm_display_info {
	enum msm_display_compression compression;
};

/**
 * struct - msm_display_kickoff_params - info for display features at kickoff
 * @hdr_metadata: HDR metadata info passed from userspace
 */
struct msm_display_kickoff_params {
	struct drm_msm_ext_panel_hdr_metadata *hdr_metadata;
};

/**
 * struct msm_drm_event - defines custom event notification struct
 * @base: base object required for event notification by DRM framework.
+30 −0
Original line number Diff line number Diff line
@@ -60,6 +60,36 @@ int sde_connector_get_info(struct drm_connector *connector,
	return c_conn->ops.get_info(info, c_conn->display);
}

int sde_connector_pre_kickoff(struct drm_connector *connector)
{
	struct sde_connector *c_conn;
	struct sde_connector_state *c_state;
	struct msm_display_kickoff_params params;
	int rc;

	if (!connector) {
		SDE_ERROR("invalid argument\n");
		return -EINVAL;
	}

	c_conn = to_sde_connector(connector);
	c_state = to_sde_connector_state(connector->state);

	if (!c_conn->display) {
		SDE_ERROR("invalid argument\n");
		return -EINVAL;
	}

	if (!c_conn->ops.pre_kickoff)
		return 0;

	params.hdr_metadata = &c_state->hdr_meta;

	rc = c_conn->ops.pre_kickoff(connector, c_conn->display, &params);

	return rc;
}

static void sde_connector_destroy(struct drm_connector *connector)
{
	struct sde_connector *c_conn;
+20 −0
Original line number Diff line number Diff line
@@ -122,6 +122,19 @@ struct sde_connector_ops {
	int (*get_info)(struct msm_display_info *info, void *display);

	int (*set_backlight)(void *display, u32 bl_lvl);


	/**
	 * pre_kickoff - trigger display to program kickoff-time features
	 * @connector: Pointer to drm connector structure
	 * @display: Pointer to private display structure
	 * @params: Parameter bundle of connector-stored information for
	 *	kickoff-time programming into the display
	 * Returns: Zero on success
	 */
	int (*pre_kickoff)(struct drm_connector *connector,
		void *display,
		struct msm_display_kickoff_params *params);
};

/**
@@ -307,5 +320,12 @@ void sde_connector_complete_commit(struct drm_connector *connector);
int sde_connector_get_info(struct drm_connector *connector,
		struct msm_display_info *info);

/**
 * sde_connector_pre_kickoff - trigger kickoff time feature programming
 * @connector: Pointer to drm connector object
 * Returns: Zero on success
 */
int sde_connector_pre_kickoff(struct drm_connector *connector);

#endif /* _SDE_CONNECTOR_H_ */
Loading