drm: Add privacy-screen class (v4)
authorHans de Goede <hdegoede@redhat.com>
Tue, 5 Oct 2021 20:23:14 +0000 (22:23 +0200)
committerHans de Goede <hdegoede@redhat.com>
Thu, 14 Oct 2021 11:12:21 +0000 (13:12 +0200)
commita1a98689301b9af0313e4c1ba44558e8b67ff76e
tree90193340cfdbb1f68176948c2ce9f7afade41253
parent107fe904302092c683cf5462b4af3cb3cfa40998
drm: Add privacy-screen class (v4)

On some new laptops the LCD panel has a builtin electronic privacy-screen.
We want to export this functionality as a property on the drm connector
object. But often this functionality is not exposed on the GPU but on some
other (ACPI) device.

This commit adds a privacy-screen class allowing the driver for these
other devices to register themselves as a privacy-screen provider; and
allowing the drm/kms code to get a privacy-screen provider associated
with a specific GPU/connector combo.

Changes in v2:
- Make CONFIG_DRM_PRIVACY_SCREEN a bool which controls if the drm_privacy
  code gets built as part of the main drm module rather then making it
  a tristate which builds its own module.
- Add a #if IS_ENABLED(CONFIG_DRM_PRIVACY_SCREEN) check to
  drm_privacy_screen_consumer.h and define stubs when the check fails.
  Together these 2 changes fix several dependency issues.
- Remove module related code now that this is part of the main drm.ko
- Use drm_class as class for the privacy-screen devices instead of
  adding a separate class for this

Changes in v3:
- Make the static inline drm_privacy_screen_get_state() stub set sw_state
  and hw_state to PRIVACY_SCREEN_DISABLED to squelch an uninitialized
  variable warning when CONFIG_DRM_PRIVICAY_SCREEN is not set

Changes in v4:
- Make drm_privacy_screen_set_sw_state() skip calling out to the hw if
  hw_state == new_sw_state

Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211005202322.700909-3-hdegoede@redhat.com
Documentation/gpu/drm-kms-helpers.rst
MAINTAINERS
drivers/gpu/drm/Kconfig
drivers/gpu/drm/Makefile
drivers/gpu/drm/drm_drv.c
drivers/gpu/drm/drm_privacy_screen.c [new file with mode: 0644]
include/drm/drm_privacy_screen_consumer.h [new file with mode: 0644]
include/drm/drm_privacy_screen_driver.h [new file with mode: 0644]
include/drm/drm_privacy_screen_machine.h [new file with mode: 0644]