|
@@ -287,6 +287,7 @@ EXPORT_SYMBOL_GPL(acpi_unbind_one);
|
|
|
static int acpi_platform_notify(struct device *dev)
|
|
|
{
|
|
|
struct acpi_bus_type *type = acpi_get_bus_type(dev);
|
|
|
+ struct acpi_device *adev;
|
|
|
int ret;
|
|
|
|
|
|
ret = acpi_bind_one(dev, NULL);
|
|
@@ -303,9 +304,14 @@ static int acpi_platform_notify(struct device *dev)
|
|
|
if (ret)
|
|
|
goto out;
|
|
|
}
|
|
|
+ adev = ACPI_COMPANION(dev);
|
|
|
+ if (!adev)
|
|
|
+ goto out;
|
|
|
|
|
|
if (type && type->setup)
|
|
|
type->setup(dev);
|
|
|
+ else if (adev->handler && adev->handler->bind)
|
|
|
+ adev->handler->bind(dev);
|
|
|
|
|
|
out:
|
|
|
#if ACPI_GLUE_DEBUG
|
|
@@ -324,11 +330,17 @@ static int acpi_platform_notify(struct device *dev)
|
|
|
|
|
|
static int acpi_platform_notify_remove(struct device *dev)
|
|
|
{
|
|
|
+ struct acpi_device *adev = ACPI_COMPANION(dev);
|
|
|
struct acpi_bus_type *type;
|
|
|
|
|
|
+ if (!adev)
|
|
|
+ return 0;
|
|
|
+
|
|
|
type = acpi_get_bus_type(dev);
|
|
|
if (type && type->cleanup)
|
|
|
type->cleanup(dev);
|
|
|
+ else if (adev->handler && adev->handler->unbind)
|
|
|
+ adev->handler->unbind(dev);
|
|
|
|
|
|
acpi_unbind_one(dev);
|
|
|
return 0;
|