Input: pm8xxx-vib - handle separate enable register
authorDamien Riegel <damien.riegel@savoirfairelinux.com>
Tue, 4 Apr 2017 23:27:36 +0000 (16:27 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 5 Apr 2017 15:52:38 +0000 (08:52 -0700)
Some PMIC vibrator IPs use a separate enable register to turn the
vibrator on and off. To detect if a vibrator uses this feature, rely on
the enable_mask being non-zero.

Signed-off-by: Damien Riegel <damien.riegel@savoirfairelinux.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/misc/pm8xxx-vibrator.c

index cf94fa3f5f2eb2cdf266cfa7ee42f4120259a8c1..3dc8ffbc6b9de8ce47c121f53fdf8e1a363facc0 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/input.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/regmap.h>
@@ -26,6 +27,9 @@
 #define MAX_FF_SPEED           0xff
 
 struct pm8xxx_regs {
+       unsigned int enable_addr;
+       unsigned int enable_mask;
+
        unsigned int drv_addr;
        unsigned int drv_mask;
        unsigned int drv_shift;
@@ -82,7 +86,12 @@ static int pm8xxx_vib_set(struct pm8xxx_vib *vib, bool on)
                return rc;
 
        vib->reg_vib_drv = val;
-       return 0;
+
+       if (regs->enable_mask)
+               rc = regmap_update_bits(vib->regmap, regs->enable_addr,
+                                       on ? regs->enable_mask : 0, val);
+
+       return rc;
 }
 
 /**