|
@@ -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;
|
|
@@ -77,6 +80,7 @@ int s5p_mfc_load_firmware(struct s5p_mfc_dev *dev)
|
|
|
}
|
|
|
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;
|
|
@@ -88,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;
|
|
|
}
|
|
|
|