]> git.openfabrics.org - ~shefty/rdma-dev.git/blobdiff - drivers/hwmon/lis3lv02d.c
hwmon: lis3: New parameters to platform data
[~shefty/rdma-dev.git] / drivers / hwmon / lis3lv02d.c
index 7448411f51eaa7272094ecceb6c37d4ba4f86ed9..3109eb8648ce6c07aaefaae130f23dfd21ac3acc 100644 (file)
@@ -740,16 +740,16 @@ static void lis3lv02d_8b_configure(struct lis3lv02d *dev,
        if (p->wakeup_flags) {
                dev->write(dev, FF_WU_CFG_1, p->wakeup_flags);
                dev->write(dev, FF_WU_THS_1, p->wakeup_thresh & 0x7f);
        if (p->wakeup_flags) {
                dev->write(dev, FF_WU_CFG_1, p->wakeup_flags);
                dev->write(dev, FF_WU_THS_1, p->wakeup_thresh & 0x7f);
-               /* default to 2.5ms for now */
-               dev->write(dev, FF_WU_DURATION_1, 1);
+               /* pdata value + 1 to keep this backward compatible*/
+               dev->write(dev, FF_WU_DURATION_1, p->duration1 + 1);
                ctrl2 ^= HP_FF_WU1; /* Xor to keep compatible with old pdata*/
        }
 
        if (p->wakeup_flags2) {
                dev->write(dev, FF_WU_CFG_2, p->wakeup_flags2);
                dev->write(dev, FF_WU_THS_2, p->wakeup_thresh2 & 0x7f);
                ctrl2 ^= HP_FF_WU1; /* Xor to keep compatible with old pdata*/
        }
 
        if (p->wakeup_flags2) {
                dev->write(dev, FF_WU_CFG_2, p->wakeup_flags2);
                dev->write(dev, FF_WU_THS_2, p->wakeup_thresh2 & 0x7f);
-               /* default to 2.5ms for now */
-               dev->write(dev, FF_WU_DURATION_2, 1);
+               /* pdata value + 1 to keep this backward compatible*/
+               dev->write(dev, FF_WU_DURATION_2, p->duration2 + 1);
                ctrl2 ^= HP_FF_WU2; /* Xor to keep compatible with old pdata*/
        }
        /* Configure hipass filters */
                ctrl2 ^= HP_FF_WU2; /* Xor to keep compatible with old pdata*/
        }
        /* Configure hipass filters */
@@ -759,8 +759,8 @@ static void lis3lv02d_8b_configure(struct lis3lv02d *dev,
                err = request_threaded_irq(p->irq2,
                                        NULL,
                                        lis302dl_interrupt_thread2_8b,
                err = request_threaded_irq(p->irq2,
                                        NULL,
                                        lis302dl_interrupt_thread2_8b,
-                                       IRQF_TRIGGER_RISING |
-                                       IRQF_ONESHOT,
+                                       IRQF_TRIGGER_RISING | IRQF_ONESHOT |
+                                       (p->irq_flags2 & IRQF_TRIGGER_MASK),
                                        DRIVER_NAME, &lis3_dev);
                if (err < 0)
                        printk(KERN_ERR DRIVER_NAME
                                        DRIVER_NAME, &lis3_dev);
                if (err < 0)
                        printk(KERN_ERR DRIVER_NAME
@@ -776,6 +776,7 @@ int lis3lv02d_init_device(struct lis3lv02d *dev)
 {
        int err;
        irq_handler_t thread_fn;
 {
        int err;
        irq_handler_t thread_fn;
+       int irq_flags = 0;
 
        dev->whoami = lis3lv02d_read_8(dev, WHO_AM_I);
 
 
        dev->whoami = lis3lv02d_read_8(dev, WHO_AM_I);
 
@@ -847,9 +848,14 @@ int lis3lv02d_init_device(struct lis3lv02d *dev)
                if (dev->whoami == WAI_8B)
                        lis3lv02d_8b_configure(dev, p);
 
                if (dev->whoami == WAI_8B)
                        lis3lv02d_8b_configure(dev, p);
 
+               irq_flags = p->irq_flags1 & IRQF_TRIGGER_MASK;
+
                dev->irq_cfg = p->irq_cfg;
                if (p->irq_cfg)
                        dev->write(dev, CTRL_REG3, p->irq_cfg);
                dev->irq_cfg = p->irq_cfg;
                if (p->irq_cfg)
                        dev->write(dev, CTRL_REG3, p->irq_cfg);
+
+               if (p->default_rate)
+                       lis3lv02d_set_odr(p->default_rate);
        }
 
        /* bail if we did not get an IRQ from the bus layer */
        }
 
        /* bail if we did not get an IRQ from the bus layer */
@@ -877,7 +883,8 @@ int lis3lv02d_init_device(struct lis3lv02d *dev)
 
        err = request_threaded_irq(dev->irq, lis302dl_interrupt,
                                thread_fn,
 
        err = request_threaded_irq(dev->irq, lis302dl_interrupt,
                                thread_fn,
-                               IRQF_TRIGGER_RISING | IRQF_ONESHOT,
+                               IRQF_TRIGGER_RISING | IRQF_ONESHOT |
+                               irq_flags,
                                DRIVER_NAME, &lis3_dev);
 
        if (err < 0) {
                                DRIVER_NAME, &lis3_dev);
 
        if (err < 0) {