Hi Christophe,
Just a couple of nitpicks:
On Tue, Oct 20, 2015 at 11:48:09PM +0200, Christophe Ricard wrote:
> diff --git a/drivers/nfc/st-nci/Makefile b/drivers/nfc/st-nci/Makefile
> index 348ce76..60e569b 100644
> --- a/drivers/nfc/st-nci/Makefile
> +++ b/drivers/nfc/st-nci/Makefile
> @@ -2,7 +2,7 @@
> # Makefile for ST21NFCB NCI based NFC driver
> #
>
> -st-nci-objs = ndlc.o core.o st-nci_se.o
> +st-nci-objs = ndlc.o core.o st-nci_se.o st-nci_vendor_cmds.o
Please rename that file to vendor_cmds.c.
I pushed a change to rename st-nci_se.c to se.c already, to keep the
file names consistent there.
> obj-$(CONFIG_NFC_ST_NCI) += st-nci.o
>
> st-nci_i2c-objs = i2c.o
> diff --git a/drivers/nfc/st-nci/core.c b/drivers/nfc/st-nci/core.c
> index c419d39..fd2a5ca 100644
> --- a/drivers/nfc/st-nci/core.c
> +++ b/drivers/nfc/st-nci/core.c
> @@ -25,6 +25,7 @@
>
> #include "st-nci.h"
> #include "st-nci_se.h"
> +#include "st-nci_vendor_cmds.h"
Ditto: Please rename it to vendor_cmds.h.
> +void st_nci_hci_loopback_event_received(struct nci_dev *ndev, u8 event,
> + struct sk_buff *skb)
> +{
> + struct st_nci_info *info = nci_get_drvdata(ndev);
> +
> + switch (event) {
> + case ST_NCI_EVT_POST_DATA:
> + info->vendor_info.rx_skb = skb;
> +
> + complete(&info->vendor_info.req_completion);
> + break;
> + }
Wouldn't it make sense to complete regardless of the event you're
receiving ?
Since you're checking for rx_skb after the completion, it's safe and
would prevent you from being stuck waiting for the right event in the
below routine.
> +static int st_nci_hci_loopback(struct nfc_dev *dev, void *data,
> + size_t data_len)
> +{
> + int r;
> + struct sk_buff *msg;
> + struct nci_dev *ndev = nfc_get_drvdata(dev);
> + struct st_nci_info *info = nci_get_drvdata(ndev);
> +
> + if (data_len <= 0)
> + return -EPROTO;
> +
> + reinit_completion(&info->vendor_info.req_completion);
> + info->vendor_info.rx_skb = NULL;
> +
> + r = nci_hci_send_event(ndev, NCI_HCI_LOOPBACK_GATE,
> + ST_NCI_EVT_POST_DATA, data, data_len);
> + if (r != data_len) {
> + r = -EPROTO;
> + goto exit;
> + }
> +
> + wait_for_completion_interruptible(&info->vendor_info.req_completion);
> +
> + if (!info->vendor_info.rx_skb ||
> + info->vendor_info.rx_skb->len != data_len) {
> + r = -EPROTO;
> + goto exit;
> + }
> +
> + msg = nfc_vendor_cmd_alloc_reply_skb(ndev->nfc_dev,
> + ST_NCI_VENDOR_OUI,
> + HCI_LOOPBACK,
> + info->vendor_info.rx_skb->len);
> + if (!msg) {
> + r = -ENOMEM;
> + goto free_skb;
> + }
> +
> + if (nla_put(msg, NFC_ATTR_VENDOR_DATA, info->vendor_info.rx_skb->len,
> + info->vendor_info.rx_skb->data)) {
> + kfree_skb(msg);
> + r = -ENOBUFS;
> + goto free_skb;
> + }
> +
> + r = nfc_vendor_cmd_reply(msg);
> +free_skb:
> + kfree_skb(info->vendor_info.rx_skb);
> +exit:
> + return r;
> +}
Cheers,
Samuel.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html