Merge "drm/msm/sde: add sde_connector kickoff callbacks"

This commit is contained in:
Linux Build Service Account 2017-06-28 11:59:54 -07:00 committed by Gerrit - the friendly Code Review server
commit c6fd1ba1ad
7 changed files with 86 additions and 0 deletions

View file

@ -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;

View file

@ -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)

View file

@ -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.

View file

@ -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;

View file

@ -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_ */

View file

@ -795,6 +795,7 @@ void sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc)
struct sde_encoder_virt *sde_enc;
struct sde_encoder_phys *phys;
unsigned int i;
int rc;
if (!drm_enc) {
SDE_ERROR("invalid encoder\n");
@ -811,6 +812,14 @@ void sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc)
if (phys && phys->ops.prepare_for_kickoff)
phys->ops.prepare_for_kickoff(phys);
}
if (sde_enc->cur_master && sde_enc->cur_master->connector) {
rc = sde_connector_pre_kickoff(sde_enc->cur_master->connector);
if (rc)
SDE_ERROR_ENC(sde_enc, "kickoff conn%d failed rc %d\n",
sde_enc->cur_master->connector->base.id,
rc);
}
}
void sde_encoder_kickoff(struct drm_encoder *drm_enc)

View file

@ -602,6 +602,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
.get_info = sde_hdmi_get_info,
.set_property = sde_hdmi_set_property,
.get_property = sde_hdmi_get_property,
.pre_kickoff = sde_hdmi_pre_kickoff,
};
struct msm_display_info info = {0};
struct drm_encoder *encoder;