Re: [RFC,PATCH v2] i2c: fix device_init_wakeup place - Kernel

This is a discussion on Re: [RFC,PATCH v2] i2c: fix device_init_wakeup place - Kernel ; device_init_wakeup must be called after device_register. Signed-off-by: Marc Pignat --- Hi all! The current i2c code calls device_init_wakeup() before device_register, but device_register (by calling device_initialize) will disable device wakeup. This patch (against 2.6.27-rc2) move the device_init_wakeup() call in the bus ...

+ Reply to Thread
Results 1 to 2 of 2

Thread: Re: [RFC,PATCH v2] i2c: fix device_init_wakeup place

  1. Re: [RFC,PATCH v2] i2c: fix device_init_wakeup place

    device_init_wakeup must be called after device_register.

    Signed-off-by: Marc Pignat
    ---

    Hi all!

    The current i2c code calls device_init_wakeup() before device_register, but
    device_register (by calling device_initialize) will disable device wakeup.

    This patch (against 2.6.27-rc2) move the device_init_wakeup() call in the bus
    probe function, just before the probe call.

    This patch also include a small functionnal change: the I2C_CLIENT_WAKE is no
    more removed from the client flags, but this should't hurt.

    Changes from v1:
    - patch against 2.6.24-rc2
    - call to device_init_wakeup depends on !device_can_wakeup (suggested by David
    Brownell)

    Best regards

    Marc


    diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
    index 7bf38c4..0039bd9 100644
    --- a/drivers/i2c/i2c-core.c
    +++ b/drivers/i2c/i2c-core.c
    @@ -108,6 +108,9 @@ static int i2c_device_probe(struct device *dev)
    if (!driver->probe || !driver->id_table)
    return -ENODEV;
    client->driver = driver;
    + if (!device_can_wakeup(&client->dev))
    + device_init_wakeup(&client->dev,
    + client->flags & I2C_CLIENT_WAKE);
    dev_dbg(dev, "probe\n");

    status = driver->probe(client, i2c_match_id(driver->id_table, client));
    @@ -262,9 +265,8 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
    client->adapter = adap;

    client->dev.platform_data = info->platform_data;
    - device_init_wakeup(&client->dev, info->flags & I2C_CLIENT_WAKE);

    - client->flags = info->flags & ~I2C_CLIENT_WAKE;
    + client->flags = info->flags;
    client->addr = info->addr;
    client->irq = info->irq;

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. Re: [RFC,PATCH v2] i2c: fix device_init_wakeup place

    On Mon, 11 Aug 2008 10:31:35 +0200, Marc Pignat wrote:
    > device_init_wakeup must be called after device_register.
    >
    > Signed-off-by: Marc Pignat
    > ---
    >
    > Hi all!
    >
    > The current i2c code calls device_init_wakeup() before device_register, but
    > device_register (by calling device_initialize) will disable device wakeup.
    >
    > This patch (against 2.6.27-rc2) move the device_init_wakeup() call in the bus
    > probe function, just before the probe call.
    >
    > This patch also include a small functionnal change: the I2C_CLIENT_WAKE is no
    > more removed from the client flags, but this should't hurt.
    >
    > Changes from v1:
    > - patch against 2.6.24-rc2
    > - call to device_init_wakeup depends on !device_can_wakeup (suggested by David
    > Brownell)
    >
    > Best regards
    >
    > Marc
    >
    >
    > diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
    > index 7bf38c4..0039bd9 100644
    > --- a/drivers/i2c/i2c-core.c
    > +++ b/drivers/i2c/i2c-core.c
    > @@ -108,6 +108,9 @@ static int i2c_device_probe(struct device *dev)
    > if (!driver->probe || !driver->id_table)
    > return -ENODEV;
    > client->driver = driver;
    > + if (!device_can_wakeup(&client->dev))
    > + device_init_wakeup(&client->dev,
    > + client->flags & I2C_CLIENT_WAKE);
    > dev_dbg(dev, "probe\n");
    >
    > status = driver->probe(client, i2c_match_id(driver->id_table, client));
    > @@ -262,9 +265,8 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
    > client->adapter = adap;
    >
    > client->dev.platform_data = info->platform_data;
    > - device_init_wakeup(&client->dev, info->flags & I2C_CLIENT_WAKE);
    >
    > - client->flags = info->flags & ~I2C_CLIENT_WAKE;
    > + client->flags = info->flags;
    > client->addr = info->addr;
    > client->irq = info->irq;
    >


    Applied, thanks.

    --
    Jean Delvare
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread