SyntekUSBVideoCamera
stk11xx-dev.c
Go to the documentation of this file.
00001 
00034 #include <linux/module.h>
00035 #include <linux/init.h>
00036 #include <linux/kernel.h>
00037 #include <linux/version.h>
00038 #include <linux/errno.h>
00039 #include <linux/slab.h>
00040 #include <linux/kref.h>
00041 
00042 #include <linux/usb.h>
00043 #include <media/v4l2-common.h>
00044 #include <media/v4l2-ioctl.h>
00045 
00046 #include "stk11xx.h"
00047 #include "stk11xx-dev.h"
00048 
00049 
00063 int dev_stk11xx_initialize_device(struct usb_stk11xx *dev)
00064 {
00065     int ret;
00066 
00067     switch (dev->webcam_model) {
00068         case SYNTEK_STK_M811:
00069         case SYNTEK_STK_A311:
00070             ret = dev_stka311_initialize_device(dev);
00071             break;
00072 
00073         case SYNTEK_STK_A821:
00074             ret = dev_stka821_initialize_device(dev);
00075             break;
00076 
00077         case SYNTEK_STK_6A31:
00078             ret = dev_stk6a31_initialize_device(dev);
00079             break;
00080 
00081         case SYNTEK_STK_6A33:
00082             ret = dev_stk6a33_initialize_device(dev);
00083             break;
00084 
00085         case SYNTEK_STK_6A51:
00086             ret = dev_stk6a51_initialize_device(dev);
00087             break;
00088 
00089         case SYNTEK_STK_6A54:
00090             ret = dev_stk6a54_initialize_device(dev);
00091             break;
00092 
00093         case SYNTEK_STK_6D51:
00094             ret = dev_stk6d51_initialize_device(dev);
00095             break;
00096 
00097         default:
00098             ret = -1;
00099     }
00100 
00101     return ret;
00102 }
00103 
00104 
00115 int dev_stk11xx_init_camera(struct usb_stk11xx *dev)
00116 {
00117     int ret;
00118 
00119     switch (dev->webcam_model) {
00120         case SYNTEK_STK_M811:
00121         case SYNTEK_STK_A311:
00122             ret = dev_stka311_init_camera(dev);
00123             break;
00124 
00125         case SYNTEK_STK_A821:
00126             ret = dev_stka821_init_camera(dev);
00127             break;
00128 
00129         case SYNTEK_STK_6A31:
00130             ret = dev_stk6a31_init_camera(dev);
00131             break;
00132 
00133         case SYNTEK_STK_6A33:
00134             ret = dev_stk6a33_init_camera(dev);
00135             break;
00136 
00137         case SYNTEK_STK_6A51:
00138             ret = dev_stk6a51_init_camera(dev);
00139             break;
00140 
00141         case SYNTEK_STK_6A54:
00142             ret = dev_stk6a54_init_camera(dev);
00143             break;
00144 
00145         case SYNTEK_STK_6D51:
00146             ret = dev_stk6d51_init_camera(dev);
00147             break;
00148 
00149         default:
00150             ret = -1;
00151     }
00152 
00153     return ret;
00154 }
00155 
00156 
00170 int dev_stk11xx_check_device(struct usb_stk11xx *dev, int nbr)
00171 {
00172     int i;
00173     int value;
00174 
00175     for (i=0; i<nbr; i++) {
00176         usb_stk11xx_read_registry(dev, 0x201, &value);
00177         
00178         if (value == 0x00) {
00179         }
00180         else if ((value == 0x11) || (value == 0x14)) {
00181         }
00182         else if ((value == 0x30) || (value == 0x31)) {
00183         }
00184         else if ((value == 0x51)) {
00185         }
00186         else if ((value == 0x70) || (value == 0x71)) {
00187         }
00188         else if ((value == 0x91)) {
00189         }
00190         else if (value == 0x01) {
00191             return 1;
00192         }
00193         else if ((value == 0x04) || (value == 0x05))
00194             return 1;
00195         else if (value == 0x15) 
00196             return 1;
00197         else {
00198             STK_ERROR("Check device return error (0x0201 = %02X) !\n", value);
00199             return -1;
00200         }
00201     }
00202 
00203     return 0;
00204 }
00205 
00206 
00218 int dev_stk11xx_watchdog_camera(struct usb_stk11xx *dev)
00219 {
00220     int value;
00221 
00222     usb_stk11xx_read_registry(dev, 0x0001, &value);
00223 
00224     if (value != 0x03) {
00225         STK_ERROR("Error : Register 0x0001 = %02X\n", value);
00226     }
00227 
00228     return value;
00229 }
00230 
00231 
00241 int dev_stk11xx_camera_on(struct usb_stk11xx *dev)
00242 {
00243     int ret = -1;
00244     struct usb_device *udev = dev->udev;
00245 
00246     ret = usb_set_interface(udev, 0, 5);
00247 
00248     if (ret < 0)
00249         STK_ERROR("usb_set_interface failed !\n");
00250 
00251     return ret;
00252 }
00253 
00254 
00264 int dev_stk11xx_camera_off(struct usb_stk11xx *dev)
00265 {
00266     int ret = -1;
00267     struct usb_device *udev = dev->udev;
00268 
00269     ret = usb_set_interface(udev, 0, 0);
00270 
00271     if (ret < 0)
00272         STK_ERROR("usb_set_interface failed !\n");
00273 
00274     return 0;
00275 }
00276 
00277 
00287 int dev_stk11xx_camera_asleep(struct usb_stk11xx *dev)
00288 {
00289     int ret;
00290 
00291     switch (dev->webcam_model) {
00292         case SYNTEK_STK_M811:
00293         case SYNTEK_STK_A311:
00294             ret = dev_stka311_camera_asleep(dev);
00295             break;
00296 
00297         case SYNTEK_STK_A821:
00298             ret = dev_stka821_camera_asleep(dev);
00299             break;
00300 
00301         case SYNTEK_STK_6A31:
00302             ret = dev_stk6a31_camera_asleep(dev);
00303             break;
00304 
00305         case SYNTEK_STK_6A33:
00306             ret = dev_stk6a33_camera_asleep(dev);
00307             break;
00308 
00309         case SYNTEK_STK_6A51:
00310             ret = dev_stk6a51_camera_asleep(dev);
00311             break;
00312 
00313         case SYNTEK_STK_6A54:
00314             ret = dev_stk6a54_camera_asleep(dev);
00315             break;
00316 
00317         case SYNTEK_STK_6D51:
00318             ret = dev_stk6d51_camera_asleep(dev);
00319             break;
00320 
00321         default:
00322             ret = -1;
00323     }
00324 
00325     return ret;
00326 }
00327 
00328 
00342 int dev_stk11xx_camera_settings(struct usb_stk11xx *dev)
00343 {
00344     int ret;
00345 
00346     switch (dev->webcam_model) {
00347         case SYNTEK_STK_M811:
00348         case SYNTEK_STK_A311:
00349             ret = dev_stka311_camera_settings(dev);
00350             break;
00351 
00352         case SYNTEK_STK_A821:
00353             ret = dev_stka821_camera_settings(dev);
00354             break;
00355 
00356         case SYNTEK_STK_6A31:
00357             ret = dev_stk6a31_camera_settings(dev);
00358             break;
00359 
00360         case SYNTEK_STK_6A33:
00361             ret = dev_stk6a33_camera_settings(dev);
00362             break;
00363 
00364         case SYNTEK_STK_6A51:
00365             ret = dev_stk6a51_camera_settings(dev);
00366             break;
00367 
00368         case SYNTEK_STK_6A54:
00369             ret = dev_stk6a54_camera_settings(dev);
00370             break;
00371 
00372         case SYNTEK_STK_6D51:
00373             ret = dev_stk6d51_camera_settings(dev);
00374             break;
00375 
00376         default:
00377             ret = -1;
00378     }
00379 
00380     return ret;
00381 }
00382 
00383 
00397 int dev_stk11xx_set_camera_quality(struct usb_stk11xx *dev)
00398 {
00399     int ret;
00400 
00401     switch (dev->webcam_model) {
00402         case SYNTEK_STK_M811:
00403         case SYNTEK_STK_A311:
00404             ret = dev_stka311_set_camera_quality(dev);
00405             break;
00406 
00407         case SYNTEK_STK_A821:
00408             ret = dev_stka821_set_camera_quality(dev);
00409             break;
00410 
00411         case SYNTEK_STK_6A31:
00412             ret = dev_stk6a31_set_camera_quality(dev);
00413             break;
00414 
00415         case SYNTEK_STK_6A33:
00416             ret = dev_stk6a33_set_camera_quality(dev);
00417             break;
00418 
00419         case SYNTEK_STK_6A51:
00420             ret = dev_stk6a51_set_camera_quality(dev);
00421             break;
00422 
00423         case SYNTEK_STK_6A54:
00424             ret = dev_stk6a54_set_camera_quality(dev);
00425             break;
00426 
00427         case SYNTEK_STK_6D51:
00428             ret = dev_stk6d51_set_camera_quality(dev);
00429             break;
00430 
00431         default:
00432             ret = -1;
00433     }
00434 
00435     return ret;
00436 }
00437 
00438 
00449 int dev_stk11xx_set_camera_fps(struct usb_stk11xx *dev)
00450 {
00451     int ret;
00452 
00453     switch (dev->webcam_model) {
00454         case SYNTEK_STK_M811:
00455         case SYNTEK_STK_A311:
00456             ret = dev_stka311_set_camera_fps(dev);
00457             break;
00458 
00459         case SYNTEK_STK_A821:
00460             ret = dev_stka821_set_camera_fps(dev);
00461             break;
00462 
00463         case SYNTEK_STK_6A31:
00464             ret = dev_stk6a31_set_camera_fps(dev);
00465             break;
00466 
00467         case SYNTEK_STK_6A33:
00468             ret = dev_stk6a33_set_camera_fps(dev);
00469             break;
00470 
00471         case SYNTEK_STK_6A51:
00472             ret = dev_stk6a51_set_camera_fps(dev);
00473             break;
00474 
00475         case SYNTEK_STK_6A54:
00476             ret = dev_stk6a54_set_camera_fps(dev);
00477             break;
00478 
00479         case SYNTEK_STK_6D51:
00480             ret = dev_stk6d51_set_camera_fps(dev);
00481             break;
00482 
00483         default:
00484             ret = -1;
00485     }
00486 
00487     return ret;
00488 }
00489 
00490 
00501 int dev_stk11xx_start_stream(struct usb_stk11xx *dev)
00502 {
00503     int ret;
00504 
00505     switch (dev->webcam_model) {
00506         case SYNTEK_STK_M811:
00507         case SYNTEK_STK_A311:
00508             ret = dev_stka311_start_stream(dev);
00509             break;
00510 
00511         case SYNTEK_STK_A821:
00512             ret = dev_stka821_start_stream(dev);
00513             break;
00514 
00515         case SYNTEK_STK_6A31:
00516             ret = dev_stk6a31_start_stream(dev);
00517             break;
00518 
00519         case SYNTEK_STK_6A33:
00520             ret = dev_stk6a33_start_stream(dev);
00521             break;
00522 
00523         case SYNTEK_STK_6A51:
00524             ret = dev_stk6a51_start_stream(dev);
00525             break;
00526 
00527         case SYNTEK_STK_6A54:
00528             ret = dev_stk6a54_start_stream(dev);
00529             break;
00530 
00531         case SYNTEK_STK_6D51:
00532             ret = dev_stk6d51_start_stream(dev);
00533             break;
00534 
00535         default:
00536             ret = -1;
00537     }
00538 
00539     return ret;
00540 }
00541 
00542 
00552 int dev_stk11xx_reconf_camera(struct usb_stk11xx *dev)
00553 {
00554     int ret;
00555 
00556     switch (dev->webcam_model) {
00557         case SYNTEK_STK_M811:
00558         case SYNTEK_STK_A311:
00559             ret = dev_stka311_reconf_camera(dev);
00560             break;
00561 
00562         case SYNTEK_STK_A821:
00563             ret = dev_stka821_reconf_camera(dev);
00564             break;
00565 
00566         case SYNTEK_STK_6A31:
00567             ret = dev_stk6a31_reconf_camera(dev);
00568             break;
00569 
00570         case SYNTEK_STK_6A33:
00571             ret = dev_stk6a33_reconf_camera(dev);
00572             break;
00573 
00574         case SYNTEK_STK_6A51:
00575             ret = dev_stk6a51_reconf_camera(dev);
00576             break;
00577 
00578         case SYNTEK_STK_6A54:
00579             ret = dev_stk6a54_reconf_camera(dev);
00580             break;
00581 
00582         case SYNTEK_STK_6D51:
00583             ret = dev_stk6d51_reconf_camera(dev);
00584             break;
00585 
00586         default:
00587             ret = -1;
00588     }
00589 
00590     return ret;
00591 }
00592 
00593 
00604 int dev_stk11xx_stop_stream(struct usb_stk11xx *dev)
00605 {
00606     int ret;
00607 
00608     switch (dev->webcam_model) {
00609         case SYNTEK_STK_M811:
00610         case SYNTEK_STK_A311:
00611             ret = dev_stka311_stop_stream(dev);
00612             break;
00613 
00614         case SYNTEK_STK_A821:
00615             ret = dev_stka821_stop_stream(dev);
00616             break;
00617 
00618         case SYNTEK_STK_6A31:
00619             ret = dev_stk6a31_stop_stream(dev);
00620             break;
00621 
00622         case SYNTEK_STK_6A33:
00623             ret = dev_stk6a33_stop_stream(dev);
00624             break;
00625 
00626         case SYNTEK_STK_6A51:
00627             ret = dev_stk6a51_stop_stream(dev);
00628             break;
00629 
00630         case SYNTEK_STK_6A54:
00631             ret = dev_stk6a54_stop_stream(dev);
00632             break;
00633 
00634         case SYNTEK_STK_6D51:
00635             ret = dev_stk6d51_stop_stream(dev);
00636             break;
00637 
00638         default:
00639             ret = -1;
00640     }
00641 
00642     return ret;
00643 }
00644