1
0
Fork 0

ACPI / glue: Add acpi_platform_notify() function

Instead of relying on the "platform_notify" callback hook,
introducing separate notification function
acpi_platform_notify() and calling that directly from
drivers core when device entries are added and removed.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
hifive-unleashed-5.1
Heikki Krogerus 2018-11-09 17:21:35 +03:00 committed by Rafael J. Wysocki
parent 07de0e86fe
commit 7847a1455f
5 changed files with 30 additions and 10 deletions

View File

@ -1237,7 +1237,6 @@ static int __init acpi_init(void)
acpi_kobj = NULL; acpi_kobj = NULL;
} }
init_acpi_device_notify();
result = acpi_bus_init(); result = acpi_bus_init();
if (result) { if (result) {
disable_acpi(); disable_acpi();

View File

@ -296,7 +296,7 @@ int acpi_unbind_one(struct device *dev)
} }
EXPORT_SYMBOL_GPL(acpi_unbind_one); EXPORT_SYMBOL_GPL(acpi_unbind_one);
static int acpi_platform_notify(struct device *dev) static int acpi_device_notify(struct device *dev)
{ {
struct acpi_bus_type *type = acpi_get_bus_type(dev); struct acpi_bus_type *type = acpi_get_bus_type(dev);
struct acpi_device *adev; struct acpi_device *adev;
@ -343,7 +343,7 @@ static int acpi_platform_notify(struct device *dev)
return ret; return ret;
} }
static int acpi_platform_notify_remove(struct device *dev) static int acpi_device_notify_remove(struct device *dev)
{ {
struct acpi_device *adev = ACPI_COMPANION(dev); struct acpi_device *adev = ACPI_COMPANION(dev);
struct acpi_bus_type *type; struct acpi_bus_type *type;
@ -361,12 +361,17 @@ static int acpi_platform_notify_remove(struct device *dev)
return 0; return 0;
} }
void __init init_acpi_device_notify(void) int acpi_platform_notify(struct device *dev, enum kobject_action action)
{ {
if (platform_notify || platform_notify_remove) { switch (action) {
printk(KERN_ERR PREFIX "Can't use platform_notify\n"); case KOBJ_ADD:
return; acpi_device_notify(dev);
break;
case KOBJ_REMOVE:
acpi_device_notify_remove(dev);
break;
default:
break;
} }
platform_notify = acpi_platform_notify; return 0;
platform_notify_remove = acpi_platform_notify_remove;
} }

View File

@ -23,7 +23,6 @@
int early_acpi_osi_init(void); int early_acpi_osi_init(void);
int acpi_osi_init(void); int acpi_osi_init(void);
acpi_status acpi_os_initialize1(void); acpi_status acpi_os_initialize1(void);
void init_acpi_device_notify(void);
int acpi_scan_init(void); int acpi_scan_init(void);
void acpi_pci_root_init(void); void acpi_pci_root_init(void);
void acpi_pci_link_init(void); void acpi_pci_link_init(void);

View File

@ -8,6 +8,7 @@
* Copyright (c) 2006 Novell, Inc. * Copyright (c) 2006 Novell, Inc.
*/ */
#include <linux/acpi.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/fwnode.h> #include <linux/fwnode.h>
@ -731,6 +732,12 @@ static inline int device_is_not_partition(struct device *dev)
static int static int
device_platform_notify(struct device *dev, enum kobject_action action) device_platform_notify(struct device *dev, enum kobject_action action)
{ {
int ret;
ret = acpi_platform_notify(dev, action);
if (ret)
return ret;
if (platform_notify && action == KOBJ_ADD) if (platform_notify && action == KOBJ_ADD)
platform_notify(dev); platform_notify(dev);
else if (platform_notify_remove && action == KOBJ_REMOVE) else if (platform_notify_remove && action == KOBJ_REMOVE)

View File

@ -1313,4 +1313,14 @@ static inline int find_acpi_cpu_cache_topology(unsigned int cpu, int level)
} }
#endif #endif
#ifdef CONFIG_ACPI
extern int acpi_platform_notify(struct device *dev, enum kobject_action action);
#else
static inline int
acpi_platform_notify(struct device *dev, enum kobject_action action)
{
return 0;
}
#endif
#endif /*_LINUX_ACPI_H*/ #endif /*_LINUX_ACPI_H*/