Merge "drm/msm/sde: add sde_connector kickoff callbacks"
This commit is contained in:
commit
c6fd1ba1ad
7 changed files with 86 additions and 0 deletions
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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, ¶ms);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void sde_connector_destroy(struct drm_connector *connector)
|
||||
{
|
||||
struct sde_connector *c_conn;
|
||||
|
|
|
@ -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_ */
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue