From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keith Packard 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> References: <20171025063023.12584-1-airlied@gmail.com> <20171111002009.2340-1-keithp@keithp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from elaine.keithp.com (home.keithp.com [63.227.221.253]) by gabe.freedesktop.org (Postfix) with ESMTP id 6F0316EBB8 for ; Sat, 11 Nov 2017 00:20:13 +0000 (UTC) In-Reply-To: <20171111002009.2340-1-keithp@keithp.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org, Dave Airlie , Daniel Vetter Cc: Keith Packard , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgYWRkcyB0aGUgaW5m cmFzdHJ1Y3R1cmUgbmVlZGVkIHRvIHF1aXJrIGRpc3BsYXlzCnVzaW5nIGVkaWQgYW5kIHRvIG1h cmsgdGhlbSBhIG5vbi1kZXNrdG9wLgoKQSBub24tZGVza3RvcCBkaXNwbGF5IGlzIG9uZSB3aGlj aCBzaG91bGRuJ3Qgbm9ybWFsbHkgYmUgaW5jbHVkZWQKYXMgYSBwYXJ0IG9mIGEgZGVza3RvcCBl bnZpcm9ubWVudC4KClRoaXMgaXMgbWVhbnQgdG8gY292ZXIgaGVhZCBtb3VudGVkIGRldmljZXMg bGlrZSBIVEMgVml2ZS4KCnYyOiBDaGFuZ2UgZGVzY3JpcHRpb24gZnJvbSBub24tc3RhbmRhcmQg dG8gbm9uLWRlc2t0b3AKClNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhh dC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9jb25uZWN0b3IuYyB8IDEzICsrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jICAgICAgfCAgOCArKysrKystLQogaW5j bHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oICAgICB8ICA1ICsrKysrCiBpbmNsdWRlL2RybS9kcm1f bW9kZV9jb25maWcuaCAgIHwgIDcgKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNlcnRp b25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f Y29ubmVjdG9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jCmluZGV4IDcwNGZj ODkzNDYxNi4uZjlkMzUzOGM5NTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Nv bm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29ubmVjdG9yLmMKQEAgLTIzNCw2 ICsyMzQsMTAgQEAgaW50IGRybV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAogCQkJCSAgIGNvbmZpZy0+bGlua19zdGF0dXNfcHJvcGVydHksCiAJCQkJICAgMCk7CiAKKwlk cm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLAorCQkJCSAgIGNvbmZp Zy0+bm9uX2Rlc2t0b3BfcHJvcGVydHksCisJCQkJICAgMCk7CisKIAlpZiAoZHJtX2NvcmVfY2hl Y2tfZmVhdHVyZShkZXYsIERSSVZFUl9BVE9NSUMpKSB7CiAJCWRybV9vYmplY3RfYXR0YWNoX3By b3BlcnR5KCZjb25uZWN0b3ItPmJhc2UsIGNvbmZpZy0+cHJvcF9jcnRjX2lkLCAwKTsKIAl9CkBA IC04MTEsNiArODE1LDExIEBAIGludCBkcm1fY29ubmVjdG9yX2NyZWF0ZV9zdGFuZGFyZF9wcm9w ZXJ0aWVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCWRldi0+ bW9kZV9jb25maWcubGlua19zdGF0dXNfcHJvcGVydHkgPSBwcm9wOwogCisJcHJvcCA9IGRybV9w cm9wZXJ0eV9jcmVhdGVfYm9vbChkZXYsIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCAibm9uLWRl c2t0b3AiKTsKKwlpZiAoIXByb3ApCisJCXJldHVybiAtRU5PTUVNOworCWRldi0+bW9kZV9jb25m aWcubm9uX2Rlc2t0b3BfcHJvcGVydHkgPSBwcm9wOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEx OTQsNiArMTIwMywxMCBAQCBpbnQgZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3Bl cnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJaWYgKGVkaWQpCiAJCXNpemUg PSBFRElEX0xFTkdUSCAqICgxICsgZWRpZC0+ZXh0ZW5zaW9ucyk7CiAKKwlkcm1fb2JqZWN0X3By b3BlcnR5X3NldF92YWx1ZSgmY29ubmVjdG9yLT5iYXNlLAorCQkJCSAgICAgIGRldi0+bW9kZV9j b25maWcubm9uX2Rlc2t0b3BfcHJvcGVydHksCisJCQkJICAgICAgY29ubmVjdG9yLT5kaXNwbGF5 X2luZm8ubm9uX2Rlc2t0b3ApOworCiAJcmV0ID0gZHJtX3Byb3BlcnR5X3JlcGxhY2VfZ2xvYmFs X2Jsb2IoZGV2LAogCQkJCQkgICAgICAgJmNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0ciwKIAkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRl eCAwMGRkYWJmYmY5ODAuLjFlMjRkNWQ5ZDY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTgyLDYgKzgy LDggQEAKICNkZWZpbmUgRURJRF9RVUlSS19GT1JDRV82QlBDCQkJKDEgPDwgMTApCiAvKiBGb3Jj ZSAxMGJwYyAqLwogI2RlZmluZSBFRElEX1FVSVJLX0ZPUkNFXzEwQlBDCQkJKDEgPDwgMTEpCisv KiBOb24gZGVza3RvcCBkaXNwbGF5IChpLmUuIEhNRCkgKi8KKyNkZWZpbmUgRURJRF9RVUlSS19O T05fREVTS1RPUAkJCSgxIDw8IDEyKQogCiBzdHJ1Y3QgZGV0YWlsZWRfbW9kZV9jbG9zdXJlIHsK IAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwpAQCAtNDM5Myw3ICs0Mzk1LDcgQEAg c3RhdGljIHZvaWQgZHJtX3BhcnNlX2NlYV9leHQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKIH0KIAogc3RhdGljIHZvaWQgZHJtX2FkZF9kaXNwbGF5X2luZm8oc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCQkgc3RydWN0IGVkaWQgKmVkaWQpCisJCQkJIHN0cnVj dCBlZGlkICplZGlkLCB1MzIgcXVpcmtzKQogewogCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpp bmZvID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOwogCkBAIC00NDA3LDYgKzQ0MDksOCBAQCBz dGF0aWMgdm9pZCBkcm1fYWRkX2Rpc3BsYXlfaW5mbyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAogCWluZm8tPm1heF90bWRzX2Nsb2NrID0gMDsKIAlpbmZvLT5kdmlfZHVhbCA9IGZh bHNlOwogCisJaW5mby0+bm9uX2Rlc2t0b3AgPSAhIShxdWlya3MgJiBFRElEX1FVSVJLX05PTl9E RVNLVE9QKTsKKwogCWlmIChlZGlkLT5yZXZpc2lvbiA8IDMpCiAJCXJldHVybjsKIApAQCAtNDYy Nyw3ICs0NjMxLDcgQEAgaW50IGRybV9hZGRfZWRpZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCkKIAkgKiBUbyBhdm9pZCBtdWx0aXBsZSBw YXJzaW5nIG9mIHNhbWUgYmxvY2ssIGxldHMgcGFyc2UgdGhhdCBtYXAKIAkgKiBmcm9tIHNpbmsg aW5mbywgYmVmb3JlIHBhcnNpbmcgQ0VBIG1vZGVzLgogCSAqLwotCWRybV9hZGRfZGlzcGxheV9p bmZvKGNvbm5lY3RvciwgZWRpZCk7CisJZHJtX2FkZF9kaXNwbGF5X2luZm8oY29ubmVjdG9yLCBl ZGlkLCBxdWlya3MpOwogCiAJLyoKIAkgKiBFRElEIHNwZWMgc2F5cyBtb2RlcyBzaG91bGQgYmUg cHJlZmVycmVkIGluIHRoaXMgb3JkZXI6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY29u bmVjdG9yLmggYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmgKaW5kZXggN2E3MTQwNTQzMDEy Li5kZjk4MDdhM2NhYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAor KysgYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmgKQEAgLTI4NCw2ICsyODQsMTEgQEAgc3Ry dWN0IGRybV9kaXNwbGF5X2luZm8gewogCSAqIEBoZG1pOiBhZHZhbmNlIGZlYXR1cmVzIG9mIGEg SERNSSBzaW5rLgogCSAqLwogCXN0cnVjdCBkcm1faGRtaV9pbmZvIGhkbWk7CisKKwkvKioKKwkg KiBAbm9uX2Rlc2t0b3A6IE5vbiBkZXNrdG9wIGRpc3BsYXkgKEhNRCkuCisJICovCisJYm9vbCBu b25fZGVza3RvcDsKIH07CiAKIGludCBkcm1fZGlzcGxheV9pbmZvX3NldF9idXNfZm9ybWF0cyhz dHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9tb2RlX2NvbmZpZy5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmgKaW5kZXggMGI0 YWMyZWJjNjEwLi5iMjFlODI3YzVjNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9tb2Rl X2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oCkBAIC03MjgsNiAr NzI4LDEzIEBAIHN0cnVjdCBkcm1fbW9kZV9jb25maWcgewogCSAqLwogCXN0cnVjdCBkcm1fcHJv cGVydHkgKnN1Z2dlc3RlZF95X3Byb3BlcnR5OwogCisJLyoqCisJICogQG5vbl9kZXNrdG9wX3By b3BlcnR5OiBPcHRpb25hbCBjb25uZWN0b3IgcHJvcGVydHkgd2l0aCBhIGhpbnQKKwkgKiB0aGF0 IGRldmljZSBpc24ndCBhIHN0YW5kYXJkIGRpc3BsYXksIGFuZCB0aGUgY29uc29sZS9kZXNrdG9w LAorCSAqIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIG9uIGl0LgorCSAqLworCXN0cnVjdCBkcm1f cHJvcGVydHkgKm5vbl9kZXNrdG9wX3Byb3BlcnR5OworCiAJLyogZHVtYiBpb2N0bCBwYXJhbWV0 ZXJzICovCiAJdWludDMyX3QgcHJlZmVycmVkX2RlcHRoLCBwcmVmZXJfc2hhZG93OwogCi0tIAoy LjE1LjAucmMwCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754840AbdKKAUa (ORCPT ); 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 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 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