summaryrefslogtreecommitdiffstats
path: root/drivers/staging/easycap
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/easycap')
-rw-r--r--drivers/staging/easycap/easycap_main.c4564
1 files changed, 2234 insertions, 2330 deletions
diff --git a/drivers/staging/easycap/easycap_main.c b/drivers/staging/easycap/easycap_main.c
index fc1a1781227e..e33c3cb7b397 100644
--- a/drivers/staging/easycap/easycap_main.c
+++ b/drivers/staging/easycap/easycap_main.c
@@ -125,89 +125,87 @@ const char *strerror(int err)
* THIS ROUTINE DOES NOT DETECT DUPLICATE OCCURRENCES OF POINTER peasycap
*/
/*---------------------------------------------------------------------------*/
-int
-isdongle(struct easycap *peasycap)
+int isdongle(struct easycap *peasycap)
{
-int k;
-if (NULL == peasycap)
- return -2;
-for (k = 0; k < DONGLE_MANY; k++) {
- if (easycapdc60_dongle[k].peasycap == peasycap) {
- peasycap->isdongle = k;
- return k;
+ int k;
+ if (NULL == peasycap)
+ return -2;
+ for (k = 0; k < DONGLE_MANY; k++) {
+ if (easycapdc60_dongle[k].peasycap == peasycap) {
+ peasycap->isdongle = k;
+ return k;
+ }
}
-}
-return -1;
+ return -1;
}
/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
static int easycap_open(struct inode *inode, struct file *file)
{
-#ifndef EASYCAP_IS_VIDEODEV_CLIENT
-struct usb_interface *pusb_interface;
-#else
-struct video_device *pvideo_device;
-#endif /*EASYCAP_IS_VIDEODEV_CLIENT*/
-struct easycap *peasycap;
-int rc;
+ #ifndef EASYCAP_IS_VIDEODEV_CLIENT
+ struct usb_interface *pusb_interface;
+ #else
+ struct video_device *pvideo_device;
+ #endif /*EASYCAP_IS_VIDEODEV_CLIENT*/
+ struct easycap *peasycap;
+ int rc;
-JOT(4, "\n");
-SAY("==========OPEN=========\n");
+ JOT(4, "\n");
+ SAY("==========OPEN=========\n");
/*---------------------------------------------------------------------------*/
#ifndef EASYCAP_IS_VIDEODEV_CLIENT
-if (NULL == inode) {
- SAY("ERROR: inode is NULL.\n");
- return -EFAULT;
-}
-pusb_interface = usb_find_interface(&easycap_usb_driver, iminor(inode));
-if (!pusb_interface) {
- SAY("ERROR: pusb_interface is NULL.\n");
- return -EFAULT;
-}
-peasycap = usb_get_intfdata(pusb_interface);
+ if (NULL == inode) {
+ SAY("ERROR: inode is NULL.\n");
+ return -EFAULT;
+ }
+ pusb_interface = usb_find_interface(&easycap_usb_driver, iminor(inode));
+ if (!pusb_interface) {
+ SAY("ERROR: pusb_interface is NULL.\n");
+ return -EFAULT;
+ }
+ peasycap = usb_get_intfdata(pusb_interface);
/*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
#else
-pvideo_device = video_devdata(file);
-if (NULL == pvideo_device) {
- SAY("ERROR: pvideo_device is NULL.\n");
- return -EFAULT;
-}
-peasycap = (struct easycap *)video_get_drvdata(pvideo_device);
+ pvideo_device = video_devdata(file);
+ if (NULL == pvideo_device) {
+ SAY("ERROR: pvideo_device is NULL.\n");
+ return -EFAULT;
+ }
+ peasycap = (struct easycap *)video_get_drvdata(pvideo_device);
#endif /*EASYCAP_IS_VIDEODEV_CLIENT*/
-/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
-if (NULL == peasycap) {
- SAY("ERROR: peasycap is NULL\n");
- return -EFAULT;
-}
-if (memcmp(&peasycap->telltale[0], TELLTALE, strlen(TELLTALE))) {
- SAY("ERROR: bad peasycap: %p\n", peasycap);
- return -EFAULT;
-}
-if (NULL == peasycap->pusb_device) {
- SAM("ERROR: peasycap->pusb_device is NULL\n");
- return -EFAULT;
-} else {
- JOM(16, "peasycap->pusb_device=%p\n", peasycap->pusb_device);
-}
-file->private_data = peasycap;
-rc = wakeup_device(peasycap->pusb_device);
-if (0 == rc)
- JOM(8, "wakeup_device() OK\n");
-else {
- SAM("ERROR: wakeup_device() returned %i\n", rc);
- if (-ENODEV == rc)
- SAM("ERROR: wakeup_device() returned -ENODEV\n");
- else
- SAM("ERROR: wakeup_device() returned %i\n", rc);
- return rc;
-}
-peasycap->input = 0;
-rc = reset(peasycap);
-if (rc) {
- SAM("ERROR: reset() returned %i\n", rc);
- return -EFAULT;
-}
-return 0;
+ if (NULL == peasycap) {
+ SAY("ERROR: peasycap is NULL\n");
+ return -EFAULT;
+ }
+ if (memcmp(&peasycap->telltale[0], TELLTALE, strlen(TELLTALE))) {
+ SAY("ERROR: bad peasycap: %p\n", peasycap);
+ return -EFAULT;
+ }
+ if (NULL == peasycap->pusb_device) {
+ SAM("ERROR: peasycap->pusb_device is NULL\n");
+ return -EFAULT;
+ } else {
+ JOM(16, "peasycap->pusb_device=%p\n", peasycap->pusb_device);
+ }
+ file->private_data = peasycap;
+ rc = wakeup_device(peasycap->pusb_device);
+ if (0 == rc)
+ JOM(8, "wakeup_device() OK\n");
+ else {
+ SAM("ERROR: wakeup_device() rc = %i\n", rc);
+ if (-ENODEV == rc)
+ SAM("ERROR: wakeup_device() returned -ENODEV\n");
+ else
+ SAM("ERROR: wakeup_device() rc = %i\n", rc);
+ return rc;
+ }
+ peasycap->input = 0;
+ rc = reset(peasycap);
+ if (rc) {
+ SAM("ERROR: reset() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ return 0;
}
/*****************************************************************************/
@@ -221,15 +219,16 @@ return 0;
/*---------------------------------------------------------------------------*/
static int reset(struct easycap *peasycap)
{
-struct easycap_standard const *peasycap_standard;
-int i, rc, input, rate;
-bool ntsc, other;
+ struct easycap_standard const *peasycap_standard;
+ int i, rc, input, rate;
+ bool ntsc, other;
+ int fmtidx;
-if (NULL == peasycap) {
- SAY("ERROR: peasycap is NULL\n");
- return -EFAULT;
-}
-input = peasycap->input;
+ if (NULL == peasycap) {
+ SAY("ERROR: peasycap is NULL\n");
+ return -EFAULT;
+ }
+ input = peasycap->input;
/*---------------------------------------------------------------------------*/
/*
@@ -242,74 +241,70 @@ input = peasycap->input;
* COMPLETE, SO SHOULD NOT BE INVOKED WITHOUT GOOD REASON.
*/
/*---------------------------------------------------------------------------*/
-other = false;
-if (true == peasycap->ntsc)
- JOM(8, "true=peasycap->ntsc\n");
-else
- JOM(8, "false=peasycap->ntsc\n");
-rate = ready_saa(peasycap->pusb_device);
-if (0 > rate) {
- JOM(8, "not ready to capture after %i ms ...\n", PATIENCE);
- if (true == peasycap->ntsc) {
- JOM(8, "... trying PAL ...\n"); ntsc = false;
- } else {
- JOM(8, "... trying NTSC ...\n"); ntsc = true;
-}
-rc = setup_stk(peasycap->pusb_device, ntsc);
-if (0 == rc)
- JOM(4, "setup_stk() OK\n");
-else {
- SAM("ERROR: setup_stk() returned %i\n", rc);
- return -EFAULT;
-}
-rc = setup_saa(peasycap->pusb_device, ntsc);
-if (0 == rc)
- JOM(4, "setup_saa() OK\n");
-else {
- SAM("ERROR: setup_saa() returned %i\n", rc);
- return -EFAULT;
-}
-rate = ready_saa(peasycap->pusb_device);
-if (0 > rate) {
- JOM(8, "not ready to capture after %i ms ...\n", PATIENCE);
- JOM(8, "... saa register 0x1F has 0x%02X\n",
- read_saa(peasycap->pusb_device, 0x1F));
- ntsc = peasycap->ntsc;
+ other = false;
+ JOM(8, "peasycap->ntsc=%d\n", peasycap->ntsc);
+
+ rate = ready_saa(peasycap->pusb_device);
+ if (0 > rate) {
+ JOM(8, "not ready to capture after %i ms ...\n", PATIENCE);
+ if (true == peasycap->ntsc) {
+ JOM(8, "... trying PAL ...\n"); ntsc = false;
+ } else {
+ JOM(8, "... trying NTSC ...\n"); ntsc = true;
+ }
+ rc = setup_stk(peasycap->pusb_device, ntsc);
+ if (0 == rc)
+ JOM(4, "setup_stk() OK\n");
+ else {
+ SAM("ERROR: setup_stk() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ rc = setup_saa(peasycap->pusb_device, ntsc);
+ if (0 == rc)
+ JOM(4, "setup_saa() OK\n");
+ else {
+ SAM("ERROR: setup_saa() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ rate = ready_saa(peasycap->pusb_device);
+ if (0 > rate) {
+ JOM(8, "not ready to capture after %i ms ...\n", PATIENCE);
+ JOM(8, "... saa register 0x1F has 0x%02X\n",
+ read_saa(peasycap->pusb_device, 0x1F));
+ ntsc = peasycap->ntsc;
+ } else {
+ JOM(8, "... success at second try: %i=rate\n", rate);
+ ntsc = (0 < (rate/2)) ? true : false ;
+ other = true;
+ }
} else {
- JOM(8, "... success at second try: %i=rate\n", rate);
- ntsc = (0 < (rate/2)) ? true : false ;
- other = true;
+ JOM(8, "... success at first try: %i=rate\n", rate);
+ ntsc = (0 < rate/2) ? true : false ;
+ }
+ JOM(8, "ntsc=%d\n", ntsc);
+/*---------------------------------------------------------------------------*/
+
+ rc = setup_stk(peasycap->pusb_device, ntsc);
+ if (0 == rc)
+ JOM(4, "setup_stk() OK\n");
+ else {
+ SAM("ERROR: setup_stk() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ rc = setup_saa(peasycap->pusb_device, ntsc);
+ if (0 == rc)
+ JOM(4, "setup_saa() OK\n");
+ else {
+ SAM("ERROR: setup_saa() rc = %i\n", rc);
+ return -EFAULT;
}
-} else {
- JOM(8, "... success at first try: %i=rate\n", rate);
- ntsc = (0 < rate/2) ? true : false ;
-}
-if (true == ntsc)
- JOM(8, "true=ntsc\n");
-else
- JOM(8, "false=ntsc\n");
-/*---------------------------------------------------------------------------*/
-
-rc = setup_stk(peasycap->pusb_device, ntsc);
-if (0 == rc)
- JOM(4, "setup_stk() OK\n");
-else {
- SAM("ERROR: setup_stk() returned %i\n", rc);
- return -EFAULT;
-}
-rc = setup_saa(peasycap->pusb_device, ntsc);
-if (0 == rc)
- JOM(4, "setup_saa() OK\n");
-else {
- SAM("ERROR: setup_saa() returned %i\n", rc);
- return -EFAULT;
-}
-for (i = 0; i < 180; i++)
- peasycap->merit[i] = 0;
-peasycap->video_eof = 0;
-peasycap->audio_eof = 0;
-do_gettimeofday(&peasycap->timeval7);
+ for (i = 0; i < 180; i++)
+ peasycap->merit[i] = 0;
+
+ peasycap->video_eof = 0;
+ peasycap->audio_eof = 0;
+ do_gettimeofday(&peasycap->timeval7);
/*---------------------------------------------------------------------------*/
/*
* RESTORE INPUT AND FORCE REFRESH OF STANDARD, FORMAT, ETC.
@@ -317,86 +312,75 @@ do_gettimeofday(&peasycap->timeval7);
* WHILE THIS PROCEDURE IS IN PROGRESS, SOME IOCTL COMMANDS WILL RETURN -EBUSY.
*/
/*---------------------------------------------------------------------------*/
-peasycap->input = -8192;
-peasycap->standard_offset = -8192;
-if (true == other) {
- peasycap_standard = &easycap_standard[0];
- while (0xFFFF != peasycap_standard->mask) {
- if (true == ntsc) {
- if (NTSC_M == peasycap_standard->v4l2_standard.index) {
- peasycap->inputset[input].standard_offset =
- peasycap_standard -
- &easycap_standard[0];
- break;
- }
- } else {
- if (PAL_BGHIN ==
- peasycap_standard->v4l2_standard.index) {
+ peasycap->input = -8192;
+ peasycap->standard_offset = -8192;
+ fmtidx = ntsc ? NTSC_M : PAL_BGHIN;
+ if (other) {
+ peasycap_standard = &easycap_standard[0];
+ while (0xFFFF != peasycap_standard->mask) {
+ if (fmtidx == peasycap_standard->v4l2_standard.index) {
peasycap->inputset[input].standard_offset =
- peasycap_standard -
- &easycap_standard[0];
+ peasycap_standard - easycap_standard;
break;
}
+ peasycap_standard++;
}
- peasycap_standard++;
- }
- if (0xFFFF == peasycap_standard->mask) {
- SAM("ERROR: standard not found\n");
- return -EINVAL;
+ if (0xFFFF == peasycap_standard->mask) {
+ SAM("ERROR: standard not found\n");
+ return -EINVAL;
+ }
+ JOM(8, "%i=peasycap->inputset[%i].standard_offset\n",
+ peasycap->inputset[input].standard_offset, input);
}
-JOM(8, "%i=peasycap->inputset[%i].standard_offset\n",
- peasycap->inputset[input].standard_offset, input);
-}
-peasycap->format_offset = -8192;
-peasycap->brightness = -8192;
-peasycap->contrast = -8192;
-peasycap->saturation = -8192;
-peasycap->hue = -8192;
+ peasycap->format_offset = -8192;
+ peasycap->brightness = -8192;
+ peasycap->contrast = -8192;
+ peasycap->saturation = -8192;
+ peasycap->hue = -8192;
-rc = newinput(peasycap, input);
+ rc = newinput(peasycap, input);
-if (0 == rc)
+ if (rc) {
+ SAM("ERROR: newinput(.,%i) rc = %i\n", rc, input);
+ return -EFAULT;
+ }
JOM(4, "restored input, standard and format\n");
-else {
- SAM("ERROR: newinput(.,%i) returned %i\n", rc, input);
- return -EFAULT;
-}
-if (true == peasycap->ntsc)
- JOM(8, "true=peasycap->ntsc\n");
-else
- JOM(8, "false=peasycap->ntsc\n");
-
-if (0 > peasycap->input) {
- SAM("MISTAKE: %i=peasycap->input\n", peasycap->input);
- return -ENOENT;
-}
-if (0 > peasycap->standard_offset) {
- SAM("MISTAKE: %i=peasycap->standard_offset\n",
- peasycap->standard_offset);
- return -ENOENT;
-}
-if (0 > peasycap->format_offset) {
- SAM("MISTAKE: %i=peasycap->format_offset\n",
- peasycap->format_offset);
- return -ENOENT;
-}
-if (0 > peasycap->brightness) {
- SAM("MISTAKE: %i=peasycap->brightness\n", peasycap->brightness);
- return -ENOENT;
-}
-if (0 > peasycap->contrast) {
- SAM("MISTAKE: %i=peasycap->contrast\n", peasycap->contrast);
- return -ENOENT;
-}
-if (0 > peasycap->saturation) {
- SAM("MISTAKE: %i=peasycap->saturation\n", peasycap->saturation);
- return -ENOENT;
-}
-if (0 > peasycap->hue) {
- SAM("MISTAKE: %i=peasycap->hue\n", peasycap->hue);
- return -ENOENT;
-}
-return 0;
+
+ JOM(8, "true=peasycap->ntsc %d\n", peasycap->ntsc);
+
+ if (0 > peasycap->input) {
+ SAM("MISTAKE: %i=peasycap->input\n", peasycap->input);
+ return -ENOENT;
+ }
+ if (0 > peasycap->standard_offset) {
+ SAM("MISTAKE: %i=peasycap->standard_offset\n",
+ peasycap->standard_offset);
+ return -ENOENT;
+ }
+ if (0 > peasycap->format_offset) {
+ SAM("MISTAKE: %i=peasycap->format_offset\n",
+ peasycap->format_offset);
+ return -ENOENT;
+ }
+ if (0 > peasycap->brightness) {
+ SAM("MISTAKE: %i=peasycap->brightness\n",
+ peasycap->brightness);
+ return -ENOENT;
+ }
+ if (0 > peasycap->contrast) {
+ SAM("MISTAKE: %i=peasycap->contrast\n", peasycap->contrast);
+ return -ENOENT;
+ }
+ if (0 > peasycap->saturation) {
+ SAM("MISTAKE: %i=peasycap->saturation\n",
+ peasycap->saturation);
+ return -ENOENT;
+ }
+ if (0 > peasycap->hue) {
+ SAM("MISTAKE: %i=peasycap->hue\n", peasycap->hue);
+ return -ENOENT;
+ }
+ return 0;
}
/*****************************************************************************/
/*---------------------------------------------------------------------------*/
@@ -418,21 +402,21 @@ return 0;
int
newinput(struct easycap *peasycap, int input)
{
-int rc, k, m, mood, off;
-int inputnow, video_idlenow, audio_idlenow;
-bool resubmit;
+ int rc, k, m, mood, off;
+ int inputnow, video_idlenow, audio_idlenow;
+ bool resubmit;
-if (NULL == peasycap) {
- SAY("ERROR: peasycap is NULL\n");
- return -EFAULT;
-}
-JOM(8, "%i=input sought\n", input);
+ if (NULL == peasycap) {
+ SAY("ERROR: peasycap is NULL\n");
+ return -EFAULT;
+ }
+ JOM(8, "%i=input sought\n", input);
-if (0 > input && INPUT_MANY <= input)
- return -ENOENT;
-inputnow = peasycap->input;
-if (input == inputnow)
- return 0;
+ if (0 > input && INPUT_MANY <= input)
+ return -ENOENT;
+ inputnow = peasycap->input;
+ if (input == inputnow)
+ return 0;
/*---------------------------------------------------------------------------*/
/*
* IF STREAMING IS IN PROGRESS THE URBS ARE KILLED AT THIS
@@ -441,183 +425,187 @@ if (input == inputnow)
* ROUTINE.
*/
/*---------------------------------------------------------------------------*/
-video_idlenow = peasycap->video_idle;
-audio_idlenow = peasycap->audio_idle;
+ video_idlenow = peasycap->video_idle;
+ audio_idlenow = peasycap->audio_idle;
-peasycap->video_idle = 1;
-peasycap->audio_idle = 1;
-if (peasycap->video_isoc_streaming) {
- resubmit = true;
- kill_video_urbs(peasycap);
-} else
- resubmit = false;
+ peasycap->video_idle = 1;
+ peasycap->audio_idle = 1;
+ if (peasycap->video_isoc_streaming) {
+ resubmit = true;
+ kill_video_urbs(peasycap);
+ } else {
+ resubmit = false;
+ }
/*---------------------------------------------------------------------------*/
-if (NULL == peasycap->pusb_device) {
- SAM("ERROR: peasycap->pusb_device is NULL\n");
- return -ENODEV;
-}
-rc = usb_set_interface(peasycap->pusb_device,
- peasycap->video_interface,
- peasycap->video_altsetting_off);
-if (rc) {
- SAM("ERROR: usb_set_interface() returned %i\n", rc);
- return -EFAULT;
-}
-rc = stop_100(peasycap->pusb_device);
-if (rc) {
- SAM("ERROR: stop_100() returned %i\n", rc);
- return -EFAULT;
-}
-for (k = 0; k < FIELD_BUFFER_MANY; k++) {
- for (m = 0; m < FIELD_BUFFER_SIZE/PAGE_SIZE; m++)
- memset(peasycap->field_buffer[k][m].pgo, 0, PAGE_SIZE);
-}
-for (k = 0; k < FRAME_BUFFER_MANY; k++) {
- for (m = 0; m < FRAME_BUFFER_SIZE/PAGE_SIZE; m++)
- memset(peasycap->frame_buffer[k][m].pgo, 0, PAGE_SIZE);
-}
-peasycap->field_page = 0;
-peasycap->field_read = 0;
-peasycap->field_fill = 0;
-
-peasycap->frame_read = 0;
-peasycap->frame_fill = 0;
-for (k = 0; k < peasycap->input; k++) {
- (peasycap->frame_fill)++;
- if (peasycap->frame_buffer_many <= peasycap->frame_fill)
- peasycap->frame_fill = 0;
-}
-peasycap->input = input;
-select_input(peasycap->pusb_device, peasycap->input, 9);
+ if (NULL == peasycap->pusb_device) {
+ SAM("ERROR: peasycap->pusb_device is NULL\n");
+ return -ENODEV;
+ }
+ rc = usb_set_interface(peasycap->pusb_device,
+ peasycap->video_interface,
+ peasycap->video_altsetting_off);
+ if (rc) {
+ SAM("ERROR: usb_set_interface() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ rc = stop_100(peasycap->pusb_device);
+ if (rc) {
+ SAM("ERROR: stop_100() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ for (k = 0; k < FIELD_BUFFER_MANY; k++) {
+ for (m = 0; m < FIELD_BUFFER_SIZE/PAGE_SIZE; m++)
+ memset(peasycap->field_buffer[k][m].pgo, 0, PAGE_SIZE);
+ }
+ for (k = 0; k < FRAME_BUFFER_MANY; k++) {
+ for (m = 0; m < FRAME_BUFFER_SIZE/PAGE_SIZE; m++)
+ memset(peasycap->frame_buffer[k][m].pgo, 0, PAGE_SIZE);
+ }
+ peasycap->field_page = 0;
+ peasycap->field_read = 0;
+ peasycap->field_fill = 0;
+
+ peasycap->frame_read = 0;
+ peasycap->frame_fill = 0;
+ for (k = 0; k < peasycap->input; k++) {
+ (peasycap->frame_fill)++;
+ if (peasycap->frame_buffer_many <= peasycap->frame_fill)
+ peasycap->frame_fill = 0;
+ }
+ peasycap->input = input;
+ select_input(peasycap->pusb_device, peasycap->input, 9);
/*---------------------------------------------------------------------------*/
-if (input == peasycap->inputset[input].input) {
- off = peasycap->inputset[input].standard_offset;
- if (off != peasycap->standard_offset) {
- rc = adjust_standard(peasycap,
+ if (input == peasycap->inputset[input].input) {
+ off = peasycap->inputset[input].standard_offset;
+ if (off != peasycap->standard_offset) {
+ rc = adjust_standard(peasycap,
easycap_standard[off].v4l2_standard.id);
- if (rc) {
- SAM("ERROR: adjust_standard() returned %i\n", rc);
- return -EFAULT;
- }
- JOM(8, "%i=peasycap->standard_offset\n",
- peasycap->standard_offset);
- } else {
- JOM(8, "%i=peasycap->standard_offset unchanged\n",
+ if (rc) {
+ SAM("ERROR: adjust_standard() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ JOM(8, "%i=peasycap->standard_offset\n",
+ peasycap->standard_offset);
+ } else {
+ JOM(8, "%i=peasycap->standard_offset unchanged\n",
peasycap->standard_offset);
- }
- off = peasycap->inputset[input].format_offset;
- if (off != peasycap->format_offset) {
- rc = adjust_format(peasycap,
- easycap_format[off].v4l2_format.fmt.pix.width,
- easycap_format[off].v4l2_format.fmt.pix.height,
- easycap_format[off].v4l2_format.fmt.pix.pixelformat,
- easycap_format[off].v4l2_format.fmt.pix.field, false);
- if (0 > rc) {
- SAM("ERROR: adjust_format() returned %i\n", rc);
- return -EFAULT;
}
- JOM(8, "%i=peasycap->format_offset\n", peasycap->format_offset);
- } else {
- JOM(8, "%i=peasycap->format_offset unchanged\n",
- peasycap->format_offset);
- }
- mood = peasycap->inputset[input].brightness;
- if (mood != peasycap->brightness) {
- rc = adjust_brightness(peasycap, mood);
- if (rc) {
- SAM("ERROR: adjust_brightness returned %i\n", rc);
- return -EFAULT;
+ off = peasycap->inputset[input].format_offset;
+ if (off != peasycap->format_offset) {
+ struct v4l2_pix_format *pix =
+ &easycap_format[off].v4l2_format.fmt.pix;
+ rc = adjust_format(peasycap,
+ pix->width, pix->height,
+ pix->pixelformat, pix->field, false);
+ if (0 > rc) {
+ SAM("ERROR: adjust_format() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ JOM(8, "%i=peasycap->format_offset\n",
+ peasycap->format_offset);
+ } else {
+ JOM(8, "%i=peasycap->format_offset unchanged\n",
+ peasycap->format_offset);
}
- JOM(8, "%i=peasycap->brightness\n", peasycap->brightness);
- }
- mood = peasycap->inputset[input].contrast;
- if (mood != peasycap->contrast) {
- rc = adjust_contrast(peasycap, mood);
- if (rc) {
- SAM("ERROR: adjust_contrast returned %i\n", rc);
- return -EFAULT;
+ mood = peasycap->inputset[input].brightness;
+ if (mood != peasycap->brightness) {
+ rc = adjust_brightness(peasycap, mood);
+ if (rc) {
+ SAM("ERROR: adjust_brightness rc = %i\n", rc);
+ return -EFAULT;
+ }
+ JOM(8, "%i=peasycap->brightness\n",
+ peasycap->brightness);
}
- JOM(8, "%i=peasycap->contrast\n", peasycap->contrast);
- }
- mood = peasycap->inputset[input].saturation;
- if (mood != peasycap->saturation) {
- rc = adjust_saturation(peasycap, mood);
- if (rc) {
- SAM("ERROR: adjust_saturation returned %i\n", rc);
- return -EFAULT;
+ mood = peasycap->inputset[input].contrast;
+ if (mood != peasycap->contrast) {
+ rc = adjust_contrast(peasycap, mood);
+ if (rc) {
+ SAM("ERROR: adjust_contrast rc = %i\n", rc);
+ return -EFAULT;
+ }
+ JOM(8, "%i=peasycap->contrast\n", peasycap->contrast);
}
- JOM(8, "%i=peasycap->saturation\n", peasycap->saturation);
- }
- mood = peasycap->inputset[input].hue;
- if (mood != peasycap->hue) {
- rc = adjust_hue(peasycap, mood);
- if (rc) {
- SAM("ERROR: adjust_hue returned %i\n", rc);
- return -EFAULT;
+ mood = peasycap->inputset[input].saturation;
+ if (mood != peasycap->saturation) {
+ rc = adjust_saturation(peasycap, mood);
+ if (rc) {
+ SAM("ERROR: adjust_saturation rc = %i\n", rc);
+ return -EFAULT;
+ }
+ JOM(8, "%i=peasycap->saturation\n",
+ peasycap->saturation);
+ }
+ mood = peasycap->inputset[input].hue;
+ if (mood != peasycap->hue) {
+ rc = adjust_hue(peasycap, mood);
+ if (rc) {
+ SAM("ERROR: adjust_hue rc = %i\n", rc);
+ return -EFAULT;
+ }
+ JOM(8, "%i=peasycap->hue\n", peasycap->hue);
}
- JOM(8, "%i=peasycap->hue\n", peasycap->hue);
+ } else {
+ SAM("MISTAKE: easycap.inputset[%i] unpopulated\n", input);
+ return -ENOENT;
}
-} else {
- SAM("MISTAKE: easycap.inputset[%i] unpopulated\n", input);
- return -ENOENT;
-}
/*---------------------------------------------------------------------------*/
-if (NULL == peasycap->pusb_device) {
- SAM("ERROR: peasycap->pusb_device is NULL\n");
- return -ENODEV;
-}
-rc = usb_set_interface(peasycap->pusb_device,
- peasycap->video_interface,
- peasycap->video_altsetting_on);
-if (rc) {
- SAM("ERROR: usb_set_interface() returned %i\n", rc);
- return -EFAULT;
-}
-rc = start_100(peasycap->pusb_device);
-if (rc) {
- SAM("ERROR: start_100() returned %i\n", rc);
- return -EFAULT;
-}
-if (true == resubmit)
- submit_video_urbs(peasycap);
+ if (NULL == peasycap->pusb_device) {
+ SAM("ERROR: peasycap->pusb_device is NULL\n");
+ return -ENODEV;
+ }
+ rc = usb_set_interface(peasycap->pusb_device,
+ peasycap->video_interface,
+ peasycap->video_altsetting_on);
+ if (rc) {
+ SAM("ERROR: usb_set_interface() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ rc = start_100(peasycap->pusb_device);
+ if (rc) {
+ SAM("ERROR: start_100() rc = %i\n", rc);
+ return -EFAULT;
+ }
+ if (true == resubmit)
+ submit_video_urbs(peasycap);
-peasycap->video_isoc_sequence = VIDEO_ISOC_BUFFER_MANY - 1;
-peasycap->video_idle = video_idlenow;
-peasycap->audio_idle = audio_idlenow;
-peasycap->video_junk = 0;
+ peasycap->video_isoc_sequence = VIDEO_ISOC_BUFFER_MANY - 1;
+ peasycap->video_idle = video_idlenow;
+ peasycap->audio_idle = audio_idlenow;
+ peasycap->video_junk = 0;
-return 0;
+ return 0;
}
/*****************************************************************************/
int submit_video_urbs(struct easycap *peasycap)
{
-struct data_urb *pdata_urb;
-struct urb *purb;
-struct list_head *plist_head;
-int j, isbad, nospc, m, rc;
-int isbuf;
-
-if (NULL == peasycap) {
- SAY("ERROR: peasycap is NULL\n");
- return -EFAULT;
-}
+ struct data_urb *pdata_urb;
+ struct urb *purb;
+ struct list_head *plist_head;
+ int j, isbad, nospc, m, rc;
+ int isbuf;
-if (NULL == peasycap->purb_video_head) {
- SAY("ERROR: peasycap->urb_video_head uninitialized\n");
- return -EFAULT;
-}
-if (NULL == peasycap->pusb_device) {
- SAY("ERROR: peasycap->pusb_device is NULL\n");
- return -ENODEV;
-}
-if (!peasycap->video_isoc_streaming) {
- JOM(4, "submission of all video urbs\n");
- isbad = 0; nospc = 0; m = 0;
- list_for_each(plist_head, (peasycap->purb_video_head)) {
- pdata_urb = list_entry(plist_head, struct data_urb, list_head);
- if (NULL != pdata_urb) {
- purb = pdata_urb->purb;
- if (NULL != purb) {
+ if (NULL == peasycap) {
+ SAY("ERROR: peasycap is NULL\n");
+ return -EFAULT;
+ }
+
+ if (NULL == peasycap->purb_video_head) {
+ SAY("ERROR: peasycap->urb_video_head uninitialized\n");
+ return -EFAULT;
+ }
+ if (NULL == peasycap->pusb_device) {
+ SAY("ERROR: peasycap->pusb_device is NULL\n");
+ return -ENODEV;
+ }
+ if (!peasycap->video_isoc_streaming) {
+ JOM(4, "submission of all video urbs\n");
+ isbad = 0; nospc = 0; m = 0;
+ list_for_each(plist_head, (peasycap->purb_video_head)) {
+ pdata_urb = list_entry(plist_head,
+ struct data_urb, list_head);
+ if (pdata_urb && pdata_urb->purb) {
+ purb = pdata_urb->purb;
isbuf = pdata_urb->isbuf;
purb->interval = 1;
purb->dev = peasycap->pusb_device;
@@ -635,22 +623,18 @@ if (!peasycap->video_isoc_streaming) {
purb->number_of_packets =
peasycap->video_isoc_framesperdesc;
- for (j = 0; j < peasycap->
- video_isoc_framesperdesc; j++) {
- purb->iso_frame_desc[j].
- offset = j *
- peasycap->
- video_isoc_maxframesize;
- purb->iso_frame_desc[j].
- length = peasycap->
- video_isoc_maxframesize;
- }
+ for (j = 0; j < peasycap->video_isoc_framesperdesc; j++) {
+ purb->iso_frame_desc[j]. offset =
+ j * peasycap->video_isoc_maxframesize;
+ purb->iso_frame_desc[j]. length =
+ peasycap->video_isoc_maxframesize;
+ }
rc = usb_submit_urb(purb, GFP_KERNEL);
if (rc) {
isbad++;
SAM("ERROR: usb_submit_urb() failed "
- "for urb with rc:-%s\n",
+ "for urb with rc:-%s\n",
strerror(rc));
if (rc == -ENOSPC)
nospc++;
@@ -660,74 +644,68 @@ if (!peasycap->video_isoc_streaming) {
} else {
isbad++;
}
- } else {
- isbad++;
}
- }
- if (nospc) {
- SAM("-ENOSPC=usb_submit_urb() for %i urbs\n", nospc);
- SAM("..... possibly inadequate USB bandwidth\n");
- peasycap->video_eof = 1;
- }
+ if (nospc) {
+ SAM("-ENOSPC=usb_submit_urb() for %i urbs\n", nospc);
+ SAM("..... possibly inadequate USB bandwidth\n");
+ peasycap->video_eof = 1;
+ }
- if (isbad) {
- JOM(4, "attempting cleanup instead of submitting\n");
- list_for_each(plist_head, (peasycap->purb_video_head)) {
- pdata_urb = list_entry(plist_head, struct data_urb,
- list_head);
- if (NULL != pdata_urb) {
- purb = pdata_urb->purb;
- if (NULL != purb)
- usb_kill_urb(purb);
+ if (isbad) {
+ JOM(4, "attempting cleanup instead of submitting\n");
+ list_for_each(plist_head, (peasycap->purb_video_head)) {
+ pdata_urb = list_entry(plist_head,
+ struct data_urb, list_head);
+ if (NULL != pdata_urb) {
+ purb = pdata_urb->purb;
+ if (NULL != purb)
+ usb_kill_urb(purb);
+ }
}
+ peasycap->video_isoc_streaming = 0;
+ } else {
+ peasycap->video_isoc_streaming = 1;
+ JOM(4, "submitted %i video urbs\n", m);
}
- peasycap->video_isoc_streaming = 0;
} else {
- peasycap->video_isoc_streaming = 1;
- JOM(4, "submitted %i video urbs\n", m);
+ JOM(4, "already streaming video urbs\n");
}
-} else {
- JOM(4, "already streaming video urbs\n");
-}
-return 0;
+ return 0;
}
/*****************************************************************************/
-int
-kill_video_urbs(struct easycap *peasycap)
+int kill_video_urbs(struct easycap *peasycap)
{
-int m;
-struct list_head *plist_head;
-struct data_urb *pdata_urb;
+ int m;
+ struct list_head *plist_head;
+ struct data_urb *pdata_urb;
-if (NULL == peasycap) {
- SAY("ERROR: peasycap is NULL\n");
- return -EFAULT;
-}
-if (peasycap->video_isoc_streaming) {
- if (NULL != peasycap->purb_video_head) {
- peasycap->video_isoc_streaming = 0;
- JOM(4, "killing video urbs\n");
- m = 0;
- list_for_each(plist_head, (peasycap->purb_video_head)) {
- pdata_urb = list_entry(plist_head, struct data_urb,
- list_head);
- if (NULL != pdata_urb) {
- if (NULL != pdata_urb->purb) {
- usb_kill_urb(pdata_urb->purb);
- m++;
- }
- }
- }
- JOM(4, "%i video urbs killed\n", m);
- } else {
+ if (NULL == peasycap) {
+ SAY("ERROR: peasycap is NULL\n");
+ return -EFAULT;
+ }
+ if (!peasycap->video_isoc_streaming) {
+ JOM(8, "%i=video_isoc_streaming, no video urbs killed\n",
+ peasycap->video_isoc_streaming);
+ return 0;
+ }
+ if (!peasycap->purb_video_head) {
SAM("ERROR: peasycap->purb_video_head is NULL\n");
return -EFAULT;
}
-} else {
- JOM(8, "%i=video_isoc_streaming, no video urbs killed\n",
- peasycap->video_isoc_streaming);
-}
-return 0;
+
+ peasycap->video_isoc_streaming = 0;
+ JOM(4, "killing video urbs\n");
+ m = 0;
+ list_for_each(plist_head, (peasycap->purb_video_head)) {
+ pdata_urb = list_entry(plist_head, struct data_urb, list_head);
+ if (pdata_urb && pdata_urb->purb) {
+ usb_kill_urb(pdata_urb->purb);
+ m++;
+ }
+ }
+ JOM(4, "%i video urbs killed\n", m);
+
+ return 0;
}
/****************************************************************************/
/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
@@ -735,32 +713,27 @@ return 0;
static int easycap_release(struct inode *inode, struct file *file)
{
#ifndef EASYCAP_IS_VIDEODEV_CLIENT
-struct easycap *peasycap;
+ struct easycap *peasycap;
-JOT(4, "\n");
-peasycap = file->private_data;
-if (NULL == peasycap) {
- SAY("ERROR: peasycap is NULL.\n");
- SAY("ending unsuccessfully\n");
- return -EFAULT;
-}
-if (memcmp(&peasycap->telltale[0], TELLTALE, strlen(TELLTALE))) {
- SAY("ERROR: bad peasycap: %p\n", peasycap);
- return -EFAULT;
-}
-if (0 != kill_video_urbs(peasycap)) {
- SAM("ERROR: kill_video_urbs() failed\n");
- return -EFAULT;
-}
-JOM(4, "ending successfully\n");
-/*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
-#else
-#
-/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
+ peasycap = file->private_data;
+ if (NULL == peasycap) {
+ SAY("ERROR: peasycap is NULL.\n");
+ SAY("ending unsuccessfully\n");
+ return -EFAULT;
+ }
+ if (memcmp(&peasycap->telltale[0], TELLTALE, strlen(TELLTALE))) {
+ SAY("ERROR: bad peasycap: %p\n", peasycap);
+ return -EFAULT;
+ }
+ if (0 != kill_video_urbs(peasycap)) {
+ SAM("ERROR: kill_video_urbs() failed\n");
+ return -EFAULT;
+ }
+ JOM(4, "ending successfully\n");
#endif /*EASYCAP_IS_VIDEODEV_CLIENT*/
-return 0;
+ return 0;
}
#ifdef EASYCAP_IS_VIDEODEV_CLIENT
static int easycap_open_noinode(struct file *file)
@@ -774,26 +747,24 @@ static int easycap_release_noinode(struct file *file)
}
static int videodev_release(struct video_device *pvideo_device)
{
-struct easycap *peasycap;
-
-JOT(4, "\n");
+ struct easycap *peasycap;
-peasycap = video_get_drvdata(pvideo_device);
-if (NULL == peasycap) {
- SAY("ERROR: peasycap is NULL\n");
- SAY("ending unsuccessfully\n");
- return -EFAULT;
-}
-if (memcmp(&peasycap->telltale[0], TELLTALE, strlen(TELLTALE))) {
- SAY("ERROR: bad peasycap: %p\n", peasycap);
- return -EFAULT;
-}
-if (0 != kill_video_urbs(peasycap)) {
- SAM("ERROR: kill_video_urbs() failed\n");
- return -EFAULT;
-}
-JOM(4, "ending successfully\n");
-return 0;
+ peasycap = video_get_drvdata(pvideo_device);
+ if (NULL == peasycap) {
+ SAY("ERROR: peasycap is NULL\n");
+ SAY("ending unsuccessfully\n");
+ return -EFAULT;
+ }
+ if (memcmp(&peasycap->telltale[0], TELLTALE, strlen(TELLTALE))) {
+ SAY("ERROR: bad peasycap: %p\n", peasycap);
+ return -EFAULT;
+ }
+ if (0 != kill_video_urbs(peasycap)) {
+ SAM("ERROR: kill_video_urbs() failed\n");
+ return -EFAULT;
+ }
+ JOM(4, "ending successfully\n");
+ return 0;
}
#endif /*EASYCAP_IS_VIDEODEV_CLIENT*/
/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
@@ -809,325 +780,329 @@ return 0;
/*---------------------------------------------------------------------------*/
static void easycap_delete(struct kref *pkref)
{
-int k, m, gone, kd;
-int allocation_video_urb, allocation_video_page, allocation_video_struct;
-int allocation_audio_urb, allocation_audio_page, allocation_audio_struct;
-int registered_video, registered_audio;
-struct easycap *peasycap;
-struct data_urb *pdata_urb;
-struct list_head *plist_head, *plist_next;
-
-JOT(4, "\n");
-
-peasycap = container_of(pkref, struct easycap, kref);
-if (NULL == peasycap) {
- SAM("ERROR: peasycap is NULL: cannot perform deletions\n");
- return;
-}
-if (memcmp(&peasycap->telltale[0], TELLTALE, strlen(TELLTALE))) {
- SAY("ERROR: bad peasycap: %p\n", peasycap);
- return;
-}
-kd = isdongle(peasycap);
+ struct easycap *peasycap;
+ struct data_urb *pdata_urb;
+ struct list_head *plist_head, *plist_next;
+ int k, m, gone, kd;
+ int allocation_video_urb;
+ int allocation_video_page;
+ int allocation_video_struct;
+ int allocation_audio_urb;
+ int allocation_audio_page;
+ int allocation_audio_struct;
+