On Fri,  6 Jul 2018 11:36:49 +0100
Daniel Stone <[email protected]> wrote:

> The DPMS connector property is an enum property in KMS, which made our
> property handling complain at startup as we weren't defining its enums.
> Fix our definition so we parse the enum values.
> 
> The only user of the property is the legacy path, which can continue
> using fixed values as those values are part of the KMS ABI. The atomic
> path does not need any changes, since atomic uses routing and CRTC
> active to determine the connector's power state, rather than a property.
> 
> Signed-off-by: Daniel Stone <[email protected]>
> Fixes: https://gitlab.freedesktop.org/wayland/weston/issues/125
> ---
>  libweston/compositor-drm.c | 41 +++++++++++++++++++++++++++++---------
>  1 file changed, 32 insertions(+), 9 deletions(-)

Nice! Pushed:
   79e95cb9..7625577a  master -> master


Thanks,
pq


> diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
> index 7dcc634c6..0de6d6ba0 100644
> --- a/libweston/compositor-drm.c
> +++ b/libweston/compositor-drm.c
> @@ -186,9 +186,36 @@ enum wdrm_connector_property {
>       WDRM_CONNECTOR__COUNT
>  };
>  
> +enum wdrm_dpms_state {
> +     WDRM_DPMS_STATE_OFF = 0,
> +     WDRM_DPMS_STATE_ON,
> +     WDRM_DPMS_STATE_STANDBY, /* unused */
> +     WDRM_DPMS_STATE_SUSPEND, /* unused */
> +     WDRM_DPMS_STATE__COUNT
> +};
> +
> +static struct drm_property_enum_info dpms_state_enums[] = {
> +     [WDRM_DPMS_STATE_OFF] = {
> +             .name = "Off",
> +     },
> +     [WDRM_DPMS_STATE_ON] = {
> +             .name = "On",
> +     },
> +     [WDRM_DPMS_STATE_STANDBY] = {
> +             .name = "Standby",
> +     },
> +     [WDRM_DPMS_STATE_SUSPEND] = {
> +             .name = "Suspend",
> +     },
> +};
> +
>  static const struct drm_property_info connector_props[] = {
>       [WDRM_CONNECTOR_EDID] = { .name = "EDID" },
> -     [WDRM_CONNECTOR_DPMS] = { .name = "DPMS" },
> +     [WDRM_CONNECTOR_DPMS] = {
> +             .name = "DPMS",
> +             .enum_values = dpms_state_enums,
> +             .num_enum_values = WDRM_DPMS_STATE__COUNT,
> +     },
>       [WDRM_CONNECTOR_CRTC_ID] = { .name = "CRTC_ID", },
>  };
>  
> @@ -2372,6 +2399,8 @@ drm_output_apply_state_atomic(struct drm_output_state 
> *state,
>                                    current_mode->blob_id);
>               ret |= crtc_add_prop(req, output, WDRM_CRTC_ACTIVE, 1);
>  
> +             /* No need for the DPMS property, since it is implicit in
> +              * routing and CRTC activity. */
>               wl_list_for_each(head, &output->base.head_list, 
> base.output_link) {
>                       ret |= connector_add_prop(req, head, 
> WDRM_CONNECTOR_CRTC_ID,
>                                                 output->crtc_id);
> @@ -2380,6 +2409,8 @@ drm_output_apply_state_atomic(struct drm_output_state 
> *state,
>               ret |= crtc_add_prop(req, output, WDRM_CRTC_MODE_ID, 0);
>               ret |= crtc_add_prop(req, output, WDRM_CRTC_ACTIVE, 0);
>  
> +             /* No need for the DPMS property, since it is implicit in
> +              * routing and CRTC activity. */
>               wl_list_for_each(head, &output->base.head_list, 
> base.output_link)
>                       ret |= connector_add_prop(req, head, 
> WDRM_CONNECTOR_CRTC_ID, 0);
>       }
> @@ -2463,14 +2494,6 @@ drm_pending_state_apply_atomic(struct 
> drm_pending_state *pending_state,
>                                                      info->prop_id, 0);
>                       if (err <= 0)
>                               ret = -1;
> -
> -                     info = &head->props_conn[WDRM_CONNECTOR_DPMS];
> -                     if (info->prop_id > 0)
> -                             err = drmModeAtomicAddProperty(req, 
> head->connector_id,
> -                                                            info->prop_id,
> -                                                            
> DRM_MODE_DPMS_OFF);
> -                     if (err <= 0)
> -                             ret = -1;
>               }
>  
>               wl_array_for_each(unused, &b->unused_crtcs) {

Attachment: pgpklgCI2ASxa.pgp
Description: OpenPGP digital signature

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to