max17042_battery: Fix power supply and irq registration ordering
authorRamakrishna Pallala <ramakrishna.pallala@intel.com>
Fri, 4 May 2012 21:38:37 +0000 (03:08 +0530)
committerAnton Vorontsov <anton.vorontsov@linaro.org>
Sat, 5 May 2012 06:42:56 +0000 (23:42 -0700)
IRQ registration should happen only after power supply object usable.
This patch fixes the ordering of power supply and irq registration
calls.

Signed-off-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com>
Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
drivers/power/max17042_battery.c

index 42c4be9a664ba6ddd2d871bcad31aab3151a1935..b4c8af016278f5fb7a29d2af95d086f722e673f7 100644 (file)
@@ -690,6 +690,12 @@ static int __devinit max17042_probe(struct i2c_client *client,
                max17042_write_reg(client, MAX17042_LearnCFG, 0x0007);
        }
 
+       ret = power_supply_register(&client->dev, &chip->battery);
+       if (ret) {
+               dev_err(&client->dev, "failed: power supply register\n");
+               return ret;
+       }
+
        if (client->irq) {
                ret = request_threaded_irq(client->irq, NULL,
                                                max17042_thread_handler,
@@ -706,7 +712,6 @@ static int __devinit max17042_probe(struct i2c_client *client,
        }
 
        reg = max17042_read_reg(chip->client, MAX17042_STATUS);
-
        if (reg & STATUS_POR_BIT) {
                INIT_WORK(&chip->work, max17042_init_worker);
                schedule_work(&chip->work);
@@ -714,10 +719,7 @@ static int __devinit max17042_probe(struct i2c_client *client,
                chip->init_complete = 1;
        }
 
-       ret = power_supply_register(&client->dev, &chip->battery);
-       if (ret)
-               dev_err(&client->dev, "failed: power supply register\n");
-       return ret;
+       return 0;
 }
 
 static int __devexit max17042_remove(struct i2c_client *client)