mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 03:24:19 +02:00
platform/x86: wmi: Use FW_BUG when warning about missing control methods
A missing WQxx control method is a firmware bug and should be marked as such using FW_BUG so that users know that the issue is not a kernel issue. Since get_subobj_info() might fail even if the control method is present, we need to print the warning only if acpi_get_handle() fails. Signed-off-by: Armin Wolf <W_Armin@gmx.de> Link: https://lore.kernel.org/r/20240206220447.3102-2-W_Armin@gmx.de Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
parent
7f1b998a91
commit
d0c595a117
|
|
@ -130,26 +130,6 @@ static const void *find_guid_context(struct wmi_block *wblock,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int get_subobj_info(acpi_handle handle, const char *pathname,
|
||||
struct acpi_device_info **info)
|
||||
{
|
||||
acpi_handle subobj_handle;
|
||||
acpi_status status;
|
||||
|
||||
status = acpi_get_handle(handle, pathname, &subobj_handle);
|
||||
if (status == AE_NOT_FOUND)
|
||||
return -ENOENT;
|
||||
|
||||
if (ACPI_FAILURE(status))
|
||||
return -EIO;
|
||||
|
||||
status = acpi_get_object_info(subobj_handle, info);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -EIO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static acpi_status wmi_method_enable(struct wmi_block *wblock, bool enable)
|
||||
{
|
||||
struct guid_block *block;
|
||||
|
|
@ -947,9 +927,10 @@ static int wmi_create_device(struct device *wmi_bus_dev,
|
|||
struct wmi_block *wblock,
|
||||
struct acpi_device *device)
|
||||
{
|
||||
struct acpi_device_info *info;
|
||||
char method[WMI_ACPI_METHOD_NAME_SIZE];
|
||||
int result;
|
||||
struct acpi_device_info *info;
|
||||
acpi_handle method_handle;
|
||||
acpi_status status;
|
||||
uint count;
|
||||
|
||||
if (wblock->gblock.flags & ACPI_WMI_EVENT) {
|
||||
|
|
@ -977,15 +958,19 @@ static int wmi_create_device(struct device *wmi_bus_dev,
|
|||
* we ignore this data block.
|
||||
*/
|
||||
get_acpi_method_name(wblock, 'Q', method);
|
||||
result = get_subobj_info(device->handle, method, &info);
|
||||
|
||||
if (result) {
|
||||
status = acpi_get_handle(device->handle, method, &method_handle);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
dev_warn(wmi_bus_dev,
|
||||
"%s data block query control method not found\n",
|
||||
FW_BUG "%s data block query control method not found\n",
|
||||
method);
|
||||
return result;
|
||||
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
status = acpi_get_object_info(method_handle, &info);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -EIO;
|
||||
|
||||
wblock->dev.dev.type = &wmi_type_data;
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user