From nobody Fri Oct 3 16:47:18 2025 Received: from relay11.grserver.gr (relay11.grserver.gr [78.46.171.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E9DD4086A for ; Wed, 27 Aug 2025 17:46:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.46.171.57 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316782; cv=none; b=aHl4w290SYPzKjR/0HSFJt9a143mEloPxkePeZlmDivzVhiv17B2gC/A5u+dt0J74nJ84BylvFw5+DbPJ+RYn+hmDXn+pQUwjjAmNcyjlw3qVz36JDGcRgvGxFhLOgZEHi8UpdGPiBAOCe6dw6LEZIBnvAAFhEFcUMU+VOn0nPA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316782; c=relaxed/simple; bh=4fnvJSoNZCKE8ebnbM6wcmhny7J8Xe81TmQ4NCUVPp0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IvX9bDxqul495w/6ICPSt78WBCPvN03a5kFgJxLMxE0fb/7BZSHDtSj8zqcLnHRC7NquOfdvIXl8cYelN12E2SoOxu+3DcFHkMP8YM0NmMym/EW72Iw1KKB/sl5nnMMQbSZu1PmRvI+znQl7Z6y4OxKL3eWHfOCqapcRb7fnQPw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev; spf=pass smtp.mailfrom=antheas.dev; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b=QVMMw+v2; arc=none smtp.client-ip=78.46.171.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=antheas.dev Authentication-Results: smtp.subspace.kernel.org; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b="QVMMw+v2" Received: from relay11 (localhost.localdomain [127.0.0.1]) by relay11.grserver.gr (Proxmox) with ESMTP id 2CF61CB2A8; Wed, 27 Aug 2025 20:46:16 +0300 (EEST) Received: from linux3247.grserver.gr (linux3247.grserver.gr [213.158.90.240]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by relay11.grserver.gr (Proxmox) with ESMTPS id 911CDCB377; Wed, 27 Aug 2025 20:46:15 +0300 (EEST) Received: from antheas-z13 (x5996a855.customers.hiper-net.dk [89.150.168.85]) by linux3247.grserver.gr (Postfix) with ESMTPSA id B16BF1FDED9; Wed, 27 Aug 2025 20:46:14 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756316775; bh=+CWCZESsLBKqUcSTKxc58R3VWf8+qqCt3sJyI8yzS6k=; h=From:To:Subject; b=QVMMw+v2No5duZAqtQuBt7Ru5JXRSU2CsJGl19jIleNap74KQf7cEdxrsQUtKI69Z EEZaQ6v8SpCWkJ3SM/BsK6jWdzMdIdPPzx1alY6AQ72cugplZdpOcb2gSYJKInHBW5 QuEdhMRsBsYdgcEYZc9v1zo2RZCUc2l3WpWhfOaIJ5VKfGGSV6y448LR1kDCOb/Xzz r6geFXNJDCg2TBxmGnCzzgpdq3m9taXKmdsKicGp3HF/m6wKeECYbnPqyZ4qZZiW6N 6OTHrpjyIP6Msi+4AJfudro2CcGk2wSynzuU5n84Kd/yDOUTB6RlSYv2TyN9/KOrJM zOq8U5lecV5KA== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 89.150.168.85) smtp.mailfrom=lkml@antheas.dev smtp.helo=antheas-z13 Received-SPF: pass (linux3247.grserver.gr: connection is authenticated) From: Antheas Kapenekakis To: amd-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, philm@manjaro.org, Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Mario Limonciello , Robert Beckett , Antheas Kapenekakis Subject: [PATCH v2 1/5] drm: panel-backlight-quirks: Make EDID match optional Date: Wed, 27 Aug 2025 19:43:56 +0200 Message-ID: <20250827174400.3692549-2-lkml@antheas.dev> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250827174400.3692549-1-lkml@antheas.dev> References: <20250827174400.3692549-1-lkml@antheas.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-PPP-Message-ID: <175631677525.1365160.8366018674483553787@linux3247.grserver.gr> X-PPP-Vhost: antheas.dev X-Virus-Scanned: clamav-milter 1.4.3 at linux3247.grserver.gr X-Virus-Status: Clean Currently, having a valid panel_id match is required to use the quirk system. For certain devices, we know that all SKUs need a certain quirk. Therefore, allow not specifying ident by only checking for a match if panel_id is non-zero. Tested-by: Philip M=C3=BCller Signed-off-by: Antheas Kapenekakis Reviewed-by: Mario Limonciello --- drivers/gpu/drm/drm_panel_backlight_quirks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_panel_backlight_quirks.c b/drivers/gpu/drm= /drm_panel_backlight_quirks.c index 598f812b7cb3..b38b33e26ea5 100644 --- a/drivers/gpu/drm/drm_panel_backlight_quirks.c +++ b/drivers/gpu/drm/drm_panel_backlight_quirks.c @@ -50,7 +50,7 @@ static bool drm_panel_min_backlight_quirk_matches(const s= truct drm_panel_min_bac if (!dmi_match(quirk->dmi_match.field, quirk->dmi_match.value)) return false; =20 - if (!drm_edid_match(edid, &quirk->ident)) + if (quirk->ident.panel_id && !drm_edid_match(edid, &quirk->ident)) return false; =20 return true; --=20 2.51.0 From nobody Fri Oct 3 16:47:18 2025 Received: from relay10.grserver.gr (relay10.grserver.gr [37.27.248.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 873302D6603 for ; Wed, 27 Aug 2025 17:46:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=37.27.248.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316788; cv=none; b=Yu4aWO2a3nienX1+DB2T0YLQFVCq426o6pc5d4olXEi7XXIpb++RMBx3t3BCvsY00/wCgLZf4Ya+Pg/DsgTRMCanHrHKPs2m9fH+S0gA2Quzh8d4OG+l8dsfCHUJwruitkJoqjB5porFpHfdVLWotXddLDPK0aMNYiYufBESLwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316788; c=relaxed/simple; bh=1aUpaa6ys4iUjf56dJmJxNqnSrU7BLGm6fZtOuwemUY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fAMMsXTsfhCaPB0tWJWAYoAUQpNvNZL+FNmrRwAzw6+eBr+6N5+iOUQ/30lgExaDaChORfd1LZ8QjAGqdCKoqRGnBWGSuhE/S8THzPYgddnGeuIY8l2XDpdehN6x3NCtkYUNnJ8L3ACbyIX+O00qtzWzxtbNcAzERV8olb44oIU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev; spf=pass smtp.mailfrom=antheas.dev; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b=gjp99OQJ; arc=none smtp.client-ip=37.27.248.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=antheas.dev Authentication-Results: smtp.subspace.kernel.org; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b="gjp99OQJ" Received: from relay10 (localhost.localdomain [127.0.0.1]) by relay10.grserver.gr (Proxmox) with ESMTP id C15E14931C; Wed, 27 Aug 2025 20:46:17 +0300 (EEST) Received: from linux3247.grserver.gr (linux3247.grserver.gr [213.158.90.240]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by relay10.grserver.gr (Proxmox) with ESMTPS id 948394935B; Wed, 27 Aug 2025 20:46:16 +0300 (EEST) Received: from antheas-z13 (x5996a855.customers.hiper-net.dk [89.150.168.85]) by linux3247.grserver.gr (Postfix) with ESMTPSA id 9D2DE1FE1EC; Wed, 27 Aug 2025 20:46:15 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756316776; bh=RffAdHQk/eYb/Ego7s1KxqdM++ty0P5kpe8hGz9yzsc=; h=From:To:Subject; b=gjp99OQJvw3UltU1OBjhbZXSBVIbqJAxX3npj3bTvT4OIuHXoCNiMiSmJdzxhwh9m f2OCHDN6ILmq3Nyd1GxYDPuoiyiJbUy5nGlS3HWaSwSL8SDg0WjOGByWuYFVeJZnIG +k4+Ifyq8qo0yQXpHrgT2xkBS0vHjZwkow/tffKGa3vF9oZtaUYv3ywDy4EJVyU8w5 WGM1FWx5gHbA7VN4hGFXyMbSSHNMtpSFSLT+giytoUAPHLxMKsyrKTL47xFjNRQ0wO 7MMRHPc1xAP2Rc9916E1KVrZ1+buvAEC6kUgHN1gaIGKMkNUBOvr463eqSPECUu0NV K4JbgaXffZhmg== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 89.150.168.85) smtp.mailfrom=lkml@antheas.dev smtp.helo=antheas-z13 Received-SPF: pass (linux3247.grserver.gr: connection is authenticated) From: Antheas Kapenekakis To: amd-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, philm@manjaro.org, Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Mario Limonciello , Robert Beckett , Antheas Kapenekakis Subject: [PATCH v2 2/5] drm: panel-backlight-quirks: Convert brightness quirk to generic structure Date: Wed, 27 Aug 2025 19:43:57 +0200 Message-ID: <20250827174400.3692549-3-lkml@antheas.dev> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250827174400.3692549-1-lkml@antheas.dev> References: <20250827174400.3692549-1-lkml@antheas.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-PPP-Message-ID: <175631677613.1365241.10326644939874316012@linux3247.grserver.gr> X-PPP-Vhost: antheas.dev X-Virus-Scanned: clamav-milter 1.4.3 at linux3247.grserver.gr X-Virus-Status: Clean Currently, the brightness quirk is limited to minimum brightness only. Refactor it to a structure, so that more quirks can be added in the future. Reserve 0 value for "no quirk", and use u16 to allow minimum brightness up to 255. Tested-by: Philip M=C3=BCller Signed-off-by: Antheas Kapenekakis Reviewed-by: Mario Limonciello --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 ++++-- drivers/gpu/drm/drm_panel_backlight_quirks.c | 41 ++++++++++--------- include/drm/drm_utils.h | 7 +++- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index a0ca3b2c6bd8..b967c6952e11 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -3612,11 +3612,11 @@ static struct drm_mode_config_helper_funcs amdgpu_d= m_mode_config_helperfuncs =3D { =20 static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnect= or) { + const struct drm_panel_backlight_quirk *panel_backlight_quirk; struct amdgpu_dm_backlight_caps *caps; struct drm_connector *conn_base; struct amdgpu_device *adev; struct drm_luminance_range_info *luminance_range; - int min_input_signal_override; =20 if (aconnector->bl_idx =3D=3D -1 || aconnector->dc_link->connector_signal !=3D SIGNAL_TYPE_EDP) @@ -3656,9 +3656,13 @@ static void update_connector_ext_caps(struct amdgpu_= dm_connector *aconnector) else caps->aux_min_input_signal =3D 1; =20 - min_input_signal_override =3D drm_get_panel_min_brightness_quirk(aconnect= or->drm_edid); - if (min_input_signal_override >=3D 0) - caps->min_input_signal =3D min_input_signal_override; + panel_backlight_quirk =3D + drm_get_panel_backlight_quirk(aconnector->drm_edid); + if (!IS_ERR_OR_NULL(panel_backlight_quirk)) { + if (panel_backlight_quirk->min_brightness) + caps->min_input_signal =3D + panel_backlight_quirk->min_brightness - 1; + } } =20 DEFINE_FREE(sink_release, struct dc_sink *, if (_T) dc_sink_release(_T)) diff --git a/drivers/gpu/drm/drm_panel_backlight_quirks.c b/drivers/gpu/drm= /drm_panel_backlight_quirks.c index b38b33e26ea5..702726c20ccc 100644 --- a/drivers/gpu/drm/drm_panel_backlight_quirks.c +++ b/drivers/gpu/drm/drm_panel_backlight_quirks.c @@ -8,23 +8,23 @@ #include #include =20 -struct drm_panel_min_backlight_quirk { +struct drm_get_panel_backlight_quirk { struct { enum dmi_field field; const char * const value; } dmi_match; struct drm_edid_ident ident; - u8 min_brightness; + struct drm_panel_backlight_quirk quirk; }; =20 -static const struct drm_panel_min_backlight_quirk drm_panel_min_backlight_= quirks[] =3D { +static const struct drm_get_panel_backlight_quirk drm_panel_min_backlight_= quirks[] =3D { /* 13 inch matte panel */ { .dmi_match.field =3D DMI_BOARD_VENDOR, .dmi_match.value =3D "Framework", .ident.panel_id =3D drm_edid_encode_panel_id('B', 'O', 'E', 0x0bca), .ident.name =3D "NE135FBM-N41", - .min_brightness =3D 0, + .quirk =3D { .min_brightness =3D 1, }, }, /* 13 inch glossy panel */ { @@ -32,7 +32,7 @@ static const struct drm_panel_min_backlight_quirk drm_pan= el_min_backlight_quirks .dmi_match.value =3D "Framework", .ident.panel_id =3D drm_edid_encode_panel_id('B', 'O', 'E', 0x095f), .ident.name =3D "NE135FBM-N41", - .min_brightness =3D 0, + .quirk =3D { .min_brightness =3D 1, }, }, /* 13 inch 2.8k panel */ { @@ -40,12 +40,13 @@ static const struct drm_panel_min_backlight_quirk drm_p= anel_min_backlight_quirks .dmi_match.value =3D "Framework", .ident.panel_id =3D drm_edid_encode_panel_id('B', 'O', 'E', 0x0cb4), .ident.name =3D "NE135A1M-NY1", - .min_brightness =3D 0, + .quirk =3D { .min_brightness =3D 1, }, }, }; =20 -static bool drm_panel_min_backlight_quirk_matches(const struct drm_panel_m= in_backlight_quirk *quirk, - const struct drm_edid *edid) +static bool drm_panel_min_backlight_quirk_matches( + const struct drm_get_panel_backlight_quirk *quirk, + const struct drm_edid *edid) { if (!dmi_match(quirk->dmi_match.field, quirk->dmi_match.value)) return false; @@ -57,39 +58,39 @@ static bool drm_panel_min_backlight_quirk_matches(const= struct drm_panel_min_bac } =20 /** - * drm_get_panel_min_brightness_quirk - Get minimum supported brightness l= evel for a panel. + * drm_get_panel_backlight_quirk - Get backlight quirks for a panel * @edid: EDID of the panel to check * * This function checks for platform specific (e.g. DMI based) quirks * providing info on the minimum backlight brightness for systems where th= is - * cannot be probed correctly from the hard-/firm-ware. + * cannot be probed correctly from the hard-/firm-ware and other sources. * * Returns: - * A negative error value or - * an override value in the range [0, 255] representing 0-100% to be scale= d to - * the drivers target range. + * a drm_panel_backlight_quirk struct if a quirk was found, otherwise an + * error pointer. */ -int drm_get_panel_min_brightness_quirk(const struct drm_edid *edid) +const struct drm_panel_backlight_quirk * +drm_get_panel_backlight_quirk(const struct drm_edid *edid) { - const struct drm_panel_min_backlight_quirk *quirk; + const struct drm_get_panel_backlight_quirk *quirk; size_t i; =20 if (!IS_ENABLED(CONFIG_DMI)) - return -ENODATA; + return ERR_PTR(-ENODATA); =20 if (!edid) - return -EINVAL; + return ERR_PTR(-EINVAL); =20 for (i =3D 0; i < ARRAY_SIZE(drm_panel_min_backlight_quirks); i++) { quirk =3D &drm_panel_min_backlight_quirks[i]; =20 if (drm_panel_min_backlight_quirk_matches(quirk, edid)) - return quirk->min_brightness; + return &quirk->quirk; } =20 - return -ENODATA; + return ERR_PTR(-ENODATA); } -EXPORT_SYMBOL(drm_get_panel_min_brightness_quirk); +EXPORT_SYMBOL(drm_get_panel_backlight_quirk); =20 MODULE_DESCRIPTION("Quirks for panel backlight overrides"); MODULE_LICENSE("GPL"); diff --git a/include/drm/drm_utils.h b/include/drm/drm_utils.h index 15fa9b6865f4..82eeee4a58ab 100644 --- a/include/drm/drm_utils.h +++ b/include/drm/drm_utils.h @@ -16,7 +16,12 @@ struct drm_edid; =20 int drm_get_panel_orientation_quirk(int width, int height); =20 -int drm_get_panel_min_brightness_quirk(const struct drm_edid *edid); +struct drm_panel_backlight_quirk { + u16 min_brightness; +}; + +const struct drm_panel_backlight_quirk * +drm_get_panel_backlight_quirk(const struct drm_edid *edid); =20 signed long drm_timeout_abs_to_jiffies(int64_t timeout_nsec); =20 --=20 2.51.0 From nobody Fri Oct 3 16:47:18 2025 Received: from relay11.grserver.gr (relay11.grserver.gr [78.46.171.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6766A86250 for ; Wed, 27 Aug 2025 17:46:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.46.171.57 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316783; cv=none; b=fADfFoodd8V5NjR6KritYf2H3SYTxH4UtDy0JBCX2YlBpxaUCcm7m56J77Rmyb37vHmhrFL0+BgrRrJ7s2nP9bSP46DV+VmBw3sOC+bJ1rPUtWBC+SBLRdisGtaDicNVAoXSOd+NK+kzuQmEQwRUZYGeXyzqMdLouVn46i4XoOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316783; c=relaxed/simple; bh=tQ7Q7krV68eAl0BMLspuny9O3rb5+KPF3OyCm86L2Vs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FbVe0TS2KcV5nO+rt9Yx+rVRDZEikNemuBCSwmWPWBCtSnUjzvBYExjfd6bei4vHTUqQJyZzsrzQSWkezICYbEUAzq5W3kCF2/kXKa24PN3xZl69RJhcagpfgV26P+m0bJ6lIg+K7DGbE54IYKvzB+hGVaJ6Xbswwo1DtfkodQI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev; spf=pass smtp.mailfrom=antheas.dev; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b=oj+3JzMb; arc=none smtp.client-ip=78.46.171.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=antheas.dev Authentication-Results: smtp.subspace.kernel.org; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b="oj+3JzMb" Received: from relay11 (localhost.localdomain [127.0.0.1]) by relay11.grserver.gr (Proxmox) with ESMTP id AEE20CB378; Wed, 27 Aug 2025 20:46:17 +0300 (EEST) Received: from linux3247.grserver.gr (linux3247.grserver.gr [213.158.90.240]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by relay11.grserver.gr (Proxmox) with ESMTPS id 460A0CB2CC; Wed, 27 Aug 2025 20:46:17 +0300 (EEST) Received: from antheas-z13 (x5996a855.customers.hiper-net.dk [89.150.168.85]) by linux3247.grserver.gr (Postfix) with ESMTPSA id 789431FDD78; Wed, 27 Aug 2025 20:46:16 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756316777; bh=yVVP5U6vbQTVp3zuFXYmRcn0/+e2aWydPzr35ns96fg=; h=From:To:Subject; b=oj+3JzMbDXAWO2xAJ8gPnIld73sDfIb3xbCegQjTTHpEUEtrXLrw7X1Iuq1ddcRBX vkWGzS2Cke1Fmifgc35DLylw4jagteeRe/803BsqjG4lOl22DdzWPOnvuoFb1Jg5Mr NXCSu4jb3ZFfdo4IbVH56FmqpO1xR77jhnEXgP/0TLYZodA6pVtfUn6CtOmnrFT1mL vHDbgiyJpP89JcrbSZkb2v2lxoJzWqS10Mwgo4jAlfDWpIkkQ+DqfhY2cevgEIKdG6 LE4aYyl9W30Hx+pgeoU+9loBDZ8hUHqKSUC6I1ySxCqrYbsSY/xBYAF4vtQKm+hnan c+Qf15r/nxIFA== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 89.150.168.85) smtp.mailfrom=lkml@antheas.dev smtp.helo=antheas-z13 Received-SPF: pass (linux3247.grserver.gr: connection is authenticated) From: Antheas Kapenekakis To: amd-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, philm@manjaro.org, Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Mario Limonciello , Robert Beckett , Antheas Kapenekakis Subject: [PATCH v2 3/5] drm: panel-backlight-quirks: Add secondary DMI match Date: Wed, 27 Aug 2025 19:43:58 +0200 Message-ID: <20250827174400.3692549-4-lkml@antheas.dev> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250827174400.3692549-1-lkml@antheas.dev> References: <20250827174400.3692549-1-lkml@antheas.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-PPP-Message-ID: <175631677698.1365389.4728967696287001458@linux3247.grserver.gr> X-PPP-Vhost: antheas.dev X-Virus-Scanned: clamav-milter 1.4.3 at linux3247.grserver.gr X-Virus-Status: Clean Using a single DMI match only allows matching per manufacturer. Introduce a second optional match to allow matching make/model. In addition, make DMI optional to allow matching only by EDID. Tested-by: Philip M=C3=BCller Signed-off-by: Antheas Kapenekakis Reviewed-by: Mario Limonciello --- drivers/gpu/drm/drm_panel_backlight_quirks.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_panel_backlight_quirks.c b/drivers/gpu/drm= /drm_panel_backlight_quirks.c index 702726c20ccc..3d386a96e50e 100644 --- a/drivers/gpu/drm/drm_panel_backlight_quirks.c +++ b/drivers/gpu/drm/drm_panel_backlight_quirks.c @@ -8,11 +8,14 @@ #include #include =20 +struct drm_panel_match { + enum dmi_field field; + const char * const value; +}; + struct drm_get_panel_backlight_quirk { - struct { - enum dmi_field field; - const char * const value; - } dmi_match; + struct drm_panel_match dmi_match; + struct drm_panel_match dmi_match_other; struct drm_edid_ident ident; struct drm_panel_backlight_quirk quirk; }; @@ -48,7 +51,13 @@ static bool drm_panel_min_backlight_quirk_matches( const struct drm_get_panel_backlight_quirk *quirk, const struct drm_edid *edid) { - if (!dmi_match(quirk->dmi_match.field, quirk->dmi_match.value)) + if (quirk->dmi_match.field && + !dmi_match(quirk->dmi_match.field, quirk->dmi_match.value)) + return false; + + if (quirk->dmi_match_other.field && + !dmi_match(quirk->dmi_match_other.field, + quirk->dmi_match_other.value)) return false; =20 if (quirk->ident.panel_id && !drm_edid_match(edid, &quirk->ident)) --=20 2.51.0 From nobody Fri Oct 3 16:47:18 2025 Received: from relay12.grserver.gr (relay12.grserver.gr [88.99.38.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 776E02D7DC4 for ; Wed, 27 Aug 2025 17:46:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=88.99.38.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316789; cv=none; b=b1I9rP64VuBrNlzrwzrjUHLrisgAbHCtYZhY0CPeXTAxBBhLlY96Uz8knOrH5CkV12pv9UQeKdaSJ55b2JVPW2RLxeuo179UIplBM9PiYQlO77ByJW4BQne19mhxqISIFZjotlX9kHksrrWcFMXWZ3sG+Z9rqJLFrEazYXNIgIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316789; c=relaxed/simple; bh=tADq+Kjvccs23FgXv0epzaPeMJ7rEU95RcN4t/L4u1o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MG8U+X8Cq32uGeM9iI3XSOUINL0XabaOJqkGv4LRNqFbwJY8JhSalF9lNfgIB117mgg16fxt3uO5DHFkobTf95X+XjI6O1l0sdHs/KSJ9Gdrt4ZdWVcx6/Ch2wsZIIYdt7BJ33Acidb9ldC9//Lh+5GP6YfL78jGDF9P/gbgNmI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev; spf=pass smtp.mailfrom=antheas.dev; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b=G9ufTxij; arc=none smtp.client-ip=88.99.38.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=antheas.dev Authentication-Results: smtp.subspace.kernel.org; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b="G9ufTxij" Received: from relay12 (localhost [127.0.0.1]) by relay12.grserver.gr (Proxmox) with ESMTP id E4E11BDF52; Wed, 27 Aug 2025 20:46:19 +0300 (EEST) Received: from linux3247.grserver.gr (linux3247.grserver.gr [213.158.90.240]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by relay12.grserver.gr (Proxmox) with ESMTPS id 1234FBDF1D; Wed, 27 Aug 2025 20:46:18 +0300 (EEST) Received: from antheas-z13 (x5996a855.customers.hiper-net.dk [89.150.168.85]) by linux3247.grserver.gr (Postfix) with ESMTPSA id 386601FDB98; Wed, 27 Aug 2025 20:46:17 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756316777; bh=3EZ00Z3B+IGWzT6mofKoZRzHf57H2Y8SzBdCp4/um34=; h=From:To:Subject; b=G9ufTxij/6jsSX3CAo3u8LXwJdm8ioa8keIly7q2UiBc3JNbNJ4cxggxsUclFy3Lp CUo/t2ya8u+TmFYVtweEkCJFBXbHI2W3eBoIvpJYSV1Umkzolw6o0Y1W8XBfl7c8yf 5Mhpp5CVFYucdDqchBK+dgCyAmm7DPvz0W0K0gZSFLXFcFpoyTD8gb4+HeVIY5lk3V aERE2P2QCXMT8jGVSTls5iupvjKDJUfAnXuFdda/yhbOYJQSeN7D+IWUJFGFgY55Cf r4Wtopx5naC/sF06i4fNt1deBawcPN7nq12XiNTGTiK/5VbJM6ZveX4j549bZneb5e YRxa0tKMaoFjg== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 89.150.168.85) smtp.mailfrom=lkml@antheas.dev smtp.helo=antheas-z13 Received-SPF: pass (linux3247.grserver.gr: connection is authenticated) From: Antheas Kapenekakis To: amd-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, philm@manjaro.org, Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Mario Limonciello , Robert Beckett , Antheas Kapenekakis Subject: [PATCH v2 4/5] drm: panel-backlight-quirks: Add brightness mask quirk Date: Wed, 27 Aug 2025 19:43:59 +0200 Message-ID: <20250827174400.3692549-5-lkml@antheas.dev> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250827174400.3692549-1-lkml@antheas.dev> References: <20250827174400.3692549-1-lkml@antheas.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-PPP-Message-ID: <175631677773.1365452.14412117334604153175@linux3247.grserver.gr> X-PPP-Vhost: antheas.dev X-Virus-Scanned: clamav-milter 1.4.3 at linux3247.grserver.gr X-Virus-Status: Clean Certain OLED devices malfunction on specific brightness levels. Specifically, when DP_SOURCE_BACKLIGHT_LEVEL is written to with the first byte being 0x00 and sometimes 0x01, the panel forcibly turns off until the device sleeps again. Below are some examples. This was found by iterating over brighness ranges while printing DP_SOURCE_BACKLIGHT_LEVEL. It was found that the screen would malfunction on specific values, and some of them were collected. Summary examples are found below. This quirk was tested by removing the workarounds and iterating from 0 to 50_000 value ranges with a cadence of 0.2s/it. The range of the panel is 1000...400_000, so the values were slightly interpolated during testing. The custom brightness curve added on 6.15 was disabled. 86016: 10101000000000000 86272: 10101000100000000 87808: 10101011100000000 251648: 111101011100000000 251649: 111101011100000001 86144: 10101000010000000 87809: 10101011100000001 251650: 111101011100000010 Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3803 Tested-by: Philip M=C3=BCller Signed-off-by: Antheas Kapenekakis Reviewed-by: Mario Limonciello --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 7 ++++ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 6 ++++ drivers/gpu/drm/drm_panel_backlight_quirks.c | 36 +++++++++++++++++++ include/drm/drm_utils.h | 1 + 4 files changed, 50 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index b967c6952e11..263f15f6fdea 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -3662,6 +3662,9 @@ static void update_connector_ext_caps(struct amdgpu_d= m_connector *aconnector) if (panel_backlight_quirk->min_brightness) caps->min_input_signal =3D panel_backlight_quirk->min_brightness - 1; + if (panel_backlight_quirk->brightness_mask) + caps->brightness_mask =3D + panel_backlight_quirk->brightness_mask; } } =20 @@ -4862,6 +4865,10 @@ static void amdgpu_dm_backlight_set_level(struct amd= gpu_display_manager *dm, brightness =3D convert_brightness_from_user(caps, dm->brightness[bl_idx]); link =3D (struct dc_link *)dm->backlight_link[bl_idx]; =20 + /* Apply brightness quirk */ + if (caps->brightness_mask) + brightness |=3D caps->brightness_mask; + /* Change brightness based on AUX property */ mutex_lock(&dm->dc_lock); if (dm->dc->caps.ips_support && dm->dc->ctx->dmub_srv->idle_allowed) { diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.h index b937da0a4e4a..340f9b5f68eb 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -200,6 +200,12 @@ struct amdgpu_dm_backlight_caps { * @aux_support: Describes if the display supports AUX backlight. */ bool aux_support; + /** + * @brightness_mask: After deriving brightness, or it with this mask. + * This is used to workaround panels that have issues with certain + * brightness values. + */ + u32 brightness_mask; /** * @ac_level: the default brightness if booted on AC */ diff --git a/drivers/gpu/drm/drm_panel_backlight_quirks.c b/drivers/gpu/drm= /drm_panel_backlight_quirks.c index 3d386a96e50e..2bdbd5583d32 100644 --- a/drivers/gpu/drm/drm_panel_backlight_quirks.c +++ b/drivers/gpu/drm/drm_panel_backlight_quirks.c @@ -45,6 +45,42 @@ static const struct drm_get_panel_backlight_quirk drm_pa= nel_min_backlight_quirks .ident.name =3D "NE135A1M-NY1", .quirk =3D { .min_brightness =3D 1, }, }, + /* Have OLED Panels with brightness issue when last byte is 0/1 */ + { + .dmi_match.field =3D DMI_SYS_VENDOR, + .dmi_match.value =3D "AYANEO", + .dmi_match_other.field =3D DMI_PRODUCT_NAME, + .dmi_match_other.value =3D "AYANEO 3", + .quirk =3D { .brightness_mask =3D 3, }, + }, + { + .dmi_match.field =3D DMI_SYS_VENDOR, + .dmi_match.value =3D "ZOTAC", + .dmi_match_other.field =3D DMI_BOARD_NAME, + .dmi_match_other.value =3D "G0A1W", + .quirk =3D { .brightness_mask =3D 3, }, + }, + { + .dmi_match.field =3D DMI_SYS_VENDOR, + .dmi_match.value =3D "ZOTAC", + .dmi_match_other.field =3D DMI_BOARD_NAME, + .dmi_match_other.value =3D "G1A1W", + .quirk =3D { .brightness_mask =3D 3, }, + }, + { + .dmi_match.field =3D DMI_SYS_VENDOR, + .dmi_match.value =3D "ONE-NETBOOK", + .dmi_match_other.field =3D DMI_PRODUCT_NAME, + .dmi_match_other.value =3D "ONEXPLAYER F1Pro", + .quirk =3D { .brightness_mask =3D 3, }, + }, + { + .dmi_match.field =3D DMI_SYS_VENDOR, + .dmi_match.value =3D "ONE-NETBOOK", + .dmi_match_other.field =3D DMI_PRODUCT_NAME, + .dmi_match_other.value =3D "ONEXPLAYER F1 EVA-02", + .quirk =3D { .brightness_mask =3D 3, }, + }, }; =20 static bool drm_panel_min_backlight_quirk_matches( diff --git a/include/drm/drm_utils.h b/include/drm/drm_utils.h index 82eeee4a58ab..6a46f755daba 100644 --- a/include/drm/drm_utils.h +++ b/include/drm/drm_utils.h @@ -18,6 +18,7 @@ int drm_get_panel_orientation_quirk(int width, int height= ); =20 struct drm_panel_backlight_quirk { u16 min_brightness; + u32 brightness_mask; }; =20 const struct drm_panel_backlight_quirk * --=20 2.51.0 From nobody Fri Oct 3 16:47:18 2025 Received: from relay10.grserver.gr (relay10.grserver.gr [37.27.248.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 939012D7DE8 for ; Wed, 27 Aug 2025 17:46:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=37.27.248.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316790; cv=none; b=PQokhTAgy7Zn5KkZSXQoqgA3HXcefKSoBEk8Ed3ptJnhUTJYKA6JlEFemmifm0OwS9Pv5MftumSufTltZA8DFzwps/R+4GXukDfeHPcaDjthk/1dGp6rckwQUdtPCgfH6qelpVbXr3v8iMaQX2vFfUt/Z5vSU90QwulS560O03s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756316790; c=relaxed/simple; bh=VCRgaXkIsqEb0X+N2N800a5NQOvKOFGZ3FOcy1tKctM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aRxPOidwXk6TSnp+ls2ZSgGSeo6xZnqV5+S6ML6i9ygFM9ddn5gk5g5P8JgHd2JKeEyRiCortp/BTUgTeFugb+ocUuvE6TEX0/CusAzwaQFssSQTYEablJ90OjudP0EW2JErMCwLt3hPrNlZP00j96J0+ikWu1iRXkRC4l336rE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev; spf=pass smtp.mailfrom=antheas.dev; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b=H7MrhF69; arc=none smtp.client-ip=37.27.248.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=antheas.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=antheas.dev Authentication-Results: smtp.subspace.kernel.org; dkim=temperror (0-bit key) header.d=antheas.dev header.i=@antheas.dev header.b="H7MrhF69" Received: from relay10 (localhost.localdomain [127.0.0.1]) by relay10.grserver.gr (Proxmox) with ESMTP id D2CCF49367; Wed, 27 Aug 2025 20:46:19 +0300 (EEST) Received: from linux3247.grserver.gr (linux3247.grserver.gr [213.158.90.240]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by relay10.grserver.gr (Proxmox) with ESMTPS id 102294936C; Wed, 27 Aug 2025 20:46:19 +0300 (EEST) Received: from antheas-z13 (x5996a855.customers.hiper-net.dk [89.150.168.85]) by linux3247.grserver.gr (Postfix) with ESMTPSA id 1FC141FDEA8; Wed, 27 Aug 2025 20:46:18 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756316778; bh=ISfp3kQz5F8NvozgxSjB9Oij0MVFzpiUsAcxlVWnpG4=; h=From:To:Subject; b=H7MrhF6937KuzgwZwR6bOzHDepZVt4vA+hNmsiwgtvG8dUGmhseJbC9NZe4han9gf OnD4onVQM/+wdcs9zOS3vTYP4uA8ffqMKHrJU9/oUx289K+f6w9jIz/0VS7Xhm8S3H l7cQ5nXkHB2lS5+T7ZciBBMgHSkHYYIjdFV/QsWAuuR/h/pCmToknRgZaYrr61Lu8b qgH9dY0ajCzrQPiFP4DmspYQSkpJCXZqF2rkaemHyIpL9cPBmmz+44ebitiUV3DatJ 6qvk0V4FU1bxElSpvRzN9HHNwJz1zLisZAOgK8KEVJrhsQNz0u2IklZ78bYKAK6SIT FNFs2Kic63bZA== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 89.150.168.85) smtp.mailfrom=lkml@antheas.dev smtp.helo=antheas-z13 Received-SPF: pass (linux3247.grserver.gr: connection is authenticated) From: Antheas Kapenekakis To: amd-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, philm@manjaro.org, Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Mario Limonciello , Robert Beckett , Antheas Kapenekakis Subject: [PATCH v2 5/5] drm: panel-backlight-quirks: Add Steam Deck brightness quirk Date: Wed, 27 Aug 2025 19:44:00 +0200 Message-ID: <20250827174400.3692549-6-lkml@antheas.dev> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250827174400.3692549-1-lkml@antheas.dev> References: <20250827174400.3692549-1-lkml@antheas.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-PPP-Message-ID: <175631677861.1365508.2422182497171344248@linux3247.grserver.gr> X-PPP-Vhost: antheas.dev X-Virus-Scanned: clamav-milter 1.4.3 at linux3247.grserver.gr X-Virus-Status: Clean Content-Type: text/plain; charset="utf-8" On the SteamOS kernel, Valve universally makes minimum brightness 0 for all devices. SteamOS is (was?) meant for the Steam Deck, so enabling it universally is reasonable. However, it causes issues in certain devices. Therefore, introduce it just for the Steam Deck here. SteamOS kernel does not have a public mirror, but this replaces commit 806dd74bb225 ("amd/drm: override backlight min value from 12 -> 0") in the latest, as of this writing, SteamOS kernel (6.11.11-valve24). See unofficial mirror reconstructed from sources below. Link: https://gitlab.com/evlaV/linux-integration/-/commit/806dd74bb225 Reviewed-by: Robert Beckett Signed-off-by: Antheas Kapenekakis Reviewed-by: Mario Limonciello --- drivers/gpu/drm/drm_panel_backlight_quirks.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/gpu/drm/drm_panel_backlight_quirks.c b/drivers/gpu/drm= /drm_panel_backlight_quirks.c index 2bdbd5583d32..69d38c248a0a 100644 --- a/drivers/gpu/drm/drm_panel_backlight_quirks.c +++ b/drivers/gpu/drm/drm_panel_backlight_quirks.c @@ -81,6 +81,21 @@ static const struct drm_get_panel_backlight_quirk drm_pa= nel_min_backlight_quirks .dmi_match_other.value =3D "ONEXPLAYER F1 EVA-02", .quirk =3D { .brightness_mask =3D 3, }, }, + /* Steam Deck models */ + { + .dmi_match.field =3D DMI_SYS_VENDOR, + .dmi_match.value =3D "Valve", + .dmi_match_other.field =3D DMI_PRODUCT_NAME, + .dmi_match_other.value =3D "Jupiter", + .quirk =3D { .min_brightness =3D 1, }, + }, + { + .dmi_match.field =3D DMI_SYS_VENDOR, + .dmi_match.value =3D "Valve", + .dmi_match_other.field =3D DMI_PRODUCT_NAME, + .dmi_match_other.value =3D "Galileo", + .quirk =3D { .min_brightness =3D 1, }, + }, }; =20 static bool drm_panel_min_backlight_quirk_matches( --=20 2.51.0