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;
|
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)
|
int sde_hdmi_connector_get_modes(struct drm_connector *connector, void *display)
|
||||||
{
|
{
|
||||||
struct sde_hdmi *hdmi_display = (struct sde_hdmi *)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);
|
int sde_hdmi_start_hdcp(struct drm_connector *connector);
|
||||||
void sde_hdmi_hdcp_off(struct sde_hdmi *hdmi_ctrl);
|
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*/
|
#else /*#ifdef CONFIG_DRM_SDE_HDMI*/
|
||||||
|
|
||||||
static inline u32 sde_hdmi_get_num_of_displays(void)
|
static inline u32 sde_hdmi_get_num_of_displays(void)
|
||||||
|
|
|
@ -235,6 +235,14 @@ struct msm_display_info {
|
||||||
enum msm_display_compression compression;
|
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
|
* struct msm_drm_event - defines custom event notification struct
|
||||||
* @base: base object required for event notification by DRM framework.
|
* @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);
|
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)
|
static void sde_connector_destroy(struct drm_connector *connector)
|
||||||
{
|
{
|
||||||
struct sde_connector *c_conn;
|
struct sde_connector *c_conn;
|
||||||
|
|
|
@ -122,6 +122,19 @@ struct sde_connector_ops {
|
||||||
int (*get_info)(struct msm_display_info *info, void *display);
|
int (*get_info)(struct msm_display_info *info, void *display);
|
||||||
|
|
||||||
int (*set_backlight)(void *display, u32 bl_lvl);
|
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,
|
int sde_connector_get_info(struct drm_connector *connector,
|
||||||
struct msm_display_info *info);
|
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_ */
|
#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_virt *sde_enc;
|
||||||
struct sde_encoder_phys *phys;
|
struct sde_encoder_phys *phys;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (!drm_enc) {
|
if (!drm_enc) {
|
||||||
SDE_ERROR("invalid encoder\n");
|
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)
|
if (phys && phys->ops.prepare_for_kickoff)
|
||||||
phys->ops.prepare_for_kickoff(phys);
|
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)
|
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,
|
.get_info = sde_hdmi_get_info,
|
||||||
.set_property = sde_hdmi_set_property,
|
.set_property = sde_hdmi_set_property,
|
||||||
.get_property = sde_hdmi_get_property,
|
.get_property = sde_hdmi_get_property,
|
||||||
|
.pre_kickoff = sde_hdmi_pre_kickoff,
|
||||||
};
|
};
|
||||||
struct msm_display_info info = {0};
|
struct msm_display_info info = {0};
|
||||||
struct drm_encoder *encoder;
|
struct drm_encoder *encoder;
|
||||||
|
|
Loading…
Add table
Reference in a new issue