From nobody Fri Oct 3 21:53:29 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 04D3614AD2D for ; Sun, 24 Aug 2025 20:02:07 +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=1756065731; cv=none; b=Qp9AXDoUYnNXVcxEpj/Ta0SLaK2G+ypObSjo+XlFl5EH1K1mk/1XACOgs48+E9chK7BalQUDkttATDaIxgyuo5/IJgbNuH++LcoSaMPZdHGU72LX0gq9gHFrP8RqKiZ77tzNLJsrheApBKDSUuY26zRMRvt6gQ3ujE7tJn6yvfo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756065731; c=relaxed/simple; bh=COPZsh0etGC+lf+GyTOwTCqkEmJpPgHOhcScXUQB/p4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XbWosD07LFFHZV0txdZC3wl2YjUoyErq40Qvf8LXtrhl/9L9v3cDGS3q1RvBu3DnxGwbsFcyF/soPUafqw9CV9dLEK/3bXW8y8Ailrwd+fZROiU/wHnn7tcNe4Qv/DEQYpQee4DJo0f+5y4ZSpUkPGT9oyz/9C6yHs2snFOuoOY= 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=DS/GzDCB; 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="DS/GzDCB" Received: from relay11 (localhost.localdomain [127.0.0.1]) by relay11.grserver.gr (Proxmox) with ESMTP id 4F975C5598; Sun, 24 Aug 2025 23:02:06 +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 E2284C559A; Sun, 24 Aug 2025 23:02:05 +0300 (EEST) Received: from antheas-z13 (unknown [IPv6:2a05:f6c2:511b:0:7200:c86a:8976:4786]) by linux3247.grserver.gr (Postfix) with ESMTPSA id 29E73206823; Sun, 24 Aug 2025 23:02:05 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756065725; bh=BX16U7qvlMv2h4EJEHJNpyCG3RBhwjH7TgrJ12Feu/g=; h=From:To:Subject; b=DS/GzDCB4JOoYcbiSo1T1xA0yKrihcp7CKV9M5R7aCCFoJX2c3877NVMAXg9sF1ew rvcUuZfClPPPeT4rjZHpPGJUukp7k41h+XR9OpFqcPGFczuWK0EHfmdK8CqseaTYIy r0bLZNzXKhDLNGH1nnf2XY7SJ0y5sySs64s1feTENxocOhWT7p0Mn7WKOn2Hze0zgw 2xNqjBIecn51YtWUs4/SUlTODUZGdkogx6QrVsBpM/uIX1KKmNOHbGMvDduirmAGhH 6ByB+o+lw35DCfzKqwX64BDMk4A6vpdQW8BEKfLKZcXgK6I6np55u09HO3LddqEJFK k/DJAh9oCcXLg== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 2a05:f6c2:511b:0:7200:c86a:8976:4786) 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 , Antheas Kapenekakis Subject: [PATCH v1 1/5] drm: panel-backlight-quirks: Make ident optional Date: Sun, 24 Aug 2025 22:01:58 +0200 Message-ID: <20250824200202.1744335-2-lkml@antheas.dev> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250824200202.1744335-1-lkml@antheas.dev> References: <20250824200202.1744335-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: <175606572562.883131.12699924690113578642@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" 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. Signed-off-by: Antheas Kapenekakis --- 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.50.1 From nobody Fri Oct 3 21:53:29 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 2015719B5A7 for ; Sun, 24 Aug 2025 20:02:08 +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=1756065731; cv=none; b=e1fCXoiWnLHrHA8XpmT5ub0k5WToJGgVXVp/iOWzGJstMx9o7WFFJzmAvKQB/JsBAzkdkWL4w2a9lPwlrmvHrT5yCTgE7FsSHKdmuT4BTmKHLJQLBghSsdt2QvyBtJF9r40H/ec0KIms1yb/JPk2N66Hio8MvWooCD3VIc5I6nE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756065731; c=relaxed/simple; bh=1pSU8fFAMRUXWuonCBa1sIr7P1ZgFjVixztIe7yJLYU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RVyuB2iW/0fNw+cKHLgEl2UCwpBH/V1FOpRigrNo/0unrYV5qvSv7XQP4UpXicoz5XP05uClavgRAUSAAtjqIquUIFpH1lD0D5DMKFKTLqzgzKgwEj6zqhsv7ufoG8C4T9xVxyj/EHVu4O6wc7xh79L8a+pEpGhXfrMNspli4Qw= 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=YEdH4iSv; 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="YEdH4iSv" Received: from relay11 (localhost.localdomain [127.0.0.1]) by relay11.grserver.gr (Proxmox) with ESMTP id 5E582C55A2; Sun, 24 Aug 2025 23:02:07 +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 B5A0EC54FE; Sun, 24 Aug 2025 23:02:06 +0300 (EEST) Received: from antheas-z13 (unknown [IPv6:2a05:f6c2:511b:0:7200:c86a:8976:4786]) by linux3247.grserver.gr (Postfix) with ESMTPSA id F11F1206827; Sun, 24 Aug 2025 23:02:05 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756065726; bh=dqae/2e+OMsIT8IE3vrtZRe5m+RCu/Ifgcl+aQR9ZWY=; h=From:To:Subject; b=YEdH4iSvEKOoMRpMPc6DB42/4fjAEzTS/i2w1PqhVeaG0rGRVTtsqRRJfpy5R/Lra uCLDVCF+KhmCPD6D71wTARvb4VSLZ01z8lHfkoeBTkeWNGuBAe0/wcgRERjbSjhQ8E h7A0FAWSS69hQkrif1jOmG30IGsuzUWUYGhE+97jrD3GQxHYy67TbdOyfshVCziO8G +x3gNMw2bYKO2caB4+upLcQyZv5TGZIQc5PdiXZu9k/YgMMWHnBRzYdbPqEqwrr3P+ YPFBxGIfSZkz64bOTAA73rlYV4ZISQPVKM2A9t3bPdl2WCNAPpxxiWyujdDvYndU/8 Dtp/WsNq3terw== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 2a05:f6c2:511b:0:7200:c86a:8976:4786) 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 , Antheas Kapenekakis Subject: [PATCH v1 2/5] drm: panel-backlight-quirks: Convert brightness quirk to generic structure Date: Sun, 24 Aug 2025 22:01:59 +0200 Message-ID: <20250824200202.1744335-3-lkml@antheas.dev> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250824200202.1744335-1-lkml@antheas.dev> References: <20250824200202.1744335-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: <175606572642.883186.2052347155776376294@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" 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. Signed-off-by: Antheas Kapenekakis Tested-by: Philip M=C3=BCller --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 ++++-- .../link/protocols/link_edp_panel_control.c | 2 +- drivers/gpu/drm/drm_panel_backlight_quirks.c | 41 ++++++++++--------- include/drm/drm_utils.h | 7 +++- 4 files changed, 36 insertions(+), 26 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 cd0e2976e268..4ad80ae615a2 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/amd/display/dc/link/protocols/link_edp_panel_c= ontrol.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_con= trol.c index e7927b8f5ba3..a1f37267b85e 100644 --- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c +++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c @@ -201,7 +201,7 @@ bool edp_set_backlight_level_nits(struct dc_link *link, return false; } else if (link->backlight_control_type =3D=3D BACKLIGHT_CONTROL_AMD_AUX)= { struct dpcd_source_backlight_set dpcd_backlight_set; - *(uint32_t *)&dpcd_backlight_set.backlight_level_millinits =3D backlight= _millinits; + *(uint32_t *)&dpcd_backlight_set.backlight_level_millinits =3D backlight= _millinits | 3; *(uint16_t *)&dpcd_backlight_set.backlight_transition_time_ms =3D (uint1= 6_t)transition_time_in_ms; =20 uint8_t backlight_control =3D isHDR ? 1 : 0; 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.50.1 From nobody Fri Oct 3 21:53:29 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 C6F7219C569 for ; Sun, 24 Aug 2025 20:02:09 +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=1756065732; cv=none; b=P8Hvw47sZXltPOh0tdsGxrBaEq3zg+zapzlP770SLioW7pHZK7Qz/QVKwYD6xTzGq1aa2A9eLIvdPgP4NJq7lZEqVqSCqNa3X10aJ49iT3pcbaPnnAPEjrcgm+MkLa3u03UzpLD4/rP9A3S6q8nj4Xev4jDzInKZPFgVLHccsx4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756065732; c=relaxed/simple; bh=QPhKcrVIU2gFSOLUVx1jTDeBJXsmc7KgCkuN3th6ueE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f839996XiQDWuyqCPNYCbAXcv6Etz1pdyYeIMCBoZuKcoS22ZSifn9VOiwmvc8Rchm64ZQBNDX3mYrcYHTIuNm9/dGjdMcG5SbBRQ7OsfaAt+JHFBuyTv423ipCzN3zqYZpJUmLxJcsMyUKKPLAu2Snj7TpHco67B9N3Ld/69do= 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=ARrnIt9h; 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="ARrnIt9h" Received: from relay12 (localhost [127.0.0.1]) by relay12.grserver.gr (Proxmox) with ESMTP id 06454BDCA0; Sun, 24 Aug 2025 23:02:08 +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 76F7BBDBFE; Sun, 24 Aug 2025 23:02:07 +0300 (EEST) Received: from antheas-z13 (unknown [IPv6:2a05:f6c2:511b:0:7200:c86a:8976:4786]) by linux3247.grserver.gr (Postfix) with ESMTPSA id A6E3C20682B; Sun, 24 Aug 2025 23:02:06 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756065727; bh=x8x3rWwaOCwFrM5cFavMRZMSBhj+ObMSZe7AUPPM9GE=; h=From:To:Subject; b=ARrnIt9hVcC9B1c5ZkPY5LxZAW57m1sdqoJoh1U7ySGmtCwU4FBBt76Bcg/S9EZ9L 2mbhVvo4J7hrhECTKy5avSW52y9j47drZVzBi8bLBSxbywLXlBISZsmSS+SPo7quLe l3NWhYSmo0ENWZtwsDr0vJOJQfi+nSU3bFzDE6r3kInB+wOXqbVbD+Bs5HTmEL4W8M Q4frl9b5tlaFnc7n3ef7qjnYr/ihNzjWXDW1P0k7mtWxUL6wEl28vBEBehrKQlyonU 6nwoRml58QSHqgtSt9iLzyaYO8dgbS6O/uLS5FfT+EDxlx519pGG9rNO9VAYz3rXQi 2Mam8GLoGVrew== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 2a05:f6c2:511b:0:7200:c86a:8976:4786) 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 , Antheas Kapenekakis Subject: [PATCH v1 3/5] drm: panel-backlight-quirks: Add secondary DMI match Date: Sun, 24 Aug 2025 22:02:00 +0200 Message-ID: <20250824200202.1744335-4-lkml@antheas.dev> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250824200202.1744335-1-lkml@antheas.dev> References: <20250824200202.1744335-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: <175606572716.883244.17703475591090779465@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" 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. Signed-off-by: Antheas Kapenekakis Tested-by: Philip M=C3=BCller --- 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.50.1 From nobody Fri Oct 3 21:53:29 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 7FD32224B15 for ; Sun, 24 Aug 2025 20:02:11 +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=1756065733; cv=none; b=UJRudlcgBx0dpR/gdZWHIfLek2OPLQqJTBWcqhd+PSzepT75W2Ztug7SkJE1AdUebh/1d/qZGCcil6e7chaeLFfqcOUU8HYPB3X01NTJxU2Gb5GdZzitUCiqLJJNlyS9p8Dh5ORosh0eT1YjJWEIVTuPR0u4/0Iq6Fu+eQB2D88= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756065733; c=relaxed/simple; bh=o9VXz0cMVHw7iSxqktYW1UDrrblsdphC0X9amqm8GfA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CgIIIFq8EqqOqhxAC8kQIDh/yYhePFoTWfMoLMmgN71+f0e1vUJIWAA8i1IzHBMMUISozvzIxp9EkwbnozvHLCs+VZwWRRw8BbPkgNJFtRSkNx8+PdxcbqRntSsROOqoC7dTrme2EQpyoNaM5PsxbCg7T4Fxd4ythrcNqPDlz50= 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=VyGwpHi/; 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="VyGwpHi/" Received: from relay10 (localhost.localdomain [127.0.0.1]) by relay10.grserver.gr (Proxmox) with ESMTP id 6D8714638F; Sun, 24 Aug 2025 23:02:09 +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 506A8463A4; Sun, 24 Aug 2025 23:02:08 +0300 (EEST) Received: from antheas-z13 (unknown [IPv6:2a05:f6c2:511b:0:7200:c86a:8976:4786]) by linux3247.grserver.gr (Postfix) with ESMTPSA id 65259206830; Sun, 24 Aug 2025 23:02:07 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756065727; bh=7X4Jnk37X1tXJ/b+gXNJf2KbzQLITvGSc9XY7Ex69SA=; h=From:To:Subject; b=VyGwpHi/NOykqRwvdtYkC4/POK/FXuO/yteR4hAWOQj6MuDe2bFeCz9I6luYT6gxR OA097arNMcpw1zChvxfe8lWkqrhxj/uAKb28pbxDkHT0TadLqdvKlWViODia5zxGwZ LsimpofqcbPyRNjvi869U4VuAkH1SrdAiwm7Tz13QL716ta8eYBOMB0A5aaE3lvQQj VnmBOLdl2lA1YWHYbunIkJpGmm3io3DPD6EfTaH65oKX12HnibpGX/R5I2x0h4MbdW OLzhazSjKTtnpOFvx0lhVJdo82qcAbPYI54StLyC/JSEFQsSaLBme2AYNw8SnHvT9b KTxbmv8kRhkgw== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 2a05:f6c2:511b:0:7200:c86a:8976:4786) 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 , Antheas Kapenekakis Subject: [PATCH v1 4/5] drm: panel-backlight-quirks: Add brightness mask quirk Date: Sun, 24 Aug 2025 22:02:01 +0200 Message-ID: <20250824200202.1744335-5-lkml@antheas.dev> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250824200202.1744335-1-lkml@antheas.dev> References: <20250824200202.1744335-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: <175606572787.883291.1520310764561204479@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" 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 Signed-off-by: Antheas Kapenekakis Tested-by: Philip M=C3=BCller --- .../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 | 29 +++++++++++++++++++ include/drm/drm_utils.h | 1 + 4 files changed, 43 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 4ad80ae615a2..156f2aae6828 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..78c430b07d6a 100644 --- a/drivers/gpu/drm/drm_panel_backlight_quirks.c +++ b/drivers/gpu/drm/drm_panel_backlight_quirks.c @@ -45,6 +45,35 @@ 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 "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.50.1 From nobody Fri Oct 3 21:53:29 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 823D52253FB for ; Sun, 24 Aug 2025 20:02:11 +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=1756065733; cv=none; b=RFIfhNNFwBNAuwGMS7zNHyGhrw1HkDCZbHDahdoxISW6y/zQMwvSAaZs9S1EukAzExlPceeyLj9IV0dMihP0ZXEQEu1PQLJmSsZTplTeCgNEPdtfQahZmJcWVArPe1i3sgJHZcqlv6MfXGhWl8uf70b9LGZZvEyqw/ijwhDvdrw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756065733; c=relaxed/simple; bh=ogN3u1iHUzdg4+YyyQV10XLc/NeB1D/ucu8uqH3EBpY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YwZgGG18MFiglVn+LpChVX6KYn+zIDO1YAYdeHcqEGXJebxlf3QPyELY+3YMToIzQqEBIUCiakTonMSNCVzXzmXvXndteNixgK3WGhH0xxlxCgLrHrmwOq9fM34j38CwLLq6hanNXDbUn86mlq39a/GjQ6f/orjcinjNbr+Qdns= 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=VoxvKQwy; 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="VoxvKQwy" Received: from relay12 (localhost [127.0.0.1]) by relay12.grserver.gr (Proxmox) with ESMTP id B75ABBDBFE; Sun, 24 Aug 2025 23:02:09 +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 0D80DBDCE2; Sun, 24 Aug 2025 23:02:09 +0300 (EEST) Received: from antheas-z13 (unknown [IPv6:2a05:f6c2:511b:0:7200:c86a:8976:4786]) by linux3247.grserver.gr (Postfix) with ESMTPSA id 3AF25206834; Sun, 24 Aug 2025 23:02:08 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antheas.dev; s=default; t=1756065728; bh=L8cmdSbbrwbTki+2aHu2sEvZypC6g58bcJ5QkivgUxo=; h=From:To:Subject; b=VoxvKQwy5QH0zLE6ws85T/ctBbdNNMffUKP83wlxRBG49+BFZJJDjU6Ktf9kQfds0 3kmIHCosoImWb0yWOT/FS2fCl01c2oTCPKdju/h6FLkQ3c6isWASyIzfKuBrG3GAzd +Gd4xLy+uGoJKlfmxhjcg3DpP1N54w0g+1yFv5E9EFskk2vITwJ1xb69sfr50EwljP vYs6QipbcI+mELg5PxXmRO4+0WO082C1DKp3O8hWtavKkhYudbbcu4PNFbfUD8ud6r uxnCIVel/mDvfMF0n/2/n/llS0x27u+aI5CG5bjd8PU1EVcQq5awa+RBVrys09oTDt SUP8aHNhisjlQ== Authentication-Results: linux3247.grserver.gr; spf=pass (sender IP is 2a05:f6c2:511b:0:7200:c86a:8976:4786) 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 , Antheas Kapenekakis Subject: [PATCH v1 5/5] drm: panel-backlight-quirks: Add Steam Decks Date: Sun, 24 Aug 2025 22:02:02 +0200 Message-ID: <20250824200202.1744335-6-lkml@antheas.dev> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250824200202.1744335-1-lkml@antheas.dev> References: <20250824200202.1744335-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: <175606572872.883350.1205519288154954246@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 Signed-off-by: Antheas Kapenekakis Reviewed-by: Robert Beckett --- drivers/gpu/drm/drm_panel_backlight_quirks.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_panel_backlight_quirks.c b/drivers/gpu/drm= /drm_panel_backlight_quirks.c index 78c430b07d6a..5c24f4a86519 100644 --- a/drivers/gpu/drm/drm_panel_backlight_quirks.c +++ b/drivers/gpu/drm/drm_panel_backlight_quirks.c @@ -73,7 +73,22 @@ static const struct drm_get_panel_backlight_quirk drm_pa= nel_min_backlight_quirks .dmi_match_other.field =3D DMI_PRODUCT_NAME, .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.50.1