|
@@ -4,16 +4,11 @@
|
|
|
#include "ast_drv.h"
|
|
|
MODULE_FIRMWARE("ast_dp501_fw.bin");
|
|
|
|
|
|
-int ast_load_dp501_microcode(struct drm_device *dev)
|
|
|
+static int ast_load_dp501_microcode(struct drm_device *dev)
|
|
|
{
|
|
|
struct ast_private *ast = dev->dev_private;
|
|
|
- static char *fw_name = "ast_dp501_fw.bin";
|
|
|
- int err;
|
|
|
- err = request_firmware(&ast->dp501_fw, fw_name, dev->dev);
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
|
|
|
- return 0;
|
|
|
+ return request_firmware(&ast->dp501_fw, "ast_dp501_fw.bin", dev->dev);
|
|
|
}
|
|
|
|
|
|
static void send_ack(struct ast_private *ast)
|
|
@@ -187,7 +182,7 @@ bool ast_backup_fw(struct drm_device *dev, u8 *addr, u32 size)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-bool ast_launch_m68k(struct drm_device *dev)
|
|
|
+static bool ast_launch_m68k(struct drm_device *dev)
|
|
|
{
|
|
|
struct ast_private *ast = dev->dev_private;
|
|
|
u32 i, data, len = 0;
|
|
@@ -201,7 +196,11 @@ bool ast_launch_m68k(struct drm_device *dev)
|
|
|
if (ast->dp501_fw_addr) {
|
|
|
fw_addr = ast->dp501_fw_addr;
|
|
|
len = 32*1024;
|
|
|
- } else if (ast->dp501_fw) {
|
|
|
+ } else {
|
|
|
+ if (!ast->dp501_fw &&
|
|
|
+ ast_load_dp501_microcode(dev) < 0)
|
|
|
+ return false;
|
|
|
+
|
|
|
fw_addr = (u8 *)ast->dp501_fw->data;
|
|
|
len = ast->dp501_fw->size;
|
|
|
}
|
|
@@ -432,3 +431,11 @@ void ast_init_3rdtx(struct drm_device *dev)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+void ast_release_firmware(struct drm_device *dev)
|
|
|
+{
|
|
|
+ struct ast_private *ast = dev->dev_private;
|
|
|
+
|
|
|
+ release_firmware(ast->dp501_fw);
|
|
|
+ ast->dp501_fw = NULL;
|
|
|
+}
|