Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1116226ybh; Wed, 11 Mar 2020 17:59:18 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtAudt0S532ZD1US7WcNJ2AN39CeC6P+OZu888dbOR8dCXXVKofUk08qvNHUVM75WWjwpxJ X-Received: by 2002:a05:6830:193:: with SMTP id q19mr4367376ota.164.1583974758435; Wed, 11 Mar 2020 17:59:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583974758; cv=none; d=google.com; s=arc-20160816; b=xaRH/Ge8ZNe+VtFRAPsv0n63KRcKns8g55VgaPsUiGYbgOcIoFRcRIZLU9d5tDQiXd Dh9+kn8k3rkgRTyg930+LGWhLgfP3O81n/B+BYvaDPcdEvwfZJAuRGNIkD3uXmw82kKQ f1miIxmsLpR2XkfPMjhqmPXfoT8D5HZIRdXePUv4d4qQo9rC3Fv0a0woTalj30fPImGw AiFMFYSqHEZR1irvhaYdU5uJ+A23uo9zAoxdF3tWYLN4k8zy+Q4+PhZYf1zevld3zWIO D1w5kDPheLwk19B0SqvRWz9PSqqbHsjcpXIcrLTK53pqFSHn+edgTa/tqoDpyTXLdREo riGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=/y2DfBHFZLeDghC1UZR41SBlZKupXvp616ynoTxZM98=; b=niCs5dR4FI50DT0CIlXYbpQ7fciaixMlRMjV5GdJ9iHq/NtYttstrLLqqmbX2RgtlT jbO8Sb4WE3JTaFarfJwqKSR0+/KQDoTbjKmWWaT5jd+QW15fcTvx/3vt8bMD9fe3uK0S Bxdri/JRXeOPHyYzqCjfbB5bZ+pI00yYG8tNQMo+mUi0v9DSp9kzUgUGyWyR0pShbYHf JrAA4yQWteLhaqumA0PvvFW1iDR93RghHkW7+1QyrYDDoS2vO1uD8/92ydQf1/kK5Z0w QNZT+jOKossx6paefGNhSHIpnOL+EtPPnoBeNbygS6KNHLsQXRjwg2MHK0PgyMTm7zyP +74A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="SV/fFcT2"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i16si1871248otr.52.2020.03.11.17.59.05; Wed, 11 Mar 2020 17:59:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="SV/fFcT2"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387600AbgCLA5g (ORCPT + 99 others); Wed, 11 Mar 2020 20:57:36 -0400 Received: from mail-pf1-f202.google.com ([209.85.210.202]:48346 "EHLO mail-pf1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387481AbgCLA5f (ORCPT ); Wed, 11 Mar 2020 20:57:35 -0400 Received: by mail-pf1-f202.google.com with SMTP id h24so1759098pfn.15 for ; Wed, 11 Mar 2020 17:57:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=/y2DfBHFZLeDghC1UZR41SBlZKupXvp616ynoTxZM98=; b=SV/fFcT2tloK2zMo+2k9wlKlbaMrmAFNisfw9kLxe9ZoA4Np+tDrDDzkSKkjHMvvij Uv9PsRDuhz8AG/bOwby+Lh541GkOm/VshGZocjUlvgFEDNtYSK5OO9U0TEjyq7dCgxgU eGFLF0GIL6vAY+LFh9gHqUrGN6/jmxNhqfsI1AZRy8RZOswfhWLQkZcAl1EQpJA9p62X /x8N7qnmob6AsbtpexGvUh4Qt0z80SxMTzs/6FnVrivoXdS2RNxV1nsFOZjkfIUaDIJ+ bMPeVi9VDiH5OwJG4oOI5zYCFah7NMp6weJwhC9ji200LWQzC8QGI2Ab8qGVTeaoe7cq 8jqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=/y2DfBHFZLeDghC1UZR41SBlZKupXvp616ynoTxZM98=; b=ke5hYbQWcGuN00IHACJTaDOmVCC/XoDSHMbjo919jQRh/1X050MfWMikLcR9HAI6VP Jk2UgXLlZiH+uD9sUuaRRRSiChZ/rRDvE484CET8Ek2y6DOJmcQORU0fL8hkJLNmbtgw iwpNRzTzTKFxnHnXTLYueHtcFLdT1nzgQVFCM2A7kGL26QrBUIvQ1fFJvsbVUGPWpZJH DQyrOMQbvNcZcfwnNJT5MTy2nu7R6CCRPzaAKoL2s2IDYHrK1yIn/9DfXcxJ+unogJat sMB0J8IBX8jGE/o2vn0R+8048Rh8ckWQ9krZ831uqCmdd1iSEgJ7UTXQ+N8LTSxW5oQH Hbnw== X-Gm-Message-State: ANhLgQ2Z32/Lh0eXKsisQqWWm5BkG627hzJ5f6DJHl1+OwpJPe9ao6Og sd9u+R03sJOvedV9VRnP2rrfwkKVjObV X-Received: by 2002:a17:90a:a893:: with SMTP id h19mr1486955pjq.30.1583974653042; Wed, 11 Mar 2020 17:57:33 -0700 (PDT) Date: Wed, 11 Mar 2020 17:57:19 -0700 In-Reply-To: <20200312005722.48803-1-rajatja@google.com> Message-Id: <20200312005722.48803-3-rajatja@google.com> Mime-Version: 1.0 References: <20200312005722.48803-1-rajatja@google.com> X-Mailer: git-send-email 2.25.1.481.gfbce0eb801-goog Subject: [PATCH v8 2/5] drm/connector: Add support for privacy-screen property From: Rajat Jain To: Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , "=?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?=" , Chris Wilson , Imre Deak , "=?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?=" , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, gregkh@linuxfoundation.org, mathewk@google.com, Daniel Thompson , Jonathan Corbet , Pavel Machek , seanpaul@google.com, Duncan Laurie , jsbarnes@google.com, Thierry Reding , mpearson@lenovo.com, Nitin Joshi1 , Sugumaran Lacshiminarayanan , Tomoki Maruichi Cc: Rajat Jain , rajatxjain@gmail.com Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support for generic electronic privacy screen property, that can be added by systems that have an integrated EPS. Signed-off-by: Rajat Jain --- v8: Remove the ...destroy_privacy_screen() method and let the property be destroyed along with others at the time of device destruction. (because drm core doesn't also like properties destroyed in late_register()). v7: * Initial version, formed by moving the privacy-screen property into drm core. * Break the init_property() into create_property() and attach_property() so that property can be created while registering connector, but attached in late_register() (after ACPI node detection). drivers/gpu/drm/drm_atomic_uapi.c | 4 +++ drivers/gpu/drm/drm_connector.c | 51 +++++++++++++++++++++++++++++++ include/drm/drm_connector.h | 24 +++++++++++++++ 3 files changed, 79 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index a1e5e262bae2d..843a8cdacd149 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -766,6 +766,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector, fence_ptr); } else if (property == connector->max_bpc_property) { state->max_requested_bpc = val; + } else if (property == connector->privacy_screen_property) { + state->privacy_screen_status = val; } else if (connector->funcs->atomic_set_property) { return connector->funcs->atomic_set_property(connector, state, property, val); @@ -842,6 +844,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector, *val = 0; } else if (property == connector->max_bpc_property) { *val = state->max_requested_bpc; + } else if (property == connector->privacy_screen_property) { + *val = state->privacy_screen_status; } else if (connector->funcs->atomic_get_property) { return connector->funcs->atomic_get_property(connector, state, property, val); diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index f632ca05960e7..9a127f67fc59b 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1171,6 +1171,10 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { * can also expose this property to external outputs, in which case they * must support "None", which should be the default (since external screens * have a built-in scaler). + * + * privacy-screen: + * This optional property can be used to enable / disable an integrated + * electronic privacy screen that is available on some displays. */ int drm_connector_create_standard_properties(struct drm_device *dev) @@ -2137,6 +2141,53 @@ int drm_connector_set_panel_orientation_with_quirk( } EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); +static const struct drm_prop_enum_list privacy_screen_enum[] = { + { PRIVACY_SCREEN_DISABLED, "Disabled" }, + { PRIVACY_SCREEN_ENABLED, "Enabled" }, +}; + +/** + * drm_connector_create_privacy_screen_property - + * create the drm connecter's privacy-screen property. + * @connector: connector for which to create the privacy-screen property + * + * This function creates the "privacy-screen" property for the + * connector. It is not attached. + */ +void +drm_connector_create_privacy_screen_property(struct drm_connector *connector) +{ + if (connector->privacy_screen_property) + return; + + connector->privacy_screen_property = + drm_property_create_enum(connector->dev, DRM_MODE_PROP_ENUM, + "privacy-screen", privacy_screen_enum, + ARRAY_SIZE(privacy_screen_enum)); +} +EXPORT_SYMBOL(drm_connector_create_privacy_screen_property); + +/** + * drm_connector_attach_privacy_screen_property - + * attach the drm connecter's privacy-screen property. + * @connector: connector on which to attach the privacy-screen property + * + * This function attaches the "privacy-screen" property to the + * connector. Initial state of privacy-screen is set to disabled. + */ +void +drm_connector_attach_privacy_screen_property(struct drm_connector *connector) +{ + struct drm_property *prop = connector->privacy_screen_property; + + if (!prop) + return; + + drm_object_attach_property(&connector->base, prop, + PRIVACY_SCREEN_DISABLED); +} +EXPORT_SYMBOL(drm_connector_attach_privacy_screen_property); + int drm_connector_set_obj_prop(struct drm_mode_object *obj, struct drm_property *property, uint64_t value) diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 2113500b4075d..f1a42987c5693 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -254,6 +254,20 @@ enum drm_panel_orientation { DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, }; +/** + * enum drm_privacy_screen_status - privacy screen status + * + * This enum is used to track and control the state of the integrated privacy + * screen present on some display panels, via the "privacy-screen" property. + * + * @PRIVACY_SCREEN_DISABLED: The privacy-screen on the panel is disabled + * @PRIVACY_SCREEN_ENABLED: The privacy-screen on the panel is enabled + **/ +enum drm_privacy_screen_status { + PRIVACY_SCREEN_DISABLED = 0, + PRIVACY_SCREEN_ENABLED = 1, +}; + /* * This is a consolidated colorimetry list supported by HDMI and * DP protocol standard. The respective connectors will register @@ -656,6 +670,8 @@ struct drm_connector_state { */ u8 max_bpc; + enum drm_privacy_screen_status privacy_screen_status; + /** * @hdr_output_metadata: * DRM blob property for HDR output metadata @@ -1255,6 +1271,12 @@ struct drm_connector { */ struct drm_property *max_bpc_property; + /** + * @privacy_screen_property: Optional property for the connector to + * control the integrated privacy screen, if available. + */ + struct drm_property *privacy_screen_property; + #define DRM_CONNECTOR_POLL_HPD (1 << 0) #define DRM_CONNECTOR_POLL_CONNECT (1 << 1) #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2) @@ -1561,6 +1583,8 @@ int drm_connector_set_panel_orientation_with_quirk( int width, int height); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); +void drm_connector_create_privacy_screen_property(struct drm_connector *conn); +void drm_connector_attach_privacy_screen_property(struct drm_connector *conn); /** * struct drm_tile_group - Tile group metadata -- 2.25.1.481.gfbce0eb801-goog