Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Staging: easycap: Replace some global variables

New members of struct easycap take the place of undesirable global variables.

Signed-off-by: Mike Thomas <rmthomas@sciolus.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Mike Thomas and committed by
Greg Kroah-Hartman
3d423e91 4d6ea9c3

+128 -114
+80 -70
drivers/staging/easycap/easycap.h
··· 135 135 #define USB_EASYCAP_VENDOR_ID 0x05e1 136 136 #define USB_EASYCAP_PRODUCT_ID 0x0408 137 137 138 - #define EASYCAP_DRIVER_VERSION "0.8" 138 + #define EASYCAP_DRIVER_VERSION "0.8.2" 139 139 #define EASYCAP_DRIVER_DESCRIPTION "easycapdc60" 140 140 141 141 #define USB_SKEL_MINOR_BASE 192 ··· 189 189 #define AUDIO_FRAGMENT_MANY 32 190 190 /*---------------------------------------------------------------------------*/ 191 191 /* 192 + * IT IS ESSENTIAL THAT EVEN-NUMBERED STANDARDS ARE 25 FRAMES PER SECOND, 193 + * ODD-NUMBERED STANDARDS ARE 30 FRAMES PER SECOND. 194 + * THE NUMBERING OF STANDARDS MUST NOT BE CHANGED WITHOUT DUE CARE. NOT 195 + * ONLY MUST THE PARAMETER 196 + * STANDARD_MANY 197 + * BE CHANGED TO CORRESPOND TO THE NEW NUMBER OF STANDARDS, BUT ALSO THE 198 + * NUMBERING MUST REMAIN AN UNBROKEN ASCENDING SEQUENCE: DUMMY STANDARDS 199 + * MAY NEED TO BE ADDED. APPROPRIATE CHANGES WILL ALWAYS BE REQUIRED IN 200 + * ROUTINE fillin_formats() AND POSSIBLY ELSEWHERE. BEWARE. 201 + */ 202 + /*---------------------------------------------------------------------------*/ 203 + #define PAL_BGHIN 0 204 + #define PAL_Nc 2 205 + #define SECAM 4 206 + #define NTSC_N 6 207 + #define NTSC_N_443 8 208 + #define NTSC_M 1 209 + #define NTSC_443 3 210 + #define NTSC_M_JP 5 211 + #define PAL_60 7 212 + #define PAL_M 9 213 + #define STANDARD_MANY 10 214 + /*---------------------------------------------------------------------------*/ 215 + /* 216 + * ENUMS 217 + */ 218 + /*---------------------------------------------------------------------------*/ 219 + enum { 220 + AT_720x576, 221 + AT_704x576, 222 + AT_640x480, 223 + AT_720x480, 224 + AT_360x288, 225 + AT_320x240, 226 + AT_360x240, 227 + RESOLUTION_MANY 228 + }; 229 + enum { 230 + FMT_UYVY, 231 + FMT_YUY2, 232 + FMT_RGB24, 233 + FMT_RGB32, 234 + FMT_BGR24, 235 + FMT_BGR32, 236 + PIXELFORMAT_MANY 237 + }; 238 + enum { 239 + FIELD_NONE, 240 + FIELD_INTERLACED, 241 + FIELD_ALTERNATE, 242 + INTERLACE_MANY 243 + }; 244 + #define SETTINGS_MANY (STANDARD_MANY * \ 245 + RESOLUTION_MANY * \ 246 + 2 * \ 247 + PIXELFORMAT_MANY * \ 248 + INTERLACE_MANY) 249 + /*---------------------------------------------------------------------------*/ 250 + /* 192 251 * STRUCTURE DEFINITIONS 193 252 */ 194 253 /*---------------------------------------------------------------------------*/ ··· 265 206 int length; 266 207 }; 267 208 /*---------------------------------------------------------------------------*/ 209 + struct easycap_standard { 210 + __u16 mask; 211 + struct v4l2_standard v4l2_standard; 212 + }; 213 + struct easycap_format { 214 + __u16 mask; 215 + char name[128]; 216 + struct v4l2_format v4l2_format; 217 + }; 218 + /*---------------------------------------------------------------------------*/ 268 219 /* 269 220 * easycap.ilk == 0 => CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=256 270 221 * easycap.ilk == 2 => CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=9 ··· 282 213 */ 283 214 /*---------------------------------------------------------------------------*/ 284 215 struct easycap { 216 + unsigned int audio_pages_per_fragment; 217 + unsigned int audio_bytes_per_fragment; 218 + unsigned int audio_buffer_page_many; 219 + 220 + #define UPSAMPLE 221 + #if defined(UPSAMPLE) 222 + __s16 oldaudio; 223 + #endif /*UPSAMPLE*/ 224 + 225 + struct easycap_format easycap_format[1 + SETTINGS_MANY]; 285 226 286 227 int ilk; 287 228 bool microphone; ··· 456 377 struct data_buffer audio_buffer[]; 457 378 }; 458 379 /*---------------------------------------------------------------------------*/ 459 - struct easycap_standard { 460 - __u16 mask; 461 - struct v4l2_standard v4l2_standard; 462 - }; 463 - struct easycap_format { 464 - __u16 mask; 465 - char name[128]; 466 - struct v4l2_format v4l2_format; 467 - }; 468 - /*---------------------------------------------------------------------------*/ 469 380 /* 470 381 * VIDEO FUNCTION PROTOTYPES 471 382 */ ··· 569 500 long long int quotient; 570 501 unsigned long long int remainder; 571 502 } signed_div(long long int, long long int); 572 - /*---------------------------------------------------------------------------*/ 573 - /* 574 - * IT IS ESSENTIAL THAT EVEN-NUMBERED STANDARDS ARE 25 FRAMES PER SECOND, 575 - * ODD-NUMBERED STANDARDS ARE 30 FRAMES PER SECOND. 576 - * THE NUMBERING OF STANDARDS MUST NOT BE CHANGED WITHOUT DUE CARE. NOT 577 - * ONLY MUST THE PARAMETER 578 - * STANDARD_MANY 579 - * BE CHANGED TO CORRESPOND TO THE NEW NUMBER OF STANDARDS, BUT ALSO THE 580 - * NUMBERING MUST REMAIN AN UNBROKEN ASCENDING SEQUENCE: DUMMY STANDARDS 581 - * MAY NEED TO BE ADDED. APPROPRIATE CHANGES WILL ALWAYS BE REQUIRED IN 582 - * ROUTINE fillin_formats() AND POSSIBLY ELSEWHERE. BEWARE. 583 - */ 584 - /*---------------------------------------------------------------------------*/ 585 - #define PAL_BGHIN 0 586 - #define PAL_Nc 2 587 - #define SECAM 4 588 - #define NTSC_N 6 589 - #define NTSC_N_443 8 590 - #define NTSC_M 1 591 - #define NTSC_443 3 592 - #define NTSC_M_JP 5 593 - #define PAL_60 7 594 - #define PAL_M 9 595 - #define STANDARD_MANY 10 596 - /*---------------------------------------------------------------------------*/ 597 - /* 598 - * ENUMS 599 - */ 600 - /*---------------------------------------------------------------------------*/ 601 - enum { 602 - AT_720x576, 603 - AT_704x576, 604 - AT_640x480, 605 - AT_720x480, 606 - AT_360x288, 607 - AT_320x240, 608 - AT_360x240, 609 - RESOLUTION_MANY 610 - }; 611 - enum { 612 - FMT_UYVY, 613 - FMT_YUY2, 614 - FMT_RGB24, 615 - FMT_RGB32, 616 - FMT_BGR24, 617 - FMT_BGR32, 618 - PIXELFORMAT_MANY 619 - }; 620 - enum { 621 - FIELD_NONE, 622 - FIELD_INTERLACED, 623 - FIELD_ALTERNATE, 624 - INTERLACE_MANY 625 - }; 626 - #define SETTINGS_MANY (STANDARD_MANY * \ 627 - RESOLUTION_MANY * \ 628 - 2 * \ 629 - PIXELFORMAT_MANY * \ 630 - INTERLACE_MANY) 631 503 /*---------------------------------------------------------------------------*/ 632 504 /* 633 505 * MACROS
+9 -8
drivers/staging/easycap/easycap_ioctl.c
··· 42 42 /*---------------------------------------------------------------------------*/ 43 43 int adjust_standard(struct easycap *peasycap, v4l2_std_id std_id) 44 44 { 45 - struct easycap_standard *peasycap_standard; 45 + struct easycap_standard const *peasycap_standard; 46 46 __u16 reg, set; 47 47 int ir, rc, need; 48 48 unsigned int itwas, isnow; ··· 1447 1447 static int last0 = -1, last1 = -1, last2 = -1, last3 = -1; 1448 1448 static struct v4l2_standard v4l2_standard; 1449 1449 static __u32 index; 1450 - static struct easycap_standard *peasycap_standard; 1450 + static struct easycap_standard const *peasycap_standard; 1451 1451 1452 1452 JOT(8, "VIDIOC_ENUMSTD\n"); 1453 1453 ··· 1479 1479 } 1480 1480 JOT(8, "%i=index: %s\n", index, \ 1481 1481 &(peasycap_standard->v4l2_standard.name[0])); 1482 - peasycap_standard->v4l2_standard.index = index; 1482 + memcpy(&v4l2_standard, &(peasycap_standard->v4l2_standard), \ 1483 + sizeof(struct v4l2_standard)); 1484 + 1483 1485 v4l2_standard.index = index; 1484 1486 1485 - if (0 != copy_to_user((void __user *)arg, \ 1486 - &(peasycap_standard->v4l2_standard), \ 1487 + if (0 != copy_to_user((void __user *)arg, &v4l2_standard, \ 1487 1488 sizeof(struct v4l2_standard))) { 1488 1489 POUT; 1489 1490 return -EFAULT; ··· 1494 1493 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 1495 1494 case VIDIOC_G_STD: { 1496 1495 static v4l2_std_id std_id; 1497 - static struct easycap_standard *peasycap_standard; 1496 + static struct easycap_standard const *peasycap_standard; 1498 1497 1499 1498 JOT(8, "VIDIOC_G_STD\n"); 1500 1499 ··· 2095 2094 if (0 != copy_from_user(&incoming, (void __user *)arg, sizeof(int))) 2096 2095 return -EFAULT; 2097 2096 JOT(8, "........... %i=incoming\n", incoming); 2098 - incoming = audio_bytes_per_fragment; 2097 + incoming = peasycap->audio_bytes_per_fragment; 2099 2098 if (0 != copy_to_user((void __user *)arg, &incoming, sizeof(int))) 2100 2099 return -EFAULT; 2101 2100 break; ··· 2105 2104 2106 2105 JOT(8, "SNDCTL_DSP_GETISPACE\n"); 2107 2106 2108 - audio_buf_info.bytes = audio_bytes_per_fragment; 2107 + audio_buf_info.bytes = peasycap->audio_bytes_per_fragment; 2109 2108 audio_buf_info.fragments = 1; 2110 2109 audio_buf_info.fragsize = 0; 2111 2110 audio_buf_info.fragstotal = 0;
-1
drivers/staging/easycap/easycap_ioctl.h
··· 26 26 /*****************************************************************************/ 27 27 extern struct easycap_format easycap_format[]; 28 28 extern struct v4l2_queryctrl easycap_control[]; 29 - extern unsigned int audio_bytes_per_fragment;
+15 -16
drivers/staging/easycap/easycap_main.c
··· 34 34 int easycap_debug; 35 35 module_param(easycap_debug, int, S_IRUGO | S_IWUSR); 36 36 37 - unsigned int audio_pages_per_fragment; 38 - unsigned int audio_bytes_per_fragment; 39 - unsigned int audio_buffer_page_many; 40 - 41 37 /*---------------------------------------------------------------------------*/ 42 38 /* 43 39 * PARAMETERS APPLICABLE TO ENTIRE DRIVER, I.E. BOTH VIDEO AND AUDIO ··· 82 86 /*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ 83 87 #if defined(EASYCAP_IS_VIDEODEV_CLIENT) 84 88 #if defined(EASYCAP_NEEDS_V4L2_FOPS) 85 - struct v4l2_file_operations v4l2_fops = { 89 + const struct v4l2_file_operations v4l2_fops = { 86 90 .owner = THIS_MODULE, 87 91 .open = easycap_open_noinode, 88 92 .release = easycap_release_noinode, ··· 766 770 /*---------------------------------------------------------------------------*/ 767 771 JOT(4, "freeing audio buffers.\n"); 768 772 lost = 0; 769 - for (k = 0; k < audio_buffer_page_many; k++) { 773 + for (k = 0; k < peasycap->audio_buffer_page_many; k++) { 770 774 if ((void *)NULL != peasycap->audio_buffer[k].pgo) { 771 775 free_page((unsigned long)(peasycap->audio_buffer[k].pgo)); 772 776 peasycap->audio_buffer[k].pgo = (void *)NULL; ··· 3861 3865 peasycap->ilk |= 0x02; 3862 3866 SAY("hardware is FOUR-CVBS\n"); 3863 3867 peasycap->microphone = true; 3864 - audio_pages_per_fragment = 2; 3868 + peasycap->audio_pages_per_fragment = 2; 3865 3869 } else if (256 == peasycap->audio_isoc_maxframesize) { 3866 3870 peasycap->ilk &= ~0x02; 3867 3871 SAY("hardware is CVBS+S-VIDEO\n"); 3868 3872 peasycap->microphone = false; 3869 - audio_pages_per_fragment = 4; 3873 + peasycap->audio_pages_per_fragment = 4; 3870 3874 } else { 3871 3875 SAY("hardware is unidentified:\n"); 3872 3876 SAY("%i=audio_isoc_maxframesize\n", \ ··· 3874 3878 return -ENOENT; 3875 3879 } 3876 3880 3877 - audio_bytes_per_fragment = audio_pages_per_fragment * \ 3881 + peasycap->audio_bytes_per_fragment = \ 3882 + peasycap->audio_pages_per_fragment * \ 3878 3883 PAGE_SIZE ; 3879 - audio_buffer_page_many = (AUDIO_FRAGMENT_MANY * \ 3880 - audio_pages_per_fragment); 3884 + peasycap->audio_buffer_page_many = (AUDIO_FRAGMENT_MANY * \ 3885 + peasycap->audio_pages_per_fragment); 3881 3886 3882 3887 JOT(4, "%6i=AUDIO_FRAGMENT_MANY\n", AUDIO_FRAGMENT_MANY); 3883 3888 JOT(4, "%6i=audio_pages_per_fragment\n", \ 3884 - audio_pages_per_fragment); 3889 + peasycap->audio_pages_per_fragment); 3885 3890 JOT(4, "%6i=audio_bytes_per_fragment\n", \ 3886 - audio_bytes_per_fragment); 3887 - JOT(4, "%6i=audio_buffer_page_many\n", audio_buffer_page_many); 3891 + peasycap->audio_bytes_per_fragment); 3892 + JOT(4, "%6i=audio_buffer_page_many\n", \ 3893 + peasycap->audio_buffer_page_many); 3888 3894 3889 3895 peasycap->audio_isoc_framesperdesc = 128; 3890 3896 ··· 3944 3946 peasycap->purb_audio_head = &(peasycap->urb_audio_head); 3945 3947 3946 3948 JOT(4, "allocating an audio buffer\n"); 3947 - JOT(4, ".... scattered over %i pages\n", audio_buffer_page_many); 3949 + JOT(4, ".... scattered over %i pages\n", \ 3950 + peasycap->audio_buffer_page_many); 3948 3951 3949 - for (k = 0; k < audio_buffer_page_many; k++) { 3952 + for (k = 0; k < peasycap->audio_buffer_page_many; k++) { 3950 3953 if ((void *)NULL != peasycap->audio_buffer[k].pgo) { 3951 3954 SAY("ERROR: attempting to reallocate audio buffers\n"); 3952 3955 } else {
+1 -1
drivers/staging/easycap/easycap_settings.c
··· 35 35 * 1 => 30 fps 36 36 */ 37 37 /*---------------------------------------------------------------------------*/ 38 - struct easycap_standard easycap_standard[] = { 38 + const struct easycap_standard easycap_standard[] = { 39 39 { 40 40 .mask = 0x000F & PAL_BGHIN , 41 41 .v4l2_standard = {
+23 -16
drivers/staging/easycap/easycap_sound.c
··· 327 327 "more is negative\n"); 328 328 return; 329 329 } 330 - if (audio_buffer_page_many <= \ 330 + if (peasycap->audio_buffer_page_many <= \ 331 331 peasycap->audio_fill) { 332 332 SAY("ERROR: bad " \ 333 333 "peasycap->audio_fill\n"); ··· 352 352 paudio_buffer->pto = \ 353 353 paudio_buffer->pgo; 354 354 (peasycap->audio_fill)++; 355 - if (audio_buffer_page_many <= \ 355 + if (peasycap->\ 356 + audio_buffer_page_many <= \ 356 357 peasycap->audio_fill) 357 358 peasycap->audio_fill = 0; 358 359 ··· 368 367 paudio_buffer->pgo; 369 368 370 369 if (!(peasycap->audio_fill % \ 370 + peasycap->\ 371 371 audio_pages_per_fragment)) { 372 372 JOT(12, "wakeup call on wq_" \ 373 373 "audio, %i=frag reading %i" \ 374 374 "=fragment fill\n", \ 375 375 (peasycap->audio_read / \ 376 + peasycap->\ 376 377 audio_pages_per_fragment), \ 377 378 (peasycap->audio_fill / \ 379 + peasycap->\ 378 380 audio_pages_per_fragment)); 379 381 wake_up_interruptible\ 380 382 (&(peasycap->wq_audio)); ··· 615 611 } 616 612 /*---------------------------------------------------------------------------*/ 617 613 if ((0 > peasycap->audio_read) || \ 618 - (audio_buffer_page_many <= peasycap->audio_read)) { 614 + (peasycap->audio_buffer_page_many <= peasycap->audio_read)) { 619 615 SAY("ERROR: peasycap->audio_read out of range\n"); 620 616 return -EFAULT; 621 617 } ··· 625 621 return -EFAULT; 626 622 } 627 623 JOT(12, "before wait, %i=frag read %i=frag fill\n", \ 628 - (peasycap->audio_read / audio_pages_per_fragment), \ 629 - (peasycap->audio_fill / audio_pages_per_fragment)); 630 - fragment = (peasycap->audio_read / audio_pages_per_fragment); 631 - while ((fragment == (peasycap->audio_fill / audio_pages_per_fragment)) || \ 624 + (peasycap->audio_read / peasycap->audio_pages_per_fragment), \ 625 + (peasycap->audio_fill / peasycap->audio_pages_per_fragment)); 626 + fragment = (peasycap->audio_read / peasycap->audio_pages_per_fragment); 627 + while ((fragment == (peasycap->audio_fill / \ 628 + peasycap->audio_pages_per_fragment)) || \ 632 629 (0 == (PAGE_SIZE - (pdata_buffer->pto - pdata_buffer->pgo)))) { 633 630 if (file->f_flags & O_NONBLOCK) { 634 631 JOT(16, "returning -EAGAIN as instructed\n"); ··· 638 633 rc = wait_event_interruptible(peasycap->wq_audio, \ 639 634 (peasycap->audio_idle || peasycap->audio_eof || \ 640 635 ((fragment != (peasycap->audio_fill / \ 641 - audio_pages_per_fragment)) && \ 636 + peasycap->audio_pages_per_fragment)) && \ 642 637 (0 < (PAGE_SIZE - (pdata_buffer->pto - pdata_buffer->pgo)))))); 643 638 if (0 != rc) { 644 639 SAY("aborted by signal\n"); ··· 662 657 } 663 658 } 664 659 JOT(12, "after wait, %i=frag read %i=frag fill\n", \ 665 - (peasycap->audio_read / audio_pages_per_fragment), \ 666 - (peasycap->audio_fill / audio_pages_per_fragment)); 660 + (peasycap->audio_read / peasycap->audio_pages_per_fragment), \ 661 + (peasycap->audio_fill / peasycap->audio_pages_per_fragment)); 667 662 szret = (size_t)0; 668 - while (fragment == (peasycap->audio_read / audio_pages_per_fragment)) { 663 + while (fragment == (peasycap->audio_read / \ 664 + peasycap->audio_pages_per_fragment)) { 669 665 if (NULL == pdata_buffer->pgo) { 670 666 SAY("ERROR: pdata_buffer->pgo is NULL\n"); 671 667 return -EFAULT; ··· 682 676 } 683 677 if (!kount1) { 684 678 (peasycap->audio_read)++; 685 - if (audio_buffer_page_many <= peasycap->audio_read) 679 + if (peasycap->audio_buffer_page_many <= peasycap->audio_read) 686 680 peasycap->audio_read = 0; 687 681 JOT(12, "bumped peasycap->audio_read to %i\n", \ 688 682 peasycap->audio_read); 689 683 690 684 if (fragment != (peasycap->audio_read / \ 691 - audio_pages_per_fragment)) 685 + peasycap->audio_pages_per_fragment)) 692 686 break; 693 687 694 688 if ((0 > peasycap->audio_read) || \ 695 - (audio_buffer_page_many <= peasycap->audio_read)) { 689 + (peasycap->audio_buffer_page_many <= \ 690 + peasycap->audio_read)) { 696 691 SAY("ERROR: peasycap->audio_read out of range\n"); 697 692 return -EFAULT; 698 693 } ··· 745 738 kount -= (size_t)more; 746 739 } 747 740 JOT(12, "after read, %i=frag read %i=frag fill\n", \ 748 - (peasycap->audio_read / audio_pages_per_fragment), \ 749 - (peasycap->audio_fill / audio_pages_per_fragment)); 741 + (peasycap->audio_read / peasycap->audio_pages_per_fragment), \ 742 + (peasycap->audio_fill / peasycap->audio_pages_per_fragment)); 750 743 if (kount < 0) { 751 744 SAY("MISTAKE: %li=kount %li=szret\n", \ 752 745 (long int)kount, (long int)szret);
-2
drivers/staging/easycap/easycap_sound.h
··· 26 26 /*****************************************************************************/ 27 27 extern struct easycap *peasycap; 28 28 extern struct usb_driver easycap_usb_driver; 29 - extern unsigned int audio_buffer_page_many; 30 - extern unsigned int audio_pages_per_fragment;