aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/em28xx/em28xx-core.c
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-22 10:38:37 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-22 10:38:37 -0500
commitfcc9d2e5a6c89d22b8b773a64fb4ad21ac318446 (patch)
treea57612d1888735a2ec7972891b68c1ac5ec8faea /drivers/media/video/em28xx/em28xx-core.c
parent8dea78da5cee153b8af9c07a2745f6c55057fe12 (diff)
Added missing tegra files.HEADmaster
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-core.c')
-rw-r--r--drivers/media/video/em28xx/em28xx-core.c1266
1 files changed, 1266 insertions, 0 deletions
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c
new file mode 100644
index 00000000000..57b1b5c6d88
--- /dev/null
+++ b/drivers/media/video/em28xx/em28xx-core.c
@@ -0,0 +1,1266 @@
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 <media/v4l2-common.h>
31
32#include "em28xx.h"
33
34/* #define ENABLE_DEBUG_ISOC_FRAMES */
35
36static unsigned int core_debug;
37module_param(core_debug, int, 0644);
38MODULE_PARM_DESC(core_debug, "enable debug messages [core]");
39
40#define em28xx_coredbg(fmt, arg...) do {\
41 if (core_debug) \
42 printk(KERN_INFO "%s %s :"fmt, \
43 dev->name, __func__ , ##arg); } while (0)
44
45static unsigned int reg_debug;
46module_param(reg_debug, int, 0644);
47MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]");
48
49#define em28xx_regdbg(fmt, arg...) do {\
50 if (reg_debug) \
51 printk(KERN_INFO "%s %s :"fmt, \
52 dev->name, __func__ , ##arg); } while (0)
53
54static int alt;
55module_param(alt, int, 0644);
56MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
57
58static unsigned int disable_vbi;
59module_param(disable_vbi, int, 0644);
60MODULE_PARM_DESC(disable_vbi, "disable vbi support");
61
62/* FIXME */
63#define em28xx_isocdbg(fmt, arg...) do {\
64 if (core_debug) \
65 printk(KERN_INFO "%s %s :"fmt, \
66 dev->name, __func__ , ##arg); } while (0)
67
68/*
69 * em28xx_read_reg_req()
70 * reads data from the usb device specifying bRequest
71 */
72int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
73 char *buf, int len)
74{
75 int ret;
76 int pipe = usb_rcvctrlpipe(dev->udev, 0);
77
78 if (dev->state & DEV_DISCONNECTED)
79 return -ENODEV;
80
81 if (len > URB_MAX_CTRL_SIZE)
82 return -EINVAL;
83
84 if (reg_debug) {
85 printk(KERN_DEBUG "(pipe 0x%08x): "
86 "IN: %02x %02x %02x %02x %02x %02x %02x %02x ",
87 pipe,
88 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
89 req, 0, 0,
90 reg & 0xff, reg >> 8,
91 len & 0xff, len >> 8);
92 }
93
94 mutex_lock(&dev->ctrl_urb_lock);
95 ret = usb_control_msg(dev->udev, pipe, req,
96 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
97 0x0000, reg, dev->urb_buf, len, HZ);
98 if (ret < 0) {
99 if (reg_debug)
100 printk(" failed!\n");
101 mutex_unlock(&dev->ctrl_urb_lock);
102 return ret;
103 }
104
105 if (len)
106 memcpy(buf, dev->urb_buf, len);
107
108 mutex_unlock(&dev->ctrl_urb_lock);
109
110 if (reg_debug) {
111 int byte;
112
113 printk("<<<");
114 for (byte = 0; byte < len; byte++)
115 printk(" %02x", (unsigned char)buf[byte]);
116 printk("\n");
117 }
118
119 return ret;
120}
121
122/*
123 * em28xx_read_reg_req()
124 * reads data from the usb device specifying bRequest
125 */
126int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg)
127{
128 int ret;
129 u8 val;
130
131 ret = em28xx_read_reg_req_len(dev, req, reg, &val, 1);
132 if (ret < 0)
133 return ret;
134
135 return val;
136}
137
138int em28xx_read_reg(struct em28xx *dev, u16 reg)
139{
140 return em28xx_read_reg_req(dev, USB_REQ_GET_STATUS, reg);
141}
142
143/*
144 * em28xx_write_regs_req()
145 * sends data to the usb device, specifying bRequest
146 */
147int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
148 int len)
149{
150 int ret;
151 int pipe = usb_sndctrlpipe(dev->udev, 0);
152
153 if (dev->state & DEV_DISCONNECTED)
154 return -ENODEV;
155
156 if ((len < 1) || (len > URB_MAX_CTRL_SIZE))
157 return -EINVAL;
158
159 if (reg_debug) {
160 int byte;
161
162 printk(KERN_DEBUG "(pipe 0x%08x): "
163 "OUT: %02x %02x %02x %02x %02x %02x %02x %02x >>>",
164 pipe,
165 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
166 req, 0, 0,
167 reg & 0xff, reg >> 8,
168 len & 0xff, len >> 8);
169
170 for (byte = 0; byte < len; byte++)
171 printk(" %02x", (unsigned char)buf[byte]);
172 printk("\n");
173 }
174
175 mutex_lock(&dev->ctrl_urb_lock);
176 memcpy(dev->urb_buf, buf, len);
177 ret = usb_control_msg(dev->udev, pipe, req,
178 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
179 0x0000, reg, dev->urb_buf, len, HZ);
180 mutex_unlock(&dev->ctrl_urb_lock);
181
182 if (dev->wait_after_write)
183 msleep(dev->wait_after_write);
184
185 return ret;
186}
187
188int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len)
189{
190 int rc;
191
192 rc = em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len);
193
194 /* Stores GPO/GPIO values at the cache, if changed
195 Only write values should be stored, since input on a GPIO
196 register will return the input bits.
197 Not sure what happens on reading GPO register.
198 */
199 if (rc >= 0) {
200 if (reg == dev->reg_gpo_num)
201 dev->reg_gpo = buf[0];
202 else if (reg == dev->reg_gpio_num)
203 dev->reg_gpio = buf[0];
204 }
205
206 return rc;
207}
208
209/* Write a single register */
210int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val)
211{
212 return em28xx_write_regs(dev, reg, &val, 1);
213}
214EXPORT_SYMBOL_GPL(em28xx_write_reg);
215
216/*
217 * em28xx_write_reg_bits()
218 * sets only some bits (specified by bitmask) of a register, by first reading
219 * the actual value
220 */
221int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
222 u8 bitmask)
223{
224 int oldval;
225 u8 newval;
226
227 /* Uses cache for gpo/gpio registers */
228 if (reg == dev->reg_gpo_num)
229 oldval = dev->reg_gpo;
230 else if (reg == dev->reg_gpio_num)
231 oldval = dev->reg_gpio;
232 else
233 oldval = em28xx_read_reg(dev, reg);
234
235 if (oldval < 0)
236 return oldval;
237
238 newval = (((u8) oldval) & ~bitmask) | (val & bitmask);
239
240 return em28xx_write_regs(dev, reg, &newval, 1);
241}
242
243/*
244 * em28xx_is_ac97_ready()
245 * Checks if ac97 is ready
246 */
247static int em28xx_is_ac97_ready(struct em28xx *dev)
248{
249 int ret, i;
250
251 /* Wait up to 50 ms for AC97 command to complete */
252 for (i = 0; i < 10; i++, msleep(5)) {
253 ret = em28xx_read_reg(dev, EM28XX_R43_AC97BUSY);
254 if (ret < 0)
255 return ret;
256
257 if (!(ret & 0x01))
258 return 0;
259 }
260
261 em28xx_warn("AC97 command still being executed: not handled properly!\n");
262 return -EBUSY;
263}
264
265/*
266 * em28xx_read_ac97()
267 * write a 16 bit value to the specified AC97 address (LSB first!)
268 */
269int em28xx_read_ac97(struct em28xx *dev, u8 reg)
270{
271 int ret;
272 u8 addr = (reg & 0x7f) | 0x80;
273 u16 val;
274
275 ret = em28xx_is_ac97_ready(dev);
276 if (ret < 0)
277 return ret;
278
279 ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
280 if (ret < 0)
281 return ret;
282
283 ret = dev->em28xx_read_reg_req_len(dev, 0, EM28XX_R40_AC97LSB,
284 (u8 *)&val, sizeof(val));
285
286 if (ret < 0)
287 return ret;
288 return le16_to_cpu(val);
289}
290EXPORT_SYMBOL_GPL(em28xx_read_ac97);
291
292/*
293 * em28xx_write_ac97()
294 * write a 16 bit value to the specified AC97 address (LSB first!)
295 */
296int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val)
297{
298 int ret;
299 u8 addr = reg & 0x7f;
300 __le16 value;
301
302 value = cpu_to_le16(val);
303
304 ret = em28xx_is_ac97_ready(dev);
305 if (ret < 0)
306 return ret;
307
308 ret = em28xx_write_regs(dev, EM28XX_R40_AC97LSB, (u8 *) &value, 2);
309 if (ret < 0)
310 return ret;
311
312 ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
313 if (ret < 0)
314 return ret;
315
316 return 0;
317}
318EXPORT_SYMBOL_GPL(em28xx_write_ac97);
319
320struct em28xx_vol_itable {
321 enum em28xx_amux mux;
322 u8 reg;
323};
324
325static struct em28xx_vol_itable inputs[] = {
326 { EM28XX_AMUX_VIDEO, AC97_VIDEO_VOL },
327 { EM28XX_AMUX_LINE_IN, AC97_LINEIN_VOL },
328 { EM28XX_AMUX_PHONE, AC97_PHONE_VOL },
329 { EM28XX_AMUX_MIC, AC97_MIC_VOL },
330 { EM28XX_AMUX_CD, AC97_CD_VOL },
331 { EM28XX_AMUX_AUX, AC97_AUX_VOL },
332 { EM28XX_AMUX_PCM_OUT, AC97_PCM_OUT_VOL },
333};
334
335static int set_ac97_input(struct em28xx *dev)
336{
337 int ret, i;
338 enum em28xx_amux amux = dev->ctl_ainput;
339
340 /* EM28XX_AMUX_VIDEO2 is a special case used to indicate that
341 em28xx should point to LINE IN, while AC97 should use VIDEO
342 */
343 if (amux == EM28XX_AMUX_VIDEO2)
344 amux = EM28XX_AMUX_VIDEO;
345
346 /* Mute all entres but the one that were selected */
347 for (i = 0; i < ARRAY_SIZE(inputs); i++) {
348 if (amux == inputs[i].mux)
349 ret = em28xx_write_ac97(dev, inputs[i].reg, 0x0808);
350 else
351 ret = em28xx_write_ac97(dev, inputs[i].reg, 0x8000);
352
353 if (ret < 0)
354 em28xx_warn("couldn't setup AC97 register %d\n",
355 inputs[i].reg);
356 }
357 return 0;
358}
359
360static int em28xx_set_audio_source(struct em28xx *dev)
361{
362 int ret;
363 u8 input;
364
365 if (dev->board.is_em2800) {
366 if (dev->ctl_ainput == EM28XX_AMUX_VIDEO)
367 input = EM2800_AUDIO_SRC_TUNER;
368 else
369 input = EM2800_AUDIO_SRC_LINE;
370
371 ret = em28xx_write_regs(dev, EM2800_R08_AUDIOSRC, &input, 1);
372 if (ret < 0)
373 return ret;
374 }
375
376 if (dev->board.has_msp34xx)
377 input = EM28XX_AUDIO_SRC_TUNER;
378 else {
379 switch (dev->ctl_ainput) {
380 case EM28XX_AMUX_VIDEO:
381 input = EM28XX_AUDIO_SRC_TUNER;
382 break;
383 default:
384 input = EM28XX_AUDIO_SRC_LINE;
385 break;
386 }
387 }
388
389 if (dev->board.mute_gpio && dev->mute)
390 em28xx_gpio_set(dev, dev->board.mute_gpio);
391 else
392 em28xx_gpio_set(dev, INPUT(dev->ctl_input)->gpio);
393
394 ret = em28xx_write_reg_bits(dev, EM28XX_R0E_AUDIOSRC, input, 0xc0);
395 if (ret < 0)
396 return ret;
397 msleep(5);
398
399 switch (dev->audio_mode.ac97) {
400 case EM28XX_NO_AC97:
401 break;
402 default:
403 ret = set_ac97_input(dev);
404 }
405
406 return ret;
407}
408
409struct em28xx_vol_otable {
410 enum em28xx_aout mux;
411 u8 reg;
412};
413
414static const struct em28xx_vol_otable outputs[] = {
415 { EM28XX_AOUT_MASTER, AC97_MASTER_VOL },
416 { EM28XX_AOUT_LINE, AC97_LINE_LEVEL_VOL },
417 { EM28XX_AOUT_MONO, AC97_MASTER_MONO_VOL },
418 { EM28XX_AOUT_LFE, AC97_LFE_MASTER_VOL },
419 { EM28XX_AOUT_SURR, AC97_SURR_MASTER_VOL },
420};
421
422int em28xx_audio_analog_set(struct em28xx *dev)
423{
424 int ret, i;
425 u8 xclk;
426
427 if (!dev->audio_mode.has_audio)
428 return 0;
429
430 /* It is assumed that all devices use master volume for output.
431 It would be possible to use also line output.
432 */
433 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
434 /* Mute all outputs */
435 for (i = 0; i < ARRAY_SIZE(outputs); i++) {
436 ret = em28xx_write_ac97(dev, outputs[i].reg, 0x8000);
437 if (ret < 0)
438 em28xx_warn("couldn't setup AC97 register %d\n",
439 outputs[i].reg);
440 }
441 }
442
443 xclk = dev->board.xclk & 0x7f;
444 if (!dev->mute)
445 xclk |= EM28XX_XCLK_AUDIO_UNMUTE;
446
447 ret = em28xx_write_reg(dev, EM28XX_R0F_XCLK, xclk);
448 if (ret < 0)
449 return ret;
450 msleep(10);
451
452 /* Selects the proper audio input */
453 ret = em28xx_set_audio_source(dev);
454
455 /* Sets volume */
456 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
457 int vol;
458
459 em28xx_write_ac97(dev, AC97_POWER_DOWN_CTRL, 0x4200);
460 em28xx_write_ac97(dev, AC97_EXT_AUD_CTRL, 0x0031);
461 em28xx_write_ac97(dev, AC97_PCM_IN_SRATE, 0xbb80);
462
463 /* LSB: left channel - both channels with the same level */
464 vol = (0x1f - dev->volume) | ((0x1f - dev->volume) << 8);
465
466 /* Mute device, if needed */
467 if (dev->mute)
468 vol |= 0x8000;
469
470 /* Sets volume */
471 for (i = 0; i < ARRAY_SIZE(outputs); i++) {
472 if (dev->ctl_aoutput & outputs[i].mux)
473 ret = em28xx_write_ac97(dev, outputs[i].reg,
474 vol);
475 if (ret < 0)
476 em28xx_warn("couldn't setup AC97 register %d\n",
477 outputs[i].reg);
478 }
479
480 if (dev->ctl_aoutput & EM28XX_AOUT_PCM_IN) {
481 int sel = ac97_return_record_select(dev->ctl_aoutput);
482
483 /* Use the same input for both left and right
484 channels */
485 sel |= (sel << 8);
486
487 em28xx_write_ac97(dev, AC97_RECORD_SELECT, sel);
488 }
489 }
490
491 return ret;
492}
493EXPORT_SYMBOL_GPL(em28xx_audio_analog_set);
494
495int em28xx_audio_setup(struct em28xx *dev)
496{
497 int vid1, vid2, feat, cfg;
498 u32 vid;
499
500 if (dev->chip_id == CHIP_ID_EM2870 || dev->chip_id == CHIP_ID_EM2874
501 || dev->chip_id == CHIP_ID_EM28174) {
502 /* Digital only device - don't load any alsa module */
503 dev->audio_mode.has_audio = false;
504 dev->has_audio_class = false;
505 dev->has_alsa_audio = false;
506 return 0;
507 }
508
509 dev->audio_mode.has_audio = true;
510
511 /* See how this device is configured */
512 cfg = em28xx_read_reg(dev, EM28XX_R00_CHIPCFG);
513 em28xx_info("Config register raw data: 0x%02x\n", cfg);
514 if (cfg < 0) {
515 /* Register read error? */
516 cfg = EM28XX_CHIPCFG_AC97; /* Be conservative */
517 } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) == 0x00) {
518 /* The device doesn't have vendor audio at all */
519 dev->has_alsa_audio = false;
520 dev->audio_mode.has_audio = false;
521 return 0;
522 } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
523 EM28XX_CHIPCFG_I2S_3_SAMPRATES) {
524 em28xx_info("I2S Audio (3 sample rates)\n");
525 dev->audio_mode.i2s_3rates = 1;
526 } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
527 EM28XX_CHIPCFG_I2S_5_SAMPRATES) {
528 em28xx_info("I2S Audio (5 sample rates)\n");
529 dev->audio_mode.i2s_5rates = 1;
530 }
531
532 if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) != EM28XX_CHIPCFG_AC97) {
533 /* Skip the code that does AC97 vendor detection */
534 dev->audio_mode.ac97 = EM28XX_NO_AC97;
535 goto init_audio;
536 }
537
538 dev->audio_mode.ac97 = EM28XX_AC97_OTHER;
539
540 vid1 = em28xx_read_ac97(dev, AC97_VENDOR_ID1);
541 if (vid1 < 0) {
542 /*
543 * Device likely doesn't support AC97
544 * Note: (some) em2800 devices without eeprom reports 0x91 on
545 * CHIPCFG register, even not having an AC97 chip
546 */
547 em28xx_warn("AC97 chip type couldn't be determined\n");
548 dev->audio_mode.ac97 = EM28XX_NO_AC97;
549 dev->has_alsa_audio = false;
550 dev->audio_mode.has_audio = false;
551 goto init_audio;
552 }
553
554 vid2 = em28xx_read_ac97(dev, AC97_VENDOR_ID2);
555 if (vid2 < 0)
556 goto init_audio;
557
558 vid = vid1 << 16 | vid2;
559
560 dev->audio_mode.ac97_vendor_id = vid;
561 em28xx_warn("AC97 vendor ID = 0x%08x\n", vid);
562
563 feat = em28xx_read_ac97(dev, AC97_RESET);
564 if (feat < 0)
565 goto init_audio;
566
567 dev->audio_mode.ac97_feat = feat;
568 em28xx_warn("AC97 features = 0x%04x\n", feat);
569
570 /* Try to identify what audio processor we have */
571 if ((vid == 0xffffffff) && (feat == 0x6a90))
572 dev->audio_mode.ac97 = EM28XX_AC97_EM202;
573 else if ((vid >> 8) == 0x838476)
574 dev->audio_mode.ac97 = EM28XX_AC97_SIGMATEL;
575
576init_audio:
577 /* Reports detected AC97 processor */
578 switch (dev->audio_mode.ac97) {
579 case EM28XX_NO_AC97:
580 em28xx_info("No AC97 audio processor\n");
581 break;
582 case EM28XX_AC97_EM202:
583 em28xx_info("Empia 202 AC97 audio processor detected\n");
584 break;
585 case EM28XX_AC97_SIGMATEL:
586 em28xx_info("Sigmatel audio processor detected(stac 97%02x)\n",
587 dev->audio_mode.ac97_vendor_id & 0xff);
588 break;
589 case EM28XX_AC97_OTHER:
590 em28xx_warn("Unknown AC97 audio processor detected!\n");
591 break;
592 default:
593 break;
594 }
595
596 return em28xx_audio_analog_set(dev);
597}
598EXPORT_SYMBOL_GPL(em28xx_audio_setup);
599
600int em28xx_colorlevels_set_default(struct em28xx *dev)
601{
602 em28xx_write_reg(dev, EM28XX_R20_YGAIN, 0x10); /* contrast */
603 em28xx_write_reg(dev, EM28XX_R21_YOFFSET, 0x00); /* brightness */
604 em28xx_write_reg(dev, EM28XX_R22_UVGAIN, 0x10); /* saturation */
605 em28xx_write_reg(dev, EM28XX_R23_UOFFSET, 0x00);
606 em28xx_write_reg(dev, EM28XX_R24_VOFFSET, 0x00);
607 em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, 0x00);
608
609 em28xx_write_reg(dev, EM28XX_R14_GAMMA, 0x20);
610 em28xx_write_reg(dev, EM28XX_R15_RGAIN, 0x20);
611 em28xx_write_reg(dev, EM28XX_R16_GGAIN, 0x20);
612 em28xx_write_reg(dev, EM28XX_R17_BGAIN, 0x20);
613 em28xx_write_reg(dev, EM28XX_R18_ROFFSET, 0x00);
614 em28xx_write_reg(dev, EM28XX_R19_GOFFSET, 0x00);
615 return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00);
616}
617
618int em28xx_capture_start(struct em28xx *dev, int start)
619{
620 int rc;
621
622 if (dev->chip_id == CHIP_ID_EM2874 ||
623 dev->chip_id == CHIP_ID_EM2884 ||
624 dev->chip_id == CHIP_ID_EM28174) {
625 /* The Transport Stream Enable Register moved in em2874 */
626 if (!start) {
627 rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
628 0x00,
629 EM2874_TS1_CAPTURE_ENABLE);
630 return rc;
631 }
632
633 /* Enable Transport Stream */
634 rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
635 EM2874_TS1_CAPTURE_ENABLE,
636 EM2874_TS1_CAPTURE_ENABLE);
637 return rc;
638 }
639
640
641 /* FIXME: which is the best order? */
642 /* video registers are sampled by VREF */
643 rc = em28xx_write_reg_bits(dev, EM28XX_R0C_USBSUSP,
644 start ? 0x10 : 0x00, 0x10);
645 if (rc < 0)
646 return rc;
647
648 if (!start) {
649 /* disable video capture */
650 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x27);
651 return rc;
652 }
653
654 if (dev->board.is_webcam)
655 rc = em28xx_write_reg(dev, 0x13, 0x0c);
656
657 /* enable video capture */
658 rc = em28xx_write_reg(dev, 0x48, 0x00);
659
660 if (dev->mode == EM28XX_ANALOG_MODE)
661 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x67);
662 else
663 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x37);
664
665 msleep(6);
666
667 return rc;
668}
669
670int em28xx_vbi_supported(struct em28xx *dev)
671{
672 /* Modprobe option to manually disable */
673 if (disable_vbi == 1)
674 return 0;
675
676 if (dev->chip_id == CHIP_ID_EM2860 ||
677 dev->chip_id == CHIP_ID_EM2883)
678 return 1;
679
680 /* Version of em28xx that does not support VBI */
681 return 0;
682}
683
684int em28xx_set_outfmt(struct em28xx *dev)
685{
686 int ret;
687 u8 vinctrl;
688
689 ret = em28xx_write_reg_bits(dev, EM28XX_R27_OUTFMT,
690 dev->format->reg | 0x20, 0xff);
691 if (ret < 0)
692 return ret;
693
694 ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, dev->vinmode);
695 if (ret < 0)
696 return ret;
697
698 vinctrl = dev->vinctl;
699 if (em28xx_vbi_supported(dev) == 1) {
700 vinctrl |= EM28XX_VINCTRL_VBI_RAW;
701 em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
702 em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, dev->vbi_width/4);
703 em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, dev->vbi_height);
704 if (dev->norm & V4L2_STD_525_60) {
705 /* NTSC */
706 em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
707 } else if (dev->norm & V4L2_STD_625_50) {
708 /* PAL */
709 em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07);
710 }
711 }
712
713 return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl);
714}
715
716static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
717 u8 ymin, u8 ymax)
718{
719 em28xx_coredbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
720 xmin, ymin, xmax, ymax);
721
722 em28xx_write_regs(dev, EM28XX_R28_XMIN, &xmin, 1);
723 em28xx_write_regs(dev, EM28XX_R29_XMAX, &xmax, 1);
724 em28xx_write_regs(dev, EM28XX_R2A_YMIN, &ymin, 1);
725 return em28xx_write_regs(dev, EM28XX_R2B_YMAX, &ymax, 1);
726}
727
728static int em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
729 u16 width, u16 height)
730{
731 u8 cwidth = width;
732 u8 cheight = height;
733 u8 overflow = (height >> 7 & 0x02) | (width >> 8 & 0x01);
734
735 em28xx_coredbg("em28xx Area Set: (%d,%d)\n",
736 (width | (overflow & 2) << 7),
737 (height | (overflow & 1) << 8));
738
739 em28xx_write_regs(dev, EM28XX_R1C_HSTART, &hstart, 1);
740 em28xx_write_regs(dev, EM28XX_R1D_VSTART, &vstart, 1);
741 em28xx_write_regs(dev, EM28XX_R1E_CWIDTH, &cwidth, 1);
742 em28xx_write_regs(dev, EM28XX_R1F_CHEIGHT, &cheight, 1);
743 return em28xx_write_regs(dev, EM28XX_R1B_OFLOW, &overflow, 1);
744}
745
746static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
747{
748 u8 mode;
749 /* the em2800 scaler only supports scaling down to 50% */
750
751 if (dev->board.is_em2800) {
752 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
753 } else {
754 u8 buf[2];
755
756 buf[0] = h;
757 buf[1] = h >> 8;
758 em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2);
759
760 buf[0] = v;
761 buf[1] = v >> 8;
762 em28xx_write_regs(dev, EM28XX_R32_VSCALELOW, (char *)buf, 2);
763 /* it seems that both H and V scalers must be active
764 to work correctly */
765 mode = (h || v) ? 0x30 : 0x00;
766 }
767 return em28xx_write_reg_bits(dev, EM28XX_R26_COMPR, mode, 0x30);
768}
769
770/* FIXME: this only function read values from dev */
771int em28xx_resolution_set(struct em28xx *dev)
772{
773 int width, height;
774 width = norm_maxw(dev);
775 height = norm_maxh(dev);
776
777 /* Properly setup VBI */
778 dev->vbi_width = 720;
779 if (dev->norm & V4L2_STD_525_60)
780 dev->vbi_height = 12;
781 else
782 dev->vbi_height = 18;
783
784 if (!dev->progressive)
785 height >>= norm_maxh(dev);
786
787 em28xx_set_outfmt(dev);
788
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
807int 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
843set_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
860int 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}
893EXPORT_SYMBOL_GPL(em28xx_gpio_set);
894
895int 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}
915EXPORT_SYMBOL_GPL(em28xx_set_mode);
916
917/* ------------------------------------------------------------------
918 URB control
919 ------------------------------------------------------------------*/
920
921/*
922 * IRQ callback, called by URB callback
923 */
924static 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 */
964void em28xx_uninit_isoc(struct em28xx *dev)
965{
966 struct urb *urb;
967 int i;
968
969 em28xx_isocdbg("em28xx: called em28xx_uninit_isoc\n");
970
971 dev->isoc_ctl.nfields = -1;
972 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
973 urb = dev->isoc_ctl.urb[i];
974 if (urb) {
975 if (!irqs_disabled())
976 usb_kill_urb(urb);
977 else
978 usb_unlink_urb(urb);
979
980 if (dev->isoc_ctl.transfer_buffer[i]) {
981 usb_free_coherent(dev->udev,
982 urb->transfer_buffer_length,
983 dev->isoc_ctl.transfer_buffer[i],
984 urb->transfer_dma);
985 }
986 usb_free_urb(urb);
987 dev->isoc_ctl.urb[i] = NULL;
988 }
989 dev->isoc_ctl.transfer_buffer[i] = NULL;
990 }
991
992 kfree(dev->isoc_ctl.urb);
993 kfree(dev->isoc_ctl.transfer_buffer);
994
995 dev->isoc_ctl.urb = NULL;
996 dev->isoc_ctl.transfer_buffer = NULL;
997 dev->isoc_ctl.num_bufs = 0;
998
999 em28xx_capture_start(dev, 0);
1000}
1001EXPORT_SYMBOL_GPL(em28xx_uninit_isoc);
1002
1003/*
1004 * Allocate URBs and start IRQ
1005 */
1006int em28xx_init_isoc(struct em28xx *dev, int max_packets,
1007 int num_bufs, int max_pkt_size,
1008 int (*isoc_copy) (struct em28xx *dev, struct urb *urb))
1009{
1010 struct em28xx_dmaqueue *dma_q = &dev->vidq;
1011 struct em28xx_dmaqueue *vbi_dma_q = &dev->vbiq;
1012 int i;
1013 int sb_size, pipe;
1014 struct urb *urb;
1015 int j, k;
1016 int rc;
1017
1018 em28xx_isocdbg("em28xx: called em28xx_prepare_isoc\n");
1019
1020 /* De-allocates all pending stuff */
1021 em28xx_uninit_isoc(dev);
1022
1023 dev->isoc_ctl.isoc_copy = isoc_copy;
1024 dev->isoc_ctl.num_bufs = num_bufs;
1025
1026 dev->isoc_ctl.urb = kzalloc(sizeof(void *)*num_bufs, GFP_KERNEL);
1027 if (!dev->isoc_ctl.urb) {
1028 em28xx_errdev("cannot alloc memory for usb buffers\n");
1029 return -ENOMEM;
1030 }
1031
1032 dev->isoc_ctl.transfer_buffer = kzalloc(sizeof(void *)*num_bufs,
1033 GFP_KERNEL);
1034 if (!dev->isoc_ctl.transfer_buffer) {
1035 em28xx_errdev("cannot allocate memory for usb transfer\n");
1036 kfree(dev->isoc_ctl.urb);
1037 return -ENOMEM;
1038 }
1039
1040 dev->isoc_ctl.max_pkt_size = max_pkt_size;
1041 dev->isoc_ctl.vid_buf = NULL;
1042 dev->isoc_ctl.vbi_buf = NULL;
1043
1044 sb_size = max_packets * dev->isoc_ctl.max_pkt_size;
1045
1046 /* allocate urbs and transfer buffers */
1047 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
1048 urb = usb_alloc_urb(max_packets, GFP_KERNEL);
1049 if (!urb) {
1050 em28xx_err("cannot alloc isoc_ctl.urb %i\n", i);
1051 em28xx_uninit_isoc(dev);
1052 return -ENOMEM;
1053 }
1054 dev->isoc_ctl.urb[i] = urb;
1055
1056 dev->isoc_ctl.transfer_buffer[i] = usb_alloc_coherent(dev->udev,
1057 sb_size, GFP_KERNEL, &urb->transfer_dma);
1058 if (!dev->isoc_ctl.transfer_buffer[i]) {
1059 em28xx_err("unable to allocate %i bytes for transfer"
1060 " buffer %i%s\n",
1061 sb_size, i,
1062 in_interrupt() ? " while in int" : "");
1063 em28xx_uninit_isoc(dev);
1064 return -ENOMEM;
1065 }
1066 memset(dev->isoc_ctl.transfer_buffer[i], 0, sb_size);
1067
1068 /* FIXME: this is a hack - should be
1069 'desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK'
1070 should also be using 'desc.bInterval'
1071 */
1072 pipe = usb_rcvisocpipe(dev->udev,
1073 dev->mode == EM28XX_ANALOG_MODE ? 0x82 : 0x84);
1074
1075 usb_fill_int_urb(urb, dev->udev, pipe,
1076 dev->isoc_ctl.transfer_buffer[i], sb_size,
1077 em28xx_irq_callback, dev, 1);
1078
1079 urb->number_of_packets = max_packets;
1080 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
1081
1082 k = 0;
1083 for (j = 0; j < max_packets; j++) {
1084 urb->iso_frame_desc[j].offset = k;
1085 urb->iso_frame_desc[j].length =
1086 dev->isoc_ctl.max_pkt_size;
1087 k += dev->isoc_ctl.max_pkt_size;
1088 }
1089 }
1090
1091 init_waitqueue_head(&dma_q->wq);
1092 init_waitqueue_head(&vbi_dma_q->wq);
1093
1094 em28xx_capture_start(dev, 1);
1095
1096 /* submit urbs and enables IRQ */
1097 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
1098 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC);
1099 if (rc) {
1100 em28xx_err("submit of urb %i failed (error=%i)\n", i,
1101 rc);
1102 em28xx_uninit_isoc(dev);
1103 return rc;
1104 }
1105 }
1106
1107 return 0;
1108}
1109EXPORT_SYMBOL_GPL(em28xx_init_isoc);
1110
1111/* Determine the packet size for the DVB stream for the given device
1112 (underlying value programmed into the eeprom) */
1113int em28xx_isoc_dvb_max_packetsize(struct em28xx *dev)
1114{
1115 unsigned int chip_cfg2;
1116 unsigned int packet_size;
1117
1118 switch (dev->chip_id) {
1119 case CHIP_ID_EM2710:
1120 case CHIP_ID_EM2750:
1121 case CHIP_ID_EM2800:
1122 case CHIP_ID_EM2820:
1123 case CHIP_ID_EM2840:
1124 case CHIP_ID_EM2860:
1125 /* No DVB support */
1126 return -EINVAL;
1127 case CHIP_ID_EM2870:
1128 case CHIP_ID_EM2883:
1129 /* TS max packet size stored in bits 1-0 of R01 */
1130 chip_cfg2 = em28xx_read_reg(dev, EM28XX_R01_CHIPCFG2);
1131 switch (chip_cfg2 & EM28XX_CHIPCFG2_TS_PACKETSIZE_MASK) {
1132 case EM28XX_CHIPCFG2_TS_PACKETSIZE_188:
1133 packet_size = 188;
1134 break;
1135 case EM28XX_CHIPCFG2_TS_PACKETSIZE_376:
1136 packet_size = 376;
1137 break;
1138 case EM28XX_CHIPCFG2_TS_PACKETSIZE_564:
1139 packet_size = 564;
1140 break;
1141 case EM28XX_CHIPCFG2_TS_PACKETSIZE_752:
1142 packet_size = 752;
1143 break;
1144 }
1145 break;
1146 case CHIP_ID_EM2874:
1147 /*
1148 * FIXME: for now assumes 564 like it was before, but the
1149 * em2874 code should be added to return the proper value
1150 */
1151 packet_size = 564;
1152 break;
1153 case CHIP_ID_EM2884:
1154 case CHIP_ID_EM28174:
1155 default:
1156 /*
1157 * FIXME: same as em2874. 564 was enough for 22 Mbit DVB-T
1158 * but not enough for 44 Mbit DVB-C.
1159 */
1160 packet_size = 752;
1161 }
1162
1163 return packet_size;
1164}
1165EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize);
1166
1167/*
1168 * em28xx_wake_i2c()
1169 * configure i2c attached devices
1170 */
1171void em28xx_wake_i2c(struct em28xx *dev)
1172{
1173 v4l2_device_call_all(&dev->v4l2_dev, 0, core, reset, 0);
1174 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
1175 INPUT(dev->ctl_input)->vmux, 0, 0);
1176 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
1177}
1178
1179/*
1180 * Device control list
1181 */
1182
1183static LIST_HEAD(em28xx_devlist);
1184static DEFINE_MUTEX(em28xx_devlist_mutex);
1185
1186/*
1187 * em28xx_realease_resources()
1188 * unregisters the v4l2,i2c and usb devices
1189 * called when the device gets disconected or at module unload
1190*/
1191void em28xx_remove_from_devlist(struct em28xx *dev)
1192{
1193 mutex_lock(&em28xx_devlist_mutex);
1194 list_del(&dev->devlist);
1195 mutex_unlock(&em28xx_devlist_mutex);
1196};
1197
1198void em28xx_add_into_devlist(struct em28xx *dev)
1199{
1200 mutex_lock(&em28xx_devlist_mutex);
1201 list_add_tail(&dev->devlist, &em28xx_devlist);
1202 mutex_unlock(&em28xx_devlist_mutex);
1203};
1204
1205/*
1206 * Extension interface
1207 */
1208
1209static LIST_HEAD(em28xx_extension_devlist);
1210
1211int em28xx_register_extension(struct em28xx_ops *ops)
1212{
1213 struct em28xx *dev = NULL;
1214
1215 mutex_lock(&em28xx_devlist_mutex);
1216 list_add_tail(&ops->next, &em28xx_extension_devlist);
1217 list_for_each_entry(dev, &em28xx_devlist, devlist) {
1218 ops->init(dev);
1219 }
1220 printk(KERN_INFO "Em28xx: Initialized (%s) extension\n", ops->name);
1221 mutex_unlock(&em28xx_devlist_mutex);
1222 return 0;
1223}
1224EXPORT_SYMBOL(em28xx_register_extension);
1225
1226void em28xx_unregister_extension(struct em28xx_ops *ops)
1227{
1228 struct em28xx *dev = NULL;
1229
1230 mutex_lock(&em28xx_devlist_mutex);
1231 list_for_each_entry(dev, &em28xx_devlist, devlist) {
1232 ops->fini(dev);
1233 }
1234 printk(KERN_INFO "Em28xx: Removed (%s) extension\n", ops->name);
1235 list_del(&ops->next);
1236 mutex_unlock(&em28xx_devlist_mutex);
1237}
1238EXPORT_SYMBOL(em28xx_unregister_extension);
1239
1240void em28xx_init_extension(struct em28xx *dev)
1241{
1242 struct em28xx_ops *ops = NULL;
1243
1244 mutex_lock(&em28xx_devlist_mutex);
1245 if (!list_empty(&em28xx_extension_devlist)) {
1246 list_for_each_entry(ops, &em28xx_extension_devlist, next) {
1247 if (ops->init)
1248 ops->init(dev);
1249 }
1250 }
1251 mutex_unlock(&em28xx_devlist_mutex);
1252}
1253
1254void em28xx_close_extension(struct em28xx *dev)
1255{
1256 struct em28xx_ops *ops = NULL;
1257
1258 mutex_lock(&em28xx_devlist_mutex);
1259 if (!list_empty(&em28xx_extension_devlist)) {
1260 list_for_each_entry(ops, &em28xx_extension_devlist, next) {
1261 if (ops->fini)
1262 ops->fini(dev);
1263 }
1264 }
1265 mutex_unlock(&em28xx_devlist_mutex);
1266}