Commit e7b2e334 authored by Barnabás Pőcze's avatar Barnabás Pőcze Committed by Hans de Goede

platform/x86: wmi: introduce helper to convert driver to WMI driver

Introduce a helper function which wraps the appropriate
`container_of()` macro invocation to convert
a `struct device_driver` to `struct wmi_driver`.
Signed-off-by: default avatarBarnabás Pőcze <pobrn@protonmail.com>
Link: https://lore.kernel.org/r/20210904175450.156801-27-pobrn@protonmail.comReviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
parent 736b48aa
...@@ -673,6 +673,11 @@ static struct wmi_device *dev_to_wdev(struct device *dev) ...@@ -673,6 +673,11 @@ static struct wmi_device *dev_to_wdev(struct device *dev)
return container_of(dev, struct wmi_device, dev); return container_of(dev, struct wmi_device, dev);
} }
static inline struct wmi_driver *drv_to_wdrv(struct device_driver *drv)
{
return container_of(drv, struct wmi_driver, driver);
}
/* /*
* sysfs interface * sysfs interface
*/ */
...@@ -791,8 +796,7 @@ static void wmi_dev_release(struct device *dev) ...@@ -791,8 +796,7 @@ static void wmi_dev_release(struct device *dev)
static int wmi_dev_match(struct device *dev, struct device_driver *driver) static int wmi_dev_match(struct device *dev, struct device_driver *driver)
{ {
struct wmi_driver *wmi_driver = struct wmi_driver *wmi_driver = drv_to_wdrv(driver);
container_of(driver, struct wmi_driver, driver);
struct wmi_block *wblock = dev_to_wblock(dev); struct wmi_block *wblock = dev_to_wblock(dev);
const struct wmi_device_id *id = wmi_driver->id_table; const struct wmi_device_id *id = wmi_driver->id_table;
...@@ -889,8 +893,7 @@ static long wmi_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) ...@@ -889,8 +893,7 @@ static long wmi_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
} }
/* let the driver do any filtering and do the call */ /* let the driver do any filtering and do the call */
wdriver = container_of(wblock->dev.dev.driver, wdriver = drv_to_wdrv(wblock->dev.dev.driver);
struct wmi_driver, driver);
if (!try_module_get(wdriver->driver.owner)) { if (!try_module_get(wdriver->driver.owner)) {
ret = -EBUSY; ret = -EBUSY;
goto out_ioctl; goto out_ioctl;
...@@ -923,8 +926,7 @@ static const struct file_operations wmi_fops = { ...@@ -923,8 +926,7 @@ static const struct file_operations wmi_fops = {
static int wmi_dev_probe(struct device *dev) static int wmi_dev_probe(struct device *dev)
{ {
struct wmi_block *wblock = dev_to_wblock(dev); struct wmi_block *wblock = dev_to_wblock(dev);
struct wmi_driver *wdriver = struct wmi_driver *wdriver = drv_to_wdrv(dev->driver);
container_of(dev->driver, struct wmi_driver, driver);
int ret = 0; int ret = 0;
char *buf; char *buf;
...@@ -987,8 +989,7 @@ static int wmi_dev_probe(struct device *dev) ...@@ -987,8 +989,7 @@ static int wmi_dev_probe(struct device *dev)
static void wmi_dev_remove(struct device *dev) static void wmi_dev_remove(struct device *dev)
{ {
struct wmi_block *wblock = dev_to_wblock(dev); struct wmi_block *wblock = dev_to_wblock(dev);
struct wmi_driver *wdriver = struct wmi_driver *wdriver = drv_to_wdrv(dev->driver);
container_of(dev->driver, struct wmi_driver, driver);
if (wdriver->filter_callback) { if (wdriver->filter_callback) {
misc_deregister(&wblock->char_dev); misc_deregister(&wblock->char_dev);
...@@ -1290,15 +1291,12 @@ static void acpi_wmi_notify_handler(acpi_handle handle, u32 event, ...@@ -1290,15 +1291,12 @@ static void acpi_wmi_notify_handler(acpi_handle handle, u32 event,
/* If a driver is bound, then notify the driver. */ /* If a driver is bound, then notify the driver. */
if (wblock->dev.dev.driver) { if (wblock->dev.dev.driver) {
struct wmi_driver *driver; struct wmi_driver *driver = drv_to_wdrv(wblock->dev.dev.driver);
struct acpi_object_list input; struct acpi_object_list input;
union acpi_object params[1]; union acpi_object params[1];
struct acpi_buffer evdata = { ACPI_ALLOCATE_BUFFER, NULL }; struct acpi_buffer evdata = { ACPI_ALLOCATE_BUFFER, NULL };
acpi_status status; acpi_status status;
driver = container_of(wblock->dev.dev.driver,
struct wmi_driver, driver);
input.count = 1; input.count = 1;
input.pointer = params; input.pointer = params;
params[0].type = ACPI_TYPE_INTEGER; params[0].type = ACPI_TYPE_INTEGER;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment