[PATCH] drm/privacy-screen: Use connector name in lookup
Hans de Goede
hdegoede at redhat.com
Mon Mar 21 11:51:06 UTC 2022
ATM the drm privacy-screen code is not using connector names to lookup
drm privacy-screen providers, drm_privacy_screen_get() does support this,
but before this change the con_id is set to NULL everywhere which is
treated as a wildcard.
There are some worries that we may see devices with 2 displays with
a privacy-screen, be it 2 internal displays or 1 internal + 1 external.
All laptop-models which currently are supported by the drm_privacy_screen
code use an eDP display connected to eDP-1.
This commits enables the use of the con_id parameter, hardcoding this to
"eDP-1" in the lookup tables in drivers/gpu/drm/drm_privacy_screen_x86.c
and adjusting the i915 driver to match.
Using the con_id parameter paves the way for potentially having another
display (attached to a different connector) which also has a builtin
privacy-screen.
This was tested by Hans de Goede on a ThinkPad and by Rajat Jain on
an Intel Chromebook (both with builtin privacy-screens).
Cc: Sean Paul <seanpaul at chromium.org>
Cc: Rajat Jain <rajatja at google.com>
Tested-by: Rajat Jain <rajatja at google.com>
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
drivers/gpu/drm/drm_privacy_screen_x86.c | 4 ++--
drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
drivers/gpu/drm/i915/display/intel_display.c | 15 +++++++++++----
3 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/drm_privacy_screen_x86.c b/drivers/gpu/drm/drm_privacy_screen_x86.c
index 72ed40e4997e..6afa3773313a 100644
--- a/drivers/gpu/drm/drm_privacy_screen_x86.c
+++ b/drivers/gpu/drm/drm_privacy_screen_x86.c
@@ -62,7 +62,7 @@ static const struct arch_init_data arch_init_data[] __initconst = {
{
.lookup = {
.dev_id = NULL,
- .con_id = NULL,
+ .con_id = "eDP-1",
.provider = "privacy_screen-thinkpad_acpi",
},
.detect = detect_thinkpad_privacy_screen,
@@ -72,7 +72,7 @@ static const struct arch_init_data arch_init_data[] __initconst = {
{
.lookup = {
.dev_id = NULL,
- .con_id = NULL,
+ .con_id = "eDP-1",
.provider = "privacy_screen-GOOG0010:00",
},
.detect = detect_chromeos_privacy_screen,
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index cab505277595..e1930ab6ff11 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3951,7 +3951,7 @@ intel_ddi_init_dp_connector(struct intel_digital_port *dig_port)
struct drm_device *dev = dig_port->base.base.dev;
struct drm_privacy_screen *privacy_screen;
- privacy_screen = drm_privacy_screen_get(dev->dev, NULL);
+ privacy_screen = drm_privacy_screen_get(dev->dev, connector->base.name);
if (!IS_ERR(privacy_screen)) {
drm_connector_attach_privacy_screen_provider(&connector->base,
privacy_screen);
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index fb455d3710c6..f0695c29a393 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -10825,7 +10825,11 @@ void intel_modeset_driver_remove_nogem(struct drm_i915_private *i915)
bool intel_modeset_probe_defer(struct pci_dev *pdev)
{
+ static const char * const internal_panel_connector_names[] = {
+ "eDP-1",
+ };
struct drm_privacy_screen *privacy_screen;
+ int i;
/*
* apple-gmux is needed on dual GPU MacBook Pro
@@ -10835,11 +10839,14 @@ bool intel_modeset_probe_defer(struct pci_dev *pdev)
return true;
/* If the LCD panel has a privacy-screen, wait for it */
- privacy_screen = drm_privacy_screen_get(&pdev->dev, NULL);
- if (IS_ERR(privacy_screen) && PTR_ERR(privacy_screen) == -EPROBE_DEFER)
- return true;
+ for (i = 0; i < ARRAY_SIZE(internal_panel_connector_names); i++) {
+ privacy_screen = drm_privacy_screen_get(&pdev->dev,
+ internal_panel_connector_names[i]);
+ if (IS_ERR(privacy_screen) && PTR_ERR(privacy_screen) == -EPROBE_DEFER)
+ return true;
- drm_privacy_screen_put(privacy_screen);
+ drm_privacy_screen_put(privacy_screen);
+ }
return false;
}
--
2.35.1
More information about the dri-devel
mailing list