|
@@ -12,8 +12,7 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/device.h>
|
|
|
#include <linux/string.h>
|
|
|
-
|
|
|
-#include "linux/firmware.h"
|
|
|
+#include <linux/firmware.h>
|
|
|
|
|
|
static struct device ghost_device = {
|
|
|
.bus_id = "ghost0",
|
|
@@ -31,11 +30,14 @@ static void sample_firmware_load(char *firmware, int size)
|
|
|
static void sample_probe_default(void)
|
|
|
{
|
|
|
/* uses the default method to get the firmware */
|
|
|
- const struct firmware *fw_entry;
|
|
|
- printk(KERN_INFO "firmware_sample_driver: a ghost device got inserted :)\n");
|
|
|
+ const struct firmware *fw_entry;
|
|
|
+ int retval;
|
|
|
+
|
|
|
+ printk(KERN_INFO "firmware_sample_driver: "
|
|
|
+ "a ghost device got inserted :)\n");
|
|
|
|
|
|
- if(request_firmware(&fw_entry, "sample_driver_fw", &ghost_device)!=0)
|
|
|
- {
|
|
|
+ retval = request_firmware(&fw_entry, "sample_driver_fw", &ghost_device);
|
|
|
+ if (retval) {
|
|
|
printk(KERN_ERR
|
|
|
"firmware_sample_driver: Firmware not available\n");
|
|
|
return;
|
|
@@ -47,17 +49,20 @@ static void sample_probe_default(void)
|
|
|
|
|
|
/* finish setting up the device */
|
|
|
}
|
|
|
+
|
|
|
static void sample_probe_specific(void)
|
|
|
{
|
|
|
+ int retval;
|
|
|
/* Uses some specific hotplug support to get the firmware from
|
|
|
* userspace directly into the hardware, or via some sysfs file */
|
|
|
|
|
|
/* NOTE: This currently doesn't work */
|
|
|
|
|
|
- printk(KERN_INFO "firmware_sample_driver: a ghost device got inserted :)\n");
|
|
|
+ printk(KERN_INFO "firmware_sample_driver: "
|
|
|
+ "a ghost device got inserted :)\n");
|
|
|
|
|
|
- if(request_firmware(NULL, "sample_driver_fw", &ghost_device)!=0)
|
|
|
- {
|
|
|
+ retval = request_firmware(NULL, "sample_driver_fw", &ghost_device);
|
|
|
+ if (retval) {
|
|
|
printk(KERN_ERR
|
|
|
"firmware_sample_driver: Firmware load failed\n");
|
|
|
return;
|
|
@@ -70,7 +75,7 @@ static void sample_probe_specific(void)
|
|
|
}
|
|
|
static void sample_probe_async_cont(const struct firmware *fw, void *context)
|
|
|
{
|
|
|
- if(!fw){
|
|
|
+ if (!fw) {
|
|
|
printk(KERN_ERR
|
|
|
"firmware_sample_driver: firmware load failed\n");
|
|
|
return;
|
|
@@ -80,19 +85,18 @@ static void sample_probe_async_cont(const struct firmware *fw, void *context)
|
|
|
(char *)context);
|
|
|
sample_firmware_load(fw->data, fw->size);
|
|
|
}
|
|
|
+
|
|
|
static void sample_probe_async(void)
|
|
|
{
|
|
|
/* Let's say that I can't sleep */
|
|
|
int error;
|
|
|
- error = request_firmware_nowait (THIS_MODULE, FW_ACTION_NOHOTPLUG,
|
|
|
- "sample_driver_fw", &ghost_device,
|
|
|
- "my device pointer",
|
|
|
- sample_probe_async_cont);
|
|
|
- if(error){
|
|
|
- printk(KERN_ERR
|
|
|
- "firmware_sample_driver:"
|
|
|
+ error = request_firmware_nowait(THIS_MODULE, FW_ACTION_NOHOTPLUG,
|
|
|
+ "sample_driver_fw", &ghost_device,
|
|
|
+ "my device pointer",
|
|
|
+ sample_probe_async_cont);
|
|
|
+ if (error)
|
|
|
+ printk(KERN_ERR "firmware_sample_driver:"
|
|
|
" request_firmware_nowait failed\n");
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
static int sample_init(void)
|
|
@@ -105,11 +109,12 @@ static int sample_init(void)
|
|
|
sample_probe_async();
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
static void __exit sample_exit(void)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
-module_init (sample_init);
|
|
|
-module_exit (sample_exit);
|
|
|
+module_init(sample_init);
|
|
|
+module_exit(sample_exit);
|
|
|
|
|
|
MODULE_LICENSE("GPL");
|