xref: /openbmc/linux/drivers/media/usb/em28xx/em28xx.h (revision afc98d90)
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 
9    Based on the em2800 driver from Sascha Sommer <saschasommer@freenet.de>
10 
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 2 of the License, or
14    (at your option) any later version.
15 
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20 
21    You should have received a copy of the GNU General Public License
22    along with this program; if not, write to the Free Software
23    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24  */
25 
26 #ifndef _EM28XX_H
27 #define _EM28XX_H
28 
29 #define EM28XX_VERSION "0.2.1"
30 #define DRIVER_DESC    "Empia em28xx device driver"
31 
32 #include <linux/workqueue.h>
33 #include <linux/i2c.h>
34 #include <linux/mutex.h>
35 #include <linux/videodev2.h>
36 
37 #include <media/videobuf2-vmalloc.h>
38 #include <media/v4l2-device.h>
39 #include <media/v4l2-ctrls.h>
40 #include <media/v4l2-fh.h>
41 #include <media/ir-kbd-i2c.h>
42 #include <media/rc-core.h>
43 #include "tuner-xc2028.h"
44 #include "xc5000.h"
45 #include "em28xx-reg.h"
46 
47 /* Boards supported by driver */
48 #define EM2800_BOARD_UNKNOWN			  0
49 #define EM2820_BOARD_UNKNOWN			  1
50 #define EM2820_BOARD_TERRATEC_CINERGY_250	  2
51 #define EM2820_BOARD_PINNACLE_USB_2		  3
52 #define EM2820_BOARD_HAUPPAUGE_WINTV_USB_2	  4
53 #define EM2820_BOARD_MSI_VOX_USB_2		  5
54 #define EM2800_BOARD_TERRATEC_CINERGY_200	  6
55 #define EM2800_BOARD_LEADTEK_WINFAST_USBII	  7
56 #define EM2800_BOARD_KWORLD_USB2800		  8
57 #define EM2820_BOARD_PINNACLE_DVC_90		  9
58 #define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900	  10
59 #define EM2880_BOARD_TERRATEC_HYBRID_XS		  11
60 #define EM2820_BOARD_KWORLD_PVRTV2800RF		  12
61 #define EM2880_BOARD_TERRATEC_PRODIGY_XS	  13
62 #define EM2820_BOARD_PROLINK_PLAYTV_USB2	  14
63 #define EM2800_BOARD_VGEAR_POCKETTV		  15
64 #define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950	  16
65 #define EM2880_BOARD_PINNACLE_PCTV_HD_PRO	  17
66 #define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2	  18
67 #define EM2860_BOARD_SAA711X_REFERENCE_DESIGN	  19
68 #define EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600	  20
69 #define EM2800_BOARD_GRABBEEX_USB2800		  21
70 #define EM2750_BOARD_UNKNOWN			  22
71 #define EM2750_BOARD_DLCW_130			  23
72 #define EM2820_BOARD_DLINK_USB_TV		  24
73 #define EM2820_BOARD_GADMEI_UTV310		  25
74 #define EM2820_BOARD_HERCULES_SMART_TV_USB2	  26
75 #define EM2820_BOARD_PINNACLE_USB_2_FM1216ME	  27
76 #define EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE 28
77 #define EM2860_BOARD_TVP5150_REFERENCE_DESIGN	  29
78 #define EM2820_BOARD_VIDEOLOGY_20K14XUSB	  30
79 #define EM2821_BOARD_USBGEAR_VD204		  31
80 #define EM2821_BOARD_SUPERCOMP_USB_2		  32
81 #define EM2860_BOARD_ELGATO_VIDEO_CAPTURE	  33
82 #define EM2860_BOARD_TERRATEC_HYBRID_XS		  34
83 #define EM2860_BOARD_TYPHOON_DVD_MAKER		  35
84 #define EM2860_BOARD_NETGMBH_CAM		  36
85 #define EM2860_BOARD_GADMEI_UTV330		  37
86 #define EM2861_BOARD_YAKUMO_MOVIE_MIXER		  38
87 #define EM2861_BOARD_KWORLD_PVRTV_300U		  39
88 #define EM2861_BOARD_PLEXTOR_PX_TV100U		  40
89 #define EM2870_BOARD_KWORLD_350U		  41
90 #define EM2870_BOARD_KWORLD_355U		  42
91 #define EM2870_BOARD_TERRATEC_XS		  43
92 #define EM2870_BOARD_TERRATEC_XS_MT2060		  44
93 #define EM2870_BOARD_PINNACLE_PCTV_DVB		  45
94 #define EM2870_BOARD_COMPRO_VIDEOMATE		  46
95 #define EM2880_BOARD_KWORLD_DVB_305U		  47
96 #define EM2880_BOARD_KWORLD_DVB_310U		  48
97 #define EM2880_BOARD_MSI_DIGIVOX_AD		  49
98 #define EM2880_BOARD_MSI_DIGIVOX_AD_II		  50
99 #define EM2880_BOARD_TERRATEC_HYBRID_XS_FR	  51
100 #define EM2881_BOARD_DNT_DA2_HYBRID		  52
101 #define EM2881_BOARD_PINNACLE_HYBRID_PRO	  53
102 #define EM2882_BOARD_KWORLD_VS_DVBT		  54
103 #define EM2882_BOARD_TERRATEC_HYBRID_XS		  55
104 #define EM2882_BOARD_PINNACLE_HYBRID_PRO_330E	  56
105 #define EM2883_BOARD_KWORLD_HYBRID_330U		  57
106 #define EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU	  58
107 #define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850	  60
108 #define EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2	  61
109 #define EM2820_BOARD_GADMEI_TVR200		  62
110 #define EM2860_BOARD_KAIOMY_TVNPC_U2		  63
111 #define EM2860_BOARD_EASYCAP			  64
112 #define EM2820_BOARD_IODATA_GVMVP_SZ		  65
113 #define EM2880_BOARD_EMPIRE_DUAL_TV		  66
114 #define EM2860_BOARD_TERRATEC_GRABBY		  67
115 #define EM2860_BOARD_TERRATEC_AV350		  68
116 #define EM2882_BOARD_KWORLD_ATSC_315U		  69
117 #define EM2882_BOARD_EVGA_INDTUBE		  70
118 #define EM2820_BOARD_SILVERCREST_WEBCAM		  71
119 #define EM2861_BOARD_GADMEI_UTV330PLUS		  72
120 #define EM2870_BOARD_REDDO_DVB_C_USB_BOX	  73
121 #define EM2800_BOARD_VC211A			  74
122 #define EM2882_BOARD_DIKOM_DK300		  75
123 #define EM2870_BOARD_KWORLD_A340		  76
124 #define EM2874_BOARD_LEADERSHIP_ISDBT		  77
125 #define EM28174_BOARD_PCTV_290E			  78
126 #define EM2884_BOARD_TERRATEC_H5		  79
127 #define EM28174_BOARD_PCTV_460E			  80
128 #define EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C	  81
129 #define EM2884_BOARD_CINERGY_HTC_STICK		  82
130 #define EM2860_BOARD_HT_VIDBOX_NW03		  83
131 #define EM2874_BOARD_MAXMEDIA_UB425_TC		  84
132 #define EM2884_BOARD_PCTV_510E			  85
133 #define EM2884_BOARD_PCTV_520E			  86
134 #define EM2884_BOARD_TERRATEC_HTC_USB_XS	  87
135 #define EM2884_BOARD_C3TECH_DIGITAL_DUO		  88
136 #define EM2874_BOARD_DELOCK_61959		  89
137 #define EM2874_BOARD_KWORLD_UB435Q_V2		  90
138 #define EM2765_BOARD_SPEEDLINK_VAD_LAPLACE	  91
139 #define EM28178_BOARD_PCTV_461E                   92
140 
141 /* Limits minimum and default number of buffers */
142 #define EM28XX_MIN_BUF 4
143 #define EM28XX_DEF_BUF 8
144 
145 /*Limits the max URB message size */
146 #define URB_MAX_CTRL_SIZE 80
147 
148 /* Params for validated field */
149 #define EM28XX_BOARD_NOT_VALIDATED 1
150 #define EM28XX_BOARD_VALIDATED	   0
151 
152 /* Params for em28xx_cmd() audio */
153 #define EM28XX_START_AUDIO      1
154 #define EM28XX_STOP_AUDIO       0
155 
156 /* maximum number of em28xx boards */
157 #define EM28XX_MAXBOARDS 4 /*FIXME: should be bigger */
158 
159 /* maximum number of frames that can be queued */
160 #define EM28XX_NUM_FRAMES 5
161 /* number of frames that get used for v4l2_read() */
162 #define EM28XX_NUM_READ_FRAMES 2
163 
164 /* number of buffers for isoc transfers */
165 #define EM28XX_NUM_BUFS 5
166 #define EM28XX_DVB_NUM_BUFS 5
167 
168 /* max number of I2C buses on em28xx devices */
169 #define NUM_I2C_BUSES	2
170 
171 /* isoc transfers: number of packets for each buffer
172    windows requests only 64 packets .. so we better do the same
173    this is what I found out for all alternate numbers there!
174  */
175 #define EM28XX_NUM_ISOC_PACKETS 64
176 #define EM28XX_DVB_NUM_ISOC_PACKETS 64
177 
178 /* bulk transfers: transfer buffer size = packet size * packet multiplier
179    USB 2.0 spec says bulk packet size is always 512 bytes
180  */
181 #define EM28XX_BULK_PACKET_MULTIPLIER 384
182 #define EM28XX_DVB_BULK_PACKET_MULTIPLIER 384
183 
184 #define EM28XX_INTERLACED_DEFAULT 1
185 
186 /*
187  * Time in msecs to wait for i2c xfers to finish.
188  * 35ms is the maximum time a SMBUS device could wait when
189  * clock stretching is used. As the transfer itself will take
190  * some time to happen, set it to 35 ms.
191  *
192  * Ok, I2C doesn't specify any limit. So, eventually, we may need
193  * to increase this timeout.
194  *
195  * FIXME: this assumes that an I2C message is not longer than 1ms.
196  * This is actually dependent on the I2C bus speed, although most
197  * devices use a 100kHz clock. So, this assumtion is true most of
198  * the time.
199  */
200 #define EM28XX_I2C_XFER_TIMEOUT		36
201 
202 /* time in msecs to wait for AC97 xfers to finish */
203 #define EM28XX_AC97_XFER_TIMEOUT	100
204 
205 /* max. number of button state polling addresses */
206 #define EM28XX_NUM_BUTTON_ADDRESSES_MAX		5
207 
208 enum em28xx_mode {
209 	EM28XX_SUSPEND,
210 	EM28XX_ANALOG_MODE,
211 	EM28XX_DIGITAL_MODE,
212 };
213 
214 
215 struct em28xx;
216 
217 struct em28xx_usb_bufs {
218 		/* max packet size of isoc transaction */
219 	int				max_pkt_size;
220 
221 		/* number of packets in each buffer */
222 	int				num_packets;
223 
224 		/* number of allocated urbs */
225 	int				num_bufs;
226 
227 		/* urb for isoc/bulk transfers */
228 	struct urb			**urb;
229 
230 		/* transfer buffers for isoc/bulk transfer */
231 	char				**transfer_buffer;
232 };
233 
234 struct em28xx_usb_ctl {
235 		/* isoc/bulk transfer buffers for analog mode */
236 	struct em28xx_usb_bufs		analog_bufs;
237 
238 		/* isoc/bulk transfer buffers for digital mode */
239 	struct em28xx_usb_bufs		digital_bufs;
240 
241 		/* Stores already requested buffers */
242 	struct em28xx_buffer    	*vid_buf;
243 	struct em28xx_buffer    	*vbi_buf;
244 
245 		/* copy data from URB */
246 	int (*urb_data_copy) (struct em28xx *dev, struct urb *urb);
247 
248 };
249 
250 /* Struct to enumberate video formats */
251 struct em28xx_fmt {
252 	char  *name;
253 	u32   fourcc;          /* v4l2 format id */
254 	int   depth;
255 	int   reg;
256 };
257 
258 /* buffer for one video frame */
259 struct em28xx_buffer {
260 	/* common v4l buffer stuff -- must be first */
261 	struct vb2_buffer vb;
262 	struct list_head list;
263 
264 	void *mem;
265 	unsigned int length;
266 	int top_field;
267 
268 	/* counter to control buffer fill */
269 	unsigned int pos;
270 	/* NOTE; in interlaced mode, this value is reset to zero at
271 	 * the start of each new field (not frame !)		   */
272 
273 	/* pointer to vmalloc memory address in vb */
274 	char *vb_buf;
275 };
276 
277 struct em28xx_dmaqueue {
278 	struct list_head       active;
279 
280 	wait_queue_head_t          wq;
281 };
282 
283 /* inputs */
284 
285 #define MAX_EM28XX_INPUT 4
286 enum enum28xx_itype {
287 	EM28XX_VMUX_COMPOSITE1 = 1,
288 	EM28XX_VMUX_COMPOSITE2,
289 	EM28XX_VMUX_COMPOSITE3,
290 	EM28XX_VMUX_COMPOSITE4,
291 	EM28XX_VMUX_SVIDEO,
292 	EM28XX_VMUX_TELEVISION,
293 	EM28XX_VMUX_CABLE,
294 	EM28XX_VMUX_DVB,
295 	EM28XX_VMUX_DEBUG,
296 	EM28XX_RADIO,
297 };
298 
299 enum em28xx_ac97_mode {
300 	EM28XX_NO_AC97 = 0,
301 	EM28XX_AC97_EM202,
302 	EM28XX_AC97_SIGMATEL,
303 	EM28XX_AC97_OTHER,
304 };
305 
306 struct em28xx_audio_mode {
307 	enum em28xx_ac97_mode ac97;
308 
309 	u16 ac97_feat;
310 	u32 ac97_vendor_id;
311 
312 	unsigned int has_audio:1;
313 
314 	u8 i2s_samplerates;
315 };
316 
317 /* em28xx has two audio inputs: tuner and line in.
318    However, on most devices, an auxiliary AC97 codec device is used.
319    The AC97 device may have several different inputs and outputs,
320    depending on their model. So, it is possible to use AC97 mixer to
321    address more than two different entries.
322  */
323 enum em28xx_amux {
324 	/* This is the only entry for em28xx tuner input */
325 	EM28XX_AMUX_VIDEO,	/* em28xx tuner, AC97 mixer Video */
326 
327 	EM28XX_AMUX_LINE_IN,	/* AC97 mixer Line In */
328 
329 	/* Some less-common mixer setups */
330 	EM28XX_AMUX_VIDEO2,	/* em28xx Line in, AC97 mixer Video */
331 	EM28XX_AMUX_PHONE,
332 	EM28XX_AMUX_MIC,
333 	EM28XX_AMUX_CD,
334 	EM28XX_AMUX_AUX,
335 	EM28XX_AMUX_PCM_OUT,
336 };
337 
338 enum em28xx_aout {
339 	/* AC97 outputs */
340 	EM28XX_AOUT_MASTER = 1 << 0,
341 	EM28XX_AOUT_LINE   = 1 << 1,
342 	EM28XX_AOUT_MONO   = 1 << 2,
343 	EM28XX_AOUT_LFE    = 1 << 3,
344 	EM28XX_AOUT_SURR   = 1 << 4,
345 
346 	/* PCM IN Mixer - used by AC97_RECORD_SELECT register */
347 	EM28XX_AOUT_PCM_IN = 1 << 7,
348 
349 	/* Bits 10-8 are used to indicate the PCM IN record select */
350 	EM28XX_AOUT_PCM_MIC_PCM = 0 << 8,
351 	EM28XX_AOUT_PCM_CD	= 1 << 8,
352 	EM28XX_AOUT_PCM_VIDEO	= 2 << 8,
353 	EM28XX_AOUT_PCM_AUX	= 3 << 8,
354 	EM28XX_AOUT_PCM_LINE	= 4 << 8,
355 	EM28XX_AOUT_PCM_STEREO	= 5 << 8,
356 	EM28XX_AOUT_PCM_MONO	= 6 << 8,
357 	EM28XX_AOUT_PCM_PHONE	= 7 << 8,
358 };
359 
360 static inline int ac97_return_record_select(int a_out)
361 {
362 	return (a_out & 0x700) >> 8;
363 }
364 
365 struct em28xx_reg_seq {
366 	int reg;
367 	unsigned char val, mask;
368 	int sleep;
369 };
370 
371 struct em28xx_input {
372 	enum enum28xx_itype type;
373 	unsigned int vmux;
374 	enum em28xx_amux amux;
375 	enum em28xx_aout aout;
376 	struct em28xx_reg_seq *gpio;
377 };
378 
379 #define INPUT(nr) (&em28xx_boards[dev->model].input[nr])
380 
381 enum em28xx_decoder {
382 	EM28XX_NODECODER = 0,
383 	EM28XX_TVP5150,
384 	EM28XX_SAA711X,
385 };
386 
387 enum em28xx_sensor {
388 	EM28XX_NOSENSOR = 0,
389 	EM28XX_MT9V011,
390 	EM28XX_MT9M001,
391 	EM28XX_MT9M111,
392 	EM28XX_OV2640,
393 };
394 
395 enum em28xx_adecoder {
396 	EM28XX_NOADECODER = 0,
397 	EM28XX_TVAUDIO,
398 };
399 
400 enum em28xx_led_role {
401 	EM28XX_LED_ANALOG_CAPTURING = 0,
402 	EM28XX_LED_ILLUMINATION,
403 	EM28XX_NUM_LED_ROLES, /* must be the last */
404 };
405 
406 struct em28xx_led {
407 	enum em28xx_led_role role;
408 	u8 gpio_reg;
409 	u8 gpio_mask;
410 	bool inverted;
411 };
412 
413 enum em28xx_button_role {
414 	EM28XX_BUTTON_SNAPSHOT = 0,
415 	EM28XX_BUTTON_ILLUMINATION,
416 	EM28XX_NUM_BUTTON_ROLES, /* must be the last */
417 };
418 
419 struct em28xx_button {
420 	enum em28xx_button_role role;
421 	u8 reg_r;
422 	u8 reg_clearing;
423 	u8 mask;
424 	bool inverted;
425 };
426 
427 struct em28xx_board {
428 	char *name;
429 	int vchannels;
430 	int tuner_type;
431 	int tuner_addr;
432 	unsigned def_i2c_bus;	/* Default I2C bus */
433 
434 	/* i2c flags */
435 	unsigned int tda9887_conf;
436 
437 	/* GPIO sequences */
438 	struct em28xx_reg_seq *dvb_gpio;
439 	struct em28xx_reg_seq *suspend_gpio;
440 	struct em28xx_reg_seq *tuner_gpio;
441 	struct em28xx_reg_seq *mute_gpio;
442 
443 	unsigned int is_em2800:1;
444 	unsigned int has_msp34xx:1;
445 	unsigned int mts_firmware:1;
446 	unsigned int max_range_640_480:1;
447 	unsigned int has_dvb:1;
448 	unsigned int is_webcam:1;
449 	unsigned int valid:1;
450 	unsigned int has_ir_i2c:1;
451 
452 	unsigned char xclk, i2c_speed;
453 	unsigned char radio_addr;
454 	unsigned short tvaudio_addr;
455 
456 	enum em28xx_decoder decoder;
457 	enum em28xx_adecoder adecoder;
458 
459 	struct em28xx_input       input[MAX_EM28XX_INPUT];
460 	struct em28xx_input	  radio;
461 	char			  *ir_codes;
462 
463 	/* LEDs that need to be controlled explicitly */
464 	struct em28xx_led	  *leds;
465 
466 	/* Buttons */
467 	struct em28xx_button	  *buttons;
468 };
469 
470 struct em28xx_eeprom {
471 	u8 id[4];			/* 1a eb 67 95 */
472 	__le16 vendor_ID;
473 	__le16 product_ID;
474 
475 	__le16 chip_conf;
476 
477 	__le16 board_conf;
478 
479 	__le16 string1, string2, string3;
480 
481 	u8 string_idx_table;
482 };
483 
484 #define EM28XX_CAPTURE_STREAM_EN 1
485 
486 /* em28xx extensions */
487 #define EM28XX_AUDIO   0x10
488 #define EM28XX_DVB     0x20
489 #define EM28XX_RC      0x30
490 #define EM28XX_V4L2    0x40
491 
492 /* em28xx resource types (used for res_get/res_lock etc */
493 #define EM28XX_RESOURCE_VIDEO 0x01
494 #define EM28XX_RESOURCE_VBI   0x02
495 
496 struct em28xx_audio {
497 	char name[50];
498 	unsigned num_urb;
499 	char **transfer_buffer;
500 	struct urb **urb;
501 	struct usb_device *udev;
502 	unsigned int capture_transfer_done;
503 	struct snd_pcm_substream   *capture_pcm_substream;
504 
505 	unsigned int hwptr_done_capture;
506 	struct snd_card            *sndcard;
507 
508 	size_t period;
509 
510 	int users;
511 	spinlock_t slock;
512 };
513 
514 struct em28xx;
515 
516 struct em28xx_fh {
517 	struct v4l2_fh fh;
518 	struct em28xx *dev;
519 
520 	enum v4l2_buf_type           type;
521 };
522 
523 enum em28xx_i2c_algo_type {
524 	EM28XX_I2C_ALGO_EM28XX = 0,
525 	EM28XX_I2C_ALGO_EM2800,
526 	EM28XX_I2C_ALGO_EM25XX_BUS_B,
527 };
528 
529 struct em28xx_i2c_bus {
530 	struct em28xx *dev;
531 
532 	unsigned bus;
533 	enum em28xx_i2c_algo_type algo_type;
534 };
535 
536 
537 /* main device struct */
538 struct em28xx {
539 	/* generic device properties */
540 	char name[30];		/* name (including minor) of the device */
541 	int model;		/* index in the device_data struct */
542 	int devno;		/* marks the number of this device */
543 	enum em28xx_chip_id chip_id;
544 
545 	unsigned int is_em25xx:1;	/* em25xx/em276x/7x/8x family bridge */
546 	unsigned char disconnected:1;	/* device has been diconnected */
547 	unsigned int has_video:1;
548 	unsigned int has_audio_class:1;
549 	unsigned int has_alsa_audio:1;
550 	unsigned int is_audio_only:1;
551 
552 	struct v4l2_device v4l2_dev;
553 	struct v4l2_ctrl_handler ctrl_handler;
554 	struct v4l2_clk *clk;
555 	struct em28xx_board board;
556 
557 	/* Webcam specific fields */
558 	enum em28xx_sensor em28xx_sensor;
559 	int sensor_xres, sensor_yres;
560 	int sensor_xtal;
561 
562 	/* Progressive (non-interlaced) mode */
563 	int progressive;
564 
565 	/* Vinmode/Vinctl used at the driver */
566 	int vinmode, vinctl;
567 
568 	/* Controls audio streaming */
569 	struct work_struct wq_trigger;	/* Trigger to start/stop audio for alsa module */
570 	atomic_t       stream_started;	/* stream should be running if true */
571 
572 	struct em28xx_fmt *format;
573 
574 	struct em28xx_IR *ir;
575 
576 	/* Some older em28xx chips needs a waiting time after writing */
577 	unsigned int wait_after_write;
578 
579 	struct list_head	devlist;
580 
581 	u32 i2s_speed;		/* I2S speed for audio digital stream */
582 
583 	struct em28xx_audio_mode audio_mode;
584 
585 	int tuner_type;		/* type of the tuner */
586 	int tuner_addr;		/* tuner address */
587 	int tda9887_conf;
588 
589 	/* i2c i/o */
590 	struct i2c_adapter i2c_adap[NUM_I2C_BUSES];
591 	struct i2c_client i2c_client[NUM_I2C_BUSES];
592 	struct em28xx_i2c_bus i2c_bus[NUM_I2C_BUSES];
593 
594 	unsigned char eeprom_addrwidth_16bit:1;
595 	unsigned def_i2c_bus;	/* Default I2C bus */
596 	unsigned cur_i2c_bus;	/* Current I2C bus */
597 	struct rt_mutex i2c_bus_lock;
598 
599 	/* video for linux */
600 	int users;		/* user count for exclusive use */
601 	int streaming_users;    /* Number of actively streaming users */
602 	struct video_device *vdev;	/* video for linux device struct */
603 	v4l2_std_id norm;	/* selected tv norm */
604 	int ctl_freq;		/* selected frequency */
605 	unsigned int ctl_input;	/* selected input */
606 	unsigned int ctl_ainput;/* selected audio input */
607 	unsigned int ctl_aoutput;/* selected audio output */
608 	int mute;
609 	int volume;
610 	/* frame properties */
611 	int width;		/* current frame width */
612 	int height;		/* current frame height */
613 	unsigned hscale;	/* horizontal scale factor (see datasheet) */
614 	unsigned vscale;	/* vertical scale factor (see datasheet) */
615 	int interlaced;		/* 1=interlace fileds, 0=just top fileds */
616 	unsigned int video_bytesread;	/* Number of bytes read */
617 
618 	unsigned long hash;	/* eeprom hash - for boards with generic ID */
619 	unsigned long i2c_hash;	/* i2c devicelist hash -
620 				   for boards with generic ID */
621 
622 	struct em28xx_audio adev;
623 
624 	/* capture state tracking */
625 	int capture_type;
626 	unsigned char top_field:1;
627 	int vbi_read;
628 	unsigned int vbi_width;
629 	unsigned int vbi_height; /* lines per field */
630 
631 	struct work_struct         request_module_wk;
632 
633 	/* locks */
634 	struct mutex lock;
635 	struct mutex ctrl_urb_lock;	/* protects urb_buf */
636 	/* spinlock_t queue_lock; */
637 	struct list_head inqueue, outqueue;
638 	struct video_device *vbi_dev;
639 	struct video_device *radio_dev;
640 
641 	/* Videobuf2 */
642 	struct vb2_queue vb_vidq;
643 	struct vb2_queue vb_vbiq;
644 	struct mutex vb_queue_lock;
645 	struct mutex vb_vbi_queue_lock;
646 
647 	/* resources in use */
648 	unsigned int resources;
649 
650 	/* eeprom content */
651 	u8 *eedata;
652 	u16 eedata_len;
653 
654 	/* Isoc control struct */
655 	struct em28xx_dmaqueue vidq;
656 	struct em28xx_dmaqueue vbiq;
657 	struct em28xx_usb_ctl usb_ctl;
658 	spinlock_t slock;
659 
660 	unsigned int field_count;
661 	unsigned int vbi_field_count;
662 
663 	/* usb transfer */
664 	struct usb_device *udev;	/* the usb device */
665 	u8 ifnum;		/* number of the assigned usb interface */
666 	u8 analog_ep_isoc;	/* address of isoc endpoint for analog */
667 	u8 analog_ep_bulk;	/* address of bulk endpoint for analog */
668 	u8 dvb_ep_isoc;		/* address of isoc endpoint for DVB */
669 	u8 dvb_ep_bulk;		/* address of bulk endpoint for DVB */
670 	int alt;		/* alternate setting */
671 	int max_pkt_size;	/* max packet size of the selected ep at alt */
672 	int packet_multiplier;	/* multiplier for wMaxPacketSize, used for
673 				   URB buffer size definition */
674 	int num_alt;		/* number of alternative settings */
675 	unsigned int *alt_max_pkt_size_isoc; /* array of isoc wMaxPacketSize */
676 	unsigned int analog_xfer_bulk:1;	/* use bulk instead of isoc
677 						   transfers for analog      */
678 	int dvb_alt_isoc;	/* alternate setting for DVB isoc transfers */
679 	unsigned int dvb_max_pkt_size_isoc;	/* isoc max packet size of the
680 						   selected DVB ep at dvb_alt */
681 	unsigned int dvb_xfer_bulk:1;		/* use bulk instead of isoc
682 						   transfers for DVB          */
683 	char urb_buf[URB_MAX_CTRL_SIZE];	/* urb control msg buffer */
684 
685 	/* helper funcs that call usb_control_msg */
686 	int (*em28xx_write_regs) (struct em28xx *dev, u16 reg,
687 					char *buf, int len);
688 	int (*em28xx_read_reg) (struct em28xx *dev, u16 reg);
689 	int (*em28xx_read_reg_req_len) (struct em28xx *dev, u8 req, u16 reg,
690 					char *buf, int len);
691 	int (*em28xx_write_regs_req) (struct em28xx *dev, u8 req, u16 reg,
692 				      char *buf, int len);
693 	int (*em28xx_read_reg_req) (struct em28xx *dev, u8 req, u16 reg);
694 
695 	enum em28xx_mode mode;
696 
697 	/* Button state polling */
698 	struct delayed_work buttons_query_work;
699 	u8 button_polling_addresses[EM28XX_NUM_BUTTON_ADDRESSES_MAX];
700 	u8 button_polling_last_values[EM28XX_NUM_BUTTON_ADDRESSES_MAX];
701 	u8 num_button_polling_addresses;
702 	u16 button_polling_interval; /* [ms] */
703 	/* Snapshot button input device */
704 	char snapshot_button_path[30];	/* path of the input dev */
705 	struct input_dev *sbutton_input_dev;
706 
707 	struct em28xx_dvb *dvb;
708 };
709 
710 struct em28xx_ops {
711 	struct list_head next;
712 	char *name;
713 	int id;
714 	int (*init)(struct em28xx *);
715 	int (*fini)(struct em28xx *);
716 };
717 
718 /* Provided by em28xx-i2c.c */
719 void em28xx_do_i2c_scan(struct em28xx *dev, unsigned bus);
720 int  em28xx_i2c_register(struct em28xx *dev, unsigned bus,
721 			 enum em28xx_i2c_algo_type algo_type);
722 int  em28xx_i2c_unregister(struct em28xx *dev, unsigned bus);
723 
724 /* Provided by em28xx-core.c */
725 int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
726 			    char *buf, int len);
727 int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg);
728 int em28xx_read_reg(struct em28xx *dev, u16 reg);
729 int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
730 			  int len);
731 int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len);
732 int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val);
733 int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
734 				 u8 bitmask);
735 int em28xx_toggle_reg_bits(struct em28xx *dev, u16 reg, u8 bitmask);
736 
737 int em28xx_read_ac97(struct em28xx *dev, u8 reg);
738 int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val);
739 
740 int em28xx_audio_analog_set(struct em28xx *dev);
741 int em28xx_audio_setup(struct em28xx *dev);
742 
743 const struct em28xx_led *em28xx_find_led(struct em28xx *dev,
744 					 enum em28xx_led_role role);
745 int em28xx_capture_start(struct em28xx *dev, int start);
746 int em28xx_alloc_urbs(struct em28xx *dev, enum em28xx_mode mode, int xfer_bulk,
747 		      int num_bufs, int max_pkt_size, int packet_multiplier);
748 int em28xx_init_usb_xfer(struct em28xx *dev, enum em28xx_mode mode,
749 			 int xfer_bulk,
750 			 int num_bufs, int max_pkt_size, int packet_multiplier,
751 			 int (*urb_data_copy)
752 					(struct em28xx *dev, struct urb *urb));
753 void em28xx_uninit_usb_xfer(struct em28xx *dev, enum em28xx_mode mode);
754 void em28xx_stop_urbs(struct em28xx *dev);
755 int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode);
756 int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio);
757 int em28xx_register_extension(struct em28xx_ops *dev);
758 void em28xx_unregister_extension(struct em28xx_ops *dev);
759 void em28xx_init_extension(struct em28xx *dev);
760 void em28xx_close_extension(struct em28xx *dev);
761 
762 /* Provided by em28xx-cards.c */
763 extern struct em28xx_board em28xx_boards[];
764 extern struct usb_device_id em28xx_id_table[];
765 int em28xx_tuner_callback(void *ptr, int component, int command, int arg);
766 void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl);
767 void em28xx_release_resources(struct em28xx *dev);
768 
769 /* Provided by em28xx-camera.c */
770 int em28xx_detect_sensor(struct em28xx *dev);
771 int em28xx_init_camera(struct em28xx *dev);
772 
773 /* printk macros */
774 
775 #define em28xx_err(fmt, arg...) do {\
776 	printk(KERN_ERR fmt , ##arg); } while (0)
777 
778 #define em28xx_errdev(fmt, arg...) do {\
779 	printk(KERN_ERR "%s: "fmt,\
780 			dev->name , ##arg); } while (0)
781 
782 #define em28xx_info(fmt, arg...) do {\
783 	printk(KERN_INFO "%s: "fmt,\
784 			dev->name , ##arg); } while (0)
785 #define em28xx_warn(fmt, arg...) do {\
786 	printk(KERN_WARNING "%s: "fmt,\
787 			dev->name , ##arg); } while (0)
788 
789 static inline int em28xx_compression_disable(struct em28xx *dev)
790 {
791 	/* side effect of disabling scaler and mixer */
792 	return em28xx_write_reg(dev, EM28XX_R26_COMPR, 0x00);
793 }
794 
795 /*FIXME: maxw should be dependent of alt mode */
796 static inline unsigned int norm_maxw(struct em28xx *dev)
797 {
798 	if (dev->board.is_webcam)
799 		return dev->sensor_xres;
800 
801 	if (dev->board.max_range_640_480)
802 		return 640;
803 
804 	return 720;
805 }
806 
807 static inline unsigned int norm_maxh(struct em28xx *dev)
808 {
809 	if (dev->board.is_webcam)
810 		return dev->sensor_yres;
811 
812 	if (dev->board.max_range_640_480)
813 		return 480;
814 
815 	return (dev->norm & V4L2_STD_625_50) ? 576 : 480;
816 }
817 #endif
818