regulator: AB3100 support
[safe/jmp/linux-2.6] / drivers / mfd / ab3100-core.c
index 377ec2b..c533f86 100644 (file)
@@ -14,7 +14,6 @@
 #include <linux/platform_device.h>
 #include <linux/device.h>
 #include <linux/interrupt.h>
-#include <linux/workqueue.h>
 #include <linux/debugfs.h>
 #include <linux/seq_file.h>
 #include <linux/uaccess.h>
@@ -422,7 +421,7 @@ static irqreturn_t ab3100_irq_handler(int irq, void *data)
         * stuff and we will re-enable the interrupts once th
         * worker has finished.
         */
-       disable_irq(ab3100->i2c_client->irq);
+       disable_irq_nosync(irq);
        schedule_work(&ab3100->work);
        return IRQ_HANDLED;
 }
@@ -667,7 +666,7 @@ ab3100_init_settings[] = {
                .setting = 0x01
        }, {
                .abreg = AB3100_IMRB1,
-               .setting = 0xFF
+               .setting = 0xBF
        }, {
                .abreg = AB3100_IMRB2,
                .setting = 0xFF
@@ -838,6 +837,8 @@ static int __init ab3100_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
 {
        struct ab3100 *ab3100;
+       struct ab3100_platform_data *ab3100_plf_data =
+               client->dev.platform_data;
        int err;
        int i;
 
@@ -921,6 +922,8 @@ static int __init ab3100_probe(struct i2c_client *client,
        for (i = 0; i < ARRAY_SIZE(ab3100_platform_devs); i++) {
                ab3100_platform_devs[i]->dev.parent =
                        &client->dev;
+               ab3100_platform_devs[i]->dev.platform_data =
+                       ab3100_plf_data;
                platform_set_drvdata(ab3100_platform_devs[i], ab3100);
        }