Received: by 10.223.164.202 with SMTP id h10csp833539wrb; Fri, 10 Nov 2017 16:21:29 -0800 (PST) X-Google-Smtp-Source: AGs4zMZ1TXLRY9GBjpXQ909e1+gJ3xZ2oTHt5fXZdkl51gokBHV+H3Bqa8x7VyJg66ZVG2yn28vD X-Received: by 10.101.92.66 with SMTP id v2mr1919592pgr.151.1510359689077; Fri, 10 Nov 2017 16:21:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510359689; cv=none; d=google.com; s=arc-20160816; b=sybuvt+knmrFXxfjFZgCYLk3ppKFl5lfdIUZaHiYeEG+6Qe4iIsEUCwbPJp1g5Fzzy bpU/qsNluxxigbfqvNnSxHPQA+YKTqik02NimqKFj1iUUmHP4pQW9CKGo38RZMOcL91l M0iLNjGoEA25HlZkXEIcfBqwvglrr+ynwzdWFfdpyLgBjaEBaEa7HEASPYK4bfyQPOUu eR7RmpkMVihMpquylHFhI7RYNUEKJpD+fAvCRxD3PlMpdxH3XYkTww1ggcK7SrfoM71I EdMCqO71orXnHO1tz4s43Sdzz0bjkpIh0o0P85QsauGGmFFv8QdOXC6BKfqEhHcjurhu upIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=ZksKHqyoYFYv++Dxvy7kImkgp63MmnaWn/YVNdjcyzs=; b=fJoa2MdZjywQ4GZK6Dc9zfG4KFshJCVsEGw/CR73aLQxn/mxZfoZs5CYmP0Bg8VtLm lNPAEs4N9F45xQKzB1DfFMTNBlsRiqKUTVh4SjlWM5jfTEQpLH8NeaT8sV5neoMty9+T cSbhlpkUZzbYibiRnU3LCa12cpdcthORbKwvwg8qzLP5mXM5mZd+0a9tlKoRTGqJFDlk fbi+Bwxl9Ql9Y1OmrFKxB1NEUpHGQrkxFXwQC0yPag8ifwI2O4z0At410pTP0RbF/Xcr 0WjHSEx0I1uANLwoBbp85sBFL94xIqJ8WIYJW6yQfQ/7ePNFhtFl+rVmqsjvnNmN+GWQ uFjA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k13si7326843pgo.739.2017.11.10.16.21.17; Fri, 10 Nov 2017 16:21:29 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754820AbdKKAUa (ORCPT + 83 others); Fri, 10 Nov 2017 19:20:30 -0500 Received: from home.keithp.com ([63.227.221.253]:48152 "EHLO elaine.keithp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754140AbdKKAUN (ORCPT ); Fri, 10 Nov 2017 19:20:13 -0500 Received: from localhost (localhost [127.0.0.1]) by elaine.keithp.com (Postfix) with ESMTP id 41C283F202AF; Fri, 10 Nov 2017 16:20:13 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at keithp.com Received: from elaine.keithp.com ([127.0.0.1]) by localhost (elaine.keithp.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 7b-M4WWsKFBD; Fri, 10 Nov 2017 16:20:12 -0800 (PST) Received: from vr.keithp.com (vr.keithp.com [10.0.0.39]) by elaine.keithp.com (Postfix) with ESMTP id 809473F21489; Fri, 10 Nov 2017 16:20:11 -0800 (PST) Received: by vr.keithp.com (Postfix, from userid 1000) id 3EFEB740074; Fri, 10 Nov 2017 16:20:10 -0800 (PST) From: Keith Packard To: linux-kernel@vger.kernel.org, Dave Airlie , Daniel Vetter Cc: Keith Packard , dri-devel@lists.freedesktop.org Subject: [PATCH 1/3] drm: add connector info/property for non-desktop displays [v2] Date: Fri, 10 Nov 2017 16:20:07 -0800 Message-Id: <20171111002009.2340-2-keithp@keithp.com> X-Mailer: git-send-email 2.15.0.rc0 In-Reply-To: <20171111002009.2340-1-keithp@keithp.com> References: <20171025063023.12584-1-airlied@gmail.com> <20171111002009.2340-1-keithp@keithp.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dave Airlie This adds the infrastructure needed to quirk displays using edid and to mark them a non-desktop. A non-desktop display is one which shouldn't normally be included as a part of a desktop environment. This is meant to cover head mounted devices like HTC Vive. v2: Change description from non-standard to non-desktop Signed-off-by: Dave Airlie --- drivers/gpu/drm/drm_connector.c | 13 +++++++++++++ drivers/gpu/drm/drm_edid.c | 8 ++++++-- include/drm/drm_connector.h | 5 +++++ include/drm/drm_mode_config.h | 7 +++++++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 704fc8934616..f9d3538c9588 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -234,6 +234,10 @@ int drm_connector_init(struct drm_device *dev, config->link_status_property, 0); + drm_object_attach_property(&connector->base, + config->non_desktop_property, + 0); + if (drm_core_check_feature(dev, DRIVER_ATOMIC)) { drm_object_attach_property(&connector->base, config->prop_crtc_id, 0); } @@ -811,6 +815,11 @@ int drm_connector_create_standard_properties(struct drm_device *dev) return -ENOMEM; dev->mode_config.link_status_property = prop; + prop = drm_property_create_bool(dev, DRM_MODE_PROP_IMMUTABLE, "non-desktop"); + if (!prop) + return -ENOMEM; + dev->mode_config.non_desktop_property = prop; + return 0; } @@ -1194,6 +1203,10 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector, if (edid) size = EDID_LENGTH * (1 + edid->extensions); + drm_object_property_set_value(&connector->base, + dev->mode_config.non_desktop_property, + connector->display_info.non_desktop); + ret = drm_property_replace_global_blob(dev, &connector->edid_blob_ptr, size, diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 00ddabfbf980..1e24d5d9d659 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -82,6 +82,8 @@ #define EDID_QUIRK_FORCE_6BPC (1 << 10) /* Force 10bpc */ #define EDID_QUIRK_FORCE_10BPC (1 << 11) +/* Non desktop display (i.e. HMD) */ +#define EDID_QUIRK_NON_DESKTOP (1 << 12) struct detailed_mode_closure { struct drm_connector *connector; @@ -4393,7 +4395,7 @@ static void drm_parse_cea_ext(struct drm_connector *connector, } static void drm_add_display_info(struct drm_connector *connector, - struct edid *edid) + struct edid *edid, u32 quirks) { struct drm_display_info *info = &connector->display_info; @@ -4407,6 +4409,8 @@ static void drm_add_display_info(struct drm_connector *connector, info->max_tmds_clock = 0; info->dvi_dual = false; + info->non_desktop = !!(quirks & EDID_QUIRK_NON_DESKTOP); + if (edid->revision < 3) return; @@ -4627,7 +4631,7 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) * To avoid multiple parsing of same block, lets parse that map * from sink info, before parsing CEA modes. */ - drm_add_display_info(connector, edid); + drm_add_display_info(connector, edid, quirks); /* * EDID spec says modes should be preferred in this order: diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 7a7140543012..df9807a3caae 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -284,6 +284,11 @@ struct drm_display_info { * @hdmi: advance features of a HDMI sink. */ struct drm_hdmi_info hdmi; + + /** + * @non_desktop: Non desktop display (HMD). + */ + bool non_desktop; }; int drm_display_info_set_bus_formats(struct drm_display_info *info, diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index 0b4ac2ebc610..b21e827c5c78 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -728,6 +728,13 @@ struct drm_mode_config { */ struct drm_property *suggested_y_property; + /** + * @non_desktop_property: Optional connector property with a hint + * that device isn't a standard display, and the console/desktop, + * should not be displayed on it. + */ + struct drm_property *non_desktop_property; + /* dumb ioctl parameters */ uint32_t preferred_depth, prefer_shadow; -- 2.15.0.rc0 From 1584377716691606466@xxx Sat Nov 18 04:45:35 +0000 2017 X-GM-THRID: 1584377716691606466 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread