mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-22 22:24:13 +07:00
e07c99b07a
The IRQ output of the bcm bt-device is really a level IRQ signal, which
signals a logical high as long as the device's buffer contains data. Since
the draining in the buffer is done in the tty driver, we cannot (easily)
wait in a threaded interrupt handler for the draining, after which the
IRQ should go low again.
So instead we treat the IRQ as an edge interrupt. This opens the window
for a theoretical race where we wakeup, read some data and then autosuspend
*before* the IRQ has gone (logical) low, followed by the device just at
that moment receiving more data, causing the IRQ to stay high and we never
see an edge.
Since we call pm_runtime_mark_last_busy() on every received byte, there
should be plenty time for the IRQ to go (logical) low before we ever
suspend, so this should never happen, but after commit
|
||
---|---|---|
.. | ||
ath3k.c | ||
bcm203x.c | ||
bfusb.c | ||
bluecard_cs.c | ||
bpa10x.c | ||
bt3c_cs.c | ||
btbcm.c | ||
btbcm.h | ||
btintel.c | ||
btintel.h | ||
btmrvl_debugfs.c | ||
btmrvl_drv.h | ||
btmrvl_main.c | ||
btmrvl_sdio.c | ||
btmrvl_sdio.h | ||
btqca.c | ||
btqca.h | ||
btqcomsmd.c | ||
btrtl.c | ||
btrtl.h | ||
btsdio.c | ||
btuart_cs.c | ||
btusb.c | ||
btwilink.c | ||
dtl1_cs.c | ||
hci_ag6xx.c | ||
hci_ath.c | ||
hci_bcm.c | ||
hci_bcsp.c | ||
hci_h4.c | ||
hci_h5.c | ||
hci_intel.c | ||
hci_ldisc.c | ||
hci_ll.c | ||
hci_mrvl.c | ||
hci_nokia.c | ||
hci_qca.c | ||
hci_serdev.c | ||
hci_uart.h | ||
hci_vhci.c | ||
Kconfig | ||
Makefile |