Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp99395ybh; Mon, 9 Mar 2020 17:09:12 -0700 (PDT) X-Google-Smtp-Source: ADFU+vsaYp988mu+5k02pFCrh0GBPBJtCyPkAe+KdFBKW/aZ8WGxM9JOByq7BxNpQRtI351vC5/u X-Received: by 2002:aca:ded4:: with SMTP id v203mr1291903oig.19.1583798952188; Mon, 09 Mar 2020 17:09:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583798952; cv=none; d=google.com; s=arc-20160816; b=abqxgsBJT4c8aPg6qbVN6E8idYeZ47NdBb8G9v1/AtqCl36YJDyDWPpD1rGg0rgER4 CWa5hvA4Aywin+KIITxX/JVWYaieHeK97zGeQ6oi2xx8W2R7e2yahb4VZ6ydagz+gOtl HjXtsPFF5uH1KV4JhTDI8VYYbIhqZMbLtGxp7qeS6m5UT80EkeI5luxQl9klOFjktRQQ bjBE1pfG5J6BHH0/7GWDlnZKo4H+srW2/QaVSUyKTWoI698iqRvuFzJVRK/N7X60mslt AkERJ/BZLkp0Z1eOKOry4GIcXn7t3nKX/dFUTxci6F8wd6Js5o+5wszD8PR7ihRgxiZ/ bljg== 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=FPwV4EQH4sF8sFNnpBdmBi8fGAJX0LgAYaHhou0DP3U=; b=pKgSXDsPorvjU3Zqq/CtfFjN0vaS86NhQZG1dolC+Gqv4m0LcEFBrHZ827CZNtY/tg GWbiSgR+Ap/x+Cnol9tg7mXGDKBy/wdzulOC/hVOChWkqjCFm2xQSWrnIJQE8ptfOsao ntUB4auPXklnhEx+u5CCRuHwxRI9qpvfy8KbdkB/oHiytJaNj+7ac2Lh7UZzi42G5kX1 OhcaOtBrffhOW/cIxNF06tP5jzYFMmL5VLGySLOC7KCyXtbJEgWqN+SifiG9zvnUC5Xd QP4AT1ECUt3gXpmzm9B+EaFNHUfNuWFGAPMtixFcTYVkSLQ1Su8G8TD/HhGRf4N8hyUU k2Lg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=dXopUinS; 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 m81si5185480oig.190.2020.03.09.17.09.00; Mon, 09 Mar 2020 17:09:12 -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=dXopUinS; 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 S1727545AbgCJAGa (ORCPT + 99 others); Mon, 9 Mar 2020 20:06:30 -0400 Received: from mail-pf1-f201.google.com ([209.85.210.201]:46647 "EHLO mail-pf1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727511AbgCJAG3 (ORCPT ); Mon, 9 Mar 2020 20:06:29 -0400 Received: by mail-pf1-f201.google.com with SMTP id f75so1165048pfa.13 for ; Mon, 09 Mar 2020 17:06:27 -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=FPwV4EQH4sF8sFNnpBdmBi8fGAJX0LgAYaHhou0DP3U=; b=dXopUinStduj8G4lTd/EqFI0R5HDO1jvennmHWNuMjVR2MUouxQ/8tt0kJXHaFgm2j bWoh19rQQP2yKEVPGSmn7knp8ShZJjEgFisH1hjuOj3VJcl/vpUNB9tMui97ckC0RMCQ ayv4vFpZmoaIaWRplocuNQRwbs7JxWhrUq5WYwHIPUdB4lGkONkuDwTkITqNa6tBwUq2 3PHBu/m+NLhcsP6V5PrvIkYdy+UaC1XfXZTMtQpCBP+IsLHCfcClyM7xtpydik6DkR5T 5Glak94v47NXSW0KzInr7nBP4MUEnRncjaJYZitw6XAq0qViDtJQz8XM5jzmYfED/YAd BP+Q== 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=FPwV4EQH4sF8sFNnpBdmBi8fGAJX0LgAYaHhou0DP3U=; b=IrC+tJT3g/xboYa4YvFk/XfjP5vKMFRcjOkmpTJO1rdqWZei2ps5mZf3TNYgnlzfm7 /ng29fjiIy7ZUBOZ/ssR1xN4NMpGC7RUycW/Y/lPftF2xJRjvgxNJjutpuIqFW7IakTB +DRChbJtLcqe44lj3pu4KXgiqf00bSv/7aXfgWLMC/Te2ow4jHfuPqLPOVksYnnn6TFT kq3lYTn0RSc+SLS+lFq8bHVc2ilOEr8nv6Den9qWVP7xSlFUjHK0tpWzzL7f9RCp7Ii3 P/WV4l85+BxLtMWVYnbBAC3+iz2Uebi2erjsAYgPyAmZ6gG+CFepyO58eNe4PwHUdAUc grDQ== X-Gm-Message-State: ANhLgQ3WFICSa7bed2zuk/ERLruHdbJp6JV3nhVUHCLPYH2ux7f6HkHq tduXSLfMG6Sa3bm/py7kZuCapMn8TeCt X-Received: by 2002:a17:90b:3006:: with SMTP id hg6mr1978034pjb.54.1583798787193; Mon, 09 Mar 2020 17:06:27 -0700 (PDT) Date: Mon, 9 Mar 2020 17:06:15 -0700 In-Reply-To: <20200310000617.20662-1-rajatja@google.com> Message-Id: <20200310000617.20662-3-rajatja@google.com> Mime-Version: 1.0 References: <20200310000617.20662-1-rajatja@google.com> X-Mailer: git-send-email 2.25.1.481.gfbce0eb801-goog Subject: [PATCH v7 2/4] 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 --- 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 | 56 +++++++++++++++++++++++++++++++ include/drm/drm_connector.h | 25 ++++++++++++++ 3 files changed, 85 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..39303e15063a9 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,58 @@ 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_init_privacy_screen_property - + * create and attach the drm connecter's privacy-screen property. + * @connector: connector for which to init the privacy-screen property + * + * This function creates and attaches the "privacy-screen" property to the + * connector. Initial state of privacy-screen is set to disabled. + */ +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); + +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); + +void +drm_connector_destroy_privacy_screen_property(struct drm_connector *connector) +{ + struct drm_property *prop = connector->privacy_screen_property; + + if (!prop) + return; + + drm_property_destroy(connector->dev, prop); + connector->privacy_screen_property = NULL; +} +EXPORT_SYMBOL(drm_connector_destroy_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..257f398ce8720 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,9 @@ 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); +void drm_connector_destroy_privacy_screen_property(struct drm_connector *conn); /** * struct drm_tile_group - Tile group metadata -- 2.25.1.481.gfbce0eb801-goog