Merge tag '4.16-minor-rc-SMB3-fixes' of git://git.samba.org/sfrench/cifs-2.6
[sfrench/cifs-2.6.git] / drivers / media / platform / s5p-mfc / s5p_mfc_ctrl.c
index 69ef9c23a99aed111ec7632b8c5cecd194188ec6..f95cd76af537455d6e034e074a2e4aaf5b407950 100644 (file)
@@ -55,6 +55,9 @@ int s5p_mfc_load_firmware(struct s5p_mfc_dev *dev)
         * into kernel. */
        mfc_debug_enter();
 
+       if (dev->fw_get_done)
+               return 0;
+
        for (i = MFC_FW_MAX_VERSIONS - 1; i >= 0; i--) {
                if (!dev->variant->fw_name[i])
                        continue;
@@ -75,13 +78,9 @@ int s5p_mfc_load_firmware(struct s5p_mfc_dev *dev)
                release_firmware(fw_blob);
                return -ENOMEM;
        }
-       if (!dev->fw_buf.virt) {
-               mfc_err("MFC firmware is not allocated\n");
-               release_firmware(fw_blob);
-               return -EINVAL;
-       }
        memcpy(dev->fw_buf.virt, fw_blob->data, fw_blob->size);
        wmb();
+       dev->fw_get_done = true;
        release_firmware(fw_blob);
        mfc_debug_leave();
        return 0;
@@ -93,6 +92,7 @@ int s5p_mfc_release_firmware(struct s5p_mfc_dev *dev)
        /* Before calling this function one has to make sure
         * that MFC is no longer processing */
        s5p_mfc_release_priv_buf(dev, &dev->fw_buf);
+       dev->fw_get_done = false;
        return 0;
 }