Explorar o código

NFC: NCI: Add set_config API

This API can be used by drivers to send their custom
configuration using SET_CONFIG NCI command to the device.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Amitkumar Karwar %!s(int64=11) %!d(string=hai) anos
pai
achega
22c15bf30b
Modificáronse 2 ficheiros con 17 adicións e 0 borrados
  1. 1 0
      include/net/nfc/nci_core.h
  2. 16 0
      net/nfc/nci/core.c

+ 1 - 0
include/net/nfc/nci_core.h

@@ -155,6 +155,7 @@ void nci_free_device(struct nci_dev *ndev);
 int nci_register_device(struct nci_dev *ndev);
 int nci_register_device(struct nci_dev *ndev);
 void nci_unregister_device(struct nci_dev *ndev);
 void nci_unregister_device(struct nci_dev *ndev);
 int nci_recv_frame(struct nci_dev *ndev, struct sk_buff *skb);
 int nci_recv_frame(struct nci_dev *ndev, struct sk_buff *skb);
+int nci_set_config(struct nci_dev *ndev, __u8 id, size_t len, __u8 *val);
 
 
 static inline struct sk_buff *nci_skb_alloc(struct nci_dev *ndev,
 static inline struct sk_buff *nci_skb_alloc(struct nci_dev *ndev,
 					    unsigned int len,
 					    unsigned int len,

+ 16 - 0
net/nfc/nci/core.c

@@ -413,6 +413,22 @@ static int nci_dev_down(struct nfc_dev *nfc_dev)
 	return nci_close_device(ndev);
 	return nci_close_device(ndev);
 }
 }
 
 
+int nci_set_config(struct nci_dev *ndev, __u8 id, size_t len, __u8 *val)
+{
+	struct nci_set_config_param param;
+
+	if (!val || !len)
+		return 0;
+
+	param.id = id;
+	param.len = len;
+	param.val = val;
+
+	return __nci_request(ndev, nci_set_config_req, (unsigned long)&param,
+			     msecs_to_jiffies(NCI_SET_CONFIG_TIMEOUT));
+}
+EXPORT_SYMBOL(nci_set_config);
+
 static int nci_set_local_general_bytes(struct nfc_dev *nfc_dev)
 static int nci_set_local_general_bytes(struct nfc_dev *nfc_dev)
 {
 {
 	struct nci_dev *ndev = nfc_get_drvdata(nfc_dev);
 	struct nci_dev *ndev = nfc_get_drvdata(nfc_dev);