@ -343,6 +343,7 @@ struct pn533 {
u8 tgt_available_prots ;
u8 tgt_active_prot ;
u8 tgt_mode ;
} ;
struct pn533_frame {
@ -1158,6 +1159,8 @@ static int pn533_tm_get_data_complete(struct pn533 *dev, void *arg,
if ( params_len > 0 & & params [ 0 ] ! = 0 ) {
nfc_tm_deactivated ( dev - > nfc_dev ) ;
dev - > tgt_mode = 0 ;
kfree_skb ( skb_resp ) ;
return 0 ;
}
@ -1245,6 +1248,8 @@ static int pn533_init_target_complete(struct pn533 *dev, void *arg,
return rc ;
}
dev - > tgt_mode = 1 ;
queue_work ( dev - > wq , & dev - > tg_work ) ;
return 0 ;
@ -1397,6 +1402,12 @@ static int pn533_start_poll(struct nfc_dev *nfc_dev,
return - EBUSY ;
}
if ( dev - > tgt_mode ) {
nfc_dev_err ( & dev - > interface - > dev ,
" Cannot poll while already being activated " ) ;
return - EBUSY ;
}
if ( tm_protocols ) {
dev - > gb = nfc_get_local_general_bytes ( nfc_dev , & dev - > gb_len ) ;
if ( dev - > gb = = NULL )
@ -1725,7 +1736,15 @@ static int pn533_dep_link_down(struct nfc_dev *nfc_dev)
pn533_poll_reset_mod_list ( dev ) ;
pn533_deactivate_target ( nfc_dev , 0 ) ;
if ( dev - > tgt_mode | | dev - > tgt_active_prot ) {
pn533_send_ack ( dev , GFP_KERNEL ) ;
usb_kill_urb ( dev - > in_urb ) ;
}
dev - > tgt_active_prot = 0 ;
dev - > tgt_mode = 0 ;
skb_queue_purge ( & dev - > resp_q ) ;
return 0 ;
}
@ -1956,6 +1975,8 @@ static int pn533_tm_send_complete(struct pn533 *dev, void *arg,
if ( params_len > 0 & & params [ 0 ] ! = 0 ) {
nfc_tm_deactivated ( dev - > nfc_dev ) ;
dev - > tgt_mode = 0 ;
return 0 ;
}