em28xx.h (0d4a42f6bd298e826620585e766a154ab460617a) | em28xx.h (4159d01bea38ee82f6e49383b7e73e328c118755) |
---|---|
1/* 2 em28xx.h - driver for Empia EM2800/EM2820/2840 USB video capture devices 3 4 Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com> 5 Ludovico Cavedon <cavedon@sssup.it> 6 Mauro Carvalho Chehab <mchehab@infradead.org> 7 Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com> 8 --- 28 unchanged lines hidden (view full) --- 37#include <media/v4l2-fh.h> 38#include <media/ir-kbd-i2c.h> 39#include <media/rc-core.h> 40#include "tuner-xc2028.h" 41#include "xc5000.h" 42#include "em28xx-reg.h" 43 44/* Boards supported by driver */ | 1/* 2 em28xx.h - driver for Empia EM2800/EM2820/2840 USB video capture devices 3 4 Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com> 5 Ludovico Cavedon <cavedon@sssup.it> 6 Mauro Carvalho Chehab <mchehab@infradead.org> 7 Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com> 8 --- 28 unchanged lines hidden (view full) --- 37#include <media/v4l2-fh.h> 38#include <media/ir-kbd-i2c.h> 39#include <media/rc-core.h> 40#include "tuner-xc2028.h" 41#include "xc5000.h" 42#include "em28xx-reg.h" 43 44/* Boards supported by driver */ |
45#define EM2800_BOARD_UNKNOWN 0 46#define EM2820_BOARD_UNKNOWN 1 47#define EM2820_BOARD_TERRATEC_CINERGY_250 2 48#define EM2820_BOARD_PINNACLE_USB_2 3 49#define EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 4 50#define EM2820_BOARD_MSI_VOX_USB_2 5 51#define EM2800_BOARD_TERRATEC_CINERGY_200 6 52#define EM2800_BOARD_LEADTEK_WINFAST_USBII 7 53#define EM2800_BOARD_KWORLD_USB2800 8 54#define EM2820_BOARD_PINNACLE_DVC_90 9 55#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 10 56#define EM2880_BOARD_TERRATEC_HYBRID_XS 11 57#define EM2820_BOARD_KWORLD_PVRTV2800RF 12 58#define EM2880_BOARD_TERRATEC_PRODIGY_XS 13 59#define EM2820_BOARD_PROLINK_PLAYTV_USB2 14 60#define EM2800_BOARD_VGEAR_POCKETTV 15 61#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950 16 62#define EM2880_BOARD_PINNACLE_PCTV_HD_PRO 17 63#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2 18 64#define EM2860_BOARD_SAA711X_REFERENCE_DESIGN 19 65#define EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 20 66#define EM2800_BOARD_GRABBEEX_USB2800 21 | 45#define EM2800_BOARD_UNKNOWN 0 46#define EM2820_BOARD_UNKNOWN 1 47#define EM2820_BOARD_TERRATEC_CINERGY_250 2 48#define EM2820_BOARD_PINNACLE_USB_2 3 49#define EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 4 50#define EM2820_BOARD_MSI_VOX_USB_2 5 51#define EM2800_BOARD_TERRATEC_CINERGY_200 6 52#define EM2800_BOARD_LEADTEK_WINFAST_USBII 7 53#define EM2800_BOARD_KWORLD_USB2800 8 54#define EM2820_BOARD_PINNACLE_DVC_90 9 55#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 10 56#define EM2880_BOARD_TERRATEC_HYBRID_XS 11 57#define EM2820_BOARD_KWORLD_PVRTV2800RF 12 58#define EM2880_BOARD_TERRATEC_PRODIGY_XS 13 59#define EM2820_BOARD_PROLINK_PLAYTV_USB2 14 60#define EM2800_BOARD_VGEAR_POCKETTV 15 61#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950 16 62#define EM2880_BOARD_PINNACLE_PCTV_HD_PRO 17 63#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2 18 64#define EM2860_BOARD_SAA711X_REFERENCE_DESIGN 19 65#define EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 20 66#define EM2800_BOARD_GRABBEEX_USB2800 21 |
67#define EM2750_BOARD_UNKNOWN 22 68#define EM2750_BOARD_DLCW_130 23 69#define EM2820_BOARD_DLINK_USB_TV 24 70#define EM2820_BOARD_GADMEI_UTV310 25 71#define EM2820_BOARD_HERCULES_SMART_TV_USB2 26 72#define EM2820_BOARD_PINNACLE_USB_2_FM1216ME 27 73#define EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE 28 74#define EM2860_BOARD_TVP5150_REFERENCE_DESIGN 29 --- 19 unchanged lines hidden (view full) --- 94#define EM2880_BOARD_MSI_DIGIVOX_AD 49 95#define EM2880_BOARD_MSI_DIGIVOX_AD_II 50 96#define EM2880_BOARD_TERRATEC_HYBRID_XS_FR 51 97#define EM2881_BOARD_DNT_DA2_HYBRID 52 98#define EM2881_BOARD_PINNACLE_HYBRID_PRO 53 99#define EM2882_BOARD_KWORLD_VS_DVBT 54 100#define EM2882_BOARD_TERRATEC_HYBRID_XS 55 101#define EM2882_BOARD_PINNACLE_HYBRID_PRO_330E 56 | 67#define EM2750_BOARD_UNKNOWN 22 68#define EM2750_BOARD_DLCW_130 23 69#define EM2820_BOARD_DLINK_USB_TV 24 70#define EM2820_BOARD_GADMEI_UTV310 25 71#define EM2820_BOARD_HERCULES_SMART_TV_USB2 26 72#define EM2820_BOARD_PINNACLE_USB_2_FM1216ME 27 73#define EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE 28 74#define EM2860_BOARD_TVP5150_REFERENCE_DESIGN 29 --- 19 unchanged lines hidden (view full) --- 94#define EM2880_BOARD_MSI_DIGIVOX_AD 49 95#define EM2880_BOARD_MSI_DIGIVOX_AD_II 50 96#define EM2880_BOARD_TERRATEC_HYBRID_XS_FR 51 97#define EM2881_BOARD_DNT_DA2_HYBRID 52 98#define EM2881_BOARD_PINNACLE_HYBRID_PRO 53 99#define EM2882_BOARD_KWORLD_VS_DVBT 54 100#define EM2882_BOARD_TERRATEC_HYBRID_XS 55 101#define EM2882_BOARD_PINNACLE_HYBRID_PRO_330E 56 |
102#define EM2883_BOARD_KWORLD_HYBRID_330U 57 | 102#define EM2883_BOARD_KWORLD_HYBRID_330U 57 |
103#define EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU 58 104#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850 60 105#define EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2 61 106#define EM2820_BOARD_GADMEI_TVR200 62 | 103#define EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU 58 104#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850 60 105#define EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2 61 106#define EM2820_BOARD_GADMEI_TVR200 62 |
107#define EM2860_BOARD_KAIOMY_TVNPC_U2 63 108#define EM2860_BOARD_EASYCAP 64 | 107#define EM2860_BOARD_KAIOMY_TVNPC_U2 63 108#define EM2860_BOARD_EASYCAP 64 |
109#define EM2820_BOARD_IODATA_GVMVP_SZ 65 110#define EM2880_BOARD_EMPIRE_DUAL_TV 66 111#define EM2860_BOARD_TERRATEC_GRABBY 67 112#define EM2860_BOARD_TERRATEC_AV350 68 113#define EM2882_BOARD_KWORLD_ATSC_315U 69 114#define EM2882_BOARD_EVGA_INDTUBE 70 | 109#define EM2820_BOARD_IODATA_GVMVP_SZ 65 110#define EM2880_BOARD_EMPIRE_DUAL_TV 66 111#define EM2860_BOARD_TERRATEC_GRABBY 67 112#define EM2860_BOARD_TERRATEC_AV350 68 113#define EM2882_BOARD_KWORLD_ATSC_315U 69 114#define EM2882_BOARD_EVGA_INDTUBE 70 |
115#define EM2820_BOARD_SILVERCREST_WEBCAM 71 116#define EM2861_BOARD_GADMEI_UTV330PLUS 72 117#define EM2870_BOARD_REDDO_DVB_C_USB_BOX 73 | 115#define EM2820_BOARD_SILVERCREST_WEBCAM 71 116#define EM2861_BOARD_GADMEI_UTV330PLUS 72 117#define EM2870_BOARD_REDDO_DVB_C_USB_BOX 73 |
118#define EM2800_BOARD_VC211A 74 119#define EM2882_BOARD_DIKOM_DK300 75 120#define EM2870_BOARD_KWORLD_A340 76 121#define EM2874_BOARD_LEADERSHIP_ISDBT 77 | 118#define EM2800_BOARD_VC211A 74 119#define EM2882_BOARD_DIKOM_DK300 75 120#define EM2870_BOARD_KWORLD_A340 76 121#define EM2874_BOARD_LEADERSHIP_ISDBT 77 |
122#define EM28174_BOARD_PCTV_290E 78 | 122#define EM28174_BOARD_PCTV_290E 78 |
123#define EM2884_BOARD_TERRATEC_H5 79 | 123#define EM2884_BOARD_TERRATEC_H5 79 |
124#define EM28174_BOARD_PCTV_460E 80 | 124#define EM28174_BOARD_PCTV_460E 80 |
125#define EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C 81 126#define EM2884_BOARD_CINERGY_HTC_STICK 82 | 125#define EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C 81 126#define EM2884_BOARD_CINERGY_HTC_STICK 82 |
127#define EM2860_BOARD_HT_VIDBOX_NW03 83 128#define EM2874_BOARD_MAXMEDIA_UB425_TC 84 129#define EM2884_BOARD_PCTV_510E 85 130#define EM2884_BOARD_PCTV_520E 86 | 127#define EM2860_BOARD_HT_VIDBOX_NW03 83 128#define EM2874_BOARD_MAXMEDIA_UB425_TC 84 129#define EM2884_BOARD_PCTV_510E 85 130#define EM2884_BOARD_PCTV_520E 86 |
131#define EM2884_BOARD_TERRATEC_HTC_USB_XS 87 | 131#define EM2884_BOARD_TERRATEC_HTC_USB_XS 87 |
132#define EM2884_BOARD_C3TECH_DIGITAL_DUO 88 |
|
132 133/* Limits minimum and default number of buffers */ 134#define EM28XX_MIN_BUF 4 135#define EM28XX_DEF_BUF 8 136 137/*Limits the max URB message size */ 138#define URB_MAX_CTRL_SIZE 80 139 --- 12 unchanged lines hidden (view full) --- 152#define EM28XX_NUM_FRAMES 5 153/* number of frames that get used for v4l2_read() */ 154#define EM28XX_NUM_READ_FRAMES 2 155 156/* number of buffers for isoc transfers */ 157#define EM28XX_NUM_BUFS 5 158#define EM28XX_DVB_NUM_BUFS 5 159 | 133 134/* Limits minimum and default number of buffers */ 135#define EM28XX_MIN_BUF 4 136#define EM28XX_DEF_BUF 8 137 138/*Limits the max URB message size */ 139#define URB_MAX_CTRL_SIZE 80 140 --- 12 unchanged lines hidden (view full) --- 153#define EM28XX_NUM_FRAMES 5 154/* number of frames that get used for v4l2_read() */ 155#define EM28XX_NUM_READ_FRAMES 2 156 157/* number of buffers for isoc transfers */ 158#define EM28XX_NUM_BUFS 5 159#define EM28XX_DVB_NUM_BUFS 5 160 |
161/* max number of I2C buses on em28xx devices */ 162#define NUM_I2C_BUSES 2 163 |
|
160/* isoc transfers: number of packets for each buffer 161 windows requests only 64 packets .. so we better do the same 162 this is what I found out for all alternate numbers there! 163 */ 164#define EM28XX_NUM_ISOC_PACKETS 64 165#define EM28XX_DVB_NUM_ISOC_PACKETS 64 166 167/* bulk transfers: transfer buffer size = packet size * packet multiplier 168 USB 2.0 spec says bulk packet size is always 512 bytes 169 */ 170#define EM28XX_BULK_PACKET_MULTIPLIER 384 171#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 384 172 173#define EM28XX_INTERLACED_DEFAULT 1 174 | 164/* isoc transfers: number of packets for each buffer 165 windows requests only 64 packets .. so we better do the same 166 this is what I found out for all alternate numbers there! 167 */ 168#define EM28XX_NUM_ISOC_PACKETS 64 169#define EM28XX_DVB_NUM_ISOC_PACKETS 64 170 171/* bulk transfers: transfer buffer size = packet size * packet multiplier 172 USB 2.0 spec says bulk packet size is always 512 bytes 173 */ 174#define EM28XX_BULK_PACKET_MULTIPLIER 384 175#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 384 176 177#define EM28XX_INTERLACED_DEFAULT 1 178 |
175/* 176#define (use usbview if you want to get the other alternate number infos) 177#define 178#define alternate number 2 179#define Endpoint Address: 82 180 Direction: in 181 Attribute: 1 182 Type: Isoc 183 Max Packet Size: 1448 184 Interval: 125us 185 186 alternate number 7 187 188 Endpoint Address: 82 189 Direction: in 190 Attribute: 1 191 Type: Isoc 192 Max Packet Size: 3072 193 Interval: 125us 194*/ 195 | |
196/* time in msecs to wait for i2c writes to finish */ 197#define EM2800_I2C_XFER_TIMEOUT 20 198 199enum em28xx_mode { 200 EM28XX_SUSPEND, 201 EM28XX_ANALOG_MODE, 202 EM28XX_DIGITAL_MODE, 203}; --- 184 unchanged lines hidden (view full) --- 388 EM28XX_TVAUDIO, 389}; 390 391struct em28xx_board { 392 char *name; 393 int vchannels; 394 int tuner_type; 395 int tuner_addr; | 179/* time in msecs to wait for i2c writes to finish */ 180#define EM2800_I2C_XFER_TIMEOUT 20 181 182enum em28xx_mode { 183 EM28XX_SUSPEND, 184 EM28XX_ANALOG_MODE, 185 EM28XX_DIGITAL_MODE, 186}; --- 184 unchanged lines hidden (view full) --- 371 EM28XX_TVAUDIO, 372}; 373 374struct em28xx_board { 375 char *name; 376 int vchannels; 377 int tuner_type; 378 int tuner_addr; |
379 unsigned def_i2c_bus; /* Default I2C bus */ |
|
396 397 /* i2c flags */ 398 unsigned int tda9887_conf; 399 400 /* GPIO sequences */ 401 struct em28xx_reg_seq *dvb_gpio; 402 struct em28xx_reg_seq *suspend_gpio; 403 struct em28xx_reg_seq *tuner_gpio; --- 17 unchanged lines hidden (view full) --- 421 enum em28xx_adecoder adecoder; 422 423 struct em28xx_input input[MAX_EM28XX_INPUT]; 424 struct em28xx_input radio; 425 char *ir_codes; 426}; 427 428struct em28xx_eeprom { | 380 381 /* i2c flags */ 382 unsigned int tda9887_conf; 383 384 /* GPIO sequences */ 385 struct em28xx_reg_seq *dvb_gpio; 386 struct em28xx_reg_seq *suspend_gpio; 387 struct em28xx_reg_seq *tuner_gpio; --- 17 unchanged lines hidden (view full) --- 405 enum em28xx_adecoder adecoder; 406 407 struct em28xx_input input[MAX_EM28XX_INPUT]; 408 struct em28xx_input radio; 409 char *ir_codes; 410}; 411 412struct em28xx_eeprom { |
429 u32 id; /* 0x9567eb1a */ 430 u16 vendor_ID; 431 u16 product_ID; | 413 u8 id[4]; /* 1a eb 67 95 */ 414 __le16 vendor_ID; 415 __le16 product_ID; |
432 | 416 |
433 u16 chip_conf; | 417 __le16 chip_conf; |
434 | 418 |
435 u16 board_conf; | 419 __le16 board_conf; |
436 | 420 |
437 u16 string1, string2, string3; | 421 __le16 string1, string2, string3; |
438 439 u8 string_idx_table; 440}; 441 442#define EM28XX_AUDIO_BUFS 5 443#define EM28XX_NUM_AUDIO_PACKETS 64 444#define EM28XX_AUDIO_MAX_PACKET_SIZE 196 /* static value */ 445#define EM28XX_CAPTURE_STREAM_EN 1 --- 26 unchanged lines hidden (view full) --- 472 473struct em28xx_fh { 474 struct v4l2_fh fh; 475 struct em28xx *dev; 476 477 enum v4l2_buf_type type; 478}; 479 | 422 423 u8 string_idx_table; 424}; 425 426#define EM28XX_AUDIO_BUFS 5 427#define EM28XX_NUM_AUDIO_PACKETS 64 428#define EM28XX_AUDIO_MAX_PACKET_SIZE 196 /* static value */ 429#define EM28XX_CAPTURE_STREAM_EN 1 --- 26 unchanged lines hidden (view full) --- 456 457struct em28xx_fh { 458 struct v4l2_fh fh; 459 struct em28xx *dev; 460 461 enum v4l2_buf_type type; 462}; 463 |
464struct em28xx_i2c_bus { 465 struct em28xx *dev; 466 467 unsigned bus; 468}; 469 470 |
|
480/* main device struct */ 481struct em28xx { 482 /* generic device properties */ 483 char name[30]; /* name (including minor) of the device */ 484 int model; /* index in the device_data struct */ 485 int devno; /* marks the number of this device */ 486 enum em28xx_chip_id chip_id; 487 488 unsigned char disconnected:1; /* device has been diconnected */ 489 490 int audio_ifnum; 491 492 struct v4l2_device v4l2_dev; 493 struct v4l2_ctrl_handler ctrl_handler; | 471/* main device struct */ 472struct em28xx { 473 /* generic device properties */ 474 char name[30]; /* name (including minor) of the device */ 475 int model; /* index in the device_data struct */ 476 int devno; /* marks the number of this device */ 477 enum em28xx_chip_id chip_id; 478 479 unsigned char disconnected:1; /* device has been diconnected */ 480 481 int audio_ifnum; 482 483 struct v4l2_device v4l2_dev; 484 struct v4l2_ctrl_handler ctrl_handler; |
494 /* provides ac97 mute and volume overrides */ 495 struct v4l2_ctrl_handler ac97_ctrl_handler; | |
496 struct em28xx_board board; 497 498 /* Webcam specific fields */ 499 enum em28xx_sensor em28xx_sensor; 500 int sensor_xres, sensor_yres; 501 int sensor_xtal; 502 503 /* Progressive (non-interlaced) mode */ 504 int progressive; 505 506 /* Vinmode/Vinctl used at the driver */ 507 int vinmode, vinctl; 508 509 unsigned int has_audio_class:1; 510 unsigned int has_alsa_audio:1; 511 unsigned int is_audio_only:1; 512 513 /* Controls audio streaming */ | 485 struct em28xx_board board; 486 487 /* Webcam specific fields */ 488 enum em28xx_sensor em28xx_sensor; 489 int sensor_xres, sensor_yres; 490 int sensor_xtal; 491 492 /* Progressive (non-interlaced) mode */ 493 int progressive; 494 495 /* Vinmode/Vinctl used at the driver */ 496 int vinmode, vinctl; 497 498 unsigned int has_audio_class:1; 499 unsigned int has_alsa_audio:1; 500 unsigned int is_audio_only:1; 501 502 /* Controls audio streaming */ |
514 struct work_struct wq_trigger; /* Trigger to start/stop audio for alsa module */ 515 atomic_t stream_started; /* stream should be running if true */ | 503 struct work_struct wq_trigger; /* Trigger to start/stop audio for alsa module */ 504 atomic_t stream_started; /* stream should be running if true */ |
516 517 struct em28xx_fmt *format; 518 519 struct em28xx_IR *ir; 520 521 /* Some older em28xx chips needs a waiting time after writing */ 522 unsigned int wait_after_write; 523 524 struct list_head devlist; 525 526 u32 i2s_speed; /* I2S speed for audio digital stream */ 527 528 struct em28xx_audio_mode audio_mode; 529 530 int tuner_type; /* type of the tuner */ 531 int tuner_addr; /* tuner address */ 532 int tda9887_conf; | 505 506 struct em28xx_fmt *format; 507 508 struct em28xx_IR *ir; 509 510 /* Some older em28xx chips needs a waiting time after writing */ 511 unsigned int wait_after_write; 512 513 struct list_head devlist; 514 515 u32 i2s_speed; /* I2S speed for audio digital stream */ 516 517 struct em28xx_audio_mode audio_mode; 518 519 int tuner_type; /* type of the tuner */ 520 int tuner_addr; /* tuner address */ 521 int tda9887_conf; |
522 |
|
533 /* i2c i/o */ | 523 /* i2c i/o */ |
534 struct i2c_adapter i2c_adap; 535 struct i2c_client i2c_client; | 524 struct i2c_adapter i2c_adap[NUM_I2C_BUSES]; 525 struct i2c_client i2c_client[NUM_I2C_BUSES]; 526 struct em28xx_i2c_bus i2c_bus[NUM_I2C_BUSES]; 527 528 unsigned char eeprom_addrwidth_16bit:1; 529 unsigned def_i2c_bus; /* Default I2C bus */ 530 unsigned cur_i2c_bus; /* Current I2C bus */ 531 struct rt_mutex i2c_bus_lock; 532 |
536 /* video for linux */ 537 int users; /* user count for exclusive use */ 538 int streaming_users; /* Number of actively streaming users */ 539 struct video_device *vdev; /* video for linux device struct */ 540 v4l2_std_id norm; /* selected tv norm */ 541 int ctl_freq; /* selected frequency */ 542 unsigned int ctl_input; /* selected input */ 543 unsigned int ctl_ainput;/* selected audio input */ --- 35 unchanged lines hidden (view full) --- 579 struct vb2_queue vb_vidq; 580 struct vb2_queue vb_vbiq; 581 struct mutex vb_queue_lock; 582 struct mutex vb_vbi_queue_lock; 583 584 /* resources in use */ 585 unsigned int resources; 586 | 533 /* video for linux */ 534 int users; /* user count for exclusive use */ 535 int streaming_users; /* Number of actively streaming users */ 536 struct video_device *vdev; /* video for linux device struct */ 537 v4l2_std_id norm; /* selected tv norm */ 538 int ctl_freq; /* selected frequency */ 539 unsigned int ctl_input; /* selected input */ 540 unsigned int ctl_ainput;/* selected audio input */ --- 35 unchanged lines hidden (view full) --- 576 struct vb2_queue vb_vidq; 577 struct vb2_queue vb_vbiq; 578 struct mutex vb_queue_lock; 579 struct mutex vb_vbi_queue_lock; 580 581 /* resources in use */ 582 unsigned int resources; 583 |
587 unsigned char eedata[256]; | 584 /* eeprom content */ 585 u8 *eedata; 586 u16 eedata_len; |
588 589 /* Isoc control struct */ 590 struct em28xx_dmaqueue vidq; 591 struct em28xx_dmaqueue vbiq; 592 struct em28xx_usb_ctl usb_ctl; 593 spinlock_t slock; 594 595 unsigned int field_count; 596 unsigned int vbi_field_count; 597 598 /* usb transfer */ 599 struct usb_device *udev; /* the usb device */ 600 u8 analog_ep_isoc; /* address of isoc endpoint for analog */ 601 u8 analog_ep_bulk; /* address of bulk endpoint for analog */ 602 u8 dvb_ep_isoc; /* address of isoc endpoint for DVB */ | 587 588 /* Isoc control struct */ 589 struct em28xx_dmaqueue vidq; 590 struct em28xx_dmaqueue vbiq; 591 struct em28xx_usb_ctl usb_ctl; 592 spinlock_t slock; 593 594 unsigned int field_count; 595 unsigned int vbi_field_count; 596 597 /* usb transfer */ 598 struct usb_device *udev; /* the usb device */ 599 u8 analog_ep_isoc; /* address of isoc endpoint for analog */ 600 u8 analog_ep_bulk; /* address of bulk endpoint for analog */ 601 u8 dvb_ep_isoc; /* address of isoc endpoint for DVB */ |
603 u8 dvb_ep_bulk; /* address of bulk endpoint for DVC */ | 602 u8 dvb_ep_bulk; /* address of bulk endpoint for DVB */ |
604 int alt; /* alternate setting */ 605 int max_pkt_size; /* max packet size of the selected ep at alt */ 606 int packet_multiplier; /* multiplier for wMaxPacketSize, used for 607 URB buffer size definition */ 608 int num_alt; /* number of alternative settings */ 609 unsigned int *alt_max_pkt_size_isoc; /* array of isoc wMaxPacketSize */ 610 unsigned int analog_xfer_bulk:1; /* use bulk instead of isoc 611 transfers for analog */ --- 34 unchanged lines hidden (view full) --- 646 struct list_head next; 647 char *name; 648 int id; 649 int (*init)(struct em28xx *); 650 int (*fini)(struct em28xx *); 651}; 652 653/* Provided by em28xx-i2c.c */ | 603 int alt; /* alternate setting */ 604 int max_pkt_size; /* max packet size of the selected ep at alt */ 605 int packet_multiplier; /* multiplier for wMaxPacketSize, used for 606 URB buffer size definition */ 607 int num_alt; /* number of alternative settings */ 608 unsigned int *alt_max_pkt_size_isoc; /* array of isoc wMaxPacketSize */ 609 unsigned int analog_xfer_bulk:1; /* use bulk instead of isoc 610 transfers for analog */ --- 34 unchanged lines hidden (view full) --- 645 struct list_head next; 646 char *name; 647 int id; 648 int (*init)(struct em28xx *); 649 int (*fini)(struct em28xx *); 650}; 651 652/* Provided by em28xx-i2c.c */ |
654void em28xx_do_i2c_scan(struct em28xx *dev); 655int em28xx_i2c_register(struct em28xx *dev); 656int em28xx_i2c_unregister(struct em28xx *dev); | 653void em28xx_do_i2c_scan(struct em28xx *dev, unsigned bus); 654int em28xx_i2c_register(struct em28xx *dev, unsigned bus); 655int em28xx_i2c_unregister(struct em28xx *dev, unsigned bus); |
657 658/* Provided by em28xx-core.c */ | 656 657/* Provided by em28xx-core.c */ |
659 660u32 em28xx_request_buffers(struct em28xx *dev, u32 count); 661void em28xx_queue_unusedframes(struct em28xx *dev); 662void em28xx_release_buffers(struct em28xx *dev); 663 | |
664int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg, 665 char *buf, int len); 666int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg); 667int em28xx_read_reg(struct em28xx *dev, u16 reg); 668int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf, 669 int len); 670int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len); 671int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val); --- 16 unchanged lines hidden (view full) --- 688 int num_bufs, int max_pkt_size, int packet_multiplier); 689int em28xx_init_usb_xfer(struct em28xx *dev, enum em28xx_mode mode, 690 int xfer_bulk, 691 int num_bufs, int max_pkt_size, int packet_multiplier, 692 int (*urb_data_copy) 693 (struct em28xx *dev, struct urb *urb)); 694void em28xx_uninit_usb_xfer(struct em28xx *dev, enum em28xx_mode mode); 695void em28xx_stop_urbs(struct em28xx *dev); | 658int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg, 659 char *buf, int len); 660int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg); 661int em28xx_read_reg(struct em28xx *dev, u16 reg); 662int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf, 663 int len); 664int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len); 665int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val); --- 16 unchanged lines hidden (view full) --- 682 int num_bufs, int max_pkt_size, int packet_multiplier); 683int em28xx_init_usb_xfer(struct em28xx *dev, enum em28xx_mode mode, 684 int xfer_bulk, 685 int num_bufs, int max_pkt_size, int packet_multiplier, 686 int (*urb_data_copy) 687 (struct em28xx *dev, struct urb *urb)); 688void em28xx_uninit_usb_xfer(struct em28xx *dev, enum em28xx_mode mode); 689void em28xx_stop_urbs(struct em28xx *dev); |
696int em28xx_isoc_dvb_max_packetsize(struct em28xx *dev); | |
697int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode); 698int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio); 699void em28xx_wake_i2c(struct em28xx *dev); 700int em28xx_register_extension(struct em28xx_ops *dev); 701void em28xx_unregister_extension(struct em28xx_ops *dev); 702void em28xx_init_extension(struct em28xx *dev); 703void em28xx_close_extension(struct em28xx *dev); 704 705/* Provided by em28xx-video.c */ 706int em28xx_vb2_setup(struct em28xx *dev); 707int em28xx_register_analog_devices(struct em28xx *dev); 708void em28xx_release_analog_resources(struct em28xx *dev); 709void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv); 710int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count); 711int em28xx_stop_vbi_streaming(struct vb2_queue *vq); 712extern const struct v4l2_ctrl_ops em28xx_ctrl_ops; 713 714/* Provided by em28xx-cards.c */ | 690int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode); 691int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio); 692void em28xx_wake_i2c(struct em28xx *dev); 693int em28xx_register_extension(struct em28xx_ops *dev); 694void em28xx_unregister_extension(struct em28xx_ops *dev); 695void em28xx_init_extension(struct em28xx *dev); 696void em28xx_close_extension(struct em28xx *dev); 697 698/* Provided by em28xx-video.c */ 699int em28xx_vb2_setup(struct em28xx *dev); 700int em28xx_register_analog_devices(struct em28xx *dev); 701void em28xx_release_analog_resources(struct em28xx *dev); 702void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv); 703int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count); 704int em28xx_stop_vbi_streaming(struct vb2_queue *vq); 705extern const struct v4l2_ctrl_ops em28xx_ctrl_ops; 706 707/* Provided by em28xx-cards.c */ |
715extern int em2800_variant_detect(struct usb_device *udev, int model); | |
716extern struct em28xx_board em28xx_boards[]; 717extern struct usb_device_id em28xx_id_table[]; | 708extern struct em28xx_board em28xx_boards[]; 709extern struct usb_device_id em28xx_id_table[]; |
718extern const unsigned int em28xx_bcount; | |
719int em28xx_tuner_callback(void *ptr, int component, int command, int arg); 720void em28xx_release_resources(struct em28xx *dev); 721 722/* Provided by em28xx-vbi.c */ 723extern struct vb2_ops em28xx_vbi_qops; 724 725/* printk macros */ 726 --- 12 unchanged lines hidden (view full) --- 739 dev->name , ##arg); } while (0) 740 741static inline int em28xx_compression_disable(struct em28xx *dev) 742{ 743 /* side effect of disabling scaler and mixer */ 744 return em28xx_write_reg(dev, EM28XX_R26_COMPR, 0x00); 745} 746 | 710int em28xx_tuner_callback(void *ptr, int component, int command, int arg); 711void em28xx_release_resources(struct em28xx *dev); 712 713/* Provided by em28xx-vbi.c */ 714extern struct vb2_ops em28xx_vbi_qops; 715 716/* printk macros */ 717 --- 12 unchanged lines hidden (view full) --- 730 dev->name , ##arg); } while (0) 731 732static inline int em28xx_compression_disable(struct em28xx *dev) 733{ 734 /* side effect of disabling scaler and mixer */ 735 return em28xx_write_reg(dev, EM28XX_R26_COMPR, 0x00); 736} 737 |
747static inline int em28xx_contrast_get(struct em28xx *dev) 748{ 749 return em28xx_read_reg(dev, EM28XX_R20_YGAIN) & 0x1f; 750} 751 752static inline int em28xx_brightness_get(struct em28xx *dev) 753{ 754 return em28xx_read_reg(dev, EM28XX_R21_YOFFSET); 755} 756 757static inline int em28xx_saturation_get(struct em28xx *dev) 758{ 759 return em28xx_read_reg(dev, EM28XX_R22_UVGAIN) & 0x1f; 760} 761 762static inline int em28xx_u_balance_get(struct em28xx *dev) 763{ 764 return em28xx_read_reg(dev, EM28XX_R23_UOFFSET); 765} 766 767static inline int em28xx_v_balance_get(struct em28xx *dev) 768{ 769 return em28xx_read_reg(dev, EM28XX_R24_VOFFSET); 770} 771 772static inline int em28xx_gamma_get(struct em28xx *dev) 773{ 774 return em28xx_read_reg(dev, EM28XX_R14_GAMMA) & 0x3f; 775} 776 777static inline int em28xx_contrast_set(struct em28xx *dev, s32 val) 778{ 779 u8 tmp = (u8) val; 780 return em28xx_write_regs(dev, EM28XX_R20_YGAIN, &tmp, 1); 781} 782 783static inline int em28xx_brightness_set(struct em28xx *dev, s32 val) 784{ 785 u8 tmp = (u8) val; 786 return em28xx_write_regs(dev, EM28XX_R21_YOFFSET, &tmp, 1); 787} 788 789static inline int em28xx_saturation_set(struct em28xx *dev, s32 val) 790{ 791 u8 tmp = (u8) val; 792 return em28xx_write_regs(dev, EM28XX_R22_UVGAIN, &tmp, 1); 793} 794 795static inline int em28xx_u_balance_set(struct em28xx *dev, s32 val) 796{ 797 u8 tmp = (u8) val; 798 return em28xx_write_regs(dev, EM28XX_R23_UOFFSET, &tmp, 1); 799} 800 801static inline int em28xx_v_balance_set(struct em28xx *dev, s32 val) 802{ 803 u8 tmp = (u8) val; 804 return em28xx_write_regs(dev, EM28XX_R24_VOFFSET, &tmp, 1); 805} 806 807static inline int em28xx_gamma_set(struct em28xx *dev, s32 val) 808{ 809 u8 tmp = (u8) val; 810 return em28xx_write_regs(dev, EM28XX_R14_GAMMA, &tmp, 1); 811} 812 | |
813/*FIXME: maxw should be dependent of alt mode */ 814static inline unsigned int norm_maxw(struct em28xx *dev) 815{ 816 if (dev->board.is_webcam) 817 return dev->sensor_xres; 818 819 if (dev->board.max_range_640_480) 820 return 640; --- 15 unchanged lines hidden --- | 738/*FIXME: maxw should be dependent of alt mode */ 739static inline unsigned int norm_maxw(struct em28xx *dev) 740{ 741 if (dev->board.is_webcam) 742 return dev->sensor_xres; 743 744 if (dev->board.max_range_640_480) 745 return 640; --- 15 unchanged lines hidden --- |