lkml.org 
[lkml]   [2012]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/4] ACPI: remove acpi_op_start workaround
    Date
    No .start on any acpi_driver ops anymore.

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    drivers/acpi/scan.c | 95 ++++++++--------------------------------------
    include/acpi/acpi_bus.h | 8 ----
    2 files changed, 17 insertions(+), 86 deletions(-)

    diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
    index 1bafa2d..5e6d2ad 100644
    --- a/drivers/acpi/scan.c
    +++ b/drivers/acpi/scan.c
    @@ -416,7 +416,6 @@ static void acpi_device_remove_notify_handler(struct acpi_device *device)
    }

    static int acpi_bus_driver_init(struct acpi_device *, struct acpi_driver *);
    -static int acpi_start_single_object(struct acpi_device *);
    static int acpi_device_probe(struct device * dev)
    {
    struct acpi_device *acpi_dev = to_acpi_device(dev);
    @@ -425,9 +424,6 @@ static int acpi_device_probe(struct device * dev)

    ret = acpi_bus_driver_init(acpi_dev, acpi_drv);
    if (!ret) {
    - if (acpi_dev->bus_ops.acpi_op_start)
    - acpi_start_single_object(acpi_dev);
    -
    if (acpi_drv->ops.notify) {
    ret = acpi_device_install_notify_handler(acpi_dev);
    if (ret) {
    @@ -604,24 +600,6 @@ acpi_bus_driver_init(struct acpi_device *device, struct acpi_driver *driver)
    return 0;
    }

    -static int acpi_start_single_object(struct acpi_device *device)
    -{
    - int result = 0;
    - struct acpi_driver *driver;
    -
    -
    - if (!(driver = device->driver))
    - return 0;
    -
    - if (driver->ops.start) {
    - result = driver->ops.start(device);
    - if (result && driver->ops.remove)
    - driver->ops.remove(device, ACPI_BUS_REMOVAL_NORMAL);
    - }
    -
    - return result;
    -}
    -
    /**
    * acpi_bus_register_driver - register a driver with the ACPI bus
    * @driver: driver being registered
    @@ -1254,8 +1232,7 @@ static int acpi_bus_remove(struct acpi_device *dev, int rmdevice)

    static int acpi_add_single_object(struct acpi_device **child,
    acpi_handle handle, int type,
    - unsigned long long sta,
    - struct acpi_bus_ops *ops)
    + unsigned long long sta)
    {
    int result;
    struct acpi_device *device;
    @@ -1271,7 +1248,6 @@ static int acpi_add_single_object(struct acpi_device **child,
    device->device_type = type;
    device->handle = handle;
    device->parent = acpi_bus_get_parent(handle);
    - device->bus_ops = *ops; /* workround for not call .start */
    STRUCT_TO_INT(device->status) = sta;
    device->drivers_autoprobe = true;

    @@ -1354,16 +1330,12 @@ end:

    static void acpi_bus_add_power_resource(acpi_handle handle)
    {
    - struct acpi_bus_ops ops = {
    - .acpi_op_add = 1,
    - .acpi_op_start = 1,
    - };
    struct acpi_device *device = NULL;

    acpi_bus_get_device(handle, &device);
    if (!device)
    acpi_add_single_object(&device, handle, ACPI_BUS_TYPE_POWER,
    - ACPI_STA_DEFAULT, &ops);
    + ACPI_STA_DEFAULT);
    }

    static int acpi_bus_type_and_status(acpi_handle handle, int *type,
    @@ -1408,7 +1380,6 @@ static int acpi_bus_type_and_status(acpi_handle handle, int *type,
    static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,
    void *context, void **return_value)
    {
    - struct acpi_bus_ops *ops = context;
    int type;
    unsigned long long sta;
    struct acpi_device *device;
    @@ -1433,37 +1404,30 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,

    /*
    * We may already have an acpi_device from a previous enumeration. If
    - * so, we needn't add it again, but we may still have to start it.
    + * so, we needn't add it again.
    */
    device = NULL;
    acpi_bus_get_device(handle, &device);
    - if (ops->acpi_op_add && !device)
    - acpi_add_single_object(&device, handle, type, sta, ops);
    + if (!device)
    + acpi_add_single_object(&device, handle, type, sta);

    if (!device)
    return AE_CTRL_DEPTH;

    - if (ops->acpi_op_start && !(ops->acpi_op_add)) {
    - status = acpi_start_single_object(device);
    - if (ACPI_FAILURE(status))
    - return AE_CTRL_DEPTH;
    - }
    -
    if (!*return_value)
    *return_value = device;
    return AE_OK;
    }

    -static int acpi_bus_scan(acpi_handle handle, struct acpi_bus_ops *ops,
    - struct acpi_device **child)
    +static int acpi_bus_scan(acpi_handle handle, struct acpi_device **child)
    {
    acpi_status status;
    void *device = NULL;

    - status = acpi_bus_check_add(handle, 0, ops, &device);
    + status = acpi_bus_check_add(handle, 0, NULL, &device);
    if (ACPI_SUCCESS(status))
    acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
    - acpi_bus_check_add, NULL, ops, &device);
    + acpi_bus_check_add, NULL, NULL, &device);

    if (child)
    *child = device;
    @@ -1488,28 +1452,24 @@ static void acpi_bus_attach(struct acpi_device *dev)
    }

    /*
    - * acpi_bus_add and acpi_bus_start
    + * acpi_bus_add
    *
    * scan a given ACPI tree and (probably recently hot-plugged)
    - * create and add or starts found devices.
    + * create and add found devices.
    *
    * If no devices were found -ENODEV is returned which does not
    * mean that this is a real error, there just have been no suitable
    * ACPI objects in the table trunk from which the kernel could create
    - * a device and add/start an appropriate driver.
    + * a device and add an appropriate driver.
    */

    int
    acpi_bus_add(struct acpi_device **child,
    struct acpi_device *parent, acpi_handle handle, int type)
    {
    - struct acpi_bus_ops ops;
    int result;

    - memset(&ops, 0, sizeof(ops));
    - ops.acpi_op_add = 1;
    -
    - result = acpi_bus_scan(handle, &ops, child);
    + result = acpi_bus_scan(handle, child);

    if (*child)
    acpi_bus_attach(*child);
    @@ -1520,20 +1480,12 @@ EXPORT_SYMBOL(acpi_bus_add);

    int acpi_bus_start(struct acpi_device *device)
    {
    - struct acpi_bus_ops ops;
    - int result;
    -
    if (!device)
    return -EINVAL;

    - memset(&ops, 0, sizeof(ops));
    - ops.acpi_op_start = 1;
    -
    - result = acpi_bus_scan(device->handle, &ops, NULL);
    -
    acpi_update_all_gpes();

    - return result;
    + return 0;
    }
    EXPORT_SYMBOL(acpi_bus_start);

    @@ -1596,11 +1548,6 @@ static int acpi_bus_scan_fixed(void)
    {
    int result = 0;
    struct acpi_device *device = NULL;
    - struct acpi_bus_ops ops;
    -
    - memset(&ops, 0, sizeof(ops));
    - ops.acpi_op_add = 1;
    - ops.acpi_op_start = 1;

    /*
    * Enumerate all fixed-feature devices.
    @@ -1608,17 +1555,14 @@ static int acpi_bus_scan_fixed(void)
    if ((acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON) == 0) {
    result = acpi_add_single_object(&device, NULL,
    ACPI_BUS_TYPE_POWER_BUTTON,
    - ACPI_STA_DEFAULT,
    - &ops);
    + ACPI_STA_DEFAULT);
    device_init_wakeup(&device->dev, true);
    }

    - if ((acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON) == 0) {
    + if ((acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON) == 0)
    result = acpi_add_single_object(&device, NULL,
    ACPI_BUS_TYPE_SLEEP_BUTTON,
    - ACPI_STA_DEFAULT,
    - &ops);
    - }
    + ACPI_STA_DEFAULT);

    return result;
    }
    @@ -1626,11 +1570,6 @@ static int acpi_bus_scan_fixed(void)
    int __init acpi_scan_init(void)
    {
    int result;
    - struct acpi_bus_ops ops;
    -
    - memset(&ops, 0, sizeof(ops));
    - ops.acpi_op_add = 1;
    - ops.acpi_op_start = 1;

    result = bus_register(&acpi_bus_type);
    if (result) {
    @@ -1643,7 +1582,7 @@ int __init acpi_scan_init(void)
    /*
    * Enumerate devices in the ACPI namespace.
    */
    - result = acpi_bus_scan(ACPI_ROOT_OBJECT, &ops, &acpi_root);
    + result = acpi_bus_scan(ACPI_ROOT_OBJECT, &acpi_root);

    if (!result)
    result = acpi_bus_scan_fixed();
    diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
    index 969544e..cc9363b 100644
    --- a/include/acpi/acpi_bus.h
    +++ b/include/acpi/acpi_bus.h
    @@ -119,20 +119,13 @@ struct acpi_device;

    typedef int (*acpi_op_add) (struct acpi_device * device);
    typedef int (*acpi_op_remove) (struct acpi_device * device, int type);
    -typedef int (*acpi_op_start) (struct acpi_device * device);
    typedef int (*acpi_op_bind) (struct acpi_device * device);
    typedef int (*acpi_op_unbind) (struct acpi_device * device);
    typedef void (*acpi_op_notify) (struct acpi_device * device, u32 event);

    -struct acpi_bus_ops {
    - u32 acpi_op_add:1;
    - u32 acpi_op_start:1;
    -};
    -
    struct acpi_device_ops {
    acpi_op_add add;
    acpi_op_remove remove;
    - acpi_op_start start;
    acpi_op_bind bind;
    acpi_op_unbind unbind;
    acpi_op_notify notify;
    @@ -302,7 +295,6 @@ struct acpi_device {
    struct acpi_driver *driver;
    void *driver_data;
    struct device dev;
    - struct acpi_bus_ops bus_ops; /* workaround for different code path for hotplug */
    enum acpi_bus_removal_type removal_type; /* indicate for different removal type */
    bool drivers_autoprobe;
    };
    --
    1.7.7


    \
     
     \ /
      Last update: 2012-10-04 01:41    [W:3.054 / U:1.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site