aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/se401.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-10-13 17:03:59 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-13 17:03:59 -0400
commitcf2fa66055d718ae13e62451bb546505f63906a2 (patch)
treee206d3f04e74a34e9aa88d21af6c26eea21d4121 /drivers/media/video/se401.c
parent4501a466f28788485604ee42641d7a5fe7258d16 (diff)
parent57f51dbc45f65f7ee1e8c8f77200bb8000e3e271 (diff)
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (313 commits) V4L/DVB (9186): Added support for Prof 7300 DVB-S/S2 cards V4L/DVB (9185): S2API: Ensure we have a reasonable ROLLOFF default V4L/DVB (9184): cx24116: Change the default SNR units back to percentage by default. V4L/DVB (9183): S2API: Return error of the caller provides 0 commands. V4L/DVB (9182): S2API: Added support for DTV_HIERARCHY V4L/DVB (9181): S2API: Add support fot DTV_GUARD_INTERVAL and DTV_TRANSMISSION_MODE V4L/DVB (9180): S2API: Added support for DTV_CODE_RATE_HP/LP V4L/DVB (9179): S2API: frontend.h cleanup V4L/DVB (9178): cx24116: Add module parameter to return SNR as ESNO. V4L/DVB (9177): S2API: Change _8PSK / _16APSK to PSK_8 and APSK_16 V4L/DVB (9176): Add support for DvbWorld USB cards with STV0288 demodulator. V4L/DVB (9175): Remove NULL pointer in stb6000 driver. V4L/DVB (9174): Allow custom inittab for ST STV0288 demodulator. V4L/DVB (9173): S2API: Remove the hardcoded command limit during validation V4L/DVB (9172): S2API: Bugfix related to DVB-S / DVB-S2 tuning for the legacy API. V4L/DVB (9171): S2API: Stop an OOPS if illegal commands are dumped in S2API. V4L/DVB (9170): cx24116: Sanity checking to data input via S2API to the cx24116 demod. V4L/DVB (9169): uvcvideo: Support two new Bison Electronics webcams. V4L/DVB (9168): Add support for MSI TV@nywhere Plus remote V4L/DVB: v4l2-dev: remove duplicated #include ...
Diffstat (limited to 'drivers/media/video/se401.c')
-rw-r--r--drivers/media/video/se401.c44
1 files changed, 27 insertions, 17 deletions
diff --git a/drivers/media/video/se401.c b/drivers/media/video/se401.c
index acceed5d04ae..ae3949180c4e 100644
--- a/drivers/media/video/se401.c
+++ b/drivers/media/video/se401.c
@@ -288,7 +288,7 @@ static void se401_button_irq(struct urb *urb)
288 int status; 288 int status;
289 289
290 if (!se401->dev) { 290 if (!se401->dev) {
291 info("ohoh: device vapourished"); 291 dev_info(&urb->dev->dev, "device vapourished\n");
292 return; 292 return;
293 } 293 }
294 294
@@ -328,7 +328,7 @@ static void se401_video_irq(struct urb *urb)
328 return; 328 return;
329 329
330 if (!se401->dev) { 330 if (!se401->dev) {
331 info ("ohoh: device vapourished"); 331 dev_info(&urb->dev->dev, "device vapourished\n");
332 return; 332 return;
333 } 333 }
334 334
@@ -375,7 +375,7 @@ static void se401_video_irq(struct urb *urb)
375 urb->status=0; 375 urb->status=0;
376 urb->dev=se401->dev; 376 urb->dev=se401->dev;
377 if(usb_submit_urb(urb, GFP_KERNEL)) 377 if(usb_submit_urb(urb, GFP_KERNEL))
378 info("urb burned down"); 378 dev_info(&urb->dev->dev, "urb burned down\n");
379 return; 379 return;
380} 380}
381 381
@@ -860,7 +860,8 @@ static int se401_newframe(struct usb_se401 *se401, int framenr)
860 ); 860 );
861 if (se401->nullpackets > SE401_MAX_NULLPACKETS) { 861 if (se401->nullpackets > SE401_MAX_NULLPACKETS) {
862 se401->nullpackets=0; 862 se401->nullpackets=0;
863 info("to many null length packets, restarting capture"); 863 dev_info(&se401->dev->dev,
864 "too many null length packets, restarting capture\n");
864 se401_stop_stream(se401); 865 se401_stop_stream(se401);
865 se401_start_stream(se401); 866 se401_start_stream(se401);
866 } else { 867 } else {
@@ -880,7 +881,8 @@ static int se401_newframe(struct usb_se401 *se401, int framenr)
880 se401->scratch_use=0; 881 se401->scratch_use=0;
881 if (errors > SE401_MAX_ERRORS) { 882 if (errors > SE401_MAX_ERRORS) {
882 errors=0; 883 errors=0;
883 info("to much errors, restarting capture"); 884 dev_info(&se401->dev->dev,
885 "too many errors, restarting capture\n");
884 se401_stop_stream(se401); 886 se401_stop_stream(se401);
885 se401_start_stream(se401); 887 se401_start_stream(se401);
886 } 888 }
@@ -913,7 +915,7 @@ static void usb_se401_remove_disconnected (struct usb_se401 *se401)
913 usb_kill_urb(se401->inturb); 915 usb_kill_urb(se401->inturb);
914 usb_free_urb(se401->inturb); 916 usb_free_urb(se401->inturb);
915 } 917 }
916 info("%s disconnected", se401->camera_name); 918 dev_info(&se401->dev->dev, "%s disconnected", se401->camera_name);
917 919
918 /* Free the memory */ 920 /* Free the memory */
919 kfree(se401->width); 921 kfree(se401->width);
@@ -936,14 +938,18 @@ static int se401_open(struct inode *inode, struct file *file)
936 struct usb_se401 *se401 = (struct usb_se401 *)dev; 938 struct usb_se401 *se401 = (struct usb_se401 *)dev;
937 int err = 0; 939 int err = 0;
938 940
939 if (se401->user) 941 lock_kernel();
942 if (se401->user) {
943 unlock_kernel();
940 return -EBUSY; 944 return -EBUSY;
945 }
941 se401->fbuf = rvmalloc(se401->maxframesize * SE401_NUMFRAMES); 946 se401->fbuf = rvmalloc(se401->maxframesize * SE401_NUMFRAMES);
942 if (se401->fbuf) 947 if (se401->fbuf)
943 file->private_data = dev; 948 file->private_data = dev;
944 else 949 else
945 err = -ENOMEM; 950 err = -ENOMEM;
946 se401->user = !err; 951 se401->user = !err;
952 unlock_kernel();
947 953
948 return err; 954 return err;
949} 955}
@@ -956,8 +962,8 @@ static int se401_close(struct inode *inode, struct file *file)
956 962
957 rvfree(se401->fbuf, se401->maxframesize * SE401_NUMFRAMES); 963 rvfree(se401->fbuf, se401->maxframesize * SE401_NUMFRAMES);
958 if (se401->removed) { 964 if (se401->removed) {
965 dev_info(&se401->dev->dev, "device unregistered\n");
959 usb_se401_remove_disconnected(se401); 966 usb_se401_remove_disconnected(se401);
960 info("device unregistered");
961 } else { 967 } else {
962 for (i=0; i<SE401_NUMFRAMES; i++) 968 for (i=0; i<SE401_NUMFRAMES; i++)
963 se401->frame[i].grabstate=FRAME_UNUSED; 969 se401->frame[i].grabstate=FRAME_UNUSED;
@@ -1232,6 +1238,7 @@ static const struct file_operations se401_fops = {
1232static struct video_device se401_template = { 1238static struct video_device se401_template = {
1233 .name = "se401 USB camera", 1239 .name = "se401 USB camera",
1234 .fops = &se401_fops, 1240 .fops = &se401_fops,
1241 .release = video_device_release_empty,
1235}; 1242};
1236 1243
1237 1244
@@ -1271,7 +1278,7 @@ static int se401_init(struct usb_se401 *se401, int button)
1271 for (i=0; i<se401->sizes; i++) { 1278 for (i=0; i<se401->sizes; i++) {
1272 sprintf(temp, "%s %dx%d", temp, se401->width[i], se401->height[i]); 1279 sprintf(temp, "%s %dx%d", temp, se401->width[i], se401->height[i]);
1273 } 1280 }
1274 info("%s", temp); 1281 dev_info(&se401->dev->dev, "%s\n", temp);
1275 se401->maxframesize=se401->width[se401->sizes-1]*se401->height[se401->sizes-1]*3; 1282 se401->maxframesize=se401->width[se401->sizes-1]*se401->height[se401->sizes-1]*3;
1276 1283
1277 rc=se401_sndctrl(0, se401, SE401_REQ_GET_WIDTH, 0, cp, sizeof(cp)); 1284 rc=se401_sndctrl(0, se401, SE401_REQ_GET_WIDTH, 0, cp, sizeof(cp));
@@ -1305,7 +1312,8 @@ static int se401_init(struct usb_se401 *se401, int button)
1305 if (button) { 1312 if (button) {
1306 se401->inturb=usb_alloc_urb(0, GFP_KERNEL); 1313 se401->inturb=usb_alloc_urb(0, GFP_KERNEL);
1307 if (!se401->inturb) { 1314 if (!se401->inturb) {
1308 info("Allocation of inturb failed"); 1315 dev_info(&se401->dev->dev,
1316 "Allocation of inturb failed\n");
1309 return 1; 1317 return 1;
1310 } 1318 }
1311 usb_fill_int_urb(se401->inturb, se401->dev, 1319 usb_fill_int_urb(se401->inturb, se401->dev,
@@ -1316,7 +1324,7 @@ static int se401_init(struct usb_se401 *se401, int button)
1316 8 1324 8
1317 ); 1325 );
1318 if (usb_submit_urb(se401->inturb, GFP_KERNEL)) { 1326 if (usb_submit_urb(se401->inturb, GFP_KERNEL)) {
1319 info("int urb burned down"); 1327 dev_info(&se401->dev->dev, "int urb burned down\n");
1320 return 1; 1328 return 1;
1321 } 1329 }
1322 } else 1330 } else
@@ -1373,7 +1381,7 @@ static int se401_probe(struct usb_interface *intf,
1373 return -ENODEV; 1381 return -ENODEV;
1374 1382
1375 /* We found one */ 1383 /* We found one */
1376 info("SE401 camera found: %s", camera_name); 1384 dev_info(&intf->dev, "SE401 camera found: %s\n", camera_name);
1377 1385
1378 if ((se401 = kzalloc(sizeof(*se401), GFP_KERNEL)) == NULL) { 1386 if ((se401 = kzalloc(sizeof(*se401), GFP_KERNEL)) == NULL) {
1379 err("couldn't kmalloc se401 struct"); 1387 err("couldn't kmalloc se401 struct");
@@ -1384,7 +1392,8 @@ static int se401_probe(struct usb_interface *intf,
1384 se401->iface = interface->bInterfaceNumber; 1392 se401->iface = interface->bInterfaceNumber;
1385 se401->camera_name = camera_name; 1393 se401->camera_name = camera_name;
1386 1394
1387 info("firmware version: %02x", le16_to_cpu(dev->descriptor.bcdDevice) & 255); 1395 dev_info(&intf->dev, "firmware version: %02x\n",
1396 le16_to_cpu(dev->descriptor.bcdDevice) & 255);
1388 1397
1389 if (se401_init(se401, button)) { 1398 if (se401_init(se401, button)) {
1390 kfree(se401); 1399 kfree(se401);
@@ -1402,7 +1411,8 @@ static int se401_probe(struct usb_interface *intf,
1402 err("video_register_device failed"); 1411 err("video_register_device failed");
1403 return -EIO; 1412 return -EIO;
1404 } 1413 }
1405 info("registered new video device: video%d", se401->vdev.minor); 1414 dev_info(&intf->dev, "registered new video device: video%d\n",
1415 se401->vdev.minor);
1406 1416
1407 usb_set_intfdata (intf, se401); 1417 usb_set_intfdata (intf, se401);
1408 return 0; 1418 return 0;
@@ -1446,10 +1456,10 @@ static struct usb_driver se401_driver = {
1446 1456
1447static int __init usb_se401_init(void) 1457static int __init usb_se401_init(void)
1448{ 1458{
1449 info("SE401 usb camera driver version %s registering", version); 1459 printk(KERN_INFO "SE401 usb camera driver version %s registering\n", version);
1450 if (flickerless) 1460 if (flickerless)
1451 if (flickerless!=50 && flickerless!=60) { 1461 if (flickerless!=50 && flickerless!=60) {
1452 info("Invallid flickerless value, use 0, 50 or 60."); 1462 printk(KERN_ERR "Invallid flickerless value, use 0, 50 or 60.\n");
1453 return -1; 1463 return -1;
1454 } 1464 }
1455 return usb_register(&se401_driver); 1465 return usb_register(&se401_driver);
@@ -1458,7 +1468,7 @@ static int __init usb_se401_init(void)
1458static void __exit usb_se401_exit(void) 1468static void __exit usb_se401_exit(void)
1459{ 1469{
1460 usb_deregister(&se401_driver); 1470 usb_deregister(&se401_driver);
1461 info("SE401 driver deregistered"); 1471 printk(KERN_INFO "SE401 driver deregistered\frame");
1462} 1472}
1463 1473
1464module_init(usb_se401_init); 1474module_init(usb_se401_init);