[media] em28xx: rename struct em28xx_usb_isoc_bufs to em28xx_usb_bufs
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / media / usb / em28xx / em28xx-core.c
1 /*
2 em28xx-core.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
3
4 Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
5 Markus Rechberger <mrechberger@gmail.com>
6 Mauro Carvalho Chehab <mchehab@infradead.org>
7 Sascha Sommer <saschasommer@freenet.de>
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #include <linux/init.h>
25 #include <linux/list.h>
26 #include <linux/module.h>
27 #include <linux/slab.h>
28 #include <linux/usb.h>
29 #include <linux/vmalloc.h>
30 #include <sound/ac97_codec.h>
31 #include <media/v4l2-common.h>
32
33 #include "em28xx.h"
34
35 /* #define ENABLE_DEBUG_ISOC_FRAMES */
36
37 static unsigned int core_debug;
38 module_param(core_debug, int, 0644);
39 MODULE_PARM_DESC(core_debug, "enable debug messages [core]");
40
41 #define em28xx_coredbg(fmt, arg...) do {\
42 if (core_debug) \
43 printk(KERN_INFO "%s %s :"fmt, \
44 dev->name, __func__ , ##arg); } while (0)
45
46 static unsigned int reg_debug;
47 module_param(reg_debug, int, 0644);
48 MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]");
49
50 #define em28xx_regdbg(fmt, arg...) do {\
51 if (reg_debug) \
52 printk(KERN_INFO "%s %s :"fmt, \
53 dev->name, __func__ , ##arg); } while (0)
54
55 static int alt;
56 module_param(alt, int, 0644);
57 MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
58
59 static unsigned int disable_vbi;
60 module_param(disable_vbi, int, 0644);
61 MODULE_PARM_DESC(disable_vbi, "disable vbi support");
62
63 /* FIXME */
64 #define em28xx_isocdbg(fmt, arg...) do {\
65 if (core_debug) \
66 printk(KERN_INFO "%s %s :"fmt, \
67 dev->name, __func__ , ##arg); } while (0)
68
69 /*
70 * em28xx_read_reg_req()
71 * reads data from the usb device specifying bRequest
72 */
73 int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
74 char *buf, int len)
75 {
76 int ret;
77 int pipe = usb_rcvctrlpipe(dev->udev, 0);
78
79 if (dev->state & DEV_DISCONNECTED)
80 return -ENODEV;
81
82 if (len > URB_MAX_CTRL_SIZE)
83 return -EINVAL;
84
85 if (reg_debug) {
86 printk(KERN_DEBUG "(pipe 0x%08x): "
87 "IN: %02x %02x %02x %02x %02x %02x %02x %02x ",
88 pipe,
89 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
90 req, 0, 0,
91 reg & 0xff, reg >> 8,
92 len & 0xff, len >> 8);
93 }
94
95 mutex_lock(&dev->ctrl_urb_lock);
96 ret = usb_control_msg(dev->udev, pipe, req,
97 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
98 0x0000, reg, dev->urb_buf, len, HZ);
99 if (ret < 0) {
100 if (reg_debug)
101 printk(" failed!\n");
102 mutex_unlock(&dev->ctrl_urb_lock);
103 return ret;
104 }
105
106 if (len)
107 memcpy(buf, dev->urb_buf, len);
108
109 mutex_unlock(&dev->ctrl_urb_lock);
110
111 if (reg_debug) {
112 int byte;
113
114 printk("<<<");
115 for (byte = 0; byte < len; byte++)
116 printk(" %02x", (unsigned char)buf[byte]);
117 printk("\n");
118 }
119
120 return ret;
121 }
122
123 /*
124 * em28xx_read_reg_req()
125 * reads data from the usb device specifying bRequest
126 */
127 int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg)
128 {
129 int ret;
130 u8 val;
131
132 ret = em28xx_read_reg_req_len(dev, req, reg, &val, 1);
133 if (ret < 0)
134 return ret;
135
136 return val;
137 }
138
139 int em28xx_read_reg(struct em28xx *dev, u16 reg)
140 {
141 return em28xx_read_reg_req(dev, USB_REQ_GET_STATUS, reg);
142 }
143 EXPORT_SYMBOL_GPL(em28xx_read_reg);
144
145 /*
146 * em28xx_write_regs_req()
147 * sends data to the usb device, specifying bRequest
148 */
149 int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
150 int len)
151 {
152 int ret;
153 int pipe = usb_sndctrlpipe(dev->udev, 0);
154
155 if (dev->state & DEV_DISCONNECTED)
156 return -ENODEV;
157
158 if ((len < 1) || (len > URB_MAX_CTRL_SIZE))
159 return -EINVAL;
160
161 if (reg_debug) {
162 int byte;
163
164 printk(KERN_DEBUG "(pipe 0x%08x): "
165 "OUT: %02x %02x %02x %02x %02x %02x %02x %02x >>>",
166 pipe,
167 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
168 req, 0, 0,
169 reg & 0xff, reg >> 8,
170 len & 0xff, len >> 8);
171
172 for (byte = 0; byte < len; byte++)
173 printk(" %02x", (unsigned char)buf[byte]);
174 printk("\n");
175 }
176
177 mutex_lock(&dev->ctrl_urb_lock);
178 memcpy(dev->urb_buf, buf, len);
179 ret = usb_control_msg(dev->udev, pipe, req,
180 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
181 0x0000, reg, dev->urb_buf, len, HZ);
182 mutex_unlock(&dev->ctrl_urb_lock);
183
184 if (dev->wait_after_write)
185 msleep(dev->wait_after_write);
186
187 return ret;
188 }
189
190 int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len)
191 {
192 int rc;
193
194 rc = em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len);
195
196 /* Stores GPO/GPIO values at the cache, if changed
197 Only write values should be stored, since input on a GPIO
198 register will return the input bits.
199 Not sure what happens on reading GPO register.
200 */
201 if (rc >= 0) {
202 if (reg == dev->reg_gpo_num)
203 dev->reg_gpo = buf[0];
204 else if (reg == dev->reg_gpio_num)
205 dev->reg_gpio = buf[0];
206 }
207
208 return rc;
209 }
210 EXPORT_SYMBOL_GPL(em28xx_write_regs);
211
212 /* Write a single register */
213 int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val)
214 {
215 return em28xx_write_regs(dev, reg, &val, 1);
216 }
217 EXPORT_SYMBOL_GPL(em28xx_write_reg);
218
219 /*
220 * em28xx_write_reg_bits()
221 * sets only some bits (specified by bitmask) of a register, by first reading
222 * the actual value
223 */
224 int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
225 u8 bitmask)
226 {
227 int oldval;
228 u8 newval;
229
230 /* Uses cache for gpo/gpio registers */
231 if (reg == dev->reg_gpo_num)
232 oldval = dev->reg_gpo;
233 else if (reg == dev->reg_gpio_num)
234 oldval = dev->reg_gpio;
235 else
236 oldval = em28xx_read_reg(dev, reg);
237
238 if (oldval < 0)
239 return oldval;
240
241 newval = (((u8) oldval) & ~bitmask) | (val & bitmask);
242
243 return em28xx_write_regs(dev, reg, &newval, 1);
244 }
245 EXPORT_SYMBOL_GPL(em28xx_write_reg_bits);
246
247 /*
248 * em28xx_is_ac97_ready()
249 * Checks if ac97 is ready
250 */
251 static int em28xx_is_ac97_ready(struct em28xx *dev)
252 {
253 int ret, i;
254
255 /* Wait up to 50 ms for AC97 command to complete */
256 for (i = 0; i < 10; i++, msleep(5)) {
257 ret = em28xx_read_reg(dev, EM28XX_R43_AC97BUSY);
258 if (ret < 0)
259 return ret;
260
261 if (!(ret & 0x01))
262 return 0;
263 }
264
265 em28xx_warn("AC97 command still being executed: not handled properly!\n");
266 return -EBUSY;
267 }
268
269 /*
270 * em28xx_read_ac97()
271 * write a 16 bit value to the specified AC97 address (LSB first!)
272 */
273 int em28xx_read_ac97(struct em28xx *dev, u8 reg)
274 {
275 int ret;
276 u8 addr = (reg & 0x7f) | 0x80;
277 u16 val;
278
279 ret = em28xx_is_ac97_ready(dev);
280 if (ret < 0)
281 return ret;
282
283 ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
284 if (ret < 0)
285 return ret;
286
287 ret = dev->em28xx_read_reg_req_len(dev, 0, EM28XX_R40_AC97LSB,
288 (u8 *)&val, sizeof(val));
289
290 if (ret < 0)
291 return ret;
292 return le16_to_cpu(val);
293 }
294 EXPORT_SYMBOL_GPL(em28xx_read_ac97);
295
296 /*
297 * em28xx_write_ac97()
298 * write a 16 bit value to the specified AC97 address (LSB first!)
299 */
300 int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val)
301 {
302 int ret;
303 u8 addr = reg & 0x7f;
304 __le16 value;
305
306 value = cpu_to_le16(val);
307
308 ret = em28xx_is_ac97_ready(dev);
309 if (ret < 0)
310 return ret;
311
312 ret = em28xx_write_regs(dev, EM28XX_R40_AC97LSB, (u8 *) &value, 2);
313 if (ret < 0)
314 return ret;
315
316 ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
317 if (ret < 0)
318 return ret;
319
320 return 0;
321 }
322 EXPORT_SYMBOL_GPL(em28xx_write_ac97);
323
324 struct em28xx_vol_itable {
325 enum em28xx_amux mux;
326 u8 reg;
327 };
328
329 static struct em28xx_vol_itable inputs[] = {
330 { EM28XX_AMUX_VIDEO, AC97_VIDEO },
331 { EM28XX_AMUX_LINE_IN, AC97_LINE },
332 { EM28XX_AMUX_PHONE, AC97_PHONE },
333 { EM28XX_AMUX_MIC, AC97_MIC },
334 { EM28XX_AMUX_CD, AC97_CD },
335 { EM28XX_AMUX_AUX, AC97_AUX },
336 { EM28XX_AMUX_PCM_OUT, AC97_PCM },
337 };
338
339 static int set_ac97_input(struct em28xx *dev)
340 {
341 int ret, i;
342 enum em28xx_amux amux = dev->ctl_ainput;
343
344 /* EM28XX_AMUX_VIDEO2 is a special case used to indicate that
345 em28xx should point to LINE IN, while AC97 should use VIDEO
346 */
347 if (amux == EM28XX_AMUX_VIDEO2)
348 amux = EM28XX_AMUX_VIDEO;
349
350 /* Mute all entres but the one that were selected */
351 for (i = 0; i < ARRAY_SIZE(inputs); i++) {
352 if (amux == inputs[i].mux)
353 ret = em28xx_write_ac97(dev, inputs[i].reg, 0x0808);
354 else
355 ret = em28xx_write_ac97(dev, inputs[i].reg, 0x8000);
356
357 if (ret < 0)
358 em28xx_warn("couldn't setup AC97 register %d\n",
359 inputs[i].reg);
360 }
361 return 0;
362 }
363
364 static int em28xx_set_audio_source(struct em28xx *dev)
365 {
366 int ret;
367 u8 input;
368
369 if (dev->board.is_em2800) {
370 if (dev->ctl_ainput == EM28XX_AMUX_VIDEO)
371 input = EM2800_AUDIO_SRC_TUNER;
372 else
373 input = EM2800_AUDIO_SRC_LINE;
374
375 ret = em28xx_write_regs(dev, EM2800_R08_AUDIOSRC, &input, 1);
376 if (ret < 0)
377 return ret;
378 }
379
380 if (dev->board.has_msp34xx)
381 input = EM28XX_AUDIO_SRC_TUNER;
382 else {
383 switch (dev->ctl_ainput) {
384 case EM28XX_AMUX_VIDEO:
385 input = EM28XX_AUDIO_SRC_TUNER;
386 break;
387 default:
388 input = EM28XX_AUDIO_SRC_LINE;
389 break;
390 }
391 }
392
393 if (dev->board.mute_gpio && dev->mute)
394 em28xx_gpio_set(dev, dev->board.mute_gpio);
395 else
396 em28xx_gpio_set(dev, INPUT(dev->ctl_input)->gpio);
397
398 ret = em28xx_write_reg_bits(dev, EM28XX_R0E_AUDIOSRC, input, 0xc0);
399 if (ret < 0)
400 return ret;
401 msleep(5);
402
403 switch (dev->audio_mode.ac97) {
404 case EM28XX_NO_AC97:
405 break;
406 default:
407 ret = set_ac97_input(dev);
408 }
409
410 return ret;
411 }
412
413 struct em28xx_vol_otable {
414 enum em28xx_aout mux;
415 u8 reg;
416 };
417
418 static const struct em28xx_vol_otable outputs[] = {
419 { EM28XX_AOUT_MASTER, AC97_MASTER },
420 { EM28XX_AOUT_LINE, AC97_HEADPHONE },
421 { EM28XX_AOUT_MONO, AC97_MASTER_MONO },
422 { EM28XX_AOUT_LFE, AC97_CENTER_LFE_MASTER },
423 { EM28XX_AOUT_SURR, AC97_SURROUND_MASTER },
424 };
425
426 int em28xx_audio_analog_set(struct em28xx *dev)
427 {
428 int ret, i;
429 u8 xclk;
430
431 if (!dev->audio_mode.has_audio)
432 return 0;
433
434 /* It is assumed that all devices use master volume for output.
435 It would be possible to use also line output.
436 */
437 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
438 /* Mute all outputs */
439 for (i = 0; i < ARRAY_SIZE(outputs); i++) {
440 ret = em28xx_write_ac97(dev, outputs[i].reg, 0x8000);
441 if (ret < 0)
442 em28xx_warn("couldn't setup AC97 register %d\n",
443 outputs[i].reg);
444 }
445 }
446
447 xclk = dev->board.xclk & 0x7f;
448 if (!dev->mute)
449 xclk |= EM28XX_XCLK_AUDIO_UNMUTE;
450
451 ret = em28xx_write_reg(dev, EM28XX_R0F_XCLK, xclk);
452 if (ret < 0)
453 return ret;
454 msleep(10);
455
456 /* Selects the proper audio input */
457 ret = em28xx_set_audio_source(dev);
458
459 /* Sets volume */
460 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
461 int vol;
462
463 em28xx_write_ac97(dev, AC97_POWERDOWN, 0x4200);
464 em28xx_write_ac97(dev, AC97_EXTENDED_STATUS, 0x0031);
465 em28xx_write_ac97(dev, AC97_PCM_LR_ADC_RATE, 0xbb80);
466
467 /* LSB: left channel - both channels with the same level */
468 vol = (0x1f - dev->volume) | ((0x1f - dev->volume) << 8);
469
470 /* Mute device, if needed */
471 if (dev->mute)
472 vol |= 0x8000;
473
474 /* Sets volume */
475 for (i = 0; i < ARRAY_SIZE(outputs); i++) {
476 if (dev->ctl_aoutput & outputs[i].mux)
477 ret = em28xx_write_ac97(dev, outputs[i].reg,
478 vol);
479 if (ret < 0)
480 em28xx_warn("couldn't setup AC97 register %d\n",
481 outputs[i].reg);
482 }
483
484 if (dev->ctl_aoutput & EM28XX_AOUT_PCM_IN) {
485 int sel = ac97_return_record_select(dev->ctl_aoutput);
486
487 /* Use the same input for both left and right
488 channels */
489 sel |= (sel << 8);
490
491 em28xx_write_ac97(dev, AC97_REC_SEL, sel);
492 }
493 }
494
495 return ret;
496 }
497 EXPORT_SYMBOL_GPL(em28xx_audio_analog_set);
498
499 int em28xx_audio_setup(struct em28xx *dev)
500 {
501 int vid1, vid2, feat, cfg;
502 u32 vid;
503
504 if (dev->chip_id == CHIP_ID_EM2870 || dev->chip_id == CHIP_ID_EM2874
505 || dev->chip_id == CHIP_ID_EM28174) {
506 /* Digital only device - don't load any alsa module */
507 dev->audio_mode.has_audio = false;
508 dev->has_audio_class = false;
509 dev->has_alsa_audio = false;
510 return 0;
511 }
512
513 dev->audio_mode.has_audio = true;
514
515 /* See how this device is configured */
516 cfg = em28xx_read_reg(dev, EM28XX_R00_CHIPCFG);
517 em28xx_info("Config register raw data: 0x%02x\n", cfg);
518 if (cfg < 0) {
519 /* Register read error? */
520 cfg = EM28XX_CHIPCFG_AC97; /* Be conservative */
521 } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) == 0x00) {
522 /* The device doesn't have vendor audio at all */
523 dev->has_alsa_audio = false;
524 dev->audio_mode.has_audio = false;
525 return 0;
526 } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
527 EM28XX_CHIPCFG_I2S_3_SAMPRATES) {
528 em28xx_info("I2S Audio (3 sample rates)\n");
529 dev->audio_mode.i2s_3rates = 1;
530 } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
531 EM28XX_CHIPCFG_I2S_5_SAMPRATES) {
532 em28xx_info("I2S Audio (5 sample rates)\n");
533 dev->audio_mode.i2s_5rates = 1;
534 }
535
536 if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) != EM28XX_CHIPCFG_AC97) {
537 /* Skip the code that does AC97 vendor detection */
538 dev->audio_mode.ac97 = EM28XX_NO_AC97;
539 goto init_audio;
540 }
541
542 dev->audio_mode.ac97 = EM28XX_AC97_OTHER;
543
544 vid1 = em28xx_read_ac97(dev, AC97_VENDOR_ID1);
545 if (vid1 < 0) {
546 /*
547 * Device likely doesn't support AC97
548 * Note: (some) em2800 devices without eeprom reports 0x91 on
549 * CHIPCFG register, even not having an AC97 chip
550 */
551 em28xx_warn("AC97 chip type couldn't be determined\n");
552 dev->audio_mode.ac97 = EM28XX_NO_AC97;
553 dev->has_alsa_audio = false;
554 dev->audio_mode.has_audio = false;
555 goto init_audio;
556 }
557
558 vid2 = em28xx_read_ac97(dev, AC97_VENDOR_ID2);
559 if (vid2 < 0)
560 goto init_audio;
561
562 vid = vid1 << 16 | vid2;
563
564 dev->audio_mode.ac97_vendor_id = vid;
565 em28xx_warn("AC97 vendor ID = 0x%08x\n", vid);
566
567 feat = em28xx_read_ac97(dev, AC97_RESET);
568 if (feat < 0)
569 goto init_audio;
570
571 dev->audio_mode.ac97_feat = feat;
572 em28xx_warn("AC97 features = 0x%04x\n", feat);
573
574 /* Try to identify what audio processor we have */
575 if (((vid == 0xffffffff) || (vid == 0x83847650)) && (feat == 0x6a90))
576 dev->audio_mode.ac97 = EM28XX_AC97_EM202;
577 else if ((vid >> 8) == 0x838476)
578 dev->audio_mode.ac97 = EM28XX_AC97_SIGMATEL;
579
580 init_audio:
581 /* Reports detected AC97 processor */
582 switch (dev->audio_mode.ac97) {
583 case EM28XX_NO_AC97:
584 em28xx_info("No AC97 audio processor\n");
585 break;
586 case EM28XX_AC97_EM202:
587 em28xx_info("Empia 202 AC97 audio processor detected\n");
588 break;
589 case EM28XX_AC97_SIGMATEL:
590 em28xx_info("Sigmatel audio processor detected(stac 97%02x)\n",
591 dev->audio_mode.ac97_vendor_id & 0xff);
592 break;
593 case EM28XX_AC97_OTHER:
594 em28xx_warn("Unknown AC97 audio processor detected!\n");
595 break;
596 default:
597 break;
598 }
599
600 return em28xx_audio_analog_set(dev);
601 }
602 EXPORT_SYMBOL_GPL(em28xx_audio_setup);
603
604 int em28xx_colorlevels_set_default(struct em28xx *dev)
605 {
606 em28xx_write_reg(dev, EM28XX_R20_YGAIN, 0x10); /* contrast */
607 em28xx_write_reg(dev, EM28XX_R21_YOFFSET, 0x00); /* brightness */
608 em28xx_write_reg(dev, EM28XX_R22_UVGAIN, 0x10); /* saturation */
609 em28xx_write_reg(dev, EM28XX_R23_UOFFSET, 0x00);
610 em28xx_write_reg(dev, EM28XX_R24_VOFFSET, 0x00);
611 em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, 0x00);
612
613 em28xx_write_reg(dev, EM28XX_R14_GAMMA, 0x20);
614 em28xx_write_reg(dev, EM28XX_R15_RGAIN, 0x20);
615 em28xx_write_reg(dev, EM28XX_R16_GGAIN, 0x20);
616 em28xx_write_reg(dev, EM28XX_R17_BGAIN, 0x20);
617 em28xx_write_reg(dev, EM28XX_R18_ROFFSET, 0x00);
618 em28xx_write_reg(dev, EM28XX_R19_GOFFSET, 0x00);
619 return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00);
620 }
621
622 int em28xx_capture_start(struct em28xx *dev, int start)
623 {
624 int rc;
625
626 if (dev->chip_id == CHIP_ID_EM2874 ||
627 dev->chip_id == CHIP_ID_EM2884 ||
628 dev->chip_id == CHIP_ID_EM28174) {
629 /* The Transport Stream Enable Register moved in em2874 */
630 if (!start) {
631 rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
632 0x00,
633 EM2874_TS1_CAPTURE_ENABLE);
634 return rc;
635 }
636
637 /* Enable Transport Stream */
638 rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
639 EM2874_TS1_CAPTURE_ENABLE,
640 EM2874_TS1_CAPTURE_ENABLE);
641 return rc;
642 }
643
644
645 /* FIXME: which is the best order? */
646 /* video registers are sampled by VREF */
647 rc = em28xx_write_reg_bits(dev, EM28XX_R0C_USBSUSP,
648 start ? 0x10 : 0x00, 0x10);
649 if (rc < 0)
650 return rc;
651
652 if (!start) {
653 /* disable video capture */
654 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x27);
655 return rc;
656 }
657
658 if (dev->board.is_webcam)
659 rc = em28xx_write_reg(dev, 0x13, 0x0c);
660
661 /* enable video capture */
662 rc = em28xx_write_reg(dev, 0x48, 0x00);
663
664 if (dev->mode == EM28XX_ANALOG_MODE)
665 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x67);
666 else
667 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x37);
668
669 msleep(6);
670
671 return rc;
672 }
673
674 int em28xx_vbi_supported(struct em28xx *dev)
675 {
676 /* Modprobe option to manually disable */
677 if (disable_vbi == 1)
678 return 0;
679
680 if (dev->chip_id == CHIP_ID_EM2860 ||
681 dev->chip_id == CHIP_ID_EM2883)
682 return 1;
683
684 /* Version of em28xx that does not support VBI */
685 return 0;
686 }
687
688 int em28xx_set_outfmt(struct em28xx *dev)
689 {
690 int ret;
691 u8 vinctrl;
692
693 ret = em28xx_write_reg_bits(dev, EM28XX_R27_OUTFMT,
694 dev->format->reg | 0x20, 0xff);
695 if (ret < 0)
696 return ret;
697
698 ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, dev->vinmode);
699 if (ret < 0)
700 return ret;
701
702 vinctrl = dev->vinctl;
703 if (em28xx_vbi_supported(dev) == 1) {
704 vinctrl |= EM28XX_VINCTRL_VBI_RAW;
705 em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
706 em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, dev->vbi_width/4);
707 em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, dev->vbi_height);
708 if (dev->norm & V4L2_STD_525_60) {
709 /* NTSC */
710 em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
711 } else if (dev->norm & V4L2_STD_625_50) {
712 /* PAL */
713 em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07);
714 }
715 }
716
717 return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl);
718 }
719
720 static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
721 u8 ymin, u8 ymax)
722 {
723 em28xx_coredbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
724 xmin, ymin, xmax, ymax);
725
726 em28xx_write_regs(dev, EM28XX_R28_XMIN, &xmin, 1);
727 em28xx_write_regs(dev, EM28XX_R29_XMAX, &xmax, 1);
728 em28xx_write_regs(dev, EM28XX_R2A_YMIN, &ymin, 1);
729 return em28xx_write_regs(dev, EM28XX_R2B_YMAX, &ymax, 1);
730 }
731
732 static int em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
733 u16 width, u16 height)
734 {
735 u8 cwidth = width;
736 u8 cheight = height;
737 u8 overflow = (height >> 7 & 0x02) | (width >> 8 & 0x01);
738
739 em28xx_coredbg("em28xx Area Set: (%d,%d)\n",
740 (width | (overflow & 2) << 7),
741 (height | (overflow & 1) << 8));
742
743 em28xx_write_regs(dev, EM28XX_R1C_HSTART, &hstart, 1);
744 em28xx_write_regs(dev, EM28XX_R1D_VSTART, &vstart, 1);
745 em28xx_write_regs(dev, EM28XX_R1E_CWIDTH, &cwidth, 1);
746 em28xx_write_regs(dev, EM28XX_R1F_CHEIGHT, &cheight, 1);
747 return em28xx_write_regs(dev, EM28XX_R1B_OFLOW, &overflow, 1);
748 }
749
750 static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
751 {
752 u8 mode;
753 /* the em2800 scaler only supports scaling down to 50% */
754
755 if (dev->board.is_em2800) {
756 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
757 } else {
758 u8 buf[2];
759
760 buf[0] = h;
761 buf[1] = h >> 8;
762 em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2);
763
764 buf[0] = v;
765 buf[1] = v >> 8;
766 em28xx_write_regs(dev, EM28XX_R32_VSCALELOW, (char *)buf, 2);
767 /* it seems that both H and V scalers must be active
768 to work correctly */
769 mode = (h || v) ? 0x30 : 0x00;
770 }
771 return em28xx_write_reg_bits(dev, EM28XX_R26_COMPR, mode, 0x30);
772 }
773
774 /* FIXME: this only function read values from dev */
775 int em28xx_resolution_set(struct em28xx *dev)
776 {
777 int width, height;
778 width = norm_maxw(dev);
779 height = norm_maxh(dev);
780
781 /* Properly setup VBI */
782 dev->vbi_width = 720;
783 if (dev->norm & V4L2_STD_525_60)
784 dev->vbi_height = 12;
785 else
786 dev->vbi_height = 18;
787
788 em28xx_set_outfmt(dev);
789
790 em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2);
791
792 /* If we don't set the start position to 2 in VBI mode, we end up
793 with line 20/21 being YUYV encoded instead of being in 8-bit
794 greyscale. The core of the issue is that line 21 (and line 23 for
795 PAL WSS) are inside of active video region, and as a result they
796 get the pixelformatting associated with that area. So by cropping
797 it out, we end up with the same format as the rest of the VBI
798 region */
799 if (em28xx_vbi_supported(dev) == 1)
800 em28xx_capture_area_set(dev, 0, 2, width >> 2, height >> 2);
801 else
802 em28xx_capture_area_set(dev, 0, 0, width >> 2, height >> 2);
803
804 return em28xx_scaler_set(dev, dev->hscale, dev->vscale);
805 }
806
807 int em28xx_set_alternate(struct em28xx *dev)
808 {
809 int errCode, prev_alt = dev->alt;
810 int i;
811 unsigned int min_pkt_size = dev->width * 2 + 4;
812
813 /*
814 * alt = 0 is used only for control messages, so, only values
815 * greater than 0 can be used for streaming.
816 */
817 if (alt && alt < dev->num_alt) {
818 em28xx_coredbg("alternate forced to %d\n", dev->alt);
819 dev->alt = alt;
820 goto set_alt;
821 }
822
823 /* When image size is bigger than a certain value,
824 the frame size should be increased, otherwise, only
825 green screen will be received.
826 */
827 if (dev->width * 2 * dev->height > 720 * 240 * 2)
828 min_pkt_size *= 2;
829
830 for (i = 0; i < dev->num_alt; i++) {
831 /* stop when the selected alt setting offers enough bandwidth */
832 if (dev->alt_max_pkt_size[i] >= min_pkt_size) {
833 dev->alt = i;
834 break;
835 /* otherwise make sure that we end up with the maximum bandwidth
836 because the min_pkt_size equation might be wrong...
837 */
838 } else if (dev->alt_max_pkt_size[i] >
839 dev->alt_max_pkt_size[dev->alt])
840 dev->alt = i;
841 }
842
843 set_alt:
844 if (dev->alt != prev_alt) {
845 em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
846 min_pkt_size, dev->alt);
847 dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt];
848 em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u\n",
849 dev->alt, dev->max_pkt_size);
850 errCode = usb_set_interface(dev->udev, 0, dev->alt);
851 if (errCode < 0) {
852 em28xx_errdev("cannot change alternate number to %d (error=%i)\n",
853 dev->alt, errCode);
854 return errCode;
855 }
856 }
857 return 0;
858 }
859
860 int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio)
861 {
862 int rc = 0;
863
864 if (!gpio)
865 return rc;
866
867 if (dev->mode != EM28XX_SUSPEND) {
868 em28xx_write_reg(dev, 0x48, 0x00);
869 if (dev->mode == EM28XX_ANALOG_MODE)
870 em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x67);
871 else
872 em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x37);
873 msleep(6);
874 }
875
876 /* Send GPIO reset sequences specified at board entry */
877 while (gpio->sleep >= 0) {
878 if (gpio->reg >= 0) {
879 rc = em28xx_write_reg_bits(dev,
880 gpio->reg,
881 gpio->val,
882 gpio->mask);
883 if (rc < 0)
884 return rc;
885 }
886 if (gpio->sleep > 0)
887 msleep(gpio->sleep);
888
889 gpio++;
890 }
891 return rc;
892 }
893 EXPORT_SYMBOL_GPL(em28xx_gpio_set);
894
895 int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode)
896 {
897 if (dev->mode == set_mode)
898 return 0;
899
900 if (set_mode == EM28XX_SUSPEND) {
901 dev->mode = set_mode;
902
903 /* FIXME: add suspend support for ac97 */
904
905 return em28xx_gpio_set(dev, dev->board.suspend_gpio);
906 }
907
908 dev->mode = set_mode;
909
910 if (dev->mode == EM28XX_DIGITAL_MODE)
911 return em28xx_gpio_set(dev, dev->board.dvb_gpio);
912 else
913 return em28xx_gpio_set(dev, INPUT(dev->ctl_input)->gpio);
914 }
915 EXPORT_SYMBOL_GPL(em28xx_set_mode);
916
917 /* ------------------------------------------------------------------
918 URB control
919 ------------------------------------------------------------------*/
920
921 /*
922 * IRQ callback, called by URB callback
923 */
924 static void em28xx_irq_callback(struct urb *urb)
925 {
926 struct em28xx *dev = urb->context;
927 int i;
928
929 switch (urb->status) {
930 case 0: /* success */
931 case -ETIMEDOUT: /* NAK */
932 break;
933 case -ECONNRESET: /* kill */
934 case -ENOENT:
935 case -ESHUTDOWN:
936 return;
937 default: /* error */
938 em28xx_isocdbg("urb completition error %d.\n", urb->status);
939 break;
940 }
941
942 /* Copy data from URB */
943 spin_lock(&dev->slock);
944 dev->isoc_ctl.isoc_copy(dev, urb);
945 spin_unlock(&dev->slock);
946
947 /* Reset urb buffers */
948 for (i = 0; i < urb->number_of_packets; i++) {
949 urb->iso_frame_desc[i].status = 0;
950 urb->iso_frame_desc[i].actual_length = 0;
951 }
952 urb->status = 0;
953
954 urb->status = usb_submit_urb(urb, GFP_ATOMIC);
955 if (urb->status) {
956 em28xx_isocdbg("urb resubmit failed (error=%i)\n",
957 urb->status);
958 }
959 }
960
961 /*
962 * Stop and Deallocate URBs
963 */
964 void em28xx_uninit_isoc(struct em28xx *dev, enum em28xx_mode mode)
965 {
966 struct urb *urb;
967 struct em28xx_usb_bufs *isoc_bufs;
968 int i;
969
970 em28xx_isocdbg("em28xx: called em28xx_uninit_isoc in mode %d\n", mode);
971
972 if (mode == EM28XX_DIGITAL_MODE)
973 isoc_bufs = &dev->isoc_ctl.digital_bufs;
974 else
975 isoc_bufs = &dev->isoc_ctl.analog_bufs;
976
977 for (i = 0; i < isoc_bufs->num_bufs; i++) {
978 urb = isoc_bufs->urb[i];
979 if (urb) {
980 if (!irqs_disabled())
981 usb_kill_urb(urb);
982 else
983 usb_unlink_urb(urb);
984
985 if (isoc_bufs->transfer_buffer[i]) {
986 usb_free_coherent(dev->udev,
987 urb->transfer_buffer_length,
988 isoc_bufs->transfer_buffer[i],
989 urb->transfer_dma);
990 }
991 usb_free_urb(urb);
992 isoc_bufs->urb[i] = NULL;
993 }
994 isoc_bufs->transfer_buffer[i] = NULL;
995 }
996
997 kfree(isoc_bufs->urb);
998 kfree(isoc_bufs->transfer_buffer);
999
1000 isoc_bufs->urb = NULL;
1001 isoc_bufs->transfer_buffer = NULL;
1002 isoc_bufs->num_bufs = 0;
1003
1004 em28xx_capture_start(dev, 0);
1005 }
1006 EXPORT_SYMBOL_GPL(em28xx_uninit_isoc);
1007
1008 /*
1009 * Stop URBs
1010 */
1011 void em28xx_stop_urbs(struct em28xx *dev)
1012 {
1013 int i;
1014 struct urb *urb;
1015 struct em28xx_usb_bufs *isoc_bufs = &dev->isoc_ctl.digital_bufs;
1016
1017 em28xx_isocdbg("em28xx: called em28xx_stop_urbs\n");
1018
1019 for (i = 0; i < isoc_bufs->num_bufs; i++) {
1020 urb = isoc_bufs->urb[i];
1021 if (urb) {
1022 if (!irqs_disabled())
1023 usb_kill_urb(urb);
1024 else
1025 usb_unlink_urb(urb);
1026 }
1027 }
1028
1029 em28xx_capture_start(dev, 0);
1030 }
1031 EXPORT_SYMBOL_GPL(em28xx_stop_urbs);
1032
1033 /*
1034 * Allocate URBs
1035 */
1036 int em28xx_alloc_isoc(struct em28xx *dev, enum em28xx_mode mode,
1037 int num_packets, int num_bufs, int max_pkt_size)
1038 {
1039 struct em28xx_usb_bufs *isoc_bufs;
1040 int i;
1041 int sb_size, pipe;
1042 struct urb *urb;
1043 int j, k;
1044
1045 em28xx_isocdbg("em28xx: called em28xx_alloc_isoc in mode %d\n", mode);
1046
1047 if (mode == EM28XX_DIGITAL_MODE)
1048 isoc_bufs = &dev->isoc_ctl.digital_bufs;
1049 else
1050 isoc_bufs = &dev->isoc_ctl.analog_bufs;
1051
1052 /* De-allocates all pending stuff */
1053 em28xx_uninit_isoc(dev, mode);
1054
1055 isoc_bufs->num_bufs = num_bufs;
1056
1057 isoc_bufs->urb = kzalloc(sizeof(void *)*num_bufs, GFP_KERNEL);
1058 if (!isoc_bufs->urb) {
1059 em28xx_errdev("cannot alloc memory for usb buffers\n");
1060 return -ENOMEM;
1061 }
1062
1063 isoc_bufs->transfer_buffer = kzalloc(sizeof(void *)*num_bufs,
1064 GFP_KERNEL);
1065 if (!isoc_bufs->transfer_buffer) {
1066 em28xx_errdev("cannot allocate memory for usb transfer\n");
1067 kfree(isoc_bufs->urb);
1068 return -ENOMEM;
1069 }
1070
1071 isoc_bufs->max_pkt_size = max_pkt_size;
1072 isoc_bufs->num_packets = num_packets;
1073 dev->isoc_ctl.vid_buf = NULL;
1074 dev->isoc_ctl.vbi_buf = NULL;
1075
1076 sb_size = isoc_bufs->num_packets * isoc_bufs->max_pkt_size;
1077
1078 /* allocate urbs and transfer buffers */
1079 for (i = 0; i < isoc_bufs->num_bufs; i++) {
1080 urb = usb_alloc_urb(isoc_bufs->num_packets, GFP_KERNEL);
1081 if (!urb) {
1082 em28xx_err("cannot alloc isoc_ctl.urb %i\n", i);
1083 em28xx_uninit_isoc(dev, mode);
1084 return -ENOMEM;
1085 }
1086 isoc_bufs->urb[i] = urb;
1087
1088 isoc_bufs->transfer_buffer[i] = usb_alloc_coherent(dev->udev,
1089 sb_size, GFP_KERNEL, &urb->transfer_dma);
1090 if (!isoc_bufs->transfer_buffer[i]) {
1091 em28xx_err("unable to allocate %i bytes for transfer"
1092 " buffer %i%s\n",
1093 sb_size, i,
1094 in_interrupt() ? " while in int" : "");
1095 em28xx_uninit_isoc(dev, mode);
1096 return -ENOMEM;
1097 }
1098 memset(isoc_bufs->transfer_buffer[i], 0, sb_size);
1099
1100 /* FIXME: this is a hack - should be
1101 'desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK'
1102 should also be using 'desc.bInterval'
1103 */
1104 pipe = usb_rcvisocpipe(dev->udev,
1105 mode == EM28XX_ANALOG_MODE ?
1106 EM28XX_EP_ANALOG : EM28XX_EP_DIGITAL);
1107
1108 usb_fill_int_urb(urb, dev->udev, pipe,
1109 isoc_bufs->transfer_buffer[i], sb_size,
1110 em28xx_irq_callback, dev, 1);
1111
1112 urb->number_of_packets = isoc_bufs->num_packets;
1113 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
1114
1115 k = 0;
1116 for (j = 0; j < isoc_bufs->num_packets; j++) {
1117 urb->iso_frame_desc[j].offset = k;
1118 urb->iso_frame_desc[j].length =
1119 isoc_bufs->max_pkt_size;
1120 k += isoc_bufs->max_pkt_size;
1121 }
1122 }
1123
1124 return 0;
1125 }
1126 EXPORT_SYMBOL_GPL(em28xx_alloc_isoc);
1127
1128 /*
1129 * Allocate URBs and start IRQ
1130 */
1131 int em28xx_init_isoc(struct em28xx *dev, enum em28xx_mode mode,
1132 int num_packets, int num_bufs, int max_pkt_size,
1133 int (*isoc_copy) (struct em28xx *dev, struct urb *urb))
1134 {
1135 struct em28xx_dmaqueue *dma_q = &dev->vidq;
1136 struct em28xx_dmaqueue *vbi_dma_q = &dev->vbiq;
1137 struct em28xx_usb_bufs *isoc_bufs;
1138 int i;
1139 int rc;
1140 int alloc;
1141
1142 em28xx_isocdbg("em28xx: called em28xx_init_isoc in mode %d\n", mode);
1143
1144 dev->isoc_ctl.isoc_copy = isoc_copy;
1145
1146 if (mode == EM28XX_DIGITAL_MODE) {
1147 isoc_bufs = &dev->isoc_ctl.digital_bufs;
1148 /* no need to free/alloc isoc buffers in digital mode */
1149 alloc = 0;
1150 } else {
1151 isoc_bufs = &dev->isoc_ctl.analog_bufs;
1152 alloc = 1;
1153 }
1154
1155 if (alloc) {
1156 rc = em28xx_alloc_isoc(dev, mode, num_packets,
1157 num_bufs, max_pkt_size);
1158 if (rc)
1159 return rc;
1160 }
1161
1162 init_waitqueue_head(&dma_q->wq);
1163 init_waitqueue_head(&vbi_dma_q->wq);
1164
1165 em28xx_capture_start(dev, 1);
1166
1167 /* submit urbs and enables IRQ */
1168 for (i = 0; i < isoc_bufs->num_bufs; i++) {
1169 rc = usb_submit_urb(isoc_bufs->urb[i], GFP_ATOMIC);
1170 if (rc) {
1171 em28xx_err("submit of urb %i failed (error=%i)\n", i,
1172 rc);
1173 em28xx_uninit_isoc(dev, mode);
1174 return rc;
1175 }
1176 }
1177
1178 return 0;
1179 }
1180 EXPORT_SYMBOL_GPL(em28xx_init_isoc);
1181
1182 /*
1183 * em28xx_wake_i2c()
1184 * configure i2c attached devices
1185 */
1186 void em28xx_wake_i2c(struct em28xx *dev)
1187 {
1188 v4l2_device_call_all(&dev->v4l2_dev, 0, core, reset, 0);
1189 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
1190 INPUT(dev->ctl_input)->vmux, 0, 0);
1191 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
1192 }
1193
1194 /*
1195 * Device control list
1196 */
1197
1198 static LIST_HEAD(em28xx_devlist);
1199 static DEFINE_MUTEX(em28xx_devlist_mutex);
1200
1201 /*
1202 * Extension interface
1203 */
1204
1205 static LIST_HEAD(em28xx_extension_devlist);
1206
1207 int em28xx_register_extension(struct em28xx_ops *ops)
1208 {
1209 struct em28xx *dev = NULL;
1210
1211 mutex_lock(&em28xx_devlist_mutex);
1212 list_add_tail(&ops->next, &em28xx_extension_devlist);
1213 list_for_each_entry(dev, &em28xx_devlist, devlist) {
1214 ops->init(dev);
1215 }
1216 mutex_unlock(&em28xx_devlist_mutex);
1217 printk(KERN_INFO "Em28xx: Initialized (%s) extension\n", ops->name);
1218 return 0;
1219 }
1220 EXPORT_SYMBOL(em28xx_register_extension);
1221
1222 void em28xx_unregister_extension(struct em28xx_ops *ops)
1223 {
1224 struct em28xx *dev = NULL;
1225
1226 mutex_lock(&em28xx_devlist_mutex);
1227 list_for_each_entry(dev, &em28xx_devlist, devlist) {
1228 ops->fini(dev);
1229 }
1230 list_del(&ops->next);
1231 mutex_unlock(&em28xx_devlist_mutex);
1232 printk(KERN_INFO "Em28xx: Removed (%s) extension\n", ops->name);
1233 }
1234 EXPORT_SYMBOL(em28xx_unregister_extension);
1235
1236 void em28xx_init_extension(struct em28xx *dev)
1237 {
1238 const struct em28xx_ops *ops = NULL;
1239
1240 mutex_lock(&em28xx_devlist_mutex);
1241 list_add_tail(&dev->devlist, &em28xx_devlist);
1242 list_for_each_entry(ops, &em28xx_extension_devlist, next) {
1243 if (ops->init)
1244 ops->init(dev);
1245 }
1246 mutex_unlock(&em28xx_devlist_mutex);
1247 }
1248
1249 void em28xx_close_extension(struct em28xx *dev)
1250 {
1251 const struct em28xx_ops *ops = NULL;
1252
1253 mutex_lock(&em28xx_devlist_mutex);
1254 list_for_each_entry(ops, &em28xx_extension_devlist, next) {
1255 if (ops->fini)
1256 ops->fini(dev);
1257 }
1258 list_del(&dev->devlist);
1259 mutex_unlock(&em28xx_devlist_mutex);
1260 }