From: Teodora <teolyub@gmail.com>
To: platform-driver-x86@vger.kernel.org
Subject: Re: OptiPlex 7400 AIO HDMI-IN button requires WMI startup method
Date: Sat, 24 Oct 2026 14:51:00 +0100 [thread overview]
Message-ID: <0TZENT.54P2IBFQRED22@gmail.com> (raw)
In-Reply-To: <OOZENT.01UBB4ITK3LK2@gmail.com>
Hi,
I have a Dell OptiPlex 7400 All-in-One machine and have been
investigating why its physical HDMI-In/source button works under
Windows but not under Linux. I wanted to flag a potential solution,
though I am not a kernel developer but was hoping that perhaps this
could help the community.
So, my system details are:
- Dell OptiPlex 7400 All-in-One
- Fedora 44
- Kernel: 7.2.11-200.fc44.x86_64
- dell-wmi-aio is present and loaded
While investigating the Dell Windows OSD software, I found that the
button generates a WMI event through Acpi_OSD_event, GUID:
02314822-307C-4F66-BF0E-48AEAEB26CC8. The GDat payload generated when
pressing the source button begins 02 00 00 00 F2 DD which corresponds
to event/scancode 0xDDF2.
More importantly, Dell's OSD service invokes another WMI method during
startup:
Class: AcpiOSD_WMBC_method
GUID: 2D703EE8-36AC-4F88-BDB5-7556CE6B2946
Method: PegaOemNotificationStartUp
WmiMethodId: 1
Description: "Invoked by AP when system up."
Linux exposes this WMI interface on the machine, with instance_count =
1. I wrote a minimal test WMI driver which binds only to this GUID and
invokes: wmidev_invoke_procedure(wdev, 0, 1, &input); using an empty
input buffer.
The result is reproducible: After a normal Linux boot, the HDMI/source
button does not switch the display. Then loading the test driver
invokes WMI method 1 and the firmware reports success. Immediately
after, the physical source button works correctly and switches the
panel to HDMI-In. The test module can then be unloaded and the physical
button continues to work.
After rebooting, the problem returns until method 1 is invoked again.
This suggests that PegaOemNotificationStartUp is a one-shot firmware
initialization which Dell's Windows software performs at startup but
Linux currently does not.
Below I am sharing the small module I use as a workaround; this is
loaded once on boot.
// SPDX-License-Identifier: GPL-2.0
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/wmi.h>
#define DELL_OSD_WMI_GUID "2D703EE8-36AC-4F88-BDB5-7556CE6B2946"
#define DELL_OSD_STARTUP_METHOD 1
static int dell_osd_probe(struct wmi_device *wdev, const void *context)
{
struct wmi_buffer input = {
.length = 0,
.data = NULL,
};
u8 instances;
int ret;
(void)context;
instances = wmidev_instance_count(wdev);
dev_info(&wdev->dev,
"Dell OSD test: WMI device found, instance count = %u\n",
instances);
if (instances < 1) {
dev_err(&wdev->dev,
"Dell OSD test: no WMI instance 0 available\n");
return -ENODEV;
}
dev_info(&wdev->dev,
"Dell OSD test: calling PegaOemNotificationStartUp, method ID 1\n");
ret = wmidev_invoke_procedure(
wdev,
0,
DELL_OSD_STARTUP_METHOD,
&input
);
if (ret < 0) {
dev_err(&wdev->dev,
"Dell OSD test: startup method failed: %d\n",
ret);
return ret;
}
dev_info(&wdev->dev,
"Dell OSD test: startup method returned success\n");
return 0;
}
static const struct wmi_device_id dell_osd_id_table[] = {
{
.guid_string = DELL_OSD_WMI_GUID,
},
{ }
};
MODULE_DEVICE_TABLE(wmi, dell_osd_id_table);
static struct wmi_driver dell_osd_driver = {
.driver = {
.name = "dell-osd-wmi-test",
},
.id_table = dell_osd_id_table,
.probe = dell_osd_probe,
.no_singleton = true,
};
module_wmi_driver(dell_osd_driver);
MODULE_AUTHOR("Dell OptiPlex 7400 AIO experimental test");
MODULE_DESCRIPTION("Experimental Dell OSD WMI startup-method test");
MODULE_LICENSE("GPL");
I hope this would be useful as not having this function has been such a
bugbear for me over the years, especially on a business machine.
Thanks,
Teodora
next parent reply other threads:[~2026-10-24 13:51 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <OOZENT.01UBB4ITK3LK2@gmail.com>
2026-10-24 13:51 ` Teodora [this message]
2026-10-24 18:52 ` OptiPlex 7400 AIO HDMI-IN button requires WMI startup method Armin Wolf
2026-10-24 19:09 ` Teodora
2026-10-24 19:14 ` Armin Wolf
2026-10-27 17:12 ` Armin Wolf
2026-10-27 18:04 ` Armin Wolf
2026-10-27 20:57 ` teolyub
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0TZENT.54P2IBFQRED22@gmail.com \
--to=teolyub@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.