Input: lm8323 - do not leave dangling client data pointer
authorWolfram Sang <w.sang@pengutronix.de>
Mon, 22 Mar 2010 05:31:26 +0000 (22:31 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 14 Apr 2010 06:26:44 +0000 (23:26 -0700)
Do not leave dangling client data pointers when unbinding device from the
driver or when binding fails for some reason.

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/keyboard/lm8323.c

index 60ac4684f87508fe5a3a17c6299f04dfa688e7e0..bc696931fed7b127a87afb262f63aa26fc63ac9a 100644 (file)
@@ -670,8 +670,6 @@ static int __devinit lm8323_probe(struct i2c_client *client,
                goto fail1;
        }
 
-       i2c_set_clientdata(client, lm);
-
        lm->client = client;
        lm->idev = idev;
        mutex_init(&lm->lock);
@@ -753,6 +751,8 @@ static int __devinit lm8323_probe(struct i2c_client *client,
                goto fail4;
        }
 
+       i2c_set_clientdata(client, lm);
+
        device_init_wakeup(&client->dev, 1);
        enable_irq_wake(client->irq);
 
@@ -778,6 +778,8 @@ static int __devexit lm8323_remove(struct i2c_client *client)
        struct lm8323_chip *lm = i2c_get_clientdata(client);
        int i;
 
+       i2c_set_clientdata(client, NULL);
+
        disable_irq_wake(client->irq);
        free_irq(client->irq, lm);
        cancel_work_sync(&lm->work);