int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name) { int rc = 0; pr_debug("%s do firmware %s\n", dev_name(&dev->dev), firmware_name); device_lock(&dev->dev); if (dev->shutting_down) { rc = -ENODEV; }else if (dev->dev_up) { rc = -EBUSY; }else if (!dev->ops->fw_download) { rc = -EOPNOTSUPP; }else{ dev->fw_download_in_progress = true; rc = dev->ops->fw_download(dev, firmware_name); if (rc) dev->fw_download_in_progress = false; } device_unlock(&dev->dev); return rc; }