| From foo@baz Sun 01 Mar 2020 10:24:06 AM CET |
| From: Dmitry Osipenko <digetx@gmail.com> |
| Date: Wed, 19 Feb 2020 18:01:22 +0300 |
| Subject: nfc: pn544: Fix occasional HW initialization failure |
| |
| From: Dmitry Osipenko <digetx@gmail.com> |
| |
| [ Upstream commit c3331d2fe3fd4d5e321f2467d01f72de7edfb5d0 ] |
| |
| The PN544 driver checks the "enable" polarity during of driver's probe and |
| it's doing that by turning ON and OFF NFC with different polarities until |
| enabling succeeds. It takes some time for the hardware to power-down, and |
| thus, to deassert the IRQ that is raised by turning ON the hardware. |
| Since the delay after last power-down of the polarity-checking process is |
| missed in the code, the interrupt may trigger immediately after installing |
| the IRQ handler (right after the checking is done), which results in IRQ |
| handler trying to touch the disabled HW and ends with marking NFC as |
| 'DEAD' during of the driver's probe: |
| |
| pn544_hci_i2c 1-002a: NFC: nfc_en polarity : active high |
| pn544_hci_i2c 1-002a: NFC: invalid len byte |
| shdlc: llc_shdlc_recv_frame: NULL Frame -> link is dead |
| |
| This patch fixes the occasional NFC initialization failure on Nexus 7 |
| device. |
| |
| Signed-off-by: Dmitry Osipenko <digetx@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/nfc/pn544/i2c.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/drivers/nfc/pn544/i2c.c |
| +++ b/drivers/nfc/pn544/i2c.c |
| @@ -225,6 +225,7 @@ static void pn544_hci_i2c_platform_init( |
| |
| out: |
| gpiod_set_value_cansleep(phy->gpiod_en, !phy->en_polarity); |
| + usleep_range(10000, 15000); |
| } |
| |
| static void pn544_hci_i2c_enable_mode(struct pn544_i2c_phy *phy, int run_mode) |