mfd: Use devm allocation for ab3100-core
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 12 Jun 2012 18:26:58 +0000 (20:26 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 8 Jul 2012 22:16:11 +0000 (00:16 +0200)
Allocate memory and irq for device state using devm_*
helpers to simplify memory accounting.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/mfd/ab3100-core.c

index 1efad20..4276aab 100644 (file)
@@ -867,7 +867,7 @@ static int __devinit ab3100_probe(struct i2c_client *client,
        int err;
        int i;
 
-       ab3100 = kzalloc(sizeof(struct ab3100), GFP_KERNEL);
+       ab3100 = devm_kzalloc(&client->dev, sizeof(struct ab3100), GFP_KERNEL);
        if (!ab3100) {
                dev_err(&client->dev, "could not allocate AB3100 device\n");
                return -ENOMEM;
@@ -921,7 +921,7 @@ static int __devinit ab3100_probe(struct i2c_client *client,
 
        /* Attach a second dummy i2c_client to the test register address */
        ab3100->testreg_client = i2c_new_dummy(client->adapter,
-                                                    client->addr + 1);
+                                              client->addr + 1);
        if (!ab3100->testreg_client) {
                err = -ENOMEM;
                goto exit_no_testreg_client;
@@ -931,13 +931,13 @@ static int __devinit ab3100_probe(struct i2c_client *client,
        if (err)
                goto exit_no_setup;
 
-       err = request_threaded_irq(client->irq, NULL, ab3100_irq_handler,
-                               IRQF_ONESHOT, "ab3100-core", ab3100);
-       /* This real unpredictable IRQ is of course sampled for entropy */
-       rand_initialize_irq(client->irq);
-
+       err = devm_request_threaded_irq(&client->dev,
+                                       client->irq, NULL, ab3100_irq_handler,
+                                       IRQF_ONESHOT, "ab3100-core", ab3100);
        if (err)
                goto exit_no_irq;
+       /* This real unpredictable IRQ is of course sampled for entropy */
+       rand_initialize_irq(client->irq);
 
        err = abx500_register_ops(&client->dev, &ab3100_ops);
        if (err)
@@ -962,7 +962,6 @@ static int __devinit ab3100_probe(struct i2c_client *client,
        i2c_unregister_device(ab3100->testreg_client);
  exit_no_testreg_client:
  exit_no_detect:
-       kfree(ab3100);
        return err;
 }
 
@@ -972,16 +971,8 @@ static int __devexit ab3100_remove(struct i2c_client *client)
 
        /* Unregister subdevices */
        mfd_remove_devices(&client->dev);
-
        ab3100_remove_debugfs();
        i2c_unregister_device(ab3100->testreg_client);
-
-       /*
-        * At this point, all subscribers should have unregistered
-        * their notifiers so deactivate IRQ
-        */
-       free_irq(client->irq, ab3100);
-       kfree(ab3100);
        return 0;
 }