Some laptops ship an EDID in the BIOS encoded in the _DDC method that
differs than the EDID directly on the laptop panel for $REASONS.
This is the EDID that is used by the AMD Windows driver, and so sometimes
different results are found in different operating systems.
This series adds a new DRM helper that will use acpi_video to fetch the
EDID.
On amdgpu when an eDP panel is found the BIOS
is checked first for an EDID and that used as a preference if found.
On nouveau it replaces the previous local function doing a similar role.
This does *not* use struct drm_edid as this will require more involved
amdgpu display driver work that will come separately as part of follow-ups
to: https://lore.kernel.org/amd-gfx/[email protected]/
Mario Limonciello (4):
ACPI: video: Handle fetching EDID that is longer than 256 bytes
drm: Add drm_get_acpi_edid() helper
drm/amd: Fetch the EDID from _DDC if available for eDP
drm/nouveau: Use drm_get_acpi_edid() helper
drivers/acpi/acpi_video.c | 25 +++----
drivers/gpu/drm/Kconfig | 4 +
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
.../gpu/drm/amd/amdgpu/amdgpu_connectors.c | 4 +
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 8 ++
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 ++-
.../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 9 ++-
drivers/gpu/drm/drm_edid.c | 73 +++++++++++++++++++
drivers/gpu/drm/nouveau/nouveau_acpi.c | 27 -------
drivers/gpu/drm/nouveau/nouveau_acpi.h | 2 -
drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
include/drm/drm_edid.h | 1 +
12 files changed, 115 insertions(+), 51 deletions(-)
--
2.34.1
Some manufacturers have intentionally put an EDID that differs from
the EDID on the internal panel on laptops. Drivers can call this
helper to attempt to fetch the EDID from the BIOS's ACPI _DDC method.
Signed-off-by: Mario Limonciello <[email protected]>
---
v1->v2:
* Split code from previous amdgpu specific helper to generic drm helper.
---
drivers/gpu/drm/Kconfig | 4 +++
drivers/gpu/drm/drm_edid.c | 73 ++++++++++++++++++++++++++++++++++++++
include/drm/drm_edid.h | 1 +
3 files changed, 78 insertions(+)
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 2520db0b776e..0065dcb63745 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -21,6 +21,10 @@ menuconfig DRM
select KCMP
select VIDEO_CMDLINE
select VIDEO_NOMODESET
+ select ACPI_VIDEO if ACPI
+ select BACKLIGHT_CLASS_DEVICE if ACPI
+ select INPUT if ACPI
+ select ACPI_WMI if X86
help
Kernel-level support for the Direct Rendering Infrastructure (DRI)
introduced in XFree86 4.0. If you say Y here, you need to select
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 69c68804023f..1fbbeaa664b2 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -28,6 +28,7 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include <acpi/video.h>
#include <linux/bitfield.h>
#include <linux/cec.h>
#include <linux/hdmi.h>
@@ -2188,6 +2189,47 @@ drm_do_probe_ddc_edid(void *data, u8 *buf, unsigned int block, size_t len)
return ret == xfers ? 0 : -1;
}
+/**
+ * drm_do_probe_acpi_edid() - get EDID information via ACPI _DDC
+ * @data: struct drm_device
+ * @buf: EDID data buffer to be filled
+ * @block: 128 byte EDID block to start fetching from
+ * @len: EDID data buffer length to fetch
+ *
+ * Try to fetch EDID information by calling acpi_video_get_edid() function.
+ *
+ * Return: 0 on success or error code on failure.
+ */
+static int
+drm_do_probe_acpi_edid(void *data, u8 *buf, unsigned int block, size_t len)
+{
+ struct drm_device *ddev = data;
+ struct acpi_device *acpidev = ACPI_COMPANION(ddev->dev);
+ unsigned char start = block * EDID_LENGTH;
+ void *edid;
+ int r;
+
+ if (!acpidev)
+ return -ENODEV;
+
+ /* fetch the entire edid from BIOS */
+ r = acpi_video_get_edid(acpidev, ACPI_VIDEO_DISPLAY_LCD, -1, &edid);
+ if (r < 0) {
+ DRM_DEBUG_KMS("Failed to get EDID from ACPI: %d\n", r);
+ return -EINVAL;
+ }
+ if (len > r || start > r || start + len > r) {
+ r = EINVAL;
+ goto cleanup;
+ }
+
+ memcpy(buf, edid + start, len);
+ r = 0;
+cleanup:
+ kfree(edid);
+ return r;
+}
+
static void connector_bad_edid(struct drm_connector *connector,
const struct edid *edid, int num_blocks)
{
@@ -2643,6 +2685,37 @@ struct edid *drm_get_edid(struct drm_connector *connector,
}
EXPORT_SYMBOL(drm_get_edid);
+/**
+ * drm_get_acpi_edid - get EDID data, if available
+ * @connector: connector we're probing
+ *
+ * Use the BIOS to attempt to grab EDID data if possible. If found,
+ * attach it to the connector.
+ *
+ * Return: Pointer to valid EDID or NULL if we couldn't find any.
+ */
+struct edid *drm_get_acpi_edid(struct drm_connector *connector)
+{
+ struct edid *edid = NULL;
+
+ switch (connector->connector_type) {
+ case DRM_MODE_CONNECTOR_LVDS:
+ case DRM_MODE_CONNECTOR_eDP:
+ break;
+ default:
+ return NULL;
+ }
+
+ if (connector->force == DRM_FORCE_OFF)
+ return NULL;
+
+ edid = _drm_do_get_edid(connector, drm_do_probe_acpi_edid, connector->dev, NULL);
+
+ drm_connector_update_edid_property(connector, edid);
+ return edid;
+}
+EXPORT_SYMBOL(drm_get_acpi_edid);
+
/**
* drm_edid_read_custom - Read EDID data using given EDID block read function
* @connector: Connector to use
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index 518d1b8106c7..60fbdc06badc 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -412,6 +412,7 @@ struct edid *drm_do_get_edid(struct drm_connector *connector,
void *data);
struct edid *drm_get_edid(struct drm_connector *connector,
struct i2c_adapter *adapter);
+struct edid *drm_get_acpi_edid(struct drm_connector *connector);
u32 drm_edid_get_panel_id(struct i2c_adapter *adapter);
struct edid *drm_get_edid_switcheroo(struct drm_connector *connector,
struct i2c_adapter *adapter);
--
2.34.1
The ACPI specification allows for an EDID to be up to 512 bytes but
the _DDC EDID fetching code will only try up to 256 bytes.
Modify the code to instead start at 512 bytes and work it's way
down instead.
As _DDC is now called up to 4 times on a machine debugging messages
are noisier than necessary. Decrease from info to debug.
Link: https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/Apx_B_Video_Extensions/output-device-specific-methods.html#ddc-return-the-edid-for-this-device
Signed-off-by: Mario Limonciello <[email protected]>
---
v1->v2:
* Use for loop for acpi_video_get_edid()
* Use one of Rafael's suggestions for acpi_video_device_EDID()
* Decrease message level too
I was going to split this separately, but decided to keep it in the same
series in case there is any decision to change the interface to
acpi_video_get_edid() at the same series.
---
drivers/acpi/acpi_video.c | 25 +++++++++----------------
1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index 4afdda9db019..3bfd013e09d2 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -625,12 +625,9 @@ acpi_video_device_EDID(struct acpi_video_device *device,
if (!device)
return -ENODEV;
- if (length == 128)
- arg0.integer.value = 1;
- else if (length == 256)
- arg0.integer.value = 2;
- else
+ if (!length || (length % 128))
return -EINVAL;
+ arg0.integer.value = length / 128;
status = acpi_evaluate_object(device->dev->handle, "_DDC", &args, &buffer);
if (ACPI_FAILURE(status))
@@ -641,7 +638,8 @@ acpi_video_device_EDID(struct acpi_video_device *device,
if (obj && obj->type == ACPI_TYPE_BUFFER)
*edid = obj;
else {
- acpi_handle_info(device->dev->handle, "Invalid _DDC data\n");
+ acpi_handle_debug(device->dev->handle,
+ "Invalid _DDC data for length %ld\n", length);
status = -EFAULT;
kfree(obj);
}
@@ -1447,7 +1445,6 @@ int acpi_video_get_edid(struct acpi_device *device, int type, int device_id,
for (i = 0; i < video->attached_count; i++) {
video_device = video->attached_array[i].bind_info;
- length = 256;
if (!video_device)
continue;
@@ -1478,18 +1475,14 @@ int acpi_video_get_edid(struct acpi_device *device, int type, int device_id,
continue;
}
- status = acpi_video_device_EDID(video_device, &buffer, length);
-
- if (ACPI_FAILURE(status) || !buffer ||
- buffer->type != ACPI_TYPE_BUFFER) {
- length = 128;
+ for (length = 512; length > 0; length -= 128) {
status = acpi_video_device_EDID(video_device, &buffer,
length);
- if (ACPI_FAILURE(status) || !buffer ||
- buffer->type != ACPI_TYPE_BUFFER) {
- continue;
- }
+ if (ACPI_SUCCESS(status))
+ break;
}
+ if (!length)
+ continue;
*edid = buffer->buffer.pointer;
return length;
--
2.34.1
Rather than inventing a wrapper to acpi_video_get_edid() use the
one provided by drm. This fixes two problems:
1. A memory leak that the memory provided by the ACPI call was
never freed.
2. Validation of the BIOS provided blob.
Signed-off-by: Mario Limonciello <[email protected]>
---
v1->v2:
* New patch
---
drivers/gpu/drm/nouveau/nouveau_acpi.c | 27 ---------------------
drivers/gpu/drm/nouveau/nouveau_acpi.h | 2 --
drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
3 files changed, 1 insertion(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c
index 8f0c69aad248..de9daafb3fbb 100644
--- a/drivers/gpu/drm/nouveau/nouveau_acpi.c
+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c
@@ -360,33 +360,6 @@ void nouveau_unregister_dsm_handler(void) {}
void nouveau_switcheroo_optimus_dsm(void) {}
#endif
-void *
-nouveau_acpi_edid(struct drm_device *dev, struct drm_connector *connector)
-{
- struct acpi_device *acpidev;
- int type, ret;
- void *edid;
-
- switch (connector->connector_type) {
- case DRM_MODE_CONNECTOR_LVDS:
- case DRM_MODE_CONNECTOR_eDP:
- type = ACPI_VIDEO_DISPLAY_LCD;
- break;
- default:
- return NULL;
- }
-
- acpidev = ACPI_COMPANION(dev->dev);
- if (!acpidev)
- return NULL;
-
- ret = acpi_video_get_edid(acpidev, type, -1, &edid);
- if (ret < 0)
- return NULL;
-
- return kmemdup(edid, EDID_LENGTH, GFP_KERNEL);
-}
-
bool nouveau_acpi_video_backlight_use_native(void)
{
return acpi_video_backlight_use_native();
diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.h b/drivers/gpu/drm/nouveau/nouveau_acpi.h
index e39dd8b94b8b..6a3def8e6cca 100644
--- a/drivers/gpu/drm/nouveau/nouveau_acpi.h
+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.h
@@ -10,7 +10,6 @@ bool nouveau_is_v1_dsm(void);
void nouveau_register_dsm_handler(void);
void nouveau_unregister_dsm_handler(void);
void nouveau_switcheroo_optimus_dsm(void);
-void *nouveau_acpi_edid(struct drm_device *, struct drm_connector *);
bool nouveau_acpi_video_backlight_use_native(void);
void nouveau_acpi_video_register_backlight(void);
#else
@@ -19,7 +18,6 @@ static inline bool nouveau_is_v1_dsm(void) { return false; };
static inline void nouveau_register_dsm_handler(void) {}
static inline void nouveau_unregister_dsm_handler(void) {}
static inline void nouveau_switcheroo_optimus_dsm(void) {}
-static inline void *nouveau_acpi_edid(struct drm_device *dev, struct drm_connector *connector) { return NULL; }
static inline bool nouveau_acpi_video_backlight_use_native(void) { return true; }
static inline void nouveau_acpi_video_register_backlight(void) {}
#endif
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index 856b3ef5edb8..746571d4cac0 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -713,7 +713,7 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force)
* valid - it's not (rh#613284)
*/
if (nv_encoder->dcb->lvdsconf.use_acpi_for_edid) {
- edid = nouveau_acpi_edid(dev, connector);
+ edid = drm_get_acpi_edid(connector);
if (edid) {
status = connector_status_connected;
goto out;
--
2.34.1
Some manufacturers have intentionally put an EDID that differs from
the EDID on the internal panel on laptops.
Attempt to fetch this EDID if it exists and prefer it over the EDID
that is provided by the panel.
Signed-off-by: Mario Limonciello <[email protected]>
---
v2:
* Use drm helper which will run more validation
* Move eDP check to DRM helper
* Add module parameter
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 4 ++++
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 8 ++++++++
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 ++++++++--
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 9 ++++++---
5 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 3d8a48f46b01..5d5be3e20687 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -217,6 +217,7 @@ extern int amdgpu_smartshift_bias;
extern int amdgpu_use_xgmi_p2p;
extern int amdgpu_mtype_local;
extern bool enforce_isolation;
+extern bool acpi_edid;
#ifdef CONFIG_HSA_AMD
extern int sched_policy;
extern bool debug_evictions;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
index 9caba10315a8..6aa8cc431abe 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -278,6 +278,10 @@ static void amdgpu_connector_get_edid(struct drm_connector *connector)
struct amdgpu_device *adev = drm_to_adev(dev);
struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
+ /* if the BIOS specifies the EDID via _DDC, prefer this */
+ if (acpi_edid && !amdgpu_connector->edid)
+ amdgpu_connector->edid = drm_get_acpi_edid(connector);
+
if (amdgpu_connector->edid)
return;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index cc69005f5b46..be7a4da85a8b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -166,6 +166,7 @@ uint amdgpu_sdma_phase_quantum = 32;
char *amdgpu_disable_cu;
char *amdgpu_virtual_display;
bool enforce_isolation;
+bool acpi_edid = true;
/*
* OverDrive(bit 14) disabled by default
* GFX DCS(bit 19) disabled by default
@@ -990,6 +991,13 @@ MODULE_PARM_DESC(wbrf,
"Enable Wifi RFI interference mitigation (0 = disabled, 1 = enabled, -1 = auto(default)");
module_param_named(wbrf, amdgpu_wbrf, int, 0444);
+/**
+ * DOC: acpi_edid (bool)
+ * Try to fetch EDID for eDP display from BIOS using ACPI _DDC method.
+ */
+module_param(acpi_edid, bool, 0444);
+MODULE_PARM_DESC(acpi_edid, "Fetch EDID for eDP display from BIOS");
+
/* These devices are not supported by amdgpu.
* They are supported by the mach64, r128, radeon drivers
*/
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 202c6ad443a3..688d615c6687 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6589,7 +6589,11 @@ static void amdgpu_dm_connector_funcs_force(struct drm_connector *connector)
struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
struct dc_link *dc_link = aconnector->dc_link;
struct dc_sink *dc_em_sink = aconnector->dc_em_sink;
- struct edid *edid;
+ struct edid *edid = NULL;
+
+ /* prefer ACPI over panel for eDP */
+ if (acpi_edid)
+ edid = drm_get_acpi_edid(connector);
/*
* Note: drm_get_edid gets edid in the following order:
@@ -6597,7 +6601,9 @@ static void amdgpu_dm_connector_funcs_force(struct drm_connector *connector)
* 2) firmware EDID if set via edid_firmware module parameter
* 3) regular DDC read.
*/
- edid = drm_get_edid(connector, &amdgpu_connector->ddc_bus->aux.ddc);
+ if (!edid)
+ edid = drm_get_edid(connector, &amdgpu_connector->ddc_bus->aux.ddc);
+
if (!edid) {
DRM_ERROR("No EDID found on connector: %s.\n", connector->name);
return;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
index 85b7f58a7f35..cc39b1c14aa8 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
@@ -899,7 +899,7 @@ enum dc_edid_status dm_helpers_read_local_edid(
struct i2c_adapter *ddc;
int retry = 3;
enum dc_edid_status edid_status;
- struct edid *edid;
+ struct edid *edid = NULL;
if (link->aux_mode)
ddc = &aconnector->dm_dp_aux.aux.ddc;
@@ -910,8 +910,11 @@ enum dc_edid_status dm_helpers_read_local_edid(
* do check sum and retry to make sure read correct edid.
*/
do {
-
- edid = drm_get_edid(&aconnector->base, ddc);
+ /* prefer ACPI over panel for eDP */
+ if (acpi_edid)
+ edid = drm_get_acpi_edid(connector);
+ if (!edid)
+ edid = drm_get_edid(&aconnector->base, ddc);
/* DP Compliance Test 4.2.2.6 */
if (link->aux_mode && connector->edid_corrupt)
--
2.34.1
Hi Mario,
kernel test robot noticed the following build errors:
[auto build test ERROR on rafael-pm/linux-next]
[also build test ERROR on rafael-pm/acpi-bus linus/master v6.8-rc2 next-20240131]
[cannot apply to drm-misc/drm-misc-next rafael-pm/devprop]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPI-video-Handle-fetching-EDID-that-is-longer-than-256-bytes/20240131-032909
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link: https://lore.kernel.org/r/20240130192608.11666-3-mario.limonciello%40amd.com
patch subject: [PATCH v2 2/4] drm: Add drm_get_acpi_edid() helper
config: i386-buildonly-randconfig-002-20240131 (https://download.01.org/0day-ci/archive/20240131/[email protected]/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240131/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
>> drivers/platform/x86/dell/dell-wmi-ddv.c:647:12: error: call to undeclared function 'acpi_device_uid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
647 | uid_str = acpi_device_uid(acpi_dev);
| ^
>> drivers/platform/x86/dell/dell-wmi-ddv.c:647:10: error: incompatible integer to pointer conversion assigning to 'const char *' from 'int' [-Wint-conversion]
647 | uid_str = acpi_device_uid(acpi_dev);
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/platform/x86/dell/dell-wmi-ddv.c:660:35: error: call to undeclared function 'to_acpi_device'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
660 | ret = dell_wmi_ddv_battery_index(to_acpi_device(dev->parent), &index);
| ^
>> drivers/platform/x86/dell/dell-wmi-ddv.c:660:35: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'struct acpi_device *' [-Wint-conversion]
660 | ret = dell_wmi_ddv_battery_index(to_acpi_device(dev->parent), &index);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/platform/x86/dell/dell-wmi-ddv.c:643:59: note: passing argument to parameter 'acpi_dev' here
643 | static int dell_wmi_ddv_battery_index(struct acpi_device *acpi_dev, u32 *index)
| ^
drivers/platform/x86/dell/dell-wmi-ddv.c:679:35: error: call to undeclared function 'to_acpi_device'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
679 | ret = dell_wmi_ddv_battery_index(to_acpi_device(dev->parent), &index);
| ^
drivers/platform/x86/dell/dell-wmi-ddv.c:679:35: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'struct acpi_device *' [-Wint-conversion]
679 | ret = dell_wmi_ddv_battery_index(to_acpi_device(dev->parent), &index);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/platform/x86/dell/dell-wmi-ddv.c:643:59: note: passing argument to parameter 'acpi_dev' here
643 | static int dell_wmi_ddv_battery_index(struct acpi_device *acpi_dev, u32 *index)
| ^
drivers/platform/x86/dell/dell-wmi-ddv.c:705:35: error: call to undeclared function 'to_acpi_device'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
705 | ret = dell_wmi_ddv_battery_index(to_acpi_device(battery->dev.parent), &index);
| ^
drivers/platform/x86/dell/dell-wmi-ddv.c:705:35: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'struct acpi_device *' [-Wint-conversion]
705 | ret = dell_wmi_ddv_battery_index(to_acpi_device(battery->dev.parent), &index);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/platform/x86/dell/dell-wmi-ddv.c:643:59: note: passing argument to parameter 'acpi_dev' here
643 | static int dell_wmi_ddv_battery_index(struct acpi_device *acpi_dev, u32 *index)
| ^
8 errors generated.
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for ACPI_WMI
Depends on [n]: X86_PLATFORM_DEVICES [=y] && ACPI [=n]
Selected by [m]:
- DRM [=m] && HAS_IOMEM [=y] && (AGP [=n] || AGP [=n]=n) && !EMULATED_CMPXCHG && HAS_DMA [=y] && X86 [=y]
vim +660 drivers/platform/x86/dell/dell-wmi-ddv.c
3b7eeff93d2912 Armin Wolf 2023-02-09 642
a77272c1604186 Armin Wolf 2022-09-27 643 static int dell_wmi_ddv_battery_index(struct acpi_device *acpi_dev, u32 *index)
a77272c1604186 Armin Wolf 2022-09-27 644 {
a77272c1604186 Armin Wolf 2022-09-27 645 const char *uid_str;
a77272c1604186 Armin Wolf 2022-09-27 646
a77272c1604186 Armin Wolf 2022-09-27 @647 uid_str = acpi_device_uid(acpi_dev);
a77272c1604186 Armin Wolf 2022-09-27 648 if (!uid_str)
a77272c1604186 Armin Wolf 2022-09-27 649 return -ENODEV;
a77272c1604186 Armin Wolf 2022-09-27 650
a77272c1604186 Armin Wolf 2022-09-27 651 return kstrtou32(uid_str, 10, index);
a77272c1604186 Armin Wolf 2022-09-27 652 }
a77272c1604186 Armin Wolf 2022-09-27 653
a77272c1604186 Armin Wolf 2022-09-27 654 static ssize_t temp_show(struct device *dev, struct device_attribute *attr, char *buf)
a77272c1604186 Armin Wolf 2022-09-27 655 {
a77272c1604186 Armin Wolf 2022-09-27 656 struct dell_wmi_ddv_data *data = container_of(attr, struct dell_wmi_ddv_data, temp_attr);
a77272c1604186 Armin Wolf 2022-09-27 657 u32 index, value;
a77272c1604186 Armin Wolf 2022-09-27 658 int ret;
a77272c1604186 Armin Wolf 2022-09-27 659
a77272c1604186 Armin Wolf 2022-09-27 @660 ret = dell_wmi_ddv_battery_index(to_acpi_device(dev->parent), &index);
a77272c1604186 Armin Wolf 2022-09-27 661 if (ret < 0)
a77272c1604186 Armin Wolf 2022-09-27 662 return ret;
a77272c1604186 Armin Wolf 2022-09-27 663
a77272c1604186 Armin Wolf 2022-09-27 664 ret = dell_wmi_ddv_query_integer(data->wdev, DELL_DDV_BATTERY_TEMPERATURE, index, &value);
a77272c1604186 Armin Wolf 2022-09-27 665 if (ret < 0)
a77272c1604186 Armin Wolf 2022-09-27 666 return ret;
a77272c1604186 Armin Wolf 2022-09-27 667
0331b1b0ba6537 Armin Wolf 2023-02-18 668 /* Use 2731 instead of 2731.5 to avoid unnecessary rounding */
0331b1b0ba6537 Armin Wolf 2023-02-18 669 return sysfs_emit(buf, "%d\n", value - 2731);
a77272c1604186 Armin Wolf 2022-09-27 670 }
a77272c1604186 Armin Wolf 2022-09-27 671
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Mario,
kernel test robot noticed the following build warnings:
[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/acpi-bus linus/master v6.8-rc2 next-20240131]
[cannot apply to drm-misc/drm-misc-next rafael-pm/devprop]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPI-video-Handle-fetching-EDID-that-is-longer-than-256-bytes/20240131-032909
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link: https://lore.kernel.org/r/20240130192608.11666-3-mario.limonciello%40amd.com
patch subject: [PATCH v2 2/4] drm: Add drm_get_acpi_edid() helper
config: x86_64-kismet-CONFIG_ACPI_PLATFORM_PROFILE-CONFIG_HP_WMI-0-0 (https://download.01.org/0day-ci/archive/20240131/[email protected]/config)
reproduce: (https://download.01.org/0day-ci/archive/20240131/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
kismet warnings: (new ones prefixed by >>)
>> kismet: WARNING: unmet direct dependencies detected for ACPI_PLATFORM_PROFILE when selected by HP_WMI
.config:101:warning: symbol value 'n' invalid for RADIO_RTRACK2_PORT
.config:223:warning: symbol value 'n' invalid for AIC79XX_CMDS_PER_DEVICE
.config:240:warning: symbol value 'n' invalid for SATA_MOBILE_LPM_POLICY
.config:310:warning: symbol value 'n' invalid for DRM_I915_TIMESLICE_DURATION
.config:321:warning: symbol value 'n' invalid for PANEL_LCD_PIN_SDA
.config:345:warning: symbol value 'n' invalid for PSTORE_BLK_MAX_REASON
.config:457:warning: symbol value 'n' invalid for KFENCE_SAMPLE_INTERVAL
.config:633:warning: symbol value 'n' invalid for CRYPTO_DEV_QCE_SW_MAX_LEN
.config:651:warning: symbol value 'n' invalid for DRM_XE_JOB_TIMEOUT_MIN
.config:674:warning: symbol value 'n' invalid for FB_GBE_MEM
.config:739:warning: symbol value 'n' invalid for PANEL_LCD_CHARSET
.config:836:warning: symbol value 'n' invalid for SND_AC97_POWER_SAVE_DEFAULT
.config:851:warning: symbol value 'n' invalid for MAGIC_SYSRQ_DEFAULT_ENABLE
.config:871:warning: symbol value 'n' invalid for DRM_I915_MAX_REQUEST_BUSYWAIT
.config:900:warning: symbol value 'n' invalid for SND_AT73C213_TARGET_BITRATE
.config:951:warning: symbol value 'n' invalid for DRM_XE_PREEMPT_TIMEOUT_MIN
.config:961:warning: symbol value 'n' invalid for NET_EMATCH_STACK
.config:962:warning: symbol value 'n' invalid for VMCP_CMA_SIZE
.config:1002:warning: symbol value 'n' invalid for SQUASHFS_FRAGMENT_CACHE_SIZE
.config:1113:warning: symbol value 'n' invalid for FB_OMAP2_NUM_FBS
.config:1237:warning: symbol value 'n' invalid for MTDRAM_ERASE_SIZE
.config:1253:warning: symbol value 'n' invalid for CFAG12864B_RATE
.config:1290:warning: symbol value 'n' invalid for SERIAL_UARTLITE_NR_UARTS
.config:1468:warning: symbol value 'n' invalid for LEGACY_PTY_COUNT
.config:1528:warning: symbol value 'n' invalid for RAPIDIO_DISC_TIMEOUT
.config:1568:warning: symbol value 'n' invalid for FAT_DEFAULT_CODEPAGE
.config:1608:warning: symbol value 'n' invalid for WATCHDOG_OPEN_TIMEOUT
.config:1615:warning: symbol value 'n' invalid for AIC7XXX_RESET_DELAY_MS
.config:1638:warning: symbol value 'n' invalid for KCOV_IRQ_AREA_SIZE
.config:1850:warning: symbol value 'n' invalid for IBM_EMAC_POLL_WEIGHT
.config:1903:warning: symbol value 'n' invalid for DRM_I915_STOP_TIMEOUT
.config:2189:warning: symbol value 'n' invalid for SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST_NUM
.config:2246:warning: symbol value 'n' invalid for SND_HDA_PREALLOC_SIZE
.config:2358:warning: symbol value 'n' invalid for DRM_XE_TIMESLICE_MAX
.config:2452:warning: symbol value 'n' invalid for PANEL_LCD_BWIDTH
.config:2554:warning: symbol value 'n' invalid for PSTORE_BLK_CONSOLE_SIZE
.config:2701:warning: symbol value 'n' invalid for PANEL_PARPORT
.config:2763:warning: symbol value 'n' invalid for BOOKE_WDT_DEFAULT_TIMEOUT
.config:2798:warning: symbol value 'n' invalid for NOUVEAU_DEBUG_DEFAULT
.config:2996:warning: symbol value 'n' invalid for KCSAN_REPORT_ONCE_IN_MS
.config:3107:warning: symbol value 'n' invalid for KCSAN_UDELAY_INTERRUPT
.config:3132:warning: symbol value 'n' invalid for PANEL_LCD_PIN_BL
.config:3152:warning: symbol value 'n' invalid for DEBUG_OBJECTS_ENABLE_DEFAULT
.config:3159:warning: symbol value 'n' invalid for INITRAMFS_ROOT_GID
.config:3236:warning: symbol value 'n' invalid for PANEL_LCD_PIN_E
.config:3278:warning: symbol value 'n' invalid for ATM_FORE200E_TX_RETRY
.config:3321:warning: symbol value 'n' invalid for FB_OMAP2_DSS_MIN_FCK_PER_PCK
.config:3414:warning: symbol value 'n' invalid for STACK_MAX_DEFAULT_SIZE_MB
.config:3437:warning: symbol value 'n' invalid for KCSAN_UDELAY_TASK
.config:3468:warning: symbol value 'n' invalid for BLK_DEV_LOOP_MIN_COUNT
.config:3692:warning: symbol value 'n' invalid for MMC_BLOCK_MINORS
.config:3695:warning: symbol value 'n' invalid for INET_TABLE_PERTURB_ORDER
.config:3696:warning: symbol value 'n' invalid for CMA_SIZE_MBYTES
.config:3739:warning: symbol value 'n' invalid for SCSI_NCR53C8XX_SYNC
.config:3773:warning: symbol value 'n' invalid for SERIAL_MCF_BAUDRATE
.config:3870:warning: symbol value 'n' invalid for DE2104X_DSL
.config:3887:warning: symbol value 'n' invalid for BLK_DEV_RAM_COUNT
.config:3963:warning: symbol value 'n' invalid for AIC7XXX_DEBUG_MASK
.config:4102:warning: symbol value 'n' invalid for IP_VS_SH_TAB_BITS
.config:4257:warning: symbol value 'n' invalid for USBIP_VHCI_HC_PORTS
.config:4296:warning: symbol value 'n' invalid for AIC79XX_RESET_DELAY_MS
.config:4599:warning: symbol value 'n' invalid for RIONET_RX_SIZE
.config:4610:warning: symbol value 'n' invalid for RADIO_TYPHOON_PORT
.config:4730:warning: symbol value 'n' invalid for SERIAL_TXX9_NR_UARTS
.config:4819:warning: symbol value 'n' invalid for MTRR_SANITIZER_SPARE_REG_NR_DEFAULT
.config:4918:warning: symbol value 'n' invalid for IBM_EMAC_TXB
.config:5343:warning: symbol value 'n' invalid for CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD
.config:5415:warning: symbol value 'n' invalid for DRM_I915_FENCE_TIMEOUT
.config:5437:warning: symbol value 'n' invalid for TTY_PRINTK_LEVEL
.config:5601:warning: symbol value 'n' invalid for MIPS_EJTAG_FDC_KGDB_CHAN
.config:5609:warning: symbol value 'n' invalid for PPC_EARLY_DEBUG_EHV_BC_HANDLE
.config:5700:warning: symbol value 'n' invalid for KDB_DEFAULT_ENABLE
.config:5718:warning: symbol value 'n' invalid for SERIAL_ALTERA_UART_MAXPORTS
.config:5871:warning: symbol value 'n' invalid for FTRACE_RECORD_RECURSION_SIZE
.config:5992:warning: symbol value 'n' invalid for PANEL_LCD_HWIDTH
.config:6028:warning: symbol value 'n' invalid for LOCKDEP_CHAINS_BITS
.config:6121:warning: symbol value 'n' invalid for DRM_I915_HEARTBEAT_INTERVAL
.config:6130:warning: symbol value 'n' invalid for KCSAN_SKIP_WATCH
.config:6140:warning: symbol value 'n' invalid for EFI_MAX_FAKE_MEM
.config:6156:warning: symbol value 'n' invalid for PSTORE_BLK_KMSG_SIZE
.config:6336:warning: symbol value 'n' invalid for KVM_MAX_NR_VCPUS
.config:6443:warning: symbol value 'n' invalid for SERIAL_SH_SCI_NR_UARTS
.config:6483:warning: symbol value 'n' invalid for IP_VS_MH_TAB_INDEX
.config:6485:warning: symbol value 'n' invalid for ARCH_MMAP_RND_COMPAT_BITS
.config:6661:warning: symbol value 'n' invalid for RADIO_TRUST_PORT
.config:6684:warning: symbol value 'n' invalid for X86_AMD_PSTATE_DEFAULT_MODE
.config:6771:warning: symbol value 'n' invalid for ZSMALLOC_CHAIN_SIZE
.config:6867:warning: symbol value 'n' invalid for PANEL_LCD_PIN_RW
.config:6978:warning: symbol value 'n' invalid for SCSI_NCR53C8XX_MAX_TAGS
.config:7002:warning: symbol value 'n' invalid for SCSI_SYM53C8XX_DMA_ADDRESSING_MODE
.config:7041:warning: symbol value 'n' invalid for SERIAL_ALTERA_UART_BAUDRATE
.config:7080:warning: symbol value 'n' invalid for CMA_SIZE_PERCENTAGE
.config:7091:warning: symbol value 'n' invalid for LOCKDEP_BITS
.config:7236:warning: symbol value 'n' invalid for DRM_XE_TIMESLICE_MIN
.config:7398:warning: symbol value 'n' invalid for SND_MAX_CARDS
.config:7400:warning: symbol value 'n' invalid for IBM_EMAC_RXB
.config:7745:warning: symbol value 'n' invalid for SERIAL_ARC_NR_PORTS
.config:7808:warning: symbol value 'n' invalid for PANEL_LCD
.config:7916:warning: symbol value 'n' invalid for DRM_XE_PREEMPT_TIMEOUT_MAX
.config:7917:warning: symbol value 'n' invalid for SCSI_MPT3SAS_MAX_SGE
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Mario,
kernel test robot noticed the following build warnings:
[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/acpi-bus linus/master v6.8-rc2 next-20240131]
[cannot apply to drm-misc/drm-misc-next rafael-pm/devprop]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPI-video-Handle-fetching-EDID-that-is-longer-than-256-bytes/20240131-032909
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link: https://lore.kernel.org/r/20240130192608.11666-3-mario.limonciello%40amd.com
patch subject: [PATCH v2 2/4] drm: Add drm_get_acpi_edid() helper
config: i386-buildonly-randconfig-001-20240131 (https://download.01.org/0day-ci/archive/20240131/[email protected]/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240131/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All warnings (new ones prefixed by >>):
>> drivers/acpi/acpi_video.c:642:44: warning: format specifies type 'long' but the argument has type 'ssize_t' (aka 'int') [-Wformat]
642 | "Invalid _DDC data for length %ld\n", length);
| ~~~ ^~~~~~
| %zd
include/linux/acpi.h:1219:30: note: expanded from macro 'acpi_handle_debug'
1219 | handle, pr_fmt(fmt), ##__VA_ARGS__)
| ~~~ ^~~~~~~~~~~
include/linux/dynamic_debug.h:250:59: note: expanded from macro '_dynamic_func_call'
250 | _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__)
| ^~~~~~~~~~~
include/linux/dynamic_debug.h:248:65: note: expanded from macro '_dynamic_func_call_cls'
248 | __dynamic_func_call_cls(__UNIQUE_ID(ddebug), cls, fmt, func, ##__VA_ARGS__)
| ^~~~~~~~~~~
include/linux/dynamic_debug.h:224:15: note: expanded from macro '__dynamic_func_call_cls'
224 | func(&id, ##__VA_ARGS__); \
| ^~~~~~~~~~~
1 warning generated.
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for ACPI_WMI
Depends on [n]: X86_PLATFORM_DEVICES [=n] && ACPI [=y]
Selected by [y]:
- DRM [=y] && HAS_IOMEM [=y] && (AGP [=n] || AGP [=n]=n) && !EMULATED_CMPXCHG && HAS_DMA [=y] && X86 [=y]
vim +642 drivers/acpi/acpi_video.c
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 612
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 613 static int
4be44fcd3bf648 drivers/acpi/video.c Len Brown 2005-08-05 614 acpi_video_device_EDID(struct acpi_video_device *device,
4be44fcd3bf648 drivers/acpi/video.c Len Brown 2005-08-05 615 union acpi_object **edid, ssize_t length)
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 616 {
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 617 int status;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 618 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 619 union acpi_object *obj;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 620 union acpi_object arg0 = { ACPI_TYPE_INTEGER };
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 621 struct acpi_object_list args = { 1, &arg0 };
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 622
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 623
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 624 *edid = NULL;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 625
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 626 if (!device)
d550d98d331737 drivers/acpi/video.c Patrick Mochel 2006-06-27 627 return -ENODEV;
25f97b27045655 drivers/acpi/acpi_video.c Mario Limonciello 2024-01-30 628 if (!length || (length % 128))
d550d98d331737 drivers/acpi/video.c Patrick Mochel 2006-06-27 629 return -EINVAL;
25f97b27045655 drivers/acpi/acpi_video.c Mario Limonciello 2024-01-30 630 arg0.integer.value = length / 128;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 631
901302688cb85b drivers/acpi/video.c Patrick Mochel 2006-05-19 632 status = acpi_evaluate_object(device->dev->handle, "_DDC", &args, &buffer);
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 633 if (ACPI_FAILURE(status))
d550d98d331737 drivers/acpi/video.c Patrick Mochel 2006-06-27 634 return -ENODEV;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 635
50dd096973f1d9 drivers/acpi/video.c Jan Engelhardt 2006-10-01 636 obj = buffer.pointer;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 637
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 638 if (obj && obj->type == ACPI_TYPE_BUFFER)
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 639 *edid = obj;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 640 else {
25f97b27045655 drivers/acpi/acpi_video.c Mario Limonciello 2024-01-30 641 acpi_handle_debug(device->dev->handle,
25f97b27045655 drivers/acpi/acpi_video.c Mario Limonciello 2024-01-30 @642 "Invalid _DDC data for length %ld\n", length);
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 643 status = -EFAULT;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 644 kfree(obj);
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 645 }
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 646
d550d98d331737 drivers/acpi/video.c Patrick Mochel 2006-06-27 647 return status;
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 648 }
^1da177e4c3f41 drivers/acpi/video.c Linus Torvalds 2005-04-16 649
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Mario,
kernel test robot noticed the following build errors:
[auto build test ERROR on rafael-pm/linux-next]
[also build test ERROR on rafael-pm/acpi-bus linus/master v6.8-rc2 next-20240131]
[cannot apply to drm-misc/drm-misc-next rafael-pm/devprop]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPI-video-Handle-fetching-EDID-that-is-longer-than-256-bytes/20240131-032909
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link: https://lore.kernel.org/r/20240130192608.11666-3-mario.limonciello%40amd.com
patch subject: [PATCH v2 2/4] drm: Add drm_get_acpi_edid() helper
config: i386-buildonly-randconfig-003-20240131 (https://download.01.org/0day-ci/archive/20240131/[email protected]/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240131/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All error/warnings (new ones prefixed by >>):
>> drivers/platform/x86/wmi.c:68:2: error: unknown type name 'wmi_notify_handler'; did you mean 'acpi_notify_handler'?
68 | wmi_notify_handler handler;
| ^~~~~~~~~~~~~~~~~~
| acpi_notify_handler
include/acpi/actypes.h:1061:8: note: 'acpi_notify_handler' declared here
1061 | void (*acpi_notify_handler) (acpi_handle device, u32 value, void *context);
| ^
>> drivers/platform/x86/wmi.c:163:30: error: incomplete definition of type 'struct acpi_device'
163 | handle = wblock->acpi_device->handle;
| ~~~~~~~~~~~~~~~~~~~^
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
>> drivers/platform/x86/wmi.c:166:11: error: call to undeclared function 'acpi_execute_simple_method'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
166 | status = acpi_execute_simple_method(handle, method, enable);
| ^
drivers/platform/x86/wmi.c:166:11: note: did you mean 'acpi_execute_reg_methods'?
include/acpi/acpixf.h:662:8: note: 'acpi_execute_reg_methods' declared here
662 | acpi_execute_reg_methods(acpi_handle device,
| ^
include/acpi/platform/aclinux.h:93:21: note: expanded from macro 'ACPI_EXTERNAL_RETURN_STATUS'
93 | static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);}
| ^
drivers/platform/x86/wmi.c:210:49: error: incomplete definition of type 'struct acpi_device'
210 | return acpi_evaluate_object(wblock->acpi_device->handle, "_WED", &input, out);
| ~~~~~~~~~~~~~~~~~~~^
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
>> drivers/platform/x86/wmi.c:282:5: warning: no previous prototype for function 'wmi_instance_count' [-Wmissing-prototypes]
282 | int wmi_instance_count(const char *guid_string)
| ^
drivers/platform/x86/wmi.c:282:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
282 | int wmi_instance_count(const char *guid_string)
| ^
| static
>> drivers/platform/x86/wmi.c:326:13: warning: no previous prototype for function 'wmi_evaluate_method' [-Wmissing-prototypes]
326 | acpi_status wmi_evaluate_method(const char *guid_string, u8 instance, u32 method_id,
| ^
drivers/platform/x86/wmi.c:326:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
326 | acpi_status wmi_evaluate_method(const char *guid_string, u8 instance, u32 method_id,
| ^
| static
drivers/platform/x86/wmi.c:368:30: error: incomplete definition of type 'struct acpi_device'
368 | handle = wblock->acpi_device->handle;
| ~~~~~~~~~~~~~~~~~~~^
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
drivers/platform/x86/wmi.c:412:30: error: incomplete definition of type 'struct acpi_device'
412 | handle = wblock->acpi_device->handle;
| ~~~~~~~~~~~~~~~~~~~^
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
drivers/platform/x86/wmi.c:441:15: error: call to undeclared function 'acpi_execute_simple_method'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
441 | wc_status = acpi_execute_simple_method(handle, wc_method, 1);
| ^
drivers/platform/x86/wmi.c:459:3: error: call to undeclared function 'acpi_execute_simple_method'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
459 | acpi_execute_simple_method(handle, wc_method, 0);
| ^
>> drivers/platform/x86/wmi.c:475:13: warning: no previous prototype for function 'wmi_query_block' [-Wmissing-prototypes]
475 | acpi_status wmi_query_block(const char *guid_string, u8 instance,
| ^
drivers/platform/x86/wmi.c:475:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
475 | acpi_status wmi_query_block(const char *guid_string, u8 instance,
| ^
| static
>> drivers/platform/x86/wmi.c:526:13: warning: no previous prototype for function 'wmi_set_block' [-Wmissing-prototypes]
526 | acpi_status wmi_set_block(const char *guid_string, u8 instance, const struct acpi_buffer *in)
| ^
drivers/platform/x86/wmi.c:526:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
526 | acpi_status wmi_set_block(const char *guid_string, u8 instance, const struct acpi_buffer *in)
| ^
| static
drivers/platform/x86/wmi.c:555:42: error: incomplete definition of type 'struct acpi_device'
555 | acpi_handle handle = wblock->acpi_device->handle;
| ~~~~~~~~~~~~~~~~~~~^
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
drivers/platform/x86/wmi.c:596:12: error: unknown type name 'wmi_notify_handler'; did you mean 'acpi_notify_handler'?
596 | wmi_notify_handler handler,
| ^~~~~~~~~~~~~~~~~~
| acpi_notify_handler
include/acpi/actypes.h:1061:8: note: 'acpi_notify_handler' declared here
1061 | void (*acpi_notify_handler) (acpi_handle device, u32 value, void *context);
| ^
>> drivers/platform/x86/wmi.c:595:13: warning: no previous prototype for function 'wmi_install_notify_handler' [-Wmissing-prototypes]
595 | acpi_status wmi_install_notify_handler(const char *guid,
| ^
drivers/platform/x86/wmi.c:595:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
595 | acpi_status wmi_install_notify_handler(const char *guid,
| ^
| static
>> drivers/platform/x86/wmi.c:637:13: warning: no previous prototype for function 'wmi_remove_notify_handler' [-Wmissing-prototypes]
637 | acpi_status wmi_remove_notify_handler(const char *guid)
| ^
drivers/platform/x86/wmi.c:637:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
637 | acpi_status wmi_remove_notify_handler(const char *guid)
| ^
| static
>> drivers/platform/x86/wmi.c:679:13: warning: no previous prototype for function 'wmi_get_event_data' [-Wmissing-prototypes]
679 | acpi_status wmi_get_event_data(u32 event, struct acpi_buffer *out)
| ^
drivers/platform/x86/wmi.c:679:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
679 | acpi_status wmi_get_event_data(u32 event, struct acpi_buffer *out)
| ^
| static
>> drivers/platform/x86/wmi.c:706:6: warning: no previous prototype for function 'wmi_has_guid' [-Wmissing-prototypes]
706 | bool wmi_has_guid(const char *guid_string)
| ^
drivers/platform/x86/wmi.c:706:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
706 | bool wmi_has_guid(const char *guid_string)
| ^
| static
>> drivers/platform/x86/wmi.c:739:8: error: call to undeclared function 'acpi_device_uid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
739 | uid = acpi_device_uid(wblock->acpi_device);
| ^
>> drivers/platform/x86/wmi.c:739:6: error: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]
739 | uid = acpi_device_uid(wblock->acpi_device);
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/platform/x86/wmi.c:728:7: warning: no previous prototype for function 'wmi_get_acpi_device_uid' [-Wmissing-prototypes]
728 | char *wmi_get_acpi_device_uid(const char *guid_string)
| ^
drivers/platform/x86/wmi.c:728:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
728 | char *wmi_get_acpi_device_uid(const char *guid_string)
| ^
| static
drivers/platform/x86/wmi.c:1003:33: error: incomplete definition of type 'struct acpi_device'
1003 | result = get_subobj_info(device->handle, method, &info);
| ~~~~~~^
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
>> drivers/platform/x86/wmi.c:1030:6: error: call to undeclared function 'acpi_has_method'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1030 | if (acpi_has_method(device->handle, method))
| ^
drivers/platform/x86/wmi.c:1030:6: note: did you mean 'acpi_has_watchdog'?
include/linux/acpi.h:1445:20: note: 'acpi_has_watchdog' declared here
1445 | static inline bool acpi_has_watchdog(void) { return false; }
| ^
drivers/platform/x86/wmi.c:1030:28: error: incomplete definition of type 'struct acpi_device'
1030 | if (acpi_has_method(device->handle, method))
| ~~~~~~^
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
drivers/platform/x86/wmi.c:1087:20: error: incomplete definition of type 'struct acpi_device'
1087 | dev_warn(&device->dev, "duplicate WMI GUID %pUL (first instance was on %s)\n",
| ~~~~~~^
include/linux/dev_printk.h:146:49: note: expanded from macro 'dev_warn'
146 | dev_printk_index_wrap(_dev_warn, KERN_WARNING, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~
include/linux/dev_printk.h:110:11: note: expanded from macro 'dev_printk_index_wrap'
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
| ^~~
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
drivers/platform/x86/wmi.c:1088:41: error: incomplete definition of type 'struct acpi_device'
1088 | guid, dev_name(&wblock->acpi_device->dev));
| ~~~~~~~~~~~~~~~~~~~^
include/linux/dev_printk.h:146:70: note: expanded from macro 'dev_warn'
146 | dev_printk_index_wrap(_dev_warn, KERN_WARNING, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~~~~~
include/linux/dev_printk.h:110:23: note: expanded from macro 'dev_printk_index_wrap'
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
| ^~~~~~~~~~~
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
drivers/platform/x86/wmi.c:1110:38: error: incomplete definition of type 'struct acpi_device'
1110 | status = acpi_evaluate_object(device->handle, "_WDG", NULL, &out);
| ~~~~~~^
include/linux/acpi.h:795:8: note: forward declaration of 'struct acpi_device'
795 | struct acpi_device;
| ^
>> drivers/platform/x86/wmi.c:1189:12: error: call to undeclared function 'ec_read'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1189 | result = ec_read(address, &temp);
| ^
drivers/platform/x86/wmi.c:1189:12: note: did you mean 'up_read'?
include/linux/rwsem.h:198:13: note: 'up_read' declared here
198 | extern void up_read(struct rw_semaphore *sem);
| ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
9 warnings and 20 errors generated.
--
>> drivers/platform/x86/dell/dell-wmi-led.c:71:11: error: call to undeclared function 'wmi_evaluate_method'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
71 | status = wmi_evaluate_method(DELL_LED_BIOS_GUID, 0, 1, &input, &output);
| ^
>> drivers/platform/x86/dell/dell-wmi-led.c:168:7: error: call to undeclared function 'wmi_has_guid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
168 | if (!wmi_has_guid(DELL_LED_BIOS_GUID))
| ^
2 errors generated.
--
>> drivers/platform/x86/dell/dell-wmi-aio.c:80:11: error: call to undeclared function 'wmi_get_event_data'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
80 | status = wmi_get_event_data(value, &response);
| ^
>> drivers/platform/x86/dell/dell-wmi-aio.c:156:7: error: call to undeclared function 'wmi_has_guid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
156 | if (wmi_has_guid(dell_wmi_aio_guids[i]))
| ^
>> drivers/platform/x86/dell/dell-wmi-aio.c:177:8: error: call to undeclared function 'wmi_install_notify_handler'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
177 | err = wmi_install_notify_handler(guid, dell_wmi_aio_notify, NULL);
| ^
drivers/platform/x86/dell/dell-wmi-aio.c:177:8: note: did you mean 'acpi_install_notify_handler'?
include/acpi/acpixf.h:635:8: note: 'acpi_install_notify_handler' declared here
635 | acpi_install_notify_handler(acpi_handle device,
| ^
include/acpi/platform/aclinux.h:93:21: note: expanded from macro 'ACPI_EXTERNAL_RETURN_STATUS'
93 | static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);}
| ^
>> drivers/platform/x86/dell/dell-wmi-aio.c:192:2: error: call to undeclared function 'wmi_remove_notify_handler'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
192 | wmi_remove_notify_handler(guid);
| ^
drivers/platform/x86/dell/dell-wmi-aio.c:192:2: note: did you mean 'acpi_remove_notify_handler'?
include/acpi/acpixf.h:641:8: note: 'acpi_remove_notify_handler' declared here
641 | acpi_remove_notify_handler(acpi_handle device,
| ^
include/acpi/platform/aclinux.h:93:21: note: expanded from macro 'ACPI_EXTERNAL_RETURN_STATUS'
93 | static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);}
| ^
4 errors generated.
--
>> drivers/platform/x86/dell/dell-wmi-descriptor.c:30:7: error: call to undeclared function 'wmi_has_guid'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
30 | if (!wmi_has_guid(DELL_WMI_DESCRIPTOR_GUID))
| ^
1 error generated.
--
>> drivers/platform/x86/dell/dell-wmi-sysman/sysman.c:295:11: error: call to undeclared function 'wmi_query_block'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
295 | status = wmi_query_block(guid_string, instance_id, &out);
| ^
>> drivers/platform/x86/dell/dell-wmi-sysman/sysman.c:308:8: error: call to undeclared function 'wmi_instance_count'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
308 | ret = wmi_instance_count(guid_string);
| ^
2 errors generated.
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for ACPI_WMI
Depends on [n]: X86_PLATFORM_DEVICES [=y] && ACPI [=n]
Selected by [y]:
- DRM [=y] && HAS_IOMEM [=y] && (AGP [=n] || AGP [=n]=n) && !EMULATED_CMPXCHG && HAS_DMA [=y] && X86 [=y]
vim +163 drivers/platform/x86/wmi.c
a90b38c5866714 drivers/platform/x86/wmi.c Hans de Goede 2021-11-28 61
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 62 struct wmi_block {
844af950da946c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-24 63 struct wmi_device dev;
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 64 struct list_head list;
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 65 struct guid_block gblock;
b0e86302973d9e drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-24 66 struct acpi_device *acpi_device;
29e473f4b51ee5 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 67 struct rw_semaphore notify_lock; /* Protects notify callback add/remove */
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 @68 wmi_notify_handler handler;
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 69 void *handler_data;
29e473f4b51ee5 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 70 bool driver_ready;
a90b38c5866714 drivers/platform/x86/wmi.c Hans de Goede 2021-11-28 71 unsigned long flags;
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 72 };
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 73
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 74
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 75 /*
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 76 * If the GUID data block is marked as expensive, we must enable and
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 77 * explicitily disable data collection.
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 78 */
1c95ace78b6e8e drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 79 #define ACPI_WMI_EXPENSIVE BIT(0)
1c95ace78b6e8e drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 80 #define ACPI_WMI_METHOD BIT(1) /* GUID is a method */
1c95ace78b6e8e drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 81 #define ACPI_WMI_STRING BIT(2) /* GUID takes & returns a string */
1c95ace78b6e8e drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 82 #define ACPI_WMI_EVENT BIT(3) /* GUID is an event */
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 83
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 84 static const struct acpi_device_id wmi_device_ids[] = {
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 85 {"PNP0C14", 0},
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 86 {"pnp0c14", 0},
9bf9ca95a16e0b drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 87 { }
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 88 };
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 89 MODULE_DEVICE_TABLE(acpi, wmi_device_ids);
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 90
134038b075cb1d drivers/platform/x86/wmi.c Mario Limonciello 2022-08-29 91 /* allow duplicate GUIDs as these device drivers use struct wmi_driver */
134038b075cb1d drivers/platform/x86/wmi.c Mario Limonciello 2022-08-29 92 static const char * const allow_duplicates[] = {
134038b075cb1d drivers/platform/x86/wmi.c Mario Limonciello 2022-08-29 93 "05901221-D566-11D1-B2F0-00A0C9062910", /* wmi-bmof */
a77272c1604186 drivers/platform/x86/wmi.c Armin Wolf 2022-09-27 94 "8A42EA14-4F2A-FD45-6422-0087F7A7E608", /* dell-wmi-ddv */
75c487fcb69c98 drivers/platform/x86/wmi.c Armin Wolf 2023-11-03 95 "44FADEB1-B204-40F2-8581-394BBDC1B651", /* intel-wmi-sbl-fw-update */
2340f12023efa7 drivers/platform/x86/wmi.c Armin Wolf 2023-11-03 96 "86CCFD48-205E-4A77-9C48-2021CBEDE341", /* intel-wmi-thunderbolt */
b7a4706f66e5df drivers/platform/x86/wmi.c Armin Wolf 2023-11-23 97 "F1DDEE52-063C-4784-A11E-8A06684B9B01", /* dell-smm-hwmon */
134038b075cb1d drivers/platform/x86/wmi.c Mario Limonciello 2022-08-29 98 NULL
134038b075cb1d drivers/platform/x86/wmi.c Mario Limonciello 2022-08-29 99 };
134038b075cb1d drivers/platform/x86/wmi.c Mario Limonciello 2022-08-29 100
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 101 #define dev_to_wblock(__dev) container_of_const(__dev, struct wmi_block, dev.dev)
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 102 #define dev_to_wdev(__dev) container_of_const(__dev, struct wmi_device, dev)
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 103
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 104 /*
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 105 * GUID parsing functions
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 106 */
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 107
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 108 static bool guid_parse_and_compare(const char *string, const guid_t *guid)
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 109 {
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 110 guid_t guid_input;
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 111
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 112 if (guid_parse(string, &guid_input))
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 113 return false;
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 114
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 115 return guid_equal(&guid_input, guid);
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 116 }
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 117
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 118 static const void *find_guid_context(struct wmi_block *wblock,
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 119 struct wmi_driver *wdriver)
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 120 {
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 121 const struct wmi_device_id *id;
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 122
6e0bc588a0842d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 123 id = wdriver->id_table;
6e0bc588a0842d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 124 if (!id)
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 125 return NULL;
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 126
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 127 while (*id->guid_string) {
028e6e204ace1f drivers/platform/x86/wmi.c Andy Shevchenko 2023-06-21 128 if (guid_parse_and_compare(id->guid_string, &wblock->gblock.guid))
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 129 return id->context;
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 130 id++;
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 131 }
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 132 return NULL;
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 133 }
a48e23385fcf39 drivers/platform/x86/wmi.c Mattias Jacobsson 2019-05-27 134
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 135 static int get_subobj_info(acpi_handle handle, const char *pathname,
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 136 struct acpi_device_info **info)
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 137 {
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 138 acpi_handle subobj_handle;
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 139 acpi_status status;
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 140
bd142914f805b8 drivers/platform/x86/wmi.c Armin Wolf 2023-12-18 141 status = acpi_get_handle(handle, pathname, &subobj_handle);
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 142 if (status == AE_NOT_FOUND)
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 143 return -ENOENT;
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 144
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 145 if (ACPI_FAILURE(status))
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 146 return -EIO;
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 147
bd142914f805b8 drivers/platform/x86/wmi.c Armin Wolf 2023-12-18 148 status = acpi_get_object_info(subobj_handle, info);
bd142914f805b8 drivers/platform/x86/wmi.c Armin Wolf 2023-12-18 149 if (ACPI_FAILURE(status))
bd142914f805b8 drivers/platform/x86/wmi.c Armin Wolf 2023-12-18 150 return -EIO;
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 151
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 152 return 0;
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 153 }
d4fc91adfde11c drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-25 154
285dd01a6cfeb4 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 155 static acpi_status wmi_method_enable(struct wmi_block *wblock, bool enable)
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 156 {
43aacf838ef738 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 157 struct guid_block *block;
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 158 char method[5];
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 159 acpi_status status;
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 160 acpi_handle handle;
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 161
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 162 block = &wblock->gblock;
b0e86302973d9e drivers/platform/x86/wmi.c Andy Lutomirski 2015-11-24 @163 handle = wblock->acpi_device->handle;
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 164
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 165 snprintf(method, 5, "WE%02X", block->notify_id);
8122ab66b12967 drivers/platform/x86/wmi.c Zhang Rui 2013-09-03 @166 status = acpi_execute_simple_method(handle, method, enable);
736b48aae5e83b drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 167 if (status == AE_NOT_FOUND)
736b48aae5e83b drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 168 return AE_OK;
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 169
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 170 return status;
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 171 }
a66bfa7a4726e9 drivers/acpi/wmi.c Matthew Garrett 2008-10-08 172
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 173 #define WMI_ACPI_METHOD_NAME_SIZE 5
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 174
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 175 static inline void get_acpi_method_name(const struct wmi_block *wblock,
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 176 const char method,
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 177 char buffer[static WMI_ACPI_METHOD_NAME_SIZE])
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 178 {
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 179 static_assert(ARRAY_SIZE(wblock->gblock.object_id) == 2);
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 180 static_assert(WMI_ACPI_METHOD_NAME_SIZE >= 5);
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 181
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 182 buffer[0] = 'W';
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 183 buffer[1] = method;
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 184 buffer[2] = wblock->gblock.object_id[0];
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 185 buffer[3] = wblock->gblock.object_id[1];
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 186 buffer[4] = '\0';
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 187 }
57f2ce89211383 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 188
51142a0886bd34 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 189 static inline acpi_object_type get_param_acpi_type(const struct wmi_block *wblock)
51142a0886bd34 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 190 {
51142a0886bd34 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 191 if (wblock->gblock.flags & ACPI_WMI_STRING)
51142a0886bd34 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 192 return ACPI_TYPE_STRING;
51142a0886bd34 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 193 else
51142a0886bd34 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 194 return ACPI_TYPE_BUFFER;
51142a0886bd34 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 195 }
51142a0886bd34 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 196
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 197 static acpi_status get_event_data(const struct wmi_block *wblock, struct acpi_buffer *out)
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 198 {
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 199 union acpi_object param = {
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 200 .integer = {
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 201 .type = ACPI_TYPE_INTEGER,
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 202 .value = wblock->gblock.notify_id,
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 203 }
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 204 };
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 205 struct acpi_object_list input = {
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 206 .count = 1,
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 207 .pointer = ¶m,
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 208 };
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 209
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 210 return acpi_evaluate_object(wblock->acpi_device->handle, "_WED", &input, out);
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 211 }
25be44f6e2fc9d drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 212
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 213 static int wmidev_match_guid(struct device *dev, const void *data)
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 214 {
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 215 struct wmi_block *wblock = dev_to_wblock(dev);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 216 const guid_t *guid = data;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 217
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 218 if (guid_equal(guid, &wblock->gblock.guid))
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 219 return 1;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 220
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 221 return 0;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 222 }
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 223
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 224 static int wmidev_match_notify_id(struct device *dev, const void *data)
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 225 {
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 226 struct wmi_block *wblock = dev_to_wblock(dev);
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 227 const u32 *notify_id = data;
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 228
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 229 if (wblock->gblock.flags & ACPI_WMI_EVENT && wblock->gblock.notify_id == *notify_id)
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 230 return 1;
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 231
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 232 return 0;
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 233 }
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 234
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 235 static struct bus_type wmi_bus_type;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 236
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 237 static struct wmi_device *wmi_find_device_by_guid(const char *guid_string)
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 238 {
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 239 struct device *dev;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 240 guid_t guid;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 241 int ret;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 242
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 243 ret = guid_parse(guid_string, &guid);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 244 if (ret < 0)
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 245 return ERR_PTR(ret);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 246
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 247 dev = bus_find_device(&wmi_bus_type, NULL, &guid, wmidev_match_guid);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 248 if (!dev)
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 249 return ERR_PTR(-ENODEV);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 250
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 251 return dev_to_wdev(dev);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 252 }
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 253
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 254 static struct wmi_device *wmi_find_event_by_notify_id(const u32 notify_id)
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 255 {
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 256 struct device *dev;
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 257
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 258 dev = bus_find_device(&wmi_bus_type, NULL, ¬ify_id, wmidev_match_notify_id);
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 259 if (!dev)
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 260 return ERR_PTR(-ENODEV);
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 261
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 262 return to_wmi_device(dev);
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 263 }
3ea7f59af8ffa1 drivers/platform/x86/wmi.c Armin Wolf 2024-01-03 264
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 265 static void wmi_device_put(struct wmi_device *wdev)
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 266 {
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 267 put_device(&wdev->dev);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 268 }
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 269
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 270 /*
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 271 * Exported WMI functions
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 272 */
44b6b7661132b1 drivers/platform/x86/wmi.c Mario Limonciello 2017-11-01 273
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 274 /**
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 275 * wmi_instance_count - Get number of WMI object instances
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 276 * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 277 *
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 278 * Get the number of WMI object instances.
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 279 *
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 280 * Returns: Number of WMI object instances or negative error code.
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 281 */
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 @282 int wmi_instance_count(const char *guid_string)
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 283 {
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 284 struct wmi_device *wdev;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 285 int ret;
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 286
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 287 wdev = wmi_find_device_by_guid(guid_string);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 288 if (IS_ERR(wdev))
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 289 return PTR_ERR(wdev);
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 290
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 291 ret = wmidev_instance_count(wdev);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 292 wmi_device_put(wdev);
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 293
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 294 return ret;
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 295 }
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 296 EXPORT_SYMBOL_GPL(wmi_instance_count);
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 297
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 298 /**
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 299 * wmidev_instance_count - Get number of WMI object instances
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 300 * @wdev: A wmi bus device from a driver
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 301 *
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 302 * Get the number of WMI object instances.
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 303 *
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 304 * Returns: Number of WMI object instances.
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 305 */
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 306 u8 wmidev_instance_count(struct wmi_device *wdev)
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 307 {
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 308 struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev);
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 309
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 310 return wblock->gblock.instance_count;
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 311 }
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 312 EXPORT_SYMBOL_GPL(wmidev_instance_count);
2a2b13ae50cf70 drivers/platform/x86/wmi.c Armin Wolf 2023-04-30 313
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 314 /**
d54bd4bc7b9ae9 drivers/platform/x86/wmi.c Armin Wolf 2023-04-25 315 * wmi_evaluate_method - Evaluate a WMI method (deprecated)
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 316 * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 317 * @instance: Instance index
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 318 * @method_id: Method ID to call
5a707af10da95a drivers/platform/x86/wmi.c Andy Shevchenko 2017-04-21 319 * @in: Buffer containing input for the method call
5a707af10da95a drivers/platform/x86/wmi.c Andy Shevchenko 2017-04-21 320 * @out: Empty buffer to return the method results
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 321 *
b4cc979588ee94 drivers/platform/x86/wmi.c Armin Wolf 2023-04-25 322 * Call an ACPI-WMI method, the caller must free @out.
b4cc979588ee94 drivers/platform/x86/wmi.c Armin Wolf 2023-04-25 323 *
b4cc979588ee94 drivers/platform/x86/wmi.c Armin Wolf 2023-04-25 324 * Return: acpi_status signaling success or error.
bff431e49ff531 drivers/acpi/wmi.c Carlos Corbacho 2008-02-05 325 */
bba08f358f7930 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 @326 acpi_status wmi_evaluate_method(const char *guid_string, u8 instance, u32 method_id,
bba08f358f7930 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 327 const struct acpi_buffer *in, struct acpi_buffer *out)
722c856d46c6ca drivers/platform/x86/wmi.c Mario Limonciello 2017-11-01 328 {
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 329 struct wmi_device *wdev;
b0179b805eed10 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 330 acpi_status status;
b0179b805eed10 drivers/platform/x86/wmi.c Barnabás Pőcze 2021-09-04 331
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 332 wdev = wmi_find_device_by_guid(guid_string);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 333 if (IS_ERR(wdev))
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 334 return AE_ERROR;
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 335
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 336 status = wmidev_evaluate_method(wdev, instance, method_id, in, out);
722c856d46c6ca drivers/platform/x86/wmi.c Mario Limonciello 2017-11-01 337
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 338 wmi_device_put(wdev);
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 339
7444f8347487df drivers/platform/x86/wmi.c Armin Wolf 2023-10-20 340 return status;
722c856d46c6ca drivers/platform/x86/wmi.c Mario Limonciello 2017-11-01 341 }
722c856d46c6ca drivers/platform/x86/wmi.c Mario Limonciello 2017-11-01 342 EXPORT_SYMBOL_GPL(wmi_evaluate_method);
722c856d46c6ca drivers/platform/x86/wmi.c Mario Limonciello 2017-11-01 343
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Mario,
kernel test robot noticed the following build warnings:
[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/acpi-bus linus/master v6.8-rc2 next-20240131]
[cannot apply to drm-misc/drm-misc-next rafael-pm/devprop]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPI-video-Handle-fetching-EDID-that-is-longer-than-256-bytes/20240131-032909
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link: https://lore.kernel.org/r/20240130192608.11666-3-mario.limonciello%40amd.com
patch subject: [PATCH v2 2/4] drm: Add drm_get_acpi_edid() helper
config: x86_64-kismet-CONFIG_ACPI_WMI-CONFIG_DRM-0-0 (https://download.01.org/0day-ci/archive/20240131/[email protected]/config)
reproduce: (https://download.01.org/0day-ci/archive/20240131/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
kismet warnings: (new ones prefixed by >>)
>> kismet: WARNING: unmet direct dependencies detected for ACPI_WMI when selected by DRM
.config:248:warning: symbol value 'n' invalid for AIC79XX_CMDS_PER_DEVICE
.config:250:warning: symbol value 'n' invalid for SATA_MOBILE_LPM_POLICY
.config:308:warning: symbol value 'n' invalid for SQUASHFS_FRAGMENT_CACHE_SIZE
.config:333:warning: symbol value 'n' invalid for PANEL_LCD_PIN_SDA
.config:356:warning: symbol value 'n' invalid for PSTORE_BLK_MAX_REASON
.config:414:warning: symbol value 'n' invalid for FB_OMAP2_NUM_FBS
.config:459:warning: symbol value 'n' invalid for KFENCE_SAMPLE_INTERVAL
.config:543:warning: symbol value 'n' invalid for CFAG12864B_RATE
.config:651:warning: symbol value 'n' invalid for CRYPTO_DEV_QCE_SW_MAX_LEN
.config:665:warning: symbol value 'n' invalid for BLK_DEV_LOOP_MIN_COUNT
.config:756:warning: symbol value 'n' invalid for PANEL_LCD_CHARSET
.config:840:warning: symbol value 'n' invalid for SND_AC97_POWER_SAVE_DEFAULT
.config:855:warning: symbol value 'n' invalid for MAGIC_SYSRQ_DEFAULT_ENABLE
.config:893:warning: symbol value 'n' invalid for DRM_I915_MAX_REQUEST_BUSYWAIT
.config:894:warning: symbol value 'n' invalid for RAPIDIO_DISC_TIMEOUT
.config:917:warning: symbol value 'n' invalid for FAT_DEFAULT_CODEPAGE
.config:920:warning: symbol value 'n' invalid for SND_AT73C213_TARGET_BITRATE
.config:966:warning: symbol value 'n' invalid for CMA_SIZE_MBYTES
.config:967:warning: symbol value 'n' invalid for NET_EMATCH_STACK
.config:969:warning: symbol value 'n' invalid for VMCP_CMA_SIZE
.config:1152:warning: symbol value 'n' invalid for NODES_SHIFT
.config:1247:warning: symbol value 'n' invalid for MTDRAM_ERASE_SIZE
.config:1307:warning: symbol value 'n' invalid for SERIAL_UARTLITE_NR_UARTS
.config:1318:warning: symbol value 'n' invalid for AIC7XXX_DEBUG_MASK
.config:1479:warning: symbol value 'n' invalid for LEGACY_PTY_COUNT
.config:1645:warning: symbol value 'n' invalid for AIC7XXX_RESET_DELAY_MS
.config:1682:warning: symbol value 'n' invalid for INPUT_MOUSEDEV_SCREEN_Y
.config:1861:warning: symbol value 'n' invalid for IBM_EMAC_POLL_WEIGHT
.config:1936:warning: symbol value 'n' invalid for DRM_I915_STOP_TIMEOUT
.config:2029:warning: symbol value 'n' invalid for USB_GADGET_STORAGE_NUM_BUFFERS
.config:2151:warning: symbol value 'n' invalid for SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST_NUM
.config:2259:warning: symbol value 'n' invalid for SND_HDA_PREALLOC_SIZE
.config:2310:warning: symbol value 'n' invalid for RCU_FANOUT_LEAF
.config:2467:warning: symbol value 'n' invalid for PANEL_LCD_BWIDTH
.config:2523:warning: symbol value 'n' invalid for PANEL_LCD_PIN_E
.config:2542:warning: symbol value 'n' invalid for PSTORE_BLK_CONSOLE_SIZE
.config:2725:warning: symbol value 'n' invalid for PANEL_PARPORT
.config:2745:warning: symbol value 'n' invalid for BOOKE_WDT_DEFAULT_TIMEOUT
.config:2824:warning: symbol value 'n' invalid for NOUVEAU_DEBUG_DEFAULT
.config:3026:warning: symbol value 'n' invalid for KCSAN_REPORT_ONCE_IN_MS
.config:3136:warning: symbol value 'n' invalid for KCSAN_UDELAY_INTERRUPT
.config:3162:warning: symbol value 'n' invalid for PANEL_LCD_PIN_BL
.config:3190:warning: symbol value 'n' invalid for INITRAMFS_ROOT_GID
.config:3306:warning: symbol value 'n' invalid for ATM_FORE200E_TX_RETRY
.config:3347:warning: symbol value 'n' invalid for FB_OMAP2_DSS_MIN_FCK_PER_PCK
.config:3351:warning: symbol value 'n' invalid for STACK_MAX_DEFAULT_SIZE_MB
.config:3503:warning: symbol value 'n' invalid for KCSAN_UDELAY_TASK
.config:3641:warning: symbol value 'n' invalid for AIC79XX_RESET_DELAY_MS
.config:3722:warning: symbol value 'n' invalid for MMC_BLOCK_MINORS
.config:3771:warning: symbol value 'n' invalid for SCSI_NCR53C8XX_SYNC
.config:3855:warning: symbol value 'n' invalid for SERIAL_MCF_BAUDRATE
.config:3902:warning: symbol value 'n' invalid for UCLAMP_BUCKETS_COUNT
.config:3944:warning: symbol value 'n' invalid for DE2104X_DSL
.config:3956:warning: symbol value 'n' invalid for BLK_DEV_RAM_COUNT
.config:4174:warning: symbol value 'n' invalid for IP_VS_SH_TAB_BITS
.config:4201:warning: symbol value 'n' invalid for MTD_REDBOOT_DIRECTORY_BLOCK
.config:4335:warning: symbol value 'n' invalid for USBIP_VHCI_HC_PORTS
.config:4447:warning: symbol value 'n' invalid for X86_AMD_PSTATE_DEFAULT_MODE
.config:4458:warning: symbol value 'n' invalid for CMA_AREAS
.config:4516:warning: symbol value 'n' invalid for INPUT_MOUSEDEV_SCREEN_X
.config:4640:warning: symbol value 'n' invalid for RIONET_RX_SIZE
.config:4685:warning: symbol value 'n' invalid for RADIO_TYPHOON_PORT
.config:4808:warning: symbol value 'n' invalid for SERIAL_TXX9_NR_UARTS
.config:4865:warning: symbol value 'n' invalid for MTRR_SANITIZER_SPARE_REG_NR_DEFAULT
.config:4894:warning: symbol value 'n' invalid for SERIAL_ALTERA_UART_BAUDRATE
.config:4965:warning: symbol value 'n' invalid for IBM_EMAC_TXB
.config:5032:warning: symbol value 'n' invalid for DUMMY_CONSOLE_ROWS
.config:5329:warning: symbol value 'n' invalid for FTRACE_RECORD_RECURSION_SIZE
.config:5423:warning: symbol value 'n' invalid for CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD
.config:5473:warning: symbol value 'n' invalid for DRM_I915_FENCE_TIMEOUT
.config:5496:warning: symbol value 'n' invalid for TTY_PRINTK_LEVEL
.config:5659:warning: symbol value 'n' invalid for MIPS_EJTAG_FDC_KGDB_CHAN
.config:5712:warning: symbol value 'n' invalid for PPC_EARLY_DEBUG_EHV_BC_HANDLE
.config:5757:warning: symbol value 'n' invalid for KDB_DEFAULT_ENABLE
.config:5775:warning: symbol value 'n' invalid for SERIAL_ALTERA_UART_MAXPORTS
.config:6033:warning: symbol value 'n' invalid for IP_VS_MH_TAB_INDEX
.config:6055:warning: symbol value 'n' invalid for PANEL_LCD_HWIDTH
.config:6189:warning: symbol value 'n' invalid for DRM_I915_HEARTBEAT_INTERVAL
.config:6195:warning: symbol value 'n' invalid for KCSAN_SKIP_WATCH
.config:6205:warning: symbol value 'n' invalid for EFI_MAX_FAKE_MEM
.config:6220:warning: symbol value 'n' invalid for PSTORE_BLK_KMSG_SIZE
.config:6443:warning: symbol value 'n' invalid for SERIAL_8250_RUNTIME_UARTS
.config:6463:warning: symbol value 'n' invalid for PANEL_LCD_PIN_RW
.config:6572:warning: symbol value 'n' invalid for SERIAL_SH_SCI_NR_UARTS
.config:6726:warning: symbol value 'n' invalid for RADIO_TRUST_PORT
.config:6937:warning: symbol value 'n' invalid for SND_MAX_CARDS
.config:6996:warning: symbol value 'n' invalid for ZSMALLOC_CHAIN_SIZE
.config:7104:warning: symbol value 'n' invalid for DVB_MAX_ADAPTERS
.config:7111:warning: symbol value 'n' invalid for SCSI_NCR53C8XX_MAX_TAGS
.config:7124:warning: symbol value 'n' invalid for RCU_BOOST_DELAY
.config:7130:warning: symbol value 'n' invalid for SCSI_SYM53C8XX_DMA_ADDRESSING_MODE
.config:7143:warning: symbol value 'n' invalid for CMA_SIZE_PERCENTAGE
.config:7521:warning: symbol value 'n' invalid for IBM_EMAC_RXB
.config:7815:warning: symbol value 'n' invalid for SERIAL_ARC_NR_PORTS
.config:7944:warning: symbol value 'n' invalid for PANEL_LCD
.config:7994:warning: symbol value 'n' invalid for SCSI_MPT3SAS_MAX_SGE
.config:8000:warning: symbol value 'n' invalid for SCSI_SYM53C8XX_MAX_TAGS
.config:8084:warning: symbol value 'n' invalid for MTD_UBI_WL_THRESHOLD
.config:8117:warning: symbol value 'n' invalid for RIONET_TX_SIZE
.config:8132:warning: symbol value 'n' invalid for PSTORE_DEFAULT_KMSG_BYTES
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki