File tree Expand file tree Collapse file tree 4 files changed +44
-0
lines changed Expand file tree Collapse file tree 4 files changed +44
-0
lines changed Original file line number Diff line number Diff line change @@ -284,6 +284,14 @@ struct nci_nfcee_discover_cmd {
284284 __u8 discovery_action ;
285285} __packed ;
286286
287+ #define NCI_OP_NFCEE_MODE_SET_CMD nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x01)
288+ #define NCI_NFCEE_DISABLE 0x00
289+ #define NCI_NFCEE_ENABLE 0x01
290+ struct nci_nfcee_mode_set_cmd {
291+ __u8 nfcee_id ;
292+ __u8 nfcee_mode ;
293+ } __packed ;
294+
287295/* ----------------------- */
288296/* ---- NCI Responses ---- */
289297/* ----------------------- */
@@ -333,6 +341,7 @@ struct nci_nfcee_discover_rsp {
333341 __u8 num_nfcee ;
334342} __packed ;
335343
344+ #define NCI_OP_NFCEE_MODE_SET_RSP nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x01)
336345/* --------------------------- */
337346/* ---- NCI Notifications ---- */
338347/* --------------------------- */
Original file line number Diff line number Diff line change @@ -185,6 +185,7 @@ int nci_recv_frame(struct nci_dev *ndev, struct sk_buff *skb);
185185int nci_set_config (struct nci_dev * ndev , __u8 id , size_t len , __u8 * val );
186186
187187int nci_nfcee_discover (struct nci_dev * ndev , u8 action );
188+ int nci_nfcee_mode_set (struct nci_dev * ndev , u8 nfcee_id , u8 nfcee_mode );
188189
189190static inline struct sk_buff * nci_skb_alloc (struct nci_dev * ndev ,
190191 unsigned int len ,
Original file line number Diff line number Diff line change @@ -486,6 +486,27 @@ int nci_nfcee_discover(struct nci_dev *ndev, u8 action)
486486}
487487EXPORT_SYMBOL (nci_nfcee_discover );
488488
489+ static void nci_nfcee_mode_set_req (struct nci_dev * ndev , unsigned long opt )
490+ {
491+ struct nci_nfcee_mode_set_cmd * cmd =
492+ (struct nci_nfcee_mode_set_cmd * )opt ;
493+
494+ nci_send_cmd (ndev , NCI_OP_NFCEE_MODE_SET_CMD ,
495+ sizeof (struct nci_nfcee_mode_set_cmd ), cmd );
496+ }
497+
498+ int nci_nfcee_mode_set (struct nci_dev * ndev , u8 nfcee_id , u8 nfcee_mode )
499+ {
500+ struct nci_nfcee_mode_set_cmd cmd ;
501+
502+ cmd .nfcee_id = nfcee_id ;
503+ cmd .nfcee_mode = nfcee_mode ;
504+
505+ return nci_request (ndev , nci_nfcee_mode_set_req , (unsigned long )& cmd ,
506+ msecs_to_jiffies (NCI_CMD_TIMEOUT ));
507+ }
508+ EXPORT_SYMBOL (nci_nfcee_mode_set );
509+
489510static int nci_set_local_general_bytes (struct nfc_dev * nfc_dev )
490511{
491512 struct nci_dev * ndev = nfc_get_drvdata (nfc_dev );
Original file line number Diff line number Diff line change @@ -213,6 +213,15 @@ static void nci_nfcee_discover_rsp_packet(struct nci_dev *ndev,
213213 nci_req_complete (ndev , discover_rsp -> status );
214214}
215215
216+ static void nci_nfcee_mode_set_rsp_packet (struct nci_dev * ndev ,
217+ struct sk_buff * skb )
218+ {
219+ __u8 status = skb -> data [0 ];
220+
221+ pr_debug ("status 0x%x\n" , status );
222+ nci_req_complete (ndev , status );
223+ }
224+
216225void nci_rsp_packet (struct nci_dev * ndev , struct sk_buff * skb )
217226{
218227 __u16 rsp_opcode = nci_opcode (skb -> data );
@@ -262,6 +271,10 @@ void nci_rsp_packet(struct nci_dev *ndev, struct sk_buff *skb)
262271 nci_nfcee_discover_rsp_packet (ndev , skb );
263272 break ;
264273
274+ case NCI_OP_NFCEE_MODE_SET_RSP :
275+ nci_nfcee_mode_set_rsp_packet (ndev , skb );
276+ break ;
277+
265278 default :
266279 pr_err ("unknown rsp opcode 0x%x\n" , rsp_opcode );
267280 break ;
You can’t perform that action at this time.
0 commit comments