mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Split alienware-wmi WMI drivers into different files. This is done seamlessly by copying and pasting, however some blocks are reordered. Reviewed-by: Armin Wolf <W_Armin@gmx.de> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Kurt Borja <kuurtb@gmail.com> Link: https://lore.kernel.org/r/20250207154610.13675-12-kuurtb@gmail.com Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
95 lines
2.1 KiB
C
95 lines
2.1 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Alienware LEGACY WMI device driver
|
|
*
|
|
* Copyright (C) 2025 Kurt Borja <kuurtb@gmail.com>
|
|
*/
|
|
|
|
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
|
|
|
#include <linux/wmi.h>
|
|
#include "alienware-wmi.h"
|
|
|
|
struct legacy_led_args {
|
|
struct color_platform colors;
|
|
u8 brightness;
|
|
u8 state;
|
|
} __packed;
|
|
|
|
|
|
/*
|
|
* Legacy WMI driver
|
|
*/
|
|
static int legacy_wmi_update_led(struct alienfx_priv *priv,
|
|
struct wmi_device *wdev, u8 location)
|
|
{
|
|
struct legacy_led_args legacy_args = {
|
|
.colors = priv->colors[location],
|
|
.brightness = priv->global_brightness,
|
|
.state = 0,
|
|
};
|
|
struct acpi_buffer input;
|
|
acpi_status status;
|
|
|
|
if (legacy_args.state != LEGACY_RUNNING) {
|
|
legacy_args.state = priv->lighting_control_state;
|
|
|
|
input.length = sizeof(legacy_args);
|
|
input.pointer = &legacy_args;
|
|
|
|
status = wmi_evaluate_method(LEGACY_POWER_CONTROL_GUID, 0,
|
|
location + 1, &input, NULL);
|
|
if (ACPI_FAILURE(status))
|
|
return -EIO;
|
|
|
|
return 0;
|
|
}
|
|
|
|
return alienware_wmi_command(wdev, location + 1, &legacy_args,
|
|
sizeof(legacy_args), NULL);
|
|
}
|
|
|
|
static int legacy_wmi_update_brightness(struct alienfx_priv *priv,
|
|
struct wmi_device *wdev, u8 brightness)
|
|
{
|
|
return legacy_wmi_update_led(priv, wdev, 0);
|
|
}
|
|
|
|
static int legacy_wmi_probe(struct wmi_device *wdev, const void *context)
|
|
{
|
|
struct alienfx_platdata pdata = {
|
|
.wdev = wdev,
|
|
.ops = {
|
|
.upd_led = legacy_wmi_update_led,
|
|
.upd_brightness = legacy_wmi_update_brightness,
|
|
},
|
|
};
|
|
|
|
return alienware_alienfx_setup(&pdata);
|
|
}
|
|
|
|
static const struct wmi_device_id alienware_legacy_device_id_table[] = {
|
|
{ LEGACY_CONTROL_GUID, NULL },
|
|
{ },
|
|
};
|
|
MODULE_DEVICE_TABLE(wmi, alienware_legacy_device_id_table);
|
|
|
|
static struct wmi_driver alienware_legacy_wmi_driver = {
|
|
.driver = {
|
|
.name = "alienware-wmi-alienfx",
|
|
.probe_type = PROBE_PREFER_ASYNCHRONOUS,
|
|
},
|
|
.id_table = alienware_legacy_device_id_table,
|
|
.probe = legacy_wmi_probe,
|
|
.no_singleton = true,
|
|
};
|
|
|
|
int __init alienware_legacy_wmi_init(void)
|
|
{
|
|
return wmi_driver_register(&alienware_legacy_wmi_driver);
|
|
}
|
|
|
|
void __exit alienware_legacy_wmi_exit(void)
|
|
{
|
|
wmi_driver_unregister(&alienware_legacy_wmi_driver);
|
|
}
|