Merge tag 'sound-3.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[linux-2.6-microblaze.git] / drivers / misc / mei / nfc.c
index 994ca4a..a58320c 100644 (file)
@@ -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;
@@ -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,7 +483,7 @@ 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;
 
@@ -547,12 +549,16 @@ 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);
+
+       mutex_lock(&dev->device_lock);
        if (ndev->cl && ndev->cl->device)
                mei_cl_remove_device(ndev->cl->device);
 
        mei_nfc_free(ndev);
+       mutex_unlock(&dev->device_lock);
 }