[PATCH] v4l: 876: moved some user defines to be out of kernel define
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / media / video / em28xx / em28xx-cards.c
CommitLineData
a6c2ba28 1/*
596d92d5 2 em2820-cards.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
a6c2ba28
AM
3
4 Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com>
4ac97914
MCC
5 Ludovico Cavedon <cavedon@sssup.it>
6 Mauro Carvalho Chehab <mchehab@brturbo.com.br>
a6c2ba28
AM
7
8 Based on the em2800 driver from Sascha Sommer <saschasommer@freenet.de>
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 */
24
25#include <linux/init.h>
26#include <linux/module.h>
27#include <linux/pci.h>
28#include <linux/delay.h>
29#include <linux/i2c.h>
30#include <linux/usb.h>
31#include <media/tuner.h>
1f6173ed
MCC
32#include <media/audiochip.h>
33#include <media/tveeprom.h>
a6c2ba28
AM
34#include "msp3400.h"
35
36#include "em2820.h"
37
a6c2ba28 38struct em2820_board em2820_boards[] = {
596d92d5
MCC
39 [EM2800_BOARD_UNKNOWN] = {
40 .name = "Unknown EM2800 video grabber",
41 .is_em2800 = 1,
42 .vchannels = 2,
43 .norm = VIDEO_MODE_PAL,
44 .tda9887_conf = TDA9887_PRESENT,
45 .has_tuner = 1,
46 .decoder = EM2820_SAA7113,
47 .input = {{
48 .type = EM2820_VMUX_COMPOSITE1,
49 .vmux = 0,
50 .amux = 1,
51 },{
52 .type = EM2820_VMUX_SVIDEO,
53 .vmux = 9,
54 .amux = 1,
55 }},
56 },
57 [EM2820_BOARD_UNKNOWN] = {
58 .name = "Unknown EM2820/2840 video grabber",
59 .is_em2800 = 0,
60 .vchannels = 2,
61 .norm = VIDEO_MODE_PAL,
62 .tda9887_conf = TDA9887_PRESENT,
63 .has_tuner = 1,
64 .decoder = EM2820_SAA7113,
65 .input = {{
66 .type = EM2820_VMUX_COMPOSITE1,
67 .vmux = 0,
68 .amux = 1,
69 },{
70 .type = EM2820_VMUX_SVIDEO,
71 .vmux = 9,
72 .amux = 1,
73 }},
74 },
a6c2ba28
AM
75 [EM2820_BOARD_TERRATEC_CINERGY_250] = {
76 .name = "Terratec Cinergy 250 USB",
77 .vchannels = 3,
78 .norm = VIDEO_MODE_PAL,
79 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
80 .tda9887_conf = TDA9887_PRESENT,
81 .has_tuner = 1,
82 .decoder = EM2820_SAA7113,
83 .input = {{
84 .type = EM2820_VMUX_TELEVISION,
85 .vmux = 2,
86 .amux = 0,
87 },{
88 .type = EM2820_VMUX_COMPOSITE1,
89 .vmux = 0,
90 .amux = 1,
91 },{
92 .type = EM2820_VMUX_SVIDEO,
93 .vmux = 9,
94 .amux = 1,
95 }},
96 },
97 [EM2820_BOARD_PINNACLE_USB_2] = {
98 .name = "Pinnacle PCTV USB 2",
99 .vchannels = 3,
100 .norm = VIDEO_MODE_PAL,
101 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
102 .tda9887_conf = TDA9887_PRESENT,
103 .has_tuner = 1,
104 .decoder = EM2820_SAA7113,
105 .input = {{
106 .type = EM2820_VMUX_TELEVISION,
107 .vmux = 2,
108 .amux = 0,
109 },{
110 .type = EM2820_VMUX_COMPOSITE1,
111 .vmux = 0,
112 .amux = 1,
113 },{
114 .type = EM2820_VMUX_SVIDEO,
115 .vmux = 9,
116 .amux = 1,
117 }},
118 },
119 [EM2820_BOARD_HAUPPAUGE_WINTV_USB_2] = {
120 .name = "Hauppauge WinTV USB 2",
121 .vchannels = 3,
122 .norm = VIDEO_MODE_NTSC,
123 .tuner_type = TUNER_PHILIPS_FM1236_MK3,
124 .tda9887_conf = TDA9887_PRESENT|TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE,
125 .has_tuner = 1,
126 .decoder = EM2820_TVP5150,
127 .has_msp34xx = 1,
128 /*FIXME: S-Video not tested */
129 .input = {{
130 .type = EM2820_VMUX_TELEVISION,
131 .vmux = 0,
132 .amux = 0,
133 },{
134 .type = EM2820_VMUX_SVIDEO,
135 .vmux = 2,
136 .amux = 1,
137 }},
138 },
139 [EM2820_BOARD_MSI_VOX_USB_2] = {
140 .name = "MSI VOX USB 2.0",
141 .vchannels = 3,
142 .norm = VIDEO_MODE_PAL,
08eca13d 143 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
a6c2ba28
AM
144 .tda9887_conf = TDA9887_PRESENT|TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE,
145 .has_tuner = 1,
d5e52653 146 .decoder = EM2820_SAA7114,
a6c2ba28
AM
147 .input = {{
148 .type = EM2820_VMUX_TELEVISION,
30556b23 149 .vmux = 4,
a6c2ba28
AM
150 .amux = 0,
151 },{
152 .type = EM2820_VMUX_COMPOSITE1,
153 .vmux = 0,
154 .amux = 1,
155 },{
156 .type = EM2820_VMUX_SVIDEO,
157 .vmux = 9,
158 .amux = 1,
159 }},
160 },
596d92d5
MCC
161 [EM2800_BOARD_TERRATEC_CINERGY_200] = {
162 .name = "Terratec Cinergy 200 USB",
596d92d5
MCC
163 .is_em2800 = 1,
164 .vchannels = 3,
165 .norm = VIDEO_MODE_PAL,
166 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
167 .tda9887_conf = TDA9887_PRESENT,
168 .has_tuner = 1,
169 .decoder = EM2820_SAA7113,
170 .input = {{
171 .type = EM2820_VMUX_TELEVISION,
172 .vmux = 2,
173 .amux = 0,
174 },{
175 .type = EM2820_VMUX_COMPOSITE1,
176 .vmux = 0,
177 .amux = 1,
178 },{
179 .type = EM2820_VMUX_SVIDEO,
180 .vmux = 9,
181 .amux = 1,
182 }},
183 },
184 [EM2800_BOARD_LEADTEK_WINFAST_USBII] = {
185 .name = "Leadtek Winfast USB II",
596d92d5
MCC
186 .is_em2800 = 1,
187 .vchannels = 3,
188 .norm = VIDEO_MODE_PAL,
189 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
190 .tda9887_conf = TDA9887_PRESENT,
191 .has_tuner = 1,
192 .decoder = EM2820_SAA7113,
193 .input = {{
194 .type = EM2820_VMUX_TELEVISION,
195 .vmux = 2,
196 .amux = 0,
197 },{
198 .type = EM2820_VMUX_COMPOSITE1,
199 .vmux = 0,
200 .amux = 1,
201 },{
202 .type = EM2820_VMUX_SVIDEO,
203 .vmux = 9,
204 .amux = 1,
205 }},
206 },
207 [EM2800_BOARD_KWORLD_USB2800] = {
208 .name = "Kworld USB2800",
596d92d5
MCC
209 .is_em2800 = 1,
210 .vchannels = 3,
211 .norm = VIDEO_MODE_PAL,
212 .tuner_type = TUNER_PHILIPS_ATSC,
213 .tda9887_conf = TDA9887_PRESENT,
214 .has_tuner = 1,
215 .decoder = EM2820_SAA7113,
216 .input = {{
217 .type = EM2820_VMUX_TELEVISION,
218 .vmux = 2,
219 .amux = 0,
220 },{
221 .type = EM2820_VMUX_COMPOSITE1,
222 .vmux = 0,
223 .amux = 1,
224 },{
225 .type = EM2820_VMUX_SVIDEO,
226 .vmux = 9,
227 .amux = 1,
228 }},
229 },
45632c4f
MCC
230 [EM2820_BOARD_PINNACLE_DVC_90] = {
231 .name = "Pinnacle Dazzle DVC 90",
232 .vchannels = 3,
233 .norm = VIDEO_MODE_PAL,
234 .has_tuner = 0,
235 .decoder = EM2820_SAA7113,
236 .input = {{
237 .type = EM2820_VMUX_COMPOSITE1,
238 .vmux = 0,
239 .amux = 1,
240 },{
241 .type = EM2820_VMUX_SVIDEO,
242 .vmux = 9,
243 .amux = 1,
244 }},
245 },
a6c2ba28 246};
596d92d5 247const unsigned int em2820_bcount = ARRAY_SIZE(em2820_boards);
a6c2ba28
AM
248
249/* table of devices that work with this driver */
250struct usb_device_id em2820_id_table [] = {
596d92d5 251 { USB_DEVICE(0xeb1a, 0x2800), .driver_info = EM2800_BOARD_UNKNOWN },
08eca13d 252 { USB_DEVICE(0xeb1a, 0x2820), .driver_info = EM2820_BOARD_MSI_VOX_USB_2 },
a6c2ba28
AM
253 { USB_DEVICE(0x0ccd, 0x0036), .driver_info = EM2820_BOARD_TERRATEC_CINERGY_250 },
254 { USB_DEVICE(0x2304, 0x0208), .driver_info = EM2820_BOARD_PINNACLE_USB_2 },
255 { USB_DEVICE(0x2040, 0x4200), .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 },
45632c4f 256 { USB_DEVICE(0x2304, 0x0207), .driver_info = EM2820_BOARD_PINNACLE_DVC_90 },
a6c2ba28
AM
257 { },
258};
259
260void em2820_card_setup(struct em2820 *dev)
261{
262 /* request some modules */
263 if (dev->model == EM2820_BOARD_HAUPPAUGE_WINTV_USB_2) {
264 struct tveeprom tv;
265#ifdef CONFIG_MODULES
266 request_module("tveeprom");
d5e52653 267 request_module("ir-kbd-i2c");
a6c2ba28
AM
268#endif
269 /* Call first TVeeprom */
270
f59ab27b 271 dev->i2c_client.addr = 0xa0 >> 1;
a6c2ba28
AM
272 tveeprom_hauppauge_analog(&dev->i2c_client, &tv, dev->eedata);
273
274 dev->tuner_type= tv.tuner_type;
275 if (tv.audio_processor == AUDIO_CHIP_MSP34XX) {
276 dev->has_msp34xx=1;
277 } else dev->has_msp34xx=0;
45632c4f
MCC
278 em2820_write_regs_req(dev,0x06,0x00,"\x40",1);// Serial Bus Frequency Select Register
279 em2820_write_regs_req(dev,0x0f,0x00,"\x87",1);// XCLK Frequency Select Register
280 em2820_write_regs_req(dev,0x88,0x0d,"\xd0",1);
a6c2ba28
AM
281 }
282}
283
284EXPORT_SYMBOL(em2820_boards);
596d92d5 285EXPORT_SYMBOL(em2820_bcount);
a6c2ba28
AM
286EXPORT_SYMBOL(em2820_id_table);
287
288MODULE_DEVICE_TABLE (usb, em2820_id_table);