[PATCH] platform/x86: dell-dw5826e: Extend _DSM support to revision 0

From: Jack Wu via B4 Relay

Date: Fri Sep 04 2026 - 02:54:18 EST


From: Jack Wu <jackbb_wu@xxxxxxxxxx>

The driver evaluates the PALC0001 _DSM with revision 1 only. Extend it
to also support firmware implementing revision 0, as found on Slate PTL
CS 14, Yukon PTL CSLW 14 and Yukon PTL 360 14.

The supported revision is detected once during probe. Revision 1 is
checked first so that existing systems keep their current behaviour, and
the accepted revision is then used for evaluating the reset _DSM.

Signed-off-by: Jack Wu <jackbb_wu@xxxxxxxxxx>
---
drivers/platform/x86/dell/dell-dw5826e-reset.c | 30 ++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/drivers/platform/x86/dell/dell-dw5826e-reset.c b/drivers/platform/x86/dell/dell-dw5826e-reset.c
index 64e6e9b1d7a0..c72c243b460e 100644
--- a/drivers/platform/x86/dell/dell-dw5826e-reset.c
+++ b/drivers/platform/x86/dell/dell-dw5826e-reset.c
@@ -6,8 +6,10 @@
*/

#include <linux/acpi.h>
+#include <linux/array_size.h>
#include <linux/bits.h>
#include <linux/device.h>
+#include <linux/gfp_types.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/types.h>
@@ -15,15 +17,23 @@

#define PALC_DSM_FN_TRIGGER_PLDR 1

+static const u64 palc_dsm_revs[] = { 1, 0 };
+
static guid_t palc_dsm_guid =
GUID_INIT(0x5a1a4bba, 0x8006, 0x487e, 0xbe, 0x0a, 0xac, 0xf5, 0xd8, 0xfd, 0xfe, 0x59);

+struct palc_data {
+ u64 dsm_rev;
+};
+
static int trigger_palc_pldr(struct device *dev, acpi_handle handle)
{
+ struct palc_data *data = dev_get_drvdata(dev);
union acpi_object *obj;
int ret = 0;

- obj = acpi_evaluate_dsm(handle, &palc_dsm_guid, 1, PALC_DSM_FN_TRIGGER_PLDR, NULL);
+ obj = acpi_evaluate_dsm(handle, &palc_dsm_guid, data->dsm_rev,
+ PALC_DSM_FN_TRIGGER_PLDR, NULL);
if (!obj) {
dev_err(dev, "Failed to evaluate _DSM\n");
return -EIO;
@@ -60,16 +70,28 @@ ATTRIBUTE_GROUPS(palc);

static int palc_probe(struct platform_device *pdev)
{
+ struct palc_data *data;
acpi_handle handle;
+ unsigned int i;

handle = ACPI_HANDLE(&pdev->dev);
if (!handle)
return -ENODEV;

- if (!acpi_check_dsm(handle, &palc_dsm_guid, 1, BIT(PALC_DSM_FN_TRIGGER_PLDR)))
- return -ENODEV;
+ data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ for (i = 0; i < ARRAY_SIZE(palc_dsm_revs); i++) {
+ if (acpi_check_dsm(handle, &palc_dsm_guid, palc_dsm_revs[i],
+ BIT(PALC_DSM_FN_TRIGGER_PLDR))) {
+ data->dsm_rev = palc_dsm_revs[i];
+ platform_set_drvdata(pdev, data);
+ return 0;
+ }
+ }

- return 0;
+ return -ENODEV;
}

static const struct acpi_device_id palc_acpi_ids[] = {

---
base-commit: a500db7819c50db59e55f1b4fa1c3baa5a2616f3
change-id: 20260904-dw5826e-acpi-reset-add-revision-8c05a6be9221

Best regards,
--
Jack Wu <jackbb_wu@xxxxxxxxxx>