diff options
Diffstat (limited to 'drivers/misc/mei/nfc.c')
| -rw-r--r-- | drivers/misc/mei/nfc.c | 38 | 
1 files changed, 20 insertions, 18 deletions
diff --git a/drivers/misc/mei/nfc.c b/drivers/misc/mei/nfc.c index d0c6907dfd9..3095fc514a6 100644 --- a/drivers/misc/mei/nfc.c +++ b/drivers/misc/mei/nfc.c @@ -92,7 +92,7 @@ struct mei_nfc_hci_hdr {   * @cl: NFC host client   * @cl_info: NFC info host client   * @init_work: perform connection to the info client - * @fw_ivn: NFC Intervace Version Number + * @fw_ivn: NFC Interface Version Number   * @vendor_id: NFC manufacturer ID   * @radio_type: NFC radio type   */ @@ -163,7 +163,7 @@ static int mei_nfc_build_bus_name(struct mei_nfc_dev *ndev)  			return 0;  		default: -			dev_err(&dev->pdev->dev, "Unknow radio type 0x%x\n", +			dev_err(&dev->pdev->dev, "Unknown radio type 0x%x\n",  				ndev->radio_type);  			return -EINVAL; @@ -175,14 +175,14 @@ static int mei_nfc_build_bus_name(struct mei_nfc_dev *ndev)  			ndev->bus_name = "pn544";  			return 0;  		default: -			dev_err(&dev->pdev->dev, "Unknow radio type 0x%x\n", +			dev_err(&dev->pdev->dev, "Unknown radio type 0x%x\n",  				ndev->radio_type);  			return -EINVAL;  		}  	default: -		dev_err(&dev->pdev->dev, "Unknow vendor ID 0x%x\n", +		dev_err(&dev->pdev->dev, "Unknown vendor ID 0x%x\n",  			ndev->vendor_id);  		return -EINVAL; @@ -364,7 +364,7 @@ static int mei_nfc_send(struct mei_cl_device *cldev, u8 *buf, size_t length)  	if (!wait_event_interruptible_timeout(ndev->send_wq,  				ndev->recv_req_id == ndev->req_id, HZ)) {  		dev_err(&dev->pdev->dev, "NFC MEI command timeout\n"); -		err = -ETIMEDOUT; +		err = -ETIME;  	} else {  		ndev->req_id++;  	} @@ -428,7 +428,7 @@ static void mei_nfc_init(struct work_struct *work)  	mutex_unlock(&dev->device_lock);  	if (mei_nfc_if_version(ndev) < 0) { -		dev_err(&dev->pdev->dev, "Could not get the NFC interfave version"); +		dev_err(&dev->pdev->dev, "Could not get the NFC interface version");  		goto err;  	} @@ -469,7 +469,9 @@ static void mei_nfc_init(struct work_struct *work)  	return;  err: +	mutex_lock(&dev->device_lock);  	mei_nfc_free(ndev); +	mutex_unlock(&dev->device_lock);  	return;  } @@ -481,12 +483,15 @@ int mei_nfc_host_init(struct mei_device *dev)  	struct mei_cl *cl_info, *cl = NULL;  	int i, ret; -	/* already initialzed */ +	/* already initialized */  	if (ndev->cl_info)  		return 0; -	cl_info = mei_cl_allocate(dev); -	cl = mei_cl_allocate(dev); +	ndev->cl_info = mei_cl_allocate(dev); +	ndev->cl = mei_cl_allocate(dev); + +	cl = ndev->cl; +	cl_info = ndev->cl_info;  	if (!cl || !cl_info) {  		ret = -ENOMEM; @@ -497,7 +502,7 @@ int mei_nfc_host_init(struct mei_device *dev)  	i = mei_me_cl_by_uuid(dev, &mei_nfc_info_guid);  	if (i < 0) {  		dev_info(&dev->pdev->dev, "nfc: failed to find the client\n"); -		ret = -ENOENT; +		ret = -ENOTTY;  		goto err;  	} @@ -515,7 +520,7 @@ int mei_nfc_host_init(struct mei_device *dev)  	i = mei_me_cl_by_uuid(dev, &mei_nfc_guid);  	if (i < 0) {  		dev_info(&dev->pdev->dev, "nfc: failed to find the client\n"); -		ret = -ENOENT; +		ret = -ENOTTY;  		goto err;  	} @@ -527,10 +532,9 @@ int mei_nfc_host_init(struct mei_device *dev)  	cl->device_uuid = mei_nfc_guid; +  	list_add_tail(&cl->device_link, &dev->device_list); -	ndev->cl_info = cl_info; -	ndev->cl = cl;  	ndev->req_id = 1;  	INIT_WORK(&ndev->init_work, mei_nfc_init); @@ -545,12 +549,10 @@ err:  	return ret;  } -void mei_nfc_host_exit(void) +void mei_nfc_host_exit(struct mei_device *dev)  {  	struct mei_nfc_dev *ndev = &nfc_dev; +	cancel_work_sync(&ndev->init_work); +} -	if (ndev->cl && ndev->cl->device) -		mei_cl_remove_device(ndev->cl->device); -	mei_nfc_free(ndev); -}  | 
