Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2462411pxb; Fri, 5 Feb 2021 20:09:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJx8YJEYEcVqPNV+9Yg//TK7RrptNQ4wY0YPVxS02bSmOqPXr7om16Y1FP5amf3gnEvnDeVC X-Received: by 2002:a17:906:4707:: with SMTP id y7mr7016012ejq.445.1612584582842; Fri, 05 Feb 2021 20:09:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612584582; cv=none; d=google.com; s=arc-20160816; b=t/JY1cCoPrxthZqgIznusvOsRptaipw7wCrDMdmXRYljEoDVXyOILsedrCYE/idsrM HpkeqaEiN/qA0sntD9u0E7o/vSJIXRqqNb3yMJ5EgjxhZajyHoLzEV1NyA1zvjbaZ8u2 uqtQV9bzxpNe6TCoTBTXQL5sCOpPCsle3D+a7QQiSTbKfZyR3pwg9LN77L+iq7yGQorP jQAcHJRZ8IqJkIlAut8yQq0H3WNQPWLj0TvUZtW/K6k+FSZk64KXPTasJ6mnr1MvKWJU nkXaoinCFKaBn0AtF3oOFoAb5BafYelQhStN5C9GGIK/k8r7e96xLxfqPQW/j0xPjZVk Fskg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=abJsVZKJS83nZjpN17pIQlqghcCNBWa9ysfS/sE2K6o=; b=hKTksKZvhEfeKwWUbM75yye5yO/TVX/M1To2bJQFkNNvoMC/6Io0iRQo7Qy2V4zsvk s91WaznhVY6iEVEb7vRAEbPVi9dIQZgE9xghR3jY70hS+ChVHKLl12LPakoH15L3scGM 8XNkYZaHGZy0x9Nk1cgXNqhHVRx9PoWge+5auBypuYcj6d5AjRw3weyJlRmg0ko1lisE ZswJm50Zoy5mjSOhE1dRf0Di2Jb2Pg5zV+jkMidQ6gxakNuexUxN7LRO7ntnXSsTWzfR W5iGf9fZSxUYQnO52MFTraVAoj6zuGGN335/wT3lSzur/CvLhCDbz11mOkMq2YGWlNIF F3dg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Uf3A1rLs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id jr21si6615518ejb.24.2021.02.05.20.09.19; Fri, 05 Feb 2021 20:09:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Uf3A1rLs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231236AbhBFEIb (ORCPT + 99 others); Fri, 5 Feb 2021 23:08:31 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:40119 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231771AbhBFC5l (ORCPT ); Fri, 5 Feb 2021 21:57:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612580174; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=abJsVZKJS83nZjpN17pIQlqghcCNBWa9ysfS/sE2K6o=; b=Uf3A1rLsBI8iHXOvDzd+pNmGEUJnCBq9l8qdskbMlk9xQhuGvpHZz6RIz2D+whNO6u5i2o x3G+UlNC0u8y1koxBk0K2oudBmc5DUdaO8nLBK9OMGC/XjBcRN7gemLhOeMVlzaVD1Hhlj zSgwmpguYlcxsk2HvsXDNNfUpoD8Eh8= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-21-27wvUg0QMy6MIq7bePinPQ-1; Fri, 05 Feb 2021 18:45:45 -0500 X-MC-Unique: 27wvUg0QMy6MIq7bePinPQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 54DEA107ACE4; Fri, 5 Feb 2021 23:45:43 +0000 (UTC) Received: from Whitewolf.redhat.com (ovpn-116-79.rdu2.redhat.com [10.10.116.79]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6CA9419727; Fri, 5 Feb 2021 23:45:41 +0000 (UTC) From: Lyude Paul To: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , David Airlie , Daniel Vetter , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Uma Shankar , Imre Deak , Manasi Navare , Anshuman Gupta , Gwan-gyeong Mun , Dave Airlie , Lucas De Marchi , Sean Paul , linux-kernel@vger.kernel.org (open list) Subject: [RFC v3 06/10] drm/i915/dpcd_bl: Cache some backlight capabilities in intel_panel.backlight Date: Fri, 5 Feb 2021 18:45:10 -0500 Message-Id: <20210205234515.1216538-7-lyude@redhat.com> In-Reply-To: <20210205234515.1216538-1-lyude@redhat.com> References: <20210205234515.1216538-1-lyude@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since we're about to be moving this code into shared DRM helpers, we might as well start to cache certain backlight capabilities that can be determined from the EDP DPCD, and are likely to be relevant to the majority of drivers using said helpers. The main purpose of this is just to prevent every driver from having to check everything against the eDP DPCD using DP macros, which makes the code slightly easier to read (especially since the names of some of the eDP capabilities don't exactly match up with what we actually need to use them for, like DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT for instance). Signed-off-by: Lyude Paul --- .../drm/i915/display/intel_display_types.h | 2 ++ .../drm/i915/display/intel_dp_aux_backlight.c | 29 ++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index f4b26e1dbaaf..16824eb3ef93 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -265,6 +265,8 @@ struct intel_panel { struct { u8 pwmgen_bit_count; u8 pwm_freq_pre_divider; + bool lsb_reg_used; + bool aux_enable; } vesa; struct { bool sdr_uses_aux; diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c index 95e3e344cf40..f5ae2fb34c1f 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c @@ -270,13 +270,14 @@ intel_dp_aux_hdr_setup_backlight(struct intel_connector *connector, enum pipe pi } /* VESA backlight callbacks */ -static void set_vesa_backlight_enable(struct intel_dp *intel_dp, bool enable) +static void set_vesa_backlight_enable(struct intel_connector *connector, bool enable) { + struct intel_dp *intel_dp = intel_attached_dp(connector); struct drm_i915_private *i915 = dp_to_i915(intel_dp); u8 reg_val = 0; /* Early return when display use other mechanism to enable backlight. */ - if (!(intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP)) + if (!connector->panel.backlight.edp.vesa.aux_enable) return; if (drm_dp_dpcd_readb(&intel_dp->aux, DP_EDP_DISPLAY_CONTROL_REGISTER, ®_val) != 1) { @@ -339,9 +340,11 @@ static u32 intel_dp_aux_vesa_get_backlight(struct intel_connector *connector, en DP_EDP_BACKLIGHT_BRIGHTNESS_MSB); return 0; } - level = read_val[0]; - if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT) + + if (connector->panel.backlight.edp.vesa.lsb_reg_used) level = (read_val[0] << 8 | read_val[1]); + else + level = read_val[0]; return level; } @@ -359,13 +362,14 @@ intel_dp_aux_vesa_set_backlight(const struct drm_connector_state *conn_state, struct drm_i915_private *i915 = dp_to_i915(intel_dp); u8 vals[2] = { 0x0 }; - vals[0] = level; - /* Write the MSB and/or LSB */ - if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT) { + if (connector->panel.backlight.edp.vesa.lsb_reg_used) { vals[0] = (level & 0xFF00) >> 8; vals[1] = (level & 0xFF); + } else { + vals[0] = level; } + if (drm_dp_dpcd_write(&intel_dp->aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, vals, sizeof(vals)) != sizeof(vals)) { drm_dbg_kms(&i915->drm, @@ -419,14 +423,13 @@ intel_dp_aux_vesa_enable_backlight(const struct intel_crtc_state *crtc_state, } intel_dp_aux_vesa_set_backlight(conn_state, level); - set_vesa_backlight_enable(intel_dp, true); + set_vesa_backlight_enable(connector, true); } static void intel_dp_aux_vesa_disable_backlight(const struct drm_connector_state *old_conn_state, u32 level) { - set_vesa_backlight_enable(enc_to_intel_dp(to_intel_encoder(old_conn_state->best_encoder)), - false); + set_vesa_backlight_enable(to_intel_connector(old_conn_state->connector), false); } /* @@ -524,8 +527,14 @@ static u32 intel_dp_aux_vesa_calc_max_backlight(struct intel_connector *connecto static int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector, enum pipe pipe) { + struct intel_dp *intel_dp = intel_attached_dp(connector); struct intel_panel *panel = &connector->panel; + if (intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP) + panel->backlight.edp.vesa.aux_enable = true; + if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT) + panel->backlight.edp.vesa.lsb_reg_used = true; + panel->backlight.max = intel_dp_aux_vesa_calc_max_backlight(connector); if (!panel->backlight.max) return -ENODEV; -- 2.29.2