[PATCH] drm: Call sysfs_notify after changing drm_connector::dpms

Karsten Wiese fzuuzf at googlemail.com
Tue Sep 26 22:29:46 UTC 2017


2017-09-25 15:48 GMT+02:00 Jani Nikula <jani.nikula at linux.intel.com>:

> On Tue, 19 Sep 2017, Karsten Wiese <fzuuzf at googlemail.com> wrote:
> > This makes poll work for the
> > /sys/class/drm/cardX/connectorY/dpms attributes.
>
> I guess the question is, what are you trying to achieve? What is the
> problem that this solves?
>
​
The patch enables cpu cycle less waiting for dpms flag changes.

Here it lets a screen brightness ​setting daemon know which monitor to
handle.
One of the attached screens gets confused if it is set just after being
switched on,
hence the daemon leaves it untouched until it has been active for some
seconds.

Without the p​atch the daemon would have to actively read the dpms flag
every once in a while.


>
> We have zero sysfs_notify in all of drm AFAICT.


Yes I noticed too and looked for some dbus signal to listen to​ but didn't
find any.

BR,
Karsten

>
> BR,
> Jani.
>
>
> >
> > Tested with i915 suspended by XScreenServer and
> > suspend to RAM.
> >
> > Signed-off-by: Karsten Wiese <fzuuzf at googlemail.com>
> > ---
> >  drivers/gpu/drm/drm_atomic.c        | 4 ++++
> >  drivers/gpu/drm/drm_atomic_helper.c | 6 +++++-
> >  2 files changed, 9 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> > index 2fd383d..b6fa87b 100644
> > --- a/drivers/gpu/drm/drm_atomic.c
> > +++ b/drivers/gpu/drm/drm_atomic.c
> > @@ -1880,6 +1880,10 @@ int drm_atomic_connector_commit_dpms(struct
> drm_atomic_state *state,
> >  out:
> >       if (ret != 0)
> >               connector->dpms = old_mode;
> > +     else
> > +             if (connector->dpms != old_mode)
> > +                     sysfs_notify(&connector->kdev->kobj, NULL,
> "dpms");
> > +
> >       return ret;
> >  }
> >
> > diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> b/drivers/gpu/drm/drm_atomic_helper.c
> > index 4e53aae..6198772 100644
> > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > @@ -921,12 +921,16 @@ drm_atomic_helper_update_legacy_modeset_state(struct
> drm_device *dev,
> >               crtc = new_conn_state->crtc;
> >               if ((!crtc && old_conn_state->crtc) ||
> >                   (crtc && drm_atomic_crtc_needs_modeset(crtc->state)))
> {
> > -                     int mode = DRM_MODE_DPMS_OFF;
> > +                     int old_mode, mode = DRM_MODE_DPMS_OFF;
> >
> >                       if (crtc && crtc->state->active)
> >                               mode = DRM_MODE_DPMS_ON;
> >
> > +                     old_mode = connector->dpms;
> >                       connector->dpms = mode;
> > +                     if (old_mode != mode)
> > +                             sysfs_notify(&connector->kdev->kobj,
> > +                                             NULL, "dpms");
> >               }
> >       }
>
> --
> Jani Nikula, Intel Open Source Technology Center
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20170927/b4029a31/attachment.html>


More information about the dri-devel mailing list