forked from nikkuss/x1e-nixos
125 lines
3.1 KiB
Diff
125 lines
3.1 KiB
Diff
diff -ruN a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
|
|
--- a/drivers/acpi/platform_profile.c 2026-04-22 13:09:37.943936485 +0400
|
|
+++ b/drivers/acpi/platform_profile.c 2026-04-22 13:12:09.080175395 +0400
|
|
@@ -16,6 +16,9 @@
|
|
|
|
static DEFINE_MUTEX(profile_lock);
|
|
|
|
+static struct kobject *legacy_kobj;
|
|
+static struct kobject *legacy_kobj_created;
|
|
+
|
|
struct platform_profile_handler {
|
|
const char *name;
|
|
struct device dev;
|
|
@@ -215,7 +218,7 @@
|
|
return ret;
|
|
}
|
|
|
|
- sysfs_notify(acpi_kobj, NULL, "platform_profile");
|
|
+ sysfs_notify(legacy_kobj, NULL, "platform_profile");
|
|
|
|
return count;
|
|
}
|
|
@@ -435,7 +438,7 @@
|
|
return ret;
|
|
}
|
|
|
|
- sysfs_notify(acpi_kobj, NULL, "platform_profile");
|
|
+ sysfs_notify(legacy_kobj, NULL, "platform_profile");
|
|
|
|
return count;
|
|
}
|
|
@@ -481,7 +484,7 @@
|
|
scoped_cond_guard(mutex_intr, return, &profile_lock) {
|
|
_notify_class_profile(dev, NULL);
|
|
}
|
|
- sysfs_notify(acpi_kobj, NULL, "platform_profile");
|
|
+ sysfs_notify(legacy_kobj, NULL, "platform_profile");
|
|
}
|
|
EXPORT_SYMBOL_GPL(platform_profile_notify);
|
|
|
|
@@ -529,7 +532,7 @@
|
|
return err;
|
|
}
|
|
|
|
- sysfs_notify(acpi_kobj, NULL, "platform_profile");
|
|
+ sysfs_notify(legacy_kobj, NULL, "platform_profile");
|
|
|
|
return 0;
|
|
}
|
|
@@ -603,9 +606,9 @@
|
|
goto cleanup_ida;
|
|
}
|
|
|
|
- sysfs_notify(acpi_kobj, NULL, "platform_profile");
|
|
+ sysfs_notify(legacy_kobj, NULL, "platform_profile");
|
|
|
|
- err = sysfs_update_group(acpi_kobj, &platform_profile_group);
|
|
+ err = sysfs_update_group(legacy_kobj, &platform_profile_group);
|
|
if (err)
|
|
goto cleanup_cur;
|
|
|
|
@@ -639,8 +642,8 @@
|
|
ida_free(&platform_profile_ida, pprof->minor);
|
|
device_unregister(&pprof->dev);
|
|
|
|
- sysfs_notify(acpi_kobj, NULL, "platform_profile");
|
|
- sysfs_update_group(acpi_kobj, &platform_profile_group);
|
|
+ sysfs_notify(legacy_kobj, NULL, "platform_profile");
|
|
+ sysfs_update_group(legacy_kobj, &platform_profile_group);
|
|
}
|
|
EXPORT_SYMBOL_GPL(platform_profile_remove);
|
|
|
|
@@ -688,24 +691,45 @@
|
|
{
|
|
int err;
|
|
|
|
- if (acpi_disabled)
|
|
- return -EOPNOTSUPP;
|
|
+ if (acpi_kobj) {
|
|
+ legacy_kobj = acpi_kobj;
|
|
+ } else {
|
|
+ legacy_kobj_created = kobject_create_and_add("acpi", firmware_kobj);
|
|
+ if (!legacy_kobj_created)
|
|
+ return -ENOMEM;
|
|
+ legacy_kobj = legacy_kobj_created;
|
|
+ }
|
|
|
|
err = class_register(&platform_profile_class);
|
|
if (err)
|
|
- return err;
|
|
+ goto put_kobj;
|
|
|
|
- err = sysfs_create_group(acpi_kobj, &platform_profile_group);
|
|
- if (err)
|
|
+ err = sysfs_create_group(legacy_kobj, &platform_profile_group);
|
|
+ if (err) {
|
|
class_unregister(&platform_profile_class);
|
|
+ goto put_kobj;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
|
|
+put_kobj:
|
|
+ if (legacy_kobj_created) {
|
|
+ kobject_put(legacy_kobj_created);
|
|
+ legacy_kobj_created = NULL;
|
|
+ legacy_kobj = NULL;
|
|
+ }
|
|
return err;
|
|
}
|
|
|
|
static void __exit platform_profile_exit(void)
|
|
{
|
|
- sysfs_remove_group(acpi_kobj, &platform_profile_group);
|
|
+ sysfs_remove_group(legacy_kobj, &platform_profile_group);
|
|
class_unregister(&platform_profile_class);
|
|
+ if (legacy_kobj_created) {
|
|
+ kobject_put(legacy_kobj_created);
|
|
+ legacy_kobj_created = NULL;
|
|
+ legacy_kobj = NULL;
|
|
+ }
|
|
}
|
|
module_init(platform_profile_init);
|
|
module_exit(platform_profile_exit);
|