diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-24 14:21:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-24 14:21:08 -0400 |
commit | c328d54cd4ad120d76284e46dcca6c6cf996154a (patch) | |
tree | 104c023be66faa5fce6e0a56c0a6d13c62fd21e5 /drivers/media/video/pvrusb2/pvrusb2-devattr.c | |
parent | 346ad4b7fe392571f19314f153db9151dbc1d82b (diff) | |
parent | b0166ab3a6ae6d7af8d9a21a7836154963c69a11 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (452 commits)
V4L/DVB (7731): tuner-xc2028: fix signal strength calculus
V4L/DVB (7730): tuner-xc2028: Fix SCODE load for MTS firmwares
V4L/DVB (7729): Fix VIDIOCGAP corruption in ivtv
V4L/DVB (7728): tea5761: bugzilla #10462: tea5761 autodetection code were broken
V4L/DVB (7726): cx23885: Enable cx23417 support on the HVR1800
V4L/DVB (7725): cx23885: Add generic cx23417 hardware encoder support
V4L/DVB (7723): pvrusb2: Clean up input selection list generation in V4L interface
V4L/DVB (7722): pvrusb2: Implement FM radio support for Gotview USB2.0 DVD 2
V4L/DVB (7721): pvrusb2: Restructure cx23416 firmware loading to have a common exit point
V4L/DVB (7720): pvrusb2: Fix bad error code on cx23416 firmware load failure
V4L/DVB (7719): pvrusb2: Implement input selection enforcement
V4L/DVB (7718): pvrusb2-dvb: update Kbuild selections
V4L/DVB (7717): pvrusb2-dvb: add DVB-T support for Hauppauge pvrusb2 model 73xxx
V4L/DVB (7716): pvrusb2: clean up global functions
V4L/DVB (7715): pvrusb2: Clean out all use of __FUNCTION__
V4L/DVB (7714): pvrusb2: Fix hang on module removal
V4L/DVB (7713): pvrusb2: Implement cleaner DVB kernel thread shutdown
V4L/DVB (7712): pvrusb2: Close connect/disconnect race
V4L/DVB (7711): pvrusb2: Fix race on module unload
V4L/DVB (7710): pvrusb2: Implement critical digital streaming quirk for onair devices
...
Diffstat (limited to 'drivers/media/video/pvrusb2/pvrusb2-devattr.c')
-rw-r--r-- | drivers/media/video/pvrusb2/pvrusb2-devattr.c | 270 |
1 files changed, 257 insertions, 13 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.c b/drivers/media/video/pvrusb2/pvrusb2-devattr.c index fe9991c10cf4..2dd06a90adce 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-devattr.c +++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.c | |||
@@ -32,7 +32,15 @@ pvr2_device_desc structures. | |||
32 | /* This is needed in order to pull in tuner type ids... */ | 32 | /* This is needed in order to pull in tuner type ids... */ |
33 | #include <linux/i2c.h> | 33 | #include <linux/i2c.h> |
34 | #include <media/tuner.h> | 34 | #include <media/tuner.h> |
35 | 35 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB | |
36 | #include "pvrusb2-hdw-internal.h" | ||
37 | #include "lgdt330x.h" | ||
38 | #include "s5h1409.h" | ||
39 | #include "tda10048.h" | ||
40 | #include "tda18271.h" | ||
41 | #include "tda8290.h" | ||
42 | #include "tuner-simple.h" | ||
43 | #endif | ||
36 | 44 | ||
37 | 45 | ||
38 | /*------------------------------------------------------------------------*/ | 46 | /*------------------------------------------------------------------------*/ |
@@ -49,14 +57,19 @@ static const char *pvr2_fw1_names_29xxx[] = { | |||
49 | }; | 57 | }; |
50 | 58 | ||
51 | static const struct pvr2_device_desc pvr2_device_29xxx = { | 59 | static const struct pvr2_device_desc pvr2_device_29xxx = { |
52 | .description = "WinTV PVR USB2 Model Category 29xxxx", | 60 | .description = "WinTV PVR USB2 Model Category 29xxx", |
53 | .shortname = "29xxx", | 61 | .shortname = "29xxx", |
54 | .client_modules.lst = pvr2_client_29xxx, | 62 | .client_modules.lst = pvr2_client_29xxx, |
55 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_29xxx), | 63 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_29xxx), |
56 | .fx2_firmware.lst = pvr2_fw1_names_29xxx, | 64 | .fx2_firmware.lst = pvr2_fw1_names_29xxx, |
57 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_29xxx), | 65 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_29xxx), |
58 | .flag_has_hauppauge_rom = !0, | 66 | .flag_has_hauppauge_rom = !0, |
67 | .flag_has_analogtuner = !0, | ||
68 | .flag_has_fmradio = !0, | ||
69 | .flag_has_composite = !0, | ||
70 | .flag_has_svideo = !0, | ||
59 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 71 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
72 | .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, | ||
60 | }; | 73 | }; |
61 | 74 | ||
62 | 75 | ||
@@ -75,7 +88,7 @@ static const char *pvr2_fw1_names_24xxx[] = { | |||
75 | }; | 88 | }; |
76 | 89 | ||
77 | static const struct pvr2_device_desc pvr2_device_24xxx = { | 90 | static const struct pvr2_device_desc pvr2_device_24xxx = { |
78 | .description = "WinTV PVR USB2 Model Category 24xxxx", | 91 | .description = "WinTV PVR USB2 Model Category 24xxx", |
79 | .shortname = "24xxx", | 92 | .shortname = "24xxx", |
80 | .client_modules.lst = pvr2_client_24xxx, | 93 | .client_modules.lst = pvr2_client_24xxx, |
81 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_24xxx), | 94 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_24xxx), |
@@ -85,7 +98,12 @@ static const struct pvr2_device_desc pvr2_device_24xxx = { | |||
85 | .flag_has_wm8775 = !0, | 98 | .flag_has_wm8775 = !0, |
86 | .flag_has_hauppauge_rom = !0, | 99 | .flag_has_hauppauge_rom = !0, |
87 | .flag_has_hauppauge_custom_ir = !0, | 100 | .flag_has_hauppauge_custom_ir = !0, |
101 | .flag_has_analogtuner = !0, | ||
102 | .flag_has_fmradio = !0, | ||
103 | .flag_has_composite = !0, | ||
104 | .flag_has_svideo = !0, | ||
88 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 105 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
106 | .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, | ||
89 | }; | 107 | }; |
90 | 108 | ||
91 | 109 | ||
@@ -105,6 +123,30 @@ static const struct pvr2_device_desc pvr2_device_gotview_2 = { | |||
105 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_gotview_2), | 123 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_gotview_2), |
106 | .flag_has_cx25840 = !0, | 124 | .flag_has_cx25840 = !0, |
107 | .default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | 125 | .default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3, |
126 | .flag_has_analogtuner = !0, | ||
127 | .flag_has_fmradio = !0, | ||
128 | .flag_has_composite = !0, | ||
129 | .flag_has_svideo = !0, | ||
130 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW, | ||
131 | }; | ||
132 | |||
133 | |||
134 | |||
135 | /*------------------------------------------------------------------------*/ | ||
136 | /* GOTVIEW USB2.0 DVD Deluxe */ | ||
137 | |||
138 | /* (same module list as gotview_2) */ | ||
139 | |||
140 | static const struct pvr2_device_desc pvr2_device_gotview_2d = { | ||
141 | .description = "Gotview USB 2.0 DVD Deluxe", | ||
142 | .shortname = "gv2d", | ||
143 | .client_modules.lst = pvr2_client_gotview_2, | ||
144 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_gotview_2), | ||
145 | .flag_has_cx25840 = !0, | ||
146 | .default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | ||
147 | .flag_has_analogtuner = !0, | ||
148 | .flag_has_composite = !0, | ||
149 | .flag_has_svideo = !0, | ||
108 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW, | 150 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW, |
109 | }; | 151 | }; |
110 | 152 | ||
@@ -114,6 +156,38 @@ static const struct pvr2_device_desc pvr2_device_gotview_2 = { | |||
114 | /*------------------------------------------------------------------------*/ | 156 | /*------------------------------------------------------------------------*/ |
115 | /* OnAir Creator */ | 157 | /* OnAir Creator */ |
116 | 158 | ||
159 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB | ||
160 | static struct lgdt330x_config pvr2_lgdt3303_config = { | ||
161 | .demod_address = 0x0e, | ||
162 | .demod_chip = LGDT3303, | ||
163 | .clock_polarity_flip = 1, | ||
164 | }; | ||
165 | |||
166 | static int pvr2_lgdt3303_attach(struct pvr2_dvb_adapter *adap) | ||
167 | { | ||
168 | adap->fe = dvb_attach(lgdt330x_attach, &pvr2_lgdt3303_config, | ||
169 | &adap->channel.hdw->i2c_adap); | ||
170 | if (adap->fe) | ||
171 | return 0; | ||
172 | |||
173 | return -EIO; | ||
174 | } | ||
175 | |||
176 | static int pvr2_lgh06xf_attach(struct pvr2_dvb_adapter *adap) | ||
177 | { | ||
178 | dvb_attach(simple_tuner_attach, adap->fe, | ||
179 | &adap->channel.hdw->i2c_adap, 0x61, | ||
180 | TUNER_LG_TDVS_H06XF); | ||
181 | |||
182 | return 0; | ||
183 | } | ||
184 | |||
185 | struct pvr2_dvb_props pvr2_onair_creator_fe_props = { | ||
186 | .frontend_attach = pvr2_lgdt3303_attach, | ||
187 | .tuner_attach = pvr2_lgh06xf_attach, | ||
188 | }; | ||
189 | #endif | ||
190 | |||
117 | static const char *pvr2_client_onair_creator[] = { | 191 | static const char *pvr2_client_onair_creator[] = { |
118 | "saa7115", | 192 | "saa7115", |
119 | "tuner", | 193 | "tuner", |
@@ -126,7 +200,16 @@ static const struct pvr2_device_desc pvr2_device_onair_creator = { | |||
126 | .client_modules.lst = pvr2_client_onair_creator, | 200 | .client_modules.lst = pvr2_client_onair_creator, |
127 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_creator), | 201 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_creator), |
128 | .default_tuner_type = TUNER_LG_TDVS_H06XF, | 202 | .default_tuner_type = TUNER_LG_TDVS_H06XF, |
203 | .flag_has_analogtuner = !0, | ||
204 | .flag_has_composite = !0, | ||
205 | .flag_has_svideo = !0, | ||
206 | .flag_digital_requires_cx23416 = !0, | ||
129 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 207 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
208 | .digital_control_scheme = PVR2_DIGITAL_SCHEME_ONAIR, | ||
209 | .default_std_mask = V4L2_STD_NTSC_M, | ||
210 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB | ||
211 | .dvb_props = &pvr2_onair_creator_fe_props, | ||
212 | #endif | ||
130 | }; | 213 | }; |
131 | #endif | 214 | #endif |
132 | 215 | ||
@@ -136,6 +219,37 @@ static const struct pvr2_device_desc pvr2_device_onair_creator = { | |||
136 | /*------------------------------------------------------------------------*/ | 219 | /*------------------------------------------------------------------------*/ |
137 | /* OnAir USB 2.0 */ | 220 | /* OnAir USB 2.0 */ |
138 | 221 | ||
222 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB | ||
223 | static struct lgdt330x_config pvr2_lgdt3302_config = { | ||
224 | .demod_address = 0x0e, | ||
225 | .demod_chip = LGDT3302, | ||
226 | }; | ||
227 | |||
228 | static int pvr2_lgdt3302_attach(struct pvr2_dvb_adapter *adap) | ||
229 | { | ||
230 | adap->fe = dvb_attach(lgdt330x_attach, &pvr2_lgdt3302_config, | ||
231 | &adap->channel.hdw->i2c_adap); | ||
232 | if (adap->fe) | ||
233 | return 0; | ||
234 | |||
235 | return -EIO; | ||
236 | } | ||
237 | |||
238 | static int pvr2_fcv1236d_attach(struct pvr2_dvb_adapter *adap) | ||
239 | { | ||
240 | dvb_attach(simple_tuner_attach, adap->fe, | ||
241 | &adap->channel.hdw->i2c_adap, 0x61, | ||
242 | TUNER_PHILIPS_FCV1236D); | ||
243 | |||
244 | return 0; | ||
245 | } | ||
246 | |||
247 | struct pvr2_dvb_props pvr2_onair_usb2_fe_props = { | ||
248 | .frontend_attach = pvr2_lgdt3302_attach, | ||
249 | .tuner_attach = pvr2_fcv1236d_attach, | ||
250 | }; | ||
251 | #endif | ||
252 | |||
139 | static const char *pvr2_client_onair_usb2[] = { | 253 | static const char *pvr2_client_onair_usb2[] = { |
140 | "saa7115", | 254 | "saa7115", |
141 | "tuner", | 255 | "tuner", |
@@ -147,8 +261,17 @@ static const struct pvr2_device_desc pvr2_device_onair_usb2 = { | |||
147 | .shortname = "oa2", | 261 | .shortname = "oa2", |
148 | .client_modules.lst = pvr2_client_onair_usb2, | 262 | .client_modules.lst = pvr2_client_onair_usb2, |
149 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_usb2), | 263 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_usb2), |
150 | .default_tuner_type = TUNER_PHILIPS_ATSC, | 264 | .default_tuner_type = TUNER_PHILIPS_FCV1236D, |
265 | .flag_has_analogtuner = !0, | ||
266 | .flag_has_composite = !0, | ||
267 | .flag_has_svideo = !0, | ||
268 | .flag_digital_requires_cx23416 = !0, | ||
151 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 269 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
270 | .digital_control_scheme = PVR2_DIGITAL_SCHEME_ONAIR, | ||
271 | .default_std_mask = V4L2_STD_NTSC_M, | ||
272 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB | ||
273 | .dvb_props = &pvr2_onair_usb2_fe_props, | ||
274 | #endif | ||
152 | }; | 275 | }; |
153 | #endif | 276 | #endif |
154 | 277 | ||
@@ -157,6 +280,50 @@ static const struct pvr2_device_desc pvr2_device_onair_usb2 = { | |||
157 | /*------------------------------------------------------------------------*/ | 280 | /*------------------------------------------------------------------------*/ |
158 | /* Hauppauge PVR-USB2 Model 73xxx */ | 281 | /* Hauppauge PVR-USB2 Model 73xxx */ |
159 | 282 | ||
283 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB | ||
284 | static struct tda10048_config hauppauge_tda10048_config = { | ||
285 | .demod_address = 0x10 >> 1, | ||
286 | .output_mode = TDA10048_PARALLEL_OUTPUT, | ||
287 | .fwbulkwritelen = TDA10048_BULKWRITE_50, | ||
288 | .inversion = TDA10048_INVERSION_ON, | ||
289 | }; | ||
290 | |||
291 | static struct tda829x_config tda829x_no_probe = { | ||
292 | .probe_tuner = TDA829X_DONT_PROBE, | ||
293 | }; | ||
294 | |||
295 | static struct tda18271_config hauppauge_tda18271_dvb_config = { | ||
296 | .gate = TDA18271_GATE_ANALOG, | ||
297 | }; | ||
298 | |||
299 | static int pvr2_tda10048_attach(struct pvr2_dvb_adapter *adap) | ||
300 | { | ||
301 | adap->fe = dvb_attach(tda10048_attach, &hauppauge_tda10048_config, | ||
302 | &adap->channel.hdw->i2c_adap); | ||
303 | if (adap->fe) | ||
304 | return 0; | ||
305 | |||
306 | return -EIO; | ||
307 | } | ||
308 | |||
309 | static int pvr2_73xxx_tda18271_8295_attach(struct pvr2_dvb_adapter *adap) | ||
310 | { | ||
311 | dvb_attach(tda829x_attach, adap->fe, | ||
312 | &adap->channel.hdw->i2c_adap, 0x42, | ||
313 | &tda829x_no_probe); | ||
314 | dvb_attach(tda18271_attach, adap->fe, 0x60, | ||
315 | &adap->channel.hdw->i2c_adap, | ||
316 | &hauppauge_tda18271_dvb_config); | ||
317 | |||
318 | return 0; | ||
319 | } | ||
320 | |||
321 | struct pvr2_dvb_props pvr2_73xxx_dvb_props = { | ||
322 | .frontend_attach = pvr2_tda10048_attach, | ||
323 | .tuner_attach = pvr2_73xxx_tda18271_8295_attach, | ||
324 | }; | ||
325 | #endif | ||
326 | |||
160 | static const char *pvr2_client_73xxx[] = { | 327 | static const char *pvr2_client_73xxx[] = { |
161 | "cx25840", | 328 | "cx25840", |
162 | "tuner", | 329 | "tuner", |
@@ -167,7 +334,7 @@ static const char *pvr2_fw1_names_73xxx[] = { | |||
167 | }; | 334 | }; |
168 | 335 | ||
169 | static const struct pvr2_device_desc pvr2_device_73xxx = { | 336 | static const struct pvr2_device_desc pvr2_device_73xxx = { |
170 | .description = "WinTV PVR USB2 Model Category 73xxxx", | 337 | .description = "WinTV PVR USB2 Model Category 73xxx", |
171 | .shortname = "73xxx", | 338 | .shortname = "73xxx", |
172 | .client_modules.lst = pvr2_client_73xxx, | 339 | .client_modules.lst = pvr2_client_73xxx, |
173 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_73xxx), | 340 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_73xxx), |
@@ -175,15 +342,14 @@ static const struct pvr2_device_desc pvr2_device_73xxx = { | |||
175 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_73xxx), | 342 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_73xxx), |
176 | .flag_has_cx25840 = !0, | 343 | .flag_has_cx25840 = !0, |
177 | .flag_has_hauppauge_rom = !0, | 344 | .flag_has_hauppauge_rom = !0, |
178 | #if 0 | ||
179 | .flag_has_analogtuner = !0, | 345 | .flag_has_analogtuner = !0, |
180 | .flag_has_composite = !0, | 346 | .flag_has_composite = !0, |
181 | .flag_has_svideo = !0, | 347 | .flag_has_svideo = !0, |
182 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 348 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
183 | .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE, | 349 | .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE, |
184 | .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, | 350 | .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, |
185 | #else | 351 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB |
186 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 352 | .dvb_props = &pvr2_73xxx_dvb_props, |
187 | #endif | 353 | #endif |
188 | }; | 354 | }; |
189 | 355 | ||
@@ -192,6 +358,56 @@ static const struct pvr2_device_desc pvr2_device_73xxx = { | |||
192 | /*------------------------------------------------------------------------*/ | 358 | /*------------------------------------------------------------------------*/ |
193 | /* Hauppauge PVR-USB2 Model 75xxx */ | 359 | /* Hauppauge PVR-USB2 Model 75xxx */ |
194 | 360 | ||
361 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB | ||
362 | static struct s5h1409_config pvr2_s5h1409_config = { | ||
363 | .demod_address = 0x32 >> 1, | ||
364 | .output_mode = S5H1409_PARALLEL_OUTPUT, | ||
365 | .gpio = S5H1409_GPIO_OFF, | ||
366 | .qam_if = 4000, | ||
367 | .inversion = S5H1409_INVERSION_ON, | ||
368 | .status_mode = S5H1409_DEMODLOCKING, | ||
369 | }; | ||
370 | |||
371 | static struct tda18271_std_map hauppauge_tda18271_std_map = { | ||
372 | .atsc_6 = { .if_freq = 5380, .agc_mode = 3, .std = 3, | ||
373 | .if_lvl = 6, .rfagc_top = 0x37, }, | ||
374 | .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 0, | ||
375 | .if_lvl = 6, .rfagc_top = 0x37, }, | ||
376 | }; | ||
377 | |||
378 | static struct tda18271_config hauppauge_tda18271_config = { | ||
379 | .std_map = &hauppauge_tda18271_std_map, | ||
380 | .gate = TDA18271_GATE_ANALOG, | ||
381 | }; | ||
382 | |||
383 | static int pvr2_s5h1409_attach(struct pvr2_dvb_adapter *adap) | ||
384 | { | ||
385 | adap->fe = dvb_attach(s5h1409_attach, &pvr2_s5h1409_config, | ||
386 | &adap->channel.hdw->i2c_adap); | ||
387 | if (adap->fe) | ||
388 | return 0; | ||
389 | |||
390 | return -EIO; | ||
391 | } | ||
392 | |||
393 | static int pvr2_tda18271_8295_attach(struct pvr2_dvb_adapter *adap) | ||
394 | { | ||
395 | dvb_attach(tda829x_attach, adap->fe, | ||
396 | &adap->channel.hdw->i2c_adap, 0x42, | ||
397 | &tda829x_no_probe); | ||
398 | dvb_attach(tda18271_attach, adap->fe, 0x60, | ||
399 | &adap->channel.hdw->i2c_adap, | ||
400 | &hauppauge_tda18271_config); | ||
401 | |||
402 | return 0; | ||
403 | } | ||
404 | |||
405 | struct pvr2_dvb_props pvr2_750xx_dvb_props = { | ||
406 | .frontend_attach = pvr2_s5h1409_attach, | ||
407 | .tuner_attach = pvr2_tda18271_8295_attach, | ||
408 | }; | ||
409 | #endif | ||
410 | |||
195 | static const char *pvr2_client_75xxx[] = { | 411 | static const char *pvr2_client_75xxx[] = { |
196 | "cx25840", | 412 | "cx25840", |
197 | "tuner", | 413 | "tuner", |
@@ -201,17 +417,43 @@ static const char *pvr2_fw1_names_75xxx[] = { | |||
201 | "v4l-pvrusb2-73xxx-01.fw", | 417 | "v4l-pvrusb2-73xxx-01.fw", |
202 | }; | 418 | }; |
203 | 419 | ||
204 | static const struct pvr2_device_desc pvr2_device_75xxx = { | 420 | static const struct pvr2_device_desc pvr2_device_750xx = { |
205 | .description = "WinTV PVR USB2 Model Category 75xxxx", | 421 | .description = "WinTV PVR USB2 Model Category 750xx", |
206 | .shortname = "75xxx", | 422 | .shortname = "750xx", |
423 | .client_modules.lst = pvr2_client_75xxx, | ||
424 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_75xxx), | ||
425 | .fx2_firmware.lst = pvr2_fw1_names_75xxx, | ||
426 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_75xxx), | ||
427 | .flag_has_cx25840 = !0, | ||
428 | .flag_has_hauppauge_rom = !0, | ||
429 | .flag_has_analogtuner = !0, | ||
430 | .flag_has_composite = !0, | ||
431 | .flag_has_svideo = !0, | ||
432 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | ||
433 | .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE, | ||
434 | .default_std_mask = V4L2_STD_NTSC_M, | ||
435 | .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, | ||
436 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB | ||
437 | .dvb_props = &pvr2_750xx_dvb_props, | ||
438 | #endif | ||
439 | }; | ||
440 | |||
441 | static const struct pvr2_device_desc pvr2_device_751xx = { | ||
442 | .description = "WinTV PVR USB2 Model Category 751xx", | ||
443 | .shortname = "751xx", | ||
207 | .client_modules.lst = pvr2_client_75xxx, | 444 | .client_modules.lst = pvr2_client_75xxx, |
208 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_75xxx), | 445 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_75xxx), |
209 | .fx2_firmware.lst = pvr2_fw1_names_75xxx, | 446 | .fx2_firmware.lst = pvr2_fw1_names_75xxx, |
210 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_75xxx), | 447 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_75xxx), |
211 | .flag_has_cx25840 = !0, | 448 | .flag_has_cx25840 = !0, |
212 | .flag_has_hauppauge_rom = !0, | 449 | .flag_has_hauppauge_rom = !0, |
450 | .flag_has_analogtuner = !0, | ||
451 | .flag_has_composite = !0, | ||
452 | .flag_has_svideo = !0, | ||
213 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 453 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
454 | .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE, | ||
214 | .default_std_mask = V4L2_STD_NTSC_M, | 455 | .default_std_mask = V4L2_STD_NTSC_M, |
456 | .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, | ||
215 | }; | 457 | }; |
216 | 458 | ||
217 | 459 | ||
@@ -225,6 +467,8 @@ struct usb_device_id pvr2_device_table[] = { | |||
225 | .driver_info = (kernel_ulong_t)&pvr2_device_24xxx}, | 467 | .driver_info = (kernel_ulong_t)&pvr2_device_24xxx}, |
226 | { USB_DEVICE(0x1164, 0x0622), | 468 | { USB_DEVICE(0x1164, 0x0622), |
227 | .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2}, | 469 | .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2}, |
470 | { USB_DEVICE(0x1164, 0x0602), | ||
471 | .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2d}, | ||
228 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR | 472 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR |
229 | { USB_DEVICE(0x11ba, 0x1003), | 473 | { USB_DEVICE(0x11ba, 0x1003), |
230 | .driver_info = (kernel_ulong_t)&pvr2_device_onair_creator}, | 474 | .driver_info = (kernel_ulong_t)&pvr2_device_onair_creator}, |
@@ -236,9 +480,9 @@ struct usb_device_id pvr2_device_table[] = { | |||
236 | { USB_DEVICE(0x2040, 0x7300), | 480 | { USB_DEVICE(0x2040, 0x7300), |
237 | .driver_info = (kernel_ulong_t)&pvr2_device_73xxx}, | 481 | .driver_info = (kernel_ulong_t)&pvr2_device_73xxx}, |
238 | { USB_DEVICE(0x2040, 0x7500), | 482 | { USB_DEVICE(0x2040, 0x7500), |
239 | .driver_info = (kernel_ulong_t)&pvr2_device_75xxx}, | 483 | .driver_info = (kernel_ulong_t)&pvr2_device_750xx}, |
240 | { USB_DEVICE(0x2040, 0x7501), | 484 | { USB_DEVICE(0x2040, 0x7501), |
241 | .driver_info = (kernel_ulong_t)&pvr2_device_75xxx}, | 485 | .driver_info = (kernel_ulong_t)&pvr2_device_751xx}, |
242 | { } | 486 | { } |
243 | }; | 487 | }; |
244 | 488 | ||