From patchwork Wed Mar 4 06:00:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1248833 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=BnlsA8R/; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48XNYM1vp7z9sSG; Wed, 4 Mar 2020 17:01:27 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1j9N5u-0008Cq-AC; Wed, 04 Mar 2020 06:01:22 +0000 Received: from mail-pg1-f193.google.com ([209.85.215.193]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1j9N5p-00087y-LN for kernel-team@lists.ubuntu.com; Wed, 04 Mar 2020 06:01:17 +0000 Received: by mail-pg1-f193.google.com with SMTP id d9so467098pgu.3 for ; Tue, 03 Mar 2020 22:01:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=N1t/Ibsqfvz1benSSbNNo/IzdMjLKOwFfViz+WjoqxY=; b=BnlsA8R/81pYSqQNuEBTUeUmGYgZ/0kCk2EI5dOB4X3rg4aKzSmBHiIK+mIzZVPF1U OYg/kHpZ5b9+7op2KW+GfJS/z03PK5Hd8TEUquuf6KEIQ+FdmHuIfKcaWTrN6fTl3XvN 3KShsFnlMSPqUsMR7kPHdAqLWo0BYOWfXy6RX8yo9N5v9/7CnASmdyzqVFCHSIUVxIuT jhuAjntqeTRupZ8HUjUE2gGz+/L7Hqb1KPvThCGt7XJTO9t7xysY7VS7YcRAX/A6ICbL 4iQ9cghvB86rFOggCtsRiETCfRoOEehQm8ambwfSoTjVWLz3uLP5hQ//awfUgjyayqbe odPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=N1t/Ibsqfvz1benSSbNNo/IzdMjLKOwFfViz+WjoqxY=; b=YMmENqO44GcXzxfqNBbGBEUEnrmXzo2vs7keCkPbvn4+kYtKnlKn/k8rQHgS22RyHn SqFcEAMR8VvPOcentl14SN63t692FdNo3fE4rTwMYzTcQDiCXAmY/li3dLWyvpSVndDM e2/575c1ChDAIgBKZFDY5vcw6BBdYHOqUZ50DR0Wly6PbYksofnqd0/HBUdcnb/qGOcd 3pXOcWWiE6Wbm5PfJQlFB6jvelTZUFtIGUVP+UQ/UAGEghmU5esVaViil4ZVZRAoXifo zV81JO8v64Nhl/NT5aND/Xi9+gwqKnXkjZSNrHCUli6bMFs3Cc7A/MLMQ0naC+eYtvG7 AuQg== X-Gm-Message-State: ANhLgQ1F7brpsyh/LWWIh/bRjCETTrd1TkeTVla+6oXk+axq/CWvuB1a nyxcWTmSsWZBvGH4sY6u6JFoqWm0 X-Google-Smtp-Source: ADFU+vsN0/dtwh7ZE1MFvKrhqtqsFyBS/eZiDGIVJM5k80qxINBXizKagJmF2K5PC1gvB9c2Mvf+WA== X-Received: by 2002:aa7:8703:: with SMTP id b3mr1495482pfo.67.1583301675501; Tue, 03 Mar 2020 22:01:15 -0800 (PST) Received: from localhost (61-220-137-37.HINET-IP.hinet.net. [61.220.137.37]) by smtp.gmail.com with ESMTPSA id h7sm28013176pfq.36.2020.03.03.22.01.14 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 03 Mar 2020 22:01:14 -0800 (PST) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 4/5][SRU][OEM-OSP1-B] drm/i915: Force DPCD backlight mode on X1 Extreme 2nd Gen 4K AMOLED panel Date: Wed, 4 Mar 2020 14:00:54 +0800 Message-Id: <20200304060055.5776-10-acelan.kao@canonical.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200304060055.5776-1-acelan.kao@canonical.com> References: <20200304060055.5776-1-acelan.kao@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Lyude Paul BugLink: https://bugs.launchpad.net/bugs/1861521 The X1 Extreme is one of the systems that lies about which backlight interface that it uses in its VBIOS as PWM backlight controls don't work at all on this machine. It's possible that this panel could be one of the infamous ones that can switch between PWM mode and DPCD backlight control mode, but we haven't gotten any more details on this from Lenovo just yet. For the time being though, making sure the backlight 'just works' is a bit more important. So, add a quirk to force DPCD backlight controls on for these systems based on EDID (since this panel doesn't appear to fill in the device ID). Hopefully in the future we'll figure out a better way of probing this. Signed-off-by: Lyude Paul Cc: Jani Nikula (backported from https://patchwork.kernel.org/patch/11376671/) Signed-off-by: AceLan Kao --- drivers/gpu/drm/drm_dp_helper.c | 4 +++ drivers/gpu/drm/i915/intel_dp_aux_backlight.c | 25 ++++++++++++++++--- include/drm/drm_dp_helper.h | 10 ++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index c6be0f1b5744..fe1235328b68 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -1334,6 +1334,10 @@ struct edid_quirk { * DP quirks in such cases. */ static const struct edid_quirk edid_quirk_list[] = { + /* Optional 4K AMOLED panel in the ThinkPad X1 Extreme 2nd Generation + * only supports DPCD backlight controls + */ + { MFG(0x4c, 0x83), PROD_ID(0x41, 0x41), BIT(DP_QUIRK_FORCE_DPCD_BACKLIGHT) }, }; #undef MFG diff --git a/drivers/gpu/drm/i915/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/intel_dp_aux_backlight.c index 8248b1ddd4b3..5493cb318232 100644 --- a/drivers/gpu/drm/i915/intel_dp_aux_backlight.c +++ b/drivers/gpu/drm/i915/intel_dp_aux_backlight.c @@ -324,15 +324,32 @@ intel_dp_aux_display_control_capable(struct intel_connector *connector) int intel_dp_aux_init_backlight_funcs(struct intel_connector *intel_connector) { struct intel_panel *panel = &intel_connector->panel; - struct drm_i915_private *dev_priv = to_i915(intel_connector->base.dev); + struct intel_dp *intel_dp = enc_to_intel_dp(&intel_connector->encoder->base); + struct drm_device *dev = intel_connector->base.dev; + struct drm_i915_private *dev_priv = to_i915(dev); if (i915_modparams.enable_dpcd_backlight == 0 || - (i915_modparams.enable_dpcd_backlight == -1 && - dev_priv->vbt.backlight.type != INTEL_BACKLIGHT_VESA_EDP_AUX_INTERFACE)) + !intel_dp_aux_display_control_capable(intel_connector)) return -ENODEV; - if (!intel_dp_aux_display_control_capable(intel_connector)) + /* + * There are a lot of machines that don't advertise the backlight + * control interface to use properly in their VBIOS, :\ + */ + if (dev_priv->vbt.backlight.type != + INTEL_BACKLIGHT_VESA_EDP_AUX_INTERFACE && + !drm_dp_has_quirk(&intel_dp->desc, intel_dp->edid_quirks, + DP_QUIRK_FORCE_DPCD_BACKLIGHT)) { + DRM_DEV_INFO(dev->dev, + "Panel advertises DPCD backlight support, but " + "VBT disagrees. If your backlight controls " + "don't work try booting with " + "i915.enable_dpcd_backlight=1. If your machine " + "needs this, please file a _new_ bug report on " + "bugs.freedesktop.org against DRI -> " + "DRM/Intel\n"); return -ENODEV; + } panel->backlight.setup = intel_dp_aux_setup_backlight; panel->backlight.enable = intel_dp_aux_enable_backlight; diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index bb414b1aadfd..6a551a64cd19 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -1386,6 +1386,16 @@ enum drm_dp_quirk { * The driver should ignore SINK_COUNT during detection. */ DP_DPCD_QUIRK_NO_SINK_COUNT, + /** + * @DP_QUIRK_FORCE_DPCD_BACKLIGHT: + * + * The device is telling the truth when it says that it uses DPCD + * backlight controls, even if the system's firmware disagrees. This + * quirk should be checked against both the ident and panel EDID. + * When present, the driver should honor the DPCD backlight + * capabilities advertised. + */ + DP_QUIRK_FORCE_DPCD_BACKLIGHT, }; /**