linux/drivers/input/misc
H. Nikolaus Schaller 28a994fad9 Input: twl6040-vibra - fix atomic schedule panic
commit c6f39257c9 ("mfd: twl6040: Use regmap for register cache")

did remove the private cache for the vibra control registers and replaced
access within twl6040_get_vibralr_status() by calls to regmap. This is OK,
as long as twl6040_get_vibralr_status() uses already cached values or is
not called from interrupt context. But we call this in vibra_play() for
checking that the vibrator is not configured for audio mode.

The result is a "BUG: scheduling while atomic" if the first use of the
twl6040 is a vibra effect, because the first fetch is by reading the
twl6040 registers through (blocking) i2c and not from the cache.

As soon as the regmap has cached the status, further calls are fine.

The solution is to move the condition to the work() function which
runs in context that can block.

The original code returns -EBUSY, but the return value of ->play()
functions is ignored anyways. Hence, we do not loose functionality
by not returning an error but just reporting the issue to INFO loglevel.

Tested-on: Pyra (omap5) prototype
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
2016-04-25 14:06:38 -07:00
..
88pm80x_onkey.c
88pm860x_onkey.c
Kconfig Input: sirfsoc-onkey - allow modular build 2016-01-27 15:55:14 -08:00
Makefile
ab8500-ponkey.c
ad714x-i2c.c Input: ad714x - convert to using managed resources 2015-09-19 11:42:39 -07:00
ad714x-spi.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2015-11-06 11:57:41 -08:00
ad714x.c Input: ad714x - convert to using managed resources 2015-09-19 11:42:39 -07:00
ad714x.h Input: ad714x - convert to using managed resources 2015-09-19 11:42:39 -07:00
adxl34x-i2c.c
adxl34x-spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
adxl34x.c
adxl34x.h
apanel.c
arizona-haptics.c Input: arizona-haptic - don't assign input_dev parent 2016-04-17 05:24:52 -07:00
ati_remote2.c Input: ati_remote2 - fix crashes on detecting device with invalid descriptor 2016-03-23 17:29:29 -07:00
atlas_btns.c
axp20x-pek.c
bfin_rotary.c
bma150.c Input: bma150 - constify bma150_cfg structure 2016-01-02 21:08:52 -08:00
cm109.c
cma3000_d0x.c
cma3000_d0x.h
cma3000_d0x_i2c.c
cobalt_btns.c
da9052_onkey.c
da9055_onkey.c
da9063_onkey.c Input: da9063 - report KEY_POWER instead of KEY_SLEEP during power key-press 2015-12-12 21:05:09 -08:00
dm355evm_keys.c
drv260x.c
drv2665.c
drv2667.c
e3x0-button.c
gp2ap002a00f.c
gpio-beeper.c
gpio_tilt_polled.c
hp_sdc_rtc.c Input: hp_sdc_rtc - fix y2038 problem in proc_show 2015-10-22 23:31:28 -07:00
ideapad_slidebar.c
ims-pcu.c Input: ims-pcu - sanity check against missing interfaces 2016-03-17 14:16:57 -07:00
ixp4xx-beeper.c
keyspan_remote.c
kxtj9.c Input: kxtj9 - remove unneeded retval variable 2015-10-02 11:44:17 -07:00
m68kspkr.c
max8925_onkey.c
max8997_haptic.c
max77693-haptic.c
mc13783-pwrbutton.c
mma8450.c
mpu3050.c
palmas-pwrbutton.c
pcap_keys.c
pcf8574_keypad.c
pcf50633-input.c
pcspkr.c
pm8xxx-vibrator.c
pm8941-pwrkey.c Input: pm8941-pwrkey - remove unneded semicolon 2015-09-19 11:39:03 -07:00
pmic8xxx-pwrkey.c Input: pmic8xxx-pwrkey - fix algorithm for converting trigger delay 2016-04-17 05:24:53 -07:00
powermate.c Input: powermate - fix oops with malicious USB descriptors 2016-03-14 09:36:49 -07:00
pwm-beeper.c
rb532_button.c
regulator-haptic.c
retu-pwrbutton.c
rotary_encoder.c Input: rotary-encoder - support more than 2 gpios as input 2016-03-02 15:48:05 -08:00
sgi_btns.c
sirfsoc-onkey.c Input: sirfsoc-onkey - allow modular build 2016-01-27 15:55:14 -08:00
soc_button_array.c
sparcspkr.c Input: sparcspkr - use platform_register/unregister_drivers() 2015-12-02 10:02:50 -08:00
tps65218-pwrbutton.c
twl4030-pwrbutton.c
twl4030-vibra.c Input: twl4030-vibra - do not reparent to grandparent 2016-04-20 14:39:46 -07:00
twl6040-vibra.c Input: twl6040-vibra - fix atomic schedule panic 2016-04-25 14:06:38 -07:00
uinput.c Input: uinput - sanity check on ff_effects_max and EV_FF 2015-12-18 17:48:52 -08:00
wistron_btns.c
wm831x-on.c
xen-kbdfront.c Input: xen - check return value of xenbus_printf 2015-10-22 23:32:01 -07:00
yealink.c
yealink.h