[PATCH 07/11] drm/vmwgfx: Add and connect connector helper function
Daniel Vetter
daniel at ffwll.ch
Tue Mar 28 07:41:06 UTC 2017
On Mon, Mar 27, 2017 at 03:01:00PM -0700, Sinclair Yeh wrote:
> Since the link between connector and encoder is always fixed in our case,
> just return the one encoder.
>
> These helpers won't be called until we flip on the atomic support
> flag or set drm_crtc_funcs->set_config to using the atomic
> helper.
>
> Signed-off-by: Sinclair Yeh <syeh at vmware.com>
> Reviewed-by: Thomas Hellstrom <thellstrom at vmware.com>
> ---
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 18 ++++++++++++++++++
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 ++
> drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 7 +++++++
> drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 9 +++++++++
> drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 8 ++++++++
> 5 files changed, 44 insertions(+)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index d00ff21..2250a34a 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -2223,6 +2223,24 @@ vmw_du_connector_atomic_get_property(struct drm_connector *connector,
> }
>
>
> +/**
> + * vmw_du_connector_best_encoder - there's only one
> + *
> + * @connector - connector the property is associated with
> + *
> + * In our case, there is only one encoder per connector
> + */
> +struct drm_encoder *
> +vmw_du_connector_best_encoder(struct drm_connector *connector)
> +{
> + struct vmw_display_unit *du;
> +
> + du = vmw_connector_to_du(connector);
> +
> + return &du->encoder;
> +}
Please just use drm_atomic_helper_best_encoder.
-Daniel
> +
> +
> int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv)
> {
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> index de6a0b6..3251562 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> @@ -267,6 +267,8 @@ vmw_du_connector_atomic_get_property(struct drm_connector *connector,
> const struct drm_connector_state *state,
> struct drm_property *property,
> uint64_t *val);
> +struct drm_encoder *
> +vmw_du_connector_best_encoder(struct drm_connector *connector);
> int vmw_du_connector_dpms(struct drm_connector *connector, int mode);
> void vmw_du_connector_save(struct drm_connector *connector);
> void vmw_du_connector_restore(struct drm_connector *connector);
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> index 1d734de..282a0ef 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> @@ -389,6 +389,11 @@ static const struct drm_connector_funcs vmw_legacy_connector_funcs = {
> .atomic_get_property = vmw_du_connector_atomic_get_property,
> };
>
> +static const struct
> +drm_connector_helper_funcs vmw_ldu_connector_helper_funcs = {
> + .best_encoder = vmw_du_connector_best_encoder,
> +};
> +
> /*
> * Legacy Display Plane Functions
> */
> @@ -555,6 +560,8 @@ static int vmw_ldu_init(struct vmw_private *dev_priv, unsigned unit)
> DRM_ERROR("Failed to initialize connector\n");
> goto err_free;
> }
> +
> + drm_connector_helper_add(connector, &vmw_ldu_connector_helper_funcs);
> connector->status = vmw_du_connector_detect(connector, true);
> vmw_connector_state_to_vcs(connector->state)->is_implicit = true;
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> index eca055e..e4154f1 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> @@ -608,6 +608,14 @@ static const struct drm_connector_funcs vmw_sou_connector_funcs = {
> .atomic_get_property = vmw_du_connector_atomic_get_property,
> };
>
> +
> +static const struct
> +drm_connector_helper_funcs vmw_sou_connector_helper_funcs = {
> + .best_encoder = vmw_du_connector_best_encoder,
> +};
> +
> +
> +
> /*
> * Screen Object Display Plane Functions
> */
> @@ -827,6 +835,7 @@ static int vmw_sou_init(struct vmw_private *dev_priv, unsigned unit)
> goto err_free;
> }
>
> + drm_connector_helper_add(connector, &vmw_sou_connector_helper_funcs);
> connector->status = vmw_du_connector_detect(connector, true);
> vmw_connector_state_to_vcs(connector->state)->is_implicit = false;
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> index cce5e5b..708d063 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> @@ -1189,6 +1189,12 @@ static const struct drm_connector_funcs vmw_stdu_connector_funcs = {
> };
>
>
> +static const struct
> +drm_connector_helper_funcs vmw_stdu_connector_helper_funcs = {
> + .best_encoder = vmw_du_connector_best_encoder,
> +};
> +
> +
>
> /******************************************************************************
> * Screen Target Display Plane Functions
> @@ -1549,6 +1555,8 @@ static int vmw_stdu_init(struct vmw_private *dev_priv, unsigned unit)
> DRM_ERROR("Failed to initialize connector\n");
> goto err_free;
> }
> +
> + drm_connector_helper_add(connector, &vmw_stdu_connector_helper_funcs);
> connector->status = vmw_du_connector_detect(connector, false);
> vmw_connector_state_to_vcs(connector->state)->is_implicit = false;
>
> --
> 2.7.4
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list