aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2013-03-11 05:45:14 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-24 11:57:02 -0400
commit0ee3d4d53e4e170e9a9a70214de54b9f5d18d30c (patch)
tree56b5f38fb3f7e60f428cec1c0fead3949e72b8fc
parente129c97494096fbda451619d746d661a05abba64 (diff)
[media] go7007-loader: add support for the other devices and move fw files
Add support for the other devices that need to load the boot firmware. All firmware files are now placed in a single go7007 directory. Also remove the device_extension_s stuff: this is clearly a left-over from the olden days. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/staging/media/go7007/go7007-driver.c4
-rw-r--r--drivers/staging/media/go7007/go7007-loader.c131
-rw-r--r--drivers/staging/media/go7007/go7007-usb.c22
-rw-r--r--drivers/staging/media/go7007/saa7134-go7007.c3
4 files changed, 68 insertions, 92 deletions
diff --git a/drivers/staging/media/go7007/go7007-driver.c b/drivers/staging/media/go7007/go7007-driver.c
index 0fd3f108be12..4378223d8bb8 100644
--- a/drivers/staging/media/go7007/go7007-driver.c
+++ b/drivers/staging/media/go7007/go7007-driver.c
@@ -90,7 +90,7 @@ EXPORT_SYMBOL(go7007_read_addr);
90static int go7007_load_encoder(struct go7007 *go) 90static int go7007_load_encoder(struct go7007 *go)
91{ 91{
92 const struct firmware *fw_entry; 92 const struct firmware *fw_entry;
93 char fw_name[] = "go7007fw.bin"; 93 char fw_name[] = "go7007/go7007fw.bin";
94 void *bounce; 94 void *bounce;
95 int fw_len, rv = 0; 95 int fw_len, rv = 0;
96 u16 intr_val, intr_data; 96 u16 intr_val, intr_data;
@@ -126,7 +126,7 @@ static int go7007_load_encoder(struct go7007 *go)
126 return rv; 126 return rv;
127} 127}
128 128
129MODULE_FIRMWARE("go7007fw.bin"); 129MODULE_FIRMWARE("go7007/go7007fw.bin");
130 130
131/* 131/*
132 * Boot the encoder and register the I2C adapter if requested. Do the 132 * Boot the encoder and register the I2C adapter if requested. Do the
diff --git a/drivers/staging/media/go7007/go7007-loader.c b/drivers/staging/media/go7007/go7007-loader.c
index 730a4f8a3e07..4ce53d6e8528 100644
--- a/drivers/staging/media/go7007/go7007-loader.c
+++ b/drivers/staging/media/go7007/go7007-loader.c
@@ -22,86 +22,67 @@
22#include <linux/firmware.h> 22#include <linux/firmware.h>
23#include <cypress_firmware.h> 23#include <cypress_firmware.h>
24 24
25#define S2250_LOADER_FIRMWARE "s2250_loader.fw" 25struct fw_config {
26#define S2250_FIRMWARE "2250.fw" 26 u16 vendor;
27 27 u16 product;
28typedef struct device_extension_s { 28 const char * const fw_name1;
29 struct kref kref; 29 const char * const fw_name2;
30 int minor; 30};
31 struct usb_device *usbdev;
32} device_extension_t, *pdevice_extension_t;
33
34#define USB_go7007_loader_MAJOR 240
35#define USB_go7007_loader_MINOR_BASE 0
36#define MAX_DEVICES 256
37
38static pdevice_extension_t go7007_dev_table[MAX_DEVICES];
39static DEFINE_MUTEX(go7007_dev_table_mutex);
40 31
41#define to_go7007_loader_dev_common(d) container_of(d, device_extension_t, kref) 32struct fw_config fw_configs[] = {
42static void go7007_loader_delete(struct kref *kref) 33 { 0x1943, 0xa250, "go7007/s2250-1.fw", "go7007/s2250-2.fw" },
43{ 34 { 0x093b, 0xa002, "go7007/px-m402u.fw", NULL },
44 pdevice_extension_t s = to_go7007_loader_dev_common(kref); 35 { 0x093b, 0xa004, "go7007/px-tv402u.fw", NULL },
45 go7007_dev_table[s->minor] = NULL; 36 { 0x0eb1, 0x6666, "go7007/lr192.fw", NULL },
46 kfree(s); 37 { 0x0eb1, 0x6668, "go7007/wis-startrek.fw", NULL },
47} 38 { 0, 0, NULL, NULL }
39};
40MODULE_FIRMWARE("go7007/s2250-1.fw");
41MODULE_FIRMWARE("go7007/s2250-2.fw");
42MODULE_FIRMWARE("go7007/px-m402u.fw");
43MODULE_FIRMWARE("go7007/px-tv402u.fw");
44MODULE_FIRMWARE("go7007/lr192.fw");
45MODULE_FIRMWARE("go7007/wis-startrek.fw");
48 46
49static int go7007_loader_probe(struct usb_interface *interface, 47static int go7007_loader_probe(struct usb_interface *interface,
50 const struct usb_device_id *id) 48 const struct usb_device_id *id)
51{ 49{
52 struct usb_device *usbdev; 50 struct usb_device *usbdev;
53 int minor, ret;
54 pdevice_extension_t s = NULL;
55 const struct firmware *fw; 51 const struct firmware *fw;
52 u16 vendor, product;
53 const char *fw1, *fw2;
54 int ret;
55 int i;
56 56
57 usbdev = usb_get_dev(interface_to_usbdev(interface)); 57 usbdev = usb_get_dev(interface_to_usbdev(interface));
58 if (!usbdev) { 58 if (!usbdev)
59 dev_err(&interface->dev, "Enter go7007_loader_probe failed\n"); 59 goto failed2;
60 return -1;
61 }
62 dev_info(&interface->dev, "vendor id 0x%x, device id 0x%x devnum:%d\n",
63 usbdev->descriptor.idVendor, usbdev->descriptor.idProduct,
64 usbdev->devnum);
65 60
66 if (usbdev->descriptor.bNumConfigurations != 1) { 61 if (usbdev->descriptor.bNumConfigurations != 1) {
67 dev_err(&interface->dev, "can't handle multiple config\n"); 62 dev_err(&interface->dev, "can't handle multiple config\n");
68 return -1; 63 return -ENODEV;
69 }
70 mutex_lock(&go7007_dev_table_mutex);
71
72 for (minor = 0; minor < MAX_DEVICES; minor++) {
73 if (go7007_dev_table[minor] == NULL)
74 break;
75 } 64 }
76 65
77 if (minor < 0 || minor >= MAX_DEVICES) { 66 vendor = le16_to_cpu(usbdev->descriptor.idVendor);
78 dev_err(&interface->dev, "Invalid minor: %d\n", minor); 67 product = le16_to_cpu(usbdev->descriptor.idProduct);
79 goto failed;
80 }
81
82 /* Allocate dev data structure */
83 s = kmalloc(sizeof(device_extension_t), GFP_KERNEL);
84 if (s == NULL)
85 goto failed;
86
87 go7007_dev_table[minor] = s;
88 68
89 dev_info(&interface->dev, 69 for (i = 0; fw_configs[i].fw_name1; i++)
90 "Device %d on Bus %d Minor %d\n", 70 if (fw_configs[i].vendor == vendor &&
91 usbdev->devnum, usbdev->bus->busnum, minor); 71 fw_configs[i].product == product)
72 break;
92 73
93 memset(s, 0, sizeof(device_extension_t)); 74 /* Should never happen */
94 s->usbdev = usbdev; 75 if (fw_configs[i].fw_name1 == NULL)
95 dev_info(&interface->dev, "loading go7007-loader\n"); 76 goto failed2;
96 77
97 kref_init(&(s->kref)); 78 fw1 = fw_configs[i].fw_name1;
79 fw2 = fw_configs[i].fw_name2;
98 80
99 mutex_unlock(&go7007_dev_table_mutex); 81 dev_info(&interface->dev, "loading firmware %s\n", fw1);
100 82
101 if (request_firmware(&fw, S2250_LOADER_FIRMWARE, &usbdev->dev)) { 83 if (request_firmware(&fw, fw1, &usbdev->dev)) {
102 dev_err(&interface->dev, 84 dev_err(&interface->dev,
103 "unable to load firmware from file \"%s\"\n", 85 "unable to load firmware from file \"%s\"\n", fw1);
104 S2250_LOADER_FIRMWARE);
105 goto failed2; 86 goto failed2;
106 } 87 }
107 ret = usbv2_cypress_load_firmware(usbdev, fw, CYPRESS_FX2); 88 ret = usbv2_cypress_load_firmware(usbdev, fw, CYPRESS_FX2);
@@ -111,10 +92,12 @@ static int go7007_loader_probe(struct usb_interface *interface,
111 goto failed2; 92 goto failed2;
112 } 93 }
113 94
114 if (request_firmware(&fw, S2250_FIRMWARE, &usbdev->dev)) { 95 if (fw2 == NULL)
96 return 0;
97
98 if (request_firmware(&fw, fw2, &usbdev->dev)) {
115 dev_err(&interface->dev, 99 dev_err(&interface->dev,
116 "unable to load firmware from file \"%s\"\n", 100 "unable to load firmware from file \"%s\"\n", fw2);
117 S2250_FIRMWARE);
118 goto failed2; 101 goto failed2;
119 } 102 }
120 ret = usbv2_cypress_load_firmware(usbdev, fw, CYPRESS_FX2); 103 ret = usbv2_cypress_load_firmware(usbdev, fw, CYPRESS_FX2);
@@ -123,31 +106,25 @@ static int go7007_loader_probe(struct usb_interface *interface,
123 dev_err(&interface->dev, "firmware download failed\n"); 106 dev_err(&interface->dev, "firmware download failed\n");
124 goto failed2; 107 goto failed2;
125 } 108 }
126
127 usb_set_intfdata(interface, s);
128 return 0; 109 return 0;
129 110
130failed:
131 mutex_unlock(&go7007_dev_table_mutex);
132failed2: 111failed2:
133 if (s)
134 kref_put(&(s->kref), go7007_loader_delete);
135
136 dev_err(&interface->dev, "probe failed\n"); 112 dev_err(&interface->dev, "probe failed\n");
137 return -1; 113 return -ENODEV;
138} 114}
139 115
140static void go7007_loader_disconnect(struct usb_interface *interface) 116static void go7007_loader_disconnect(struct usb_interface *interface)
141{ 117{
142 pdevice_extension_t s;
143 dev_info(&interface->dev, "disconnect\n"); 118 dev_info(&interface->dev, "disconnect\n");
144 s = usb_get_intfdata(interface);
145 usb_set_intfdata(interface, NULL); 119 usb_set_intfdata(interface, NULL);
146 kref_put(&(s->kref), go7007_loader_delete);
147} 120}
148 121
149static const struct usb_device_id go7007_loader_ids[] = { 122static const struct usb_device_id go7007_loader_ids[] = {
150 {USB_DEVICE(0x1943, 0xa250)}, 123 { USB_DEVICE(0x1943, 0xa250) },
124 { USB_DEVICE(0x093b, 0xa002) },
125 { USB_DEVICE(0x093b, 0xa004) },
126 { USB_DEVICE(0x0eb1, 0x6666) },
127 { USB_DEVICE(0x0eb1, 0x6668) },
151 {} /* Terminating entry */ 128 {} /* Terminating entry */
152}; 129};
153 130
@@ -163,7 +140,5 @@ static struct usb_driver go7007_loader_driver = {
163module_usb_driver(go7007_loader_driver); 140module_usb_driver(go7007_loader_driver);
164 141
165MODULE_AUTHOR(""); 142MODULE_AUTHOR("");
166MODULE_DESCRIPTION("firmware loader for go7007 USB devices"); 143MODULE_DESCRIPTION("firmware loader for go7007-usb");
167MODULE_LICENSE("GPL v2"); 144MODULE_LICENSE("GPL v2");
168MODULE_FIRMWARE(S2250_LOADER_FIRMWARE);
169MODULE_FIRMWARE(S2250_FIRMWARE);
diff --git a/drivers/staging/media/go7007/go7007-usb.c b/drivers/staging/media/go7007/go7007-usb.c
index 2a1cda22118d..bd23d7d3e067 100644
--- a/drivers/staging/media/go7007/go7007-usb.c
+++ b/drivers/staging/media/go7007/go7007-usb.c
@@ -76,7 +76,7 @@ struct go7007_usb {
76static struct go7007_usb_board board_matrix_ii = { 76static struct go7007_usb_board board_matrix_ii = {
77 .flags = GO7007_USB_EZUSB, 77 .flags = GO7007_USB_EZUSB,
78 .main_info = { 78 .main_info = {
79 .firmware = "go7007tv.bin", 79 .firmware = "go7007/go7007tv.bin",
80 .flags = GO7007_BOARD_HAS_AUDIO | 80 .flags = GO7007_BOARD_HAS_AUDIO |
81 GO7007_BOARD_USE_ONBOARD_I2C, 81 GO7007_BOARD_USE_ONBOARD_I2C,
82 .audio_flags = GO7007_AUDIO_I2S_MODE_1 | 82 .audio_flags = GO7007_AUDIO_I2S_MODE_1 |
@@ -117,7 +117,7 @@ static struct go7007_usb_board board_matrix_ii = {
117static struct go7007_usb_board board_matrix_reload = { 117static struct go7007_usb_board board_matrix_reload = {
118 .flags = GO7007_USB_EZUSB, 118 .flags = GO7007_USB_EZUSB,
119 .main_info = { 119 .main_info = {
120 .firmware = "go7007tv.bin", 120 .firmware = "go7007/go7007tv.bin",
121 .flags = GO7007_BOARD_HAS_AUDIO | 121 .flags = GO7007_BOARD_HAS_AUDIO |
122 GO7007_BOARD_USE_ONBOARD_I2C, 122 GO7007_BOARD_USE_ONBOARD_I2C,
123 .audio_flags = GO7007_AUDIO_I2S_MODE_1 | 123 .audio_flags = GO7007_AUDIO_I2S_MODE_1 |
@@ -155,7 +155,7 @@ static struct go7007_usb_board board_matrix_reload = {
155static struct go7007_usb_board board_star_trek = { 155static struct go7007_usb_board board_star_trek = {
156 .flags = GO7007_USB_EZUSB | GO7007_USB_EZUSB_I2C, 156 .flags = GO7007_USB_EZUSB | GO7007_USB_EZUSB_I2C,
157 .main_info = { 157 .main_info = {
158 .firmware = "go7007tv.bin", 158 .firmware = "go7007/go7007tv.bin",
159 .flags = GO7007_BOARD_HAS_AUDIO, /* | 159 .flags = GO7007_BOARD_HAS_AUDIO, /* |
160 GO7007_BOARD_HAS_TUNER, */ 160 GO7007_BOARD_HAS_TUNER, */
161 .sensor_flags = GO7007_SENSOR_656 | 161 .sensor_flags = GO7007_SENSOR_656 |
@@ -203,7 +203,7 @@ static struct go7007_usb_board board_star_trek = {
203static struct go7007_usb_board board_px_tv402u = { 203static struct go7007_usb_board board_px_tv402u = {
204 .flags = GO7007_USB_EZUSB | GO7007_USB_EZUSB_I2C, 204 .flags = GO7007_USB_EZUSB | GO7007_USB_EZUSB_I2C,
205 .main_info = { 205 .main_info = {
206 .firmware = "go7007tv.bin", 206 .firmware = "go7007/go7007tv.bin",
207 .flags = GO7007_BOARD_HAS_AUDIO | 207 .flags = GO7007_BOARD_HAS_AUDIO |
208 GO7007_BOARD_HAS_TUNER, 208 GO7007_BOARD_HAS_TUNER,
209 .sensor_flags = GO7007_SENSOR_656 | 209 .sensor_flags = GO7007_SENSOR_656 |
@@ -278,7 +278,7 @@ static struct go7007_usb_board board_px_tv402u = {
278static struct go7007_usb_board board_xmen = { 278static struct go7007_usb_board board_xmen = {
279 .flags = 0, 279 .flags = 0,
280 .main_info = { 280 .main_info = {
281 .firmware = "go7007tv.bin", 281 .firmware = "go7007/go7007tv.bin",
282 .flags = GO7007_BOARD_USE_ONBOARD_I2C, 282 .flags = GO7007_BOARD_USE_ONBOARD_I2C,
283 .hpi_buffer_cap = 0, 283 .hpi_buffer_cap = 0,
284 .sensor_flags = GO7007_SENSOR_VREF_POLAR, 284 .sensor_flags = GO7007_SENSOR_VREF_POLAR,
@@ -313,7 +313,7 @@ static struct go7007_usb_board board_xmen = {
313static struct go7007_usb_board board_matrix_revolution = { 313static struct go7007_usb_board board_matrix_revolution = {
314 .flags = GO7007_USB_EZUSB, 314 .flags = GO7007_USB_EZUSB,
315 .main_info = { 315 .main_info = {
316 .firmware = "go7007tv.bin", 316 .firmware = "go7007/go7007tv.bin",
317 .flags = GO7007_BOARD_HAS_AUDIO | 317 .flags = GO7007_BOARD_HAS_AUDIO |
318 GO7007_BOARD_USE_ONBOARD_I2C, 318 GO7007_BOARD_USE_ONBOARD_I2C,
319 .audio_flags = GO7007_AUDIO_I2S_MODE_1 | 319 .audio_flags = GO7007_AUDIO_I2S_MODE_1 |
@@ -351,7 +351,7 @@ static struct go7007_usb_board board_matrix_revolution = {
351static struct go7007_usb_board board_lifeview_lr192 = { 351static struct go7007_usb_board board_lifeview_lr192 = {
352 .flags = GO7007_USB_EZUSB, 352 .flags = GO7007_USB_EZUSB,
353 .main_info = { 353 .main_info = {
354 .firmware = "go7007tv.bin", 354 .firmware = "go7007/go7007tv.bin",
355 .flags = GO7007_BOARD_HAS_AUDIO | 355 .flags = GO7007_BOARD_HAS_AUDIO |
356 GO7007_BOARD_USE_ONBOARD_I2C, 356 GO7007_BOARD_USE_ONBOARD_I2C,
357 .audio_flags = GO7007_AUDIO_I2S_MODE_1 | 357 .audio_flags = GO7007_AUDIO_I2S_MODE_1 |
@@ -379,7 +379,7 @@ static struct go7007_usb_board board_lifeview_lr192 = {
379static struct go7007_usb_board board_endura = { 379static struct go7007_usb_board board_endura = {
380 .flags = 0, 380 .flags = 0,
381 .main_info = { 381 .main_info = {
382 .firmware = "go7007tv.bin", 382 .firmware = "go7007/go7007tv.bin",
383 .flags = 0, 383 .flags = 0,
384 .audio_flags = GO7007_AUDIO_I2S_MODE_1 | 384 .audio_flags = GO7007_AUDIO_I2S_MODE_1 |
385 GO7007_AUDIO_I2S_MASTER | 385 GO7007_AUDIO_I2S_MASTER |
@@ -404,7 +404,7 @@ static struct go7007_usb_board board_endura = {
404static struct go7007_usb_board board_adlink_mpg24 = { 404static struct go7007_usb_board board_adlink_mpg24 = {
405 .flags = 0, 405 .flags = 0,
406 .main_info = { 406 .main_info = {
407 .firmware = "go7007tv.bin", 407 .firmware = "go7007/go7007tv.bin",
408 .flags = GO7007_BOARD_USE_ONBOARD_I2C, 408 .flags = GO7007_BOARD_USE_ONBOARD_I2C,
409 .audio_flags = GO7007_AUDIO_I2S_MODE_1 | 409 .audio_flags = GO7007_AUDIO_I2S_MODE_1 |
410 GO7007_AUDIO_I2S_MASTER | 410 GO7007_AUDIO_I2S_MASTER |
@@ -437,7 +437,7 @@ static struct go7007_usb_board board_adlink_mpg24 = {
437static struct go7007_usb_board board_sensoray_2250 = { 437static struct go7007_usb_board board_sensoray_2250 = {
438 .flags = GO7007_USB_EZUSB | GO7007_USB_EZUSB_I2C, 438 .flags = GO7007_USB_EZUSB | GO7007_USB_EZUSB_I2C,
439 .main_info = { 439 .main_info = {
440 .firmware = "go7007tv.bin", 440 .firmware = "go7007/go7007tv.bin",
441 .audio_flags = GO7007_AUDIO_I2S_MODE_1 | 441 .audio_flags = GO7007_AUDIO_I2S_MODE_1 |
442 GO7007_AUDIO_I2S_MASTER | 442 GO7007_AUDIO_I2S_MASTER |
443 GO7007_AUDIO_WORD_16, 443 GO7007_AUDIO_WORD_16,
@@ -486,7 +486,7 @@ static struct go7007_usb_board board_sensoray_2250 = {
486 }, 486 },
487}; 487};
488 488
489MODULE_FIRMWARE("go7007tv.bin"); 489MODULE_FIRMWARE("go7007/go7007tv.bin");
490 490
491static const struct usb_device_id go7007_usb_id_table[] = { 491static const struct usb_device_id go7007_usb_id_table[] = {
492 { 492 {
diff --git a/drivers/staging/media/go7007/saa7134-go7007.c b/drivers/staging/media/go7007/saa7134-go7007.c
index 752f1bd6b5a1..d56f4fc44a93 100644
--- a/drivers/staging/media/go7007/saa7134-go7007.c
+++ b/drivers/staging/media/go7007/saa7134-go7007.c
@@ -65,7 +65,7 @@ struct saa7134_go7007 {
65}; 65};
66 66
67static struct go7007_board_info board_voyager = { 67static struct go7007_board_info board_voyager = {
68 .firmware = "go7007tv.bin", 68 .firmware = "go7007/go7007tv.bin",
69 .flags = 0, 69 .flags = 0,
70 .sensor_flags = GO7007_SENSOR_656 | 70 .sensor_flags = GO7007_SENSOR_656 |
71 GO7007_SENSOR_VALID_ENABLE | 71 GO7007_SENSOR_VALID_ENABLE |
@@ -430,6 +430,7 @@ static struct go7007_hpi_ops saa7134_go7007_hpi_ops = {
430 .send_firmware = saa7134_go7007_send_firmware, 430 .send_firmware = saa7134_go7007_send_firmware,
431 .send_command = saa7134_go7007_send_command, 431 .send_command = saa7134_go7007_send_command,
432}; 432};
433MODULE_FIRMWARE("go7007/go7007tv.bin");
433 434
434/********************* Add/remove functions *********************/ 435/********************* Add/remove functions *********************/
435 436