From patchwork Tue Jan 19 09:34:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1428545 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; 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=ufC/uLud; 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 4DKk4m1s3Xz9sW1; Tue, 19 Jan 2021 20:34:15 +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 1l1nOv-0002y8-67; Tue, 19 Jan 2021 09:34:13 +0000 Received: from mail-pl1-f174.google.com ([209.85.214.174]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1l1nOs-0002xE-UP for kernel-team@lists.ubuntu.com; Tue, 19 Jan 2021 09:34:11 +0000 Received: by mail-pl1-f174.google.com with SMTP id u11so5878657plg.13 for ; Tue, 19 Jan 2021 01:34:10 -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 :mime-version:content-transfer-encoding; bh=unE4w1NxolFXlVPcQoj6HORjzHG1l8w9x94DaOLq7qY=; b=ufC/uLud7xR0Fp17JPsGCxZO6KwdywSKCGoSx26e4YWLDJMwsrLwz1VcisqGOrUYAl v+bspz+qrhDNLG8IIQiJwIwDxxzBqwPS+/3chlEuYuQhm6sii88JD2rUC7lZBxvxNiEl g127ylFWHWfYc66VEyu7yra+NB8iEYQW1Xea4PsM1wZBCPlo08ZXIMiCvtlKl3duMj+k c9VHPK5pGXBb7eBTuDjJXGrQ8fRIjJmlc/I7GiZkbJTlOJ+oCGsW7AHKdBqG341yuBJ0 xV/eWM9JtM/57GJj7Rtx7yR2oAPXjHOQVfCTpj0fn88T7wPSsM6gvY0fWVRedKPTnl7O 9rig== 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:mime-version:content-transfer-encoding; bh=unE4w1NxolFXlVPcQoj6HORjzHG1l8w9x94DaOLq7qY=; b=ZBlJdu5/VZFX/itI56A7JICK5kbKDBJI2zuMUHQie1b9x2jO7OiWn9wQtGPmsrHUJo 7jVyTB5cvBXYD6iSB3LXQm8pDGm5LQiq+1wos2TE4QP+FVeSI7XaVRI5+XEupfFqRwoz NxuqsKOVmfBhiWGQzEcqQg41/3ZJxHwMn+VvqIllz5LirbE4tJyx7FS6aWw7zxPHj9p4 7f10CQrN9LCTXi9U9kMXu6LmsI+HhQYhEXKJ6Qfh0d3ja4nQDTKw8AgKjITUIqrpi9+e 0XflEOUJIxnY5mXX/Ehcg01SVfWXAEkULc6BWCgTcCmZZK1MuBGu0NbY5b9Zv6pvgPoa k1zA== X-Gm-Message-State: AOAM532exhrmksByV2fz1RHxNFbbvrxl9TPj/DU7g7vyrS/6bMYRfO9M FHiwqViYCiL/uTds1nfEr1KExz+vTByzwQ== X-Google-Smtp-Source: ABdhPJyRnjJTjmYHUdQtz5waqVUALQJ2UezI+BPz6Euw0jOodH6XBTsJaUaelTydRt3ycgQg8EdMaQ== X-Received: by 2002:a17:90a:e38a:: with SMTP id b10mr1976513pjz.12.1611048849076; Tue, 19 Jan 2021 01:34:09 -0800 (PST) Received: from localhost (61-220-137-34.HINET-IP.hinet.net. [61.220.137.34]) by smtp.gmail.com with ESMTPSA id r5sm2479918pjo.49.2021.01.19.01.34.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Jan 2021 01:34:08 -0800 (PST) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/3][SRU][OEM-5.10] drm/i915/vbt: Fix backlight parsing for VBT 234+ Date: Tue, 19 Jan 2021 17:34:02 +0800 Message-Id: <20210119093404.34490-2-acelan.kao@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210119093404.34490-1-acelan.kao@canonical.com> References: <20210119093404.34490-1-acelan.kao@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.214.174; envelope-from=acelan@gmail.com; helo=mail-pl1-f174.google.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: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: José Roberto de Souza BugLink: https://bugs.launchpad.net/bugs/1912157 Child min_brightness is obsolete from VBT 234+, instead the new min_brightness field in the main structure should be used. This new field is 16 bits wide, so backlight_precision_bits is needed to check if value needs to be scaled down but it is only available in VBT 236+ so working around it by using the also new backlight_level in the main struct. v2: - missed that backlight_data->level is also obsolete v3: - s/backlight/brightness to better match specification - using u16 to specify brightness level instead of a u32 : 16 BSpec: 20149 Reviewed-by: Matt Roper Signed-off-by: José Roberto de Souza Link: https://patchwork.freedesktop.org/patch/msgid/20201008211932.24989-1-jose.souza@intel.com (cherry picked from commit d381baad29b43511a7fc34c64402ef65029ab281) Signed-off-by: Chia-Lin Kao (AceLan) --- drivers/gpu/drm/i915/display/intel_bios.c | 30 +++++++++++++++++-- drivers/gpu/drm/i915/display/intel_vbt_defs.h | 12 ++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c index 23614a6728f1..7d9612701a43 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -426,6 +426,7 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv, const struct bdb_lfp_backlight_data *backlight_data; const struct lfp_backlight_data_entry *entry; int panel_type = dev_priv->vbt.panel_type; + u16 level; backlight_data = find_section(bdb, BDB_LVDS_BACKLIGHT); if (!backlight_data) @@ -460,14 +461,39 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv, dev_priv->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz; dev_priv->vbt.backlight.active_low_pwm = entry->active_low_pwm; - dev_priv->vbt.backlight.min_brightness = entry->min_brightness; + + if (bdb->version >= 234) { + u16 min_level; + bool scale; + + level = backlight_data->brightness_level[panel_type].level; + min_level = backlight_data->brightness_min_level[panel_type].level; + + if (bdb->version >= 236) + scale = backlight_data->brightness_precision_bits[panel_type] == 16; + else + scale = level > 255; + + if (scale) + min_level = min_level / 255; + + if (min_level > 255) { + drm_warn(&dev_priv->drm, "Brightness min level > 255\n"); + level = 255; + } + dev_priv->vbt.backlight.min_brightness = min_level; + } else { + level = backlight_data->level[panel_type]; + dev_priv->vbt.backlight.min_brightness = entry->min_brightness; + } + drm_dbg_kms(&dev_priv->drm, "VBT backlight PWM modulation frequency %u Hz, " "active %s, min brightness %u, level %u, controller %u\n", dev_priv->vbt.backlight.pwm_freq_hz, dev_priv->vbt.backlight.active_low_pwm ? "low" : "high", dev_priv->vbt.backlight.min_brightness, - backlight_data->level[panel_type], + level, dev_priv->vbt.backlight.controller); } diff --git a/drivers/gpu/drm/i915/display/intel_vbt_defs.h b/drivers/gpu/drm/i915/display/intel_vbt_defs.h index 1a17ef519d74..0e153dbd4f0f 100644 --- a/drivers/gpu/drm/i915/display/intel_vbt_defs.h +++ b/drivers/gpu/drm/i915/display/intel_vbt_defs.h @@ -784,7 +784,7 @@ struct lfp_backlight_data_entry { u8 active_low_pwm:1; u8 obsolete1:5; u16 pwm_freq_hz; - u8 min_brightness; + u8 min_brightness; /* Obsolete from 234+ */ u8 obsolete2; u8 obsolete3; } __packed; @@ -794,11 +794,19 @@ struct lfp_backlight_control_method { u8 controller:4; } __packed; +struct lfp_brightness_level { + u16 level; + u16 reserved; +} __packed; + struct bdb_lfp_backlight_data { u8 entry_size; struct lfp_backlight_data_entry data[16]; - u8 level[16]; + u8 level[16]; /* Obsolete from 234+ */ struct lfp_backlight_control_method backlight_control[16]; + struct lfp_brightness_level brightness_level[16]; /* 234+ */ + struct lfp_brightness_level brightness_min_level[16]; /* 234+ */ + u8 brightness_precision_bits[16]; /* 236+ */ } __packed; /*