mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
c309a3e879
When the jack is partially inserted and then removed again it may be removed while the hpdet code is running. In this case the following may happen: 1. The "JACKDET rise" or ""JACKDET fall" IRQ triggers 2. arizona_jackdet runs and takes info->lock 3. The "HPDET" IRQ triggers 4. arizona_hpdet_irq runs, blocks on info->lock 5. arizona_jackdet calls arizona_stop_mic() and clears info->hpdet_done 6. arizona_jackdet releases info->lock 7. arizona_hpdet_irq now can continue running and: 7.1 Calls arizona_start_mic() (if a mic was detected) 7.2 sets info->hpdet_done Step 7 is undesirable / a bug: 7.1 causes the device to stay in a high power-state (with MICVDD enabled) 7.2 causes hpdet to not run on the next jack insertion, which in turn causes the EXTCON_JACK_HEADPHONE state to never get set This fixes both issues by skipping these 2 steps when arizona_hpdet_irq runs after the jack has been unplugged. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Tested-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Chanwoo Choi <cw00.choi@samsung.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> |
||
---|---|---|
.. | ||
devres.c | ||
extcon-adc-jack.c | ||
extcon-arizona.c | ||
extcon-axp288.c | ||
extcon-fsa9480.c | ||
extcon-gpio.c | ||
extcon-intel-cht-wc.c | ||
extcon-intel-int3496.c | ||
extcon-intel-mrfld.c | ||
extcon-intel.h | ||
extcon-max3355.c | ||
extcon-max8997.c | ||
extcon-max14577.c | ||
extcon-max77693.c | ||
extcon-max77843.c | ||
extcon-palmas.c | ||
extcon-ptn5150.c | ||
extcon-qcom-spmi-misc.c | ||
extcon-rt8973a.c | ||
extcon-rt8973a.h | ||
extcon-sm5502.c | ||
extcon-sm5502.h | ||
extcon-usb-gpio.c | ||
extcon-usbc-cros-ec.c | ||
extcon-usbc-tusb320.c | ||
extcon.c | ||
extcon.h | ||
Kconfig | ||
Makefile |