Input: twl6040-vibra: Check the selected path for vibra
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Wed, 12 Oct 2011 08:57:56 +0000 (11:57 +0300)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 12 Oct 2011 10:48:51 +0000 (11:48 +0100)
The VIBSELL/R bit in the VIBCTLL/R register tells the source of the data,
which is going to be used to drive the attached motor(s).
Do not allow effect execution if any of the channels are set to receive
audio data.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/input/misc/twl6040-vibra.c

index cb741858229a9d2fff2337fe910c2d61739f3c40..2a828e53db58ef0d8de39d2847495b7059abce60 100644 (file)
@@ -201,6 +201,13 @@ static int vibra_play(struct input_dev *input, void *data,
        struct vibra_info *info = input_get_drvdata(input);
        int ret;
 
+       /* Do not allow effect, while the routing is set to use audio */
+       ret = twl6040_get_vibralr_status(info->twl6040);
+       if (ret & TWL6040_VIBSEL) {
+               dev_info(&input->dev, "Vibra is configured for audio\n");
+               return -EBUSY;
+       }
+
        info->weak_speed = effect->u.rumble.weak_magnitude;
        info->strong_speed = effect->u.rumble.strong_magnitude;
        info->direction = effect->direction < EFFECT_DIR_180_DEG ? 1 : -1;