diff options
author | Michael Walle <michael@walle.cc> | 2022-07-12 19:00:10 +0200 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-07-13 18:52:12 -0700 |
commit | 5dc0f7491f9af356a3c78d56fe55890ebf37a1ac (patch) | |
tree | 86135071ed4e39105ebc4d7df1ce1f047beb5468 /drivers/nfc | |
parent | 6a605eb1d71ea8cec50bdf7151c772c599a5fb70 (diff) |
NFC: nxp-nci: add error reporting
The PN7160 supports error notifications. Add the appropriate callbacks.
Signed-off-by: Michael Walle <michael@walle.cc>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20220712170011.2990629-1-michael@walle.cc
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/nfc')
-rw-r--r-- | drivers/nfc/nxp-nci/core.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/nfc/nxp-nci/core.c b/drivers/nfc/nxp-nci/core.c index 518e2afb43a8..7c93d484dc1b 100644 --- a/drivers/nfc/nxp-nci/core.c +++ b/drivers/nfc/nxp-nci/core.c @@ -27,6 +27,9 @@ NFC_PROTO_ISO14443_B_MASK | \ NFC_PROTO_NFC_DEP_MASK) +#define NXP_NCI_RF_PLL_UNLOCKED_NTF nci_opcode_pack(NCI_GID_RF_MGMT, 0x21) +#define NXP_NCI_RF_TXLDO_ERROR_NTF nci_opcode_pack(NCI_GID_RF_MGMT, 0x23) + static int nxp_nci_open(struct nci_dev *ndev) { struct nxp_nci_info *info = nci_get_drvdata(ndev); @@ -83,11 +86,42 @@ static int nxp_nci_send(struct nci_dev *ndev, struct sk_buff *skb) return r; } +static int nxp_nci_rf_pll_unlocked_ntf(struct nci_dev *ndev, + struct sk_buff *skb) +{ + nfc_err(&ndev->nfc_dev->dev, + "PLL didn't lock. Missing or unstable clock?\n"); + + return 0; +} + +static int nxp_nci_rf_txldo_error_ntf(struct nci_dev *ndev, + struct sk_buff *skb) +{ + nfc_err(&ndev->nfc_dev->dev, + "RF transmitter couldn't start. Bad power and/or configuration?\n"); + + return 0; +} + +static const struct nci_driver_ops nxp_nci_core_ops[] = { + { + .opcode = NXP_NCI_RF_PLL_UNLOCKED_NTF, + .ntf = nxp_nci_rf_pll_unlocked_ntf, + }, + { + .opcode = NXP_NCI_RF_TXLDO_ERROR_NTF, + .ntf = nxp_nci_rf_txldo_error_ntf, + }, +}; + static const struct nci_ops nxp_nci_ops = { .open = nxp_nci_open, .close = nxp_nci_close, .send = nxp_nci_send, .fw_download = nxp_nci_fw_download, + .core_ops = nxp_nci_core_ops, + .n_core_ops = ARRAY_SIZE(nxp_nci_core_ops), }; int nxp_nci_probe(void *phy_id, struct device *pdev, |