aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/pvrusb2
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/pvrusb2')
-rw-r--r--drivers/media/video/pvrusb2/Kconfig55
-rw-r--r--drivers/media/video/pvrusb2/Makefile1
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-debug.h1
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-devattr.c8
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-dvb.c42
5 files changed, 39 insertions, 68 deletions
diff --git a/drivers/media/video/pvrusb2/Kconfig b/drivers/media/video/pvrusb2/Kconfig
index 158b3d0c6532..9620c67fae77 100644
--- a/drivers/media/video/pvrusb2/Kconfig
+++ b/drivers/media/video/pvrusb2/Kconfig
@@ -1,14 +1,15 @@
1config VIDEO_PVRUSB2 1config VIDEO_PVRUSB2
2 tristate "Hauppauge WinTV-PVR USB2 support" 2 tristate "Hauppauge WinTV-PVR USB2 support"
3 depends on VIDEO_V4L2 && I2C && EXPERIMENTAL 3 depends on VIDEO_V4L2 && I2C
4 select FW_LOADER 4 select FW_LOADER
5 select VIDEO_TUNER 5 select MEDIA_TUNER
6 select VIDEO_TVEEPROM 6 select VIDEO_TVEEPROM
7 select VIDEO_CX2341X 7 select VIDEO_CX2341X
8 select VIDEO_SAA711X 8 select VIDEO_SAA711X
9 select VIDEO_CX25840 9 select VIDEO_CX25840
10 select VIDEO_MSP3400 10 select VIDEO_MSP3400
11 select VIDEO_WM8775 11 select VIDEO_WM8775
12 select VIDEO_CS53L32A
12 ---help--- 13 ---help---
13 This is a video4linux driver for Conexant 23416 based 14 This is a video4linux driver for Conexant 23416 based
14 usb2 personal video recorder devices. 15 usb2 personal video recorder devices.
@@ -16,32 +17,6 @@ config VIDEO_PVRUSB2
16 To compile this driver as a module, choose M here: the 17 To compile this driver as a module, choose M here: the
17 module will be called pvrusb2 18 module will be called pvrusb2
18 19
19config VIDEO_PVRUSB2_ONAIR_CREATOR
20 bool "pvrusb2 driver support for OnAir Creator model"
21 depends on VIDEO_PVRUSB2 && EXPERIMENTAL
22 select VIDEO_SAA711X
23 select VIDEO_CS53L32A
24 ---help---
25
26 This option enables support for the OnAir Creator USB tuner
27 device. This is a hybrid device, however currently only
28 analog mode is supported.
29
30 If you are in doubt, say Y.
31
32config VIDEO_PVRUSB2_ONAIR_USB2
33 bool "pvrusb2 driver support for OnAir USB2 model"
34 depends on VIDEO_PVRUSB2 && EXPERIMENTAL
35 select VIDEO_SAA711X
36 select VIDEO_CS53L32A
37 ---help---
38
39 This option enables support for the OnAir USB2 tuner device
40 (also known as the Sasem tuner). This is a hybrid device,
41 however currently only analog mode is supported.
42
43 If you are in doubt, say Y.
44
45config VIDEO_PVRUSB2_SYSFS 20config VIDEO_PVRUSB2_SYSFS
46 bool "pvrusb2 sysfs support (EXPERIMENTAL)" 21 bool "pvrusb2 sysfs support (EXPERIMENTAL)"
47 default y 22 default y
@@ -59,29 +34,23 @@ config VIDEO_PVRUSB2_SYSFS
59 Note: This feature is experimental and subject to change. 34 Note: This feature is experimental and subject to change.
60 35
61config VIDEO_PVRUSB2_DVB 36config VIDEO_PVRUSB2_DVB
62 bool "pvrusb2 DVB support (EXPERIMENTAL)" 37 bool "pvrusb2 ATSC/DVB support (EXPERIMENTAL)"
63 default n 38 default y
64 depends on VIDEO_PVRUSB2 && DVB_CORE && EXPERIMENTAL 39 depends on VIDEO_PVRUSB2 && DVB_CORE && EXPERIMENTAL
65 select DVB_LGDT330X if !DVB_FE_CUSTOMISE 40 select DVB_LGDT330X if !DVB_FE_CUSTOMISE
66 select DVB_S5H1409 if !DVB_FE_CUSTOMISE 41 select DVB_S5H1409 if !DVB_FE_CUSTOMISE
67 select DVB_S5H1411 if !DVB_FE_CUSTOMISE 42 select DVB_S5H1411 if !DVB_FE_CUSTOMISE
68 select DVB_TDA10048 if !DVB_FE_CUSTOMIZE 43 select DVB_TDA10048 if !DVB_FE_CUSTOMIZE
69 select DVB_TDA18271 if !DVB_FE_CUSTOMIZE 44 select MEDIA_TUNER_TDA18271 if !DVB_FE_CUSTOMIZE
70 select TUNER_SIMPLE if !DVB_FE_CUSTOMISE 45 select MEDIA_TUNER_SIMPLE if !DVB_FE_CUSTOMISE
71 select TUNER_TDA8290 if !DVB_FE_CUSTOMIZE 46 select MEDIA_TUNER_TDA8290 if !DVB_FE_CUSTOMIZE
72 ---help--- 47 ---help---
73 48
74 This option enables compilation of a DVB interface for the 49 This option enables a DVB interface for the pvrusb2 driver.
75 pvrusb2 driver. Currently this is very very experimental. 50 If your device does not support digital television, this
76 It is also limiting - the DVB interface can only access the 51 feature will have no affect on the driver's operation.
77 digital side of hybrid devices, and there are going to be
78 issues if you attempt to mess with the V4L side at the same
79 time. Don't turn this on unless you know what you are
80 doing.
81
82 If you are in doubt, say N.
83 52
84 Note: This feature is very experimental and might break 53 If you are in doubt, say Y.
85 54
86config VIDEO_PVRUSB2_DEBUGIFC 55config VIDEO_PVRUSB2_DEBUGIFC
87 bool "pvrusb2 debug interface" 56 bool "pvrusb2 debug interface"
diff --git a/drivers/media/video/pvrusb2/Makefile b/drivers/media/video/pvrusb2/Makefile
index 5b3083c89aa9..4fda2de69ab7 100644
--- a/drivers/media/video/pvrusb2/Makefile
+++ b/drivers/media/video/pvrusb2/Makefile
@@ -16,5 +16,6 @@ pvrusb2-objs := pvrusb2-i2c-core.o pvrusb2-i2c-cmd-v4l2.o \
16obj-$(CONFIG_VIDEO_PVRUSB2) += pvrusb2.o 16obj-$(CONFIG_VIDEO_PVRUSB2) += pvrusb2.o
17 17
18EXTRA_CFLAGS += -Idrivers/media/video 18EXTRA_CFLAGS += -Idrivers/media/video
19EXTRA_CFLAGS += -Idrivers/media/common/tuners
19EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core 20EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
20EXTRA_CFLAGS += -Idrivers/media/dvb/frontends 21EXTRA_CFLAGS += -Idrivers/media/dvb/frontends
diff --git a/drivers/media/video/pvrusb2/pvrusb2-debug.h b/drivers/media/video/pvrusb2/pvrusb2-debug.h
index 11537ddf8aa3..707d2d9635d7 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-debug.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-debug.h
@@ -54,6 +54,7 @@ extern int pvrusb2_debug;
54#define PVR2_TRACE_DATA_FLOW (1 << 25) /* Track data flow */ 54#define PVR2_TRACE_DATA_FLOW (1 << 25) /* Track data flow */
55#define PVR2_TRACE_DEBUGIFC (1 << 26) /* Debug interface actions */ 55#define PVR2_TRACE_DEBUGIFC (1 << 26) /* Debug interface actions */
56#define PVR2_TRACE_GPIO (1 << 27) /* GPIO state bit changes */ 56#define PVR2_TRACE_GPIO (1 << 27) /* GPIO state bit changes */
57#define PVR2_TRACE_DVB_FEED (1 << 28) /* DVB transport feed debug */
57 58
58 59
59#endif /* __PVRUSB2_HDW_INTERNAL_H */ 60#endif /* __PVRUSB2_HDW_INTERNAL_H */
diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.c b/drivers/media/video/pvrusb2/pvrusb2-devattr.c
index 3a141d93e1a9..5bf6d8fda1f9 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-devattr.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.c
@@ -153,7 +153,6 @@ static const struct pvr2_device_desc pvr2_device_gotview_2d = {
153 153
154 154
155 155
156#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR
157/*------------------------------------------------------------------------*/ 156/*------------------------------------------------------------------------*/
158/* OnAir Creator */ 157/* OnAir Creator */
159 158
@@ -212,11 +211,9 @@ static const struct pvr2_device_desc pvr2_device_onair_creator = {
212 .dvb_props = &pvr2_onair_creator_fe_props, 211 .dvb_props = &pvr2_onair_creator_fe_props,
213#endif 212#endif
214}; 213};
215#endif
216 214
217 215
218 216
219#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2
220/*------------------------------------------------------------------------*/ 217/*------------------------------------------------------------------------*/
221/* OnAir USB 2.0 */ 218/* OnAir USB 2.0 */
222 219
@@ -274,7 +271,6 @@ static const struct pvr2_device_desc pvr2_device_onair_usb2 = {
274 .dvb_props = &pvr2_onair_usb2_fe_props, 271 .dvb_props = &pvr2_onair_usb2_fe_props,
275#endif 272#endif
276}; 273};
277#endif
278 274
279 275
280 276
@@ -497,14 +493,10 @@ struct usb_device_id pvr2_device_table[] = {
497 .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2}, 493 .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2},
498 { USB_DEVICE(0x1164, 0x0602), 494 { USB_DEVICE(0x1164, 0x0602),
499 .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2d}, 495 .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2d},
500#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR
501 { USB_DEVICE(0x11ba, 0x1003), 496 { USB_DEVICE(0x11ba, 0x1003),
502 .driver_info = (kernel_ulong_t)&pvr2_device_onair_creator}, 497 .driver_info = (kernel_ulong_t)&pvr2_device_onair_creator},
503#endif
504#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2
505 { USB_DEVICE(0x11ba, 0x1001), 498 { USB_DEVICE(0x11ba, 0x1001),
506 .driver_info = (kernel_ulong_t)&pvr2_device_onair_usb2}, 499 .driver_info = (kernel_ulong_t)&pvr2_device_onair_usb2},
507#endif
508 { USB_DEVICE(0x2040, 0x7300), 500 { USB_DEVICE(0x2040, 0x7300),
509 .driver_info = (kernel_ulong_t)&pvr2_device_73xxx}, 501 .driver_info = (kernel_ulong_t)&pvr2_device_73xxx},
510 { USB_DEVICE(0x2040, 0x7500), 502 { USB_DEVICE(0x2040, 0x7500),
diff --git a/drivers/media/video/pvrusb2/pvrusb2-dvb.c b/drivers/media/video/pvrusb2/pvrusb2-dvb.c
index 6504c97e0bbc..6ec4bf81fc7f 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-dvb.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-dvb.c
@@ -21,6 +21,7 @@
21#include <linux/kthread.h> 21#include <linux/kthread.h>
22#include <linux/freezer.h> 22#include <linux/freezer.h>
23#include "dvbdev.h" 23#include "dvbdev.h"
24#include "pvrusb2-debug.h"
24#include "pvrusb2-hdw-internal.h" 25#include "pvrusb2-hdw-internal.h"
25#include "pvrusb2-hdw.h" 26#include "pvrusb2-hdw.h"
26#include "pvrusb2-io.h" 27#include "pvrusb2-io.h"
@@ -35,7 +36,7 @@ static int pvr2_dvb_feed_func(struct pvr2_dvb_adapter *adap)
35 struct pvr2_buffer *bp; 36 struct pvr2_buffer *bp;
36 struct pvr2_stream *stream; 37 struct pvr2_stream *stream;
37 38
38 printk(KERN_DEBUG "dvb thread started\n"); 39 pvr2_trace(PVR2_TRACE_DVB_FEED, "dvb feed thread started");
39 set_freezable(); 40 set_freezable();
40 41
41 stream = adap->channel.stream->stream; 42 stream = adap->channel.stream->stream;
@@ -82,7 +83,7 @@ static int pvr2_dvb_feed_func(struct pvr2_dvb_adapter *adap)
82 /* If we get here and ret is < 0, then an error has occurred. 83 /* If we get here and ret is < 0, then an error has occurred.
83 Probably would be a good idea to communicate that to DVB core... */ 84 Probably would be a good idea to communicate that to DVB core... */
84 85
85 printk(KERN_DEBUG "dvb thread stopped\n"); 86 pvr2_trace(PVR2_TRACE_DVB_FEED, "dvb feed thread stopped");
86 87
87 return 0; 88 return 0;
88} 89}
@@ -210,7 +211,8 @@ static int pvr2_dvb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
210 do { 211 do {
211 if (onoff) { 212 if (onoff) {
212 if (!adap->feedcount) { 213 if (!adap->feedcount) {
213 printk(KERN_DEBUG "start feeding\n"); 214 pvr2_trace(PVR2_TRACE_DVB_FEED,
215 "start feeding demux");
214 ret = pvr2_dvb_stream_start(adap); 216 ret = pvr2_dvb_stream_start(adap);
215 if (ret < 0) break; 217 if (ret < 0) break;
216 } 218 }
@@ -218,7 +220,8 @@ static int pvr2_dvb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
218 } else if (adap->feedcount > 0) { 220 } else if (adap->feedcount > 0) {
219 (adap->feedcount)--; 221 (adap->feedcount)--;
220 if (!adap->feedcount) { 222 if (!adap->feedcount) {
221 printk(KERN_DEBUG "stop feeding\n"); 223 pvr2_trace(PVR2_TRACE_DVB_FEED,
224 "stop feeding demux");
222 pvr2_dvb_stream_end(adap); 225 pvr2_dvb_stream_end(adap);
223 } 226 }
224 } 227 }
@@ -230,15 +233,13 @@ static int pvr2_dvb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
230 233
231static int pvr2_dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed) 234static int pvr2_dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
232{ 235{
233 printk(KERN_DEBUG "start pid: 0x%04x, feedtype: %d\n", 236 pvr2_trace(PVR2_TRACE_DVB_FEED, "start pid: 0x%04x", dvbdmxfeed->pid);
234 dvbdmxfeed->pid, dvbdmxfeed->type);
235 return pvr2_dvb_ctrl_feed(dvbdmxfeed, 1); 237 return pvr2_dvb_ctrl_feed(dvbdmxfeed, 1);
236} 238}
237 239
238static int pvr2_dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed) 240static int pvr2_dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
239{ 241{
240 printk(KERN_DEBUG "stop pid: 0x%04x, feedtype: %d\n", 242 pvr2_trace(PVR2_TRACE_DVB_FEED, "stop pid: 0x%04x", dvbdmxfeed->pid);
241 dvbdmxfeed->pid, dvbdmxfeed->type);
242 return pvr2_dvb_ctrl_feed(dvbdmxfeed, 0); 243 return pvr2_dvb_ctrl_feed(dvbdmxfeed, 0);
243} 244}
244 245
@@ -259,7 +260,8 @@ static int pvr2_dvb_adapter_init(struct pvr2_dvb_adapter *adap)
259 &adap->channel.hdw->usb_dev->dev, 260 &adap->channel.hdw->usb_dev->dev,
260 adapter_nr); 261 adapter_nr);
261 if (ret < 0) { 262 if (ret < 0) {
262 err("dvb_register_adapter failed: error %d", ret); 263 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
264 "dvb_register_adapter failed: error %d", ret);
263 goto err; 265 goto err;
264 } 266 }
265 adap->dvb_adap.priv = adap; 267 adap->dvb_adap.priv = adap;
@@ -276,7 +278,8 @@ static int pvr2_dvb_adapter_init(struct pvr2_dvb_adapter *adap)
276 278
277 ret = dvb_dmx_init(&adap->demux); 279 ret = dvb_dmx_init(&adap->demux);
278 if (ret < 0) { 280 if (ret < 0) {
279 err("dvb_dmx_init failed: error %d", ret); 281 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
282 "dvb_dmx_init failed: error %d", ret);
280 goto err_dmx; 283 goto err_dmx;
281 } 284 }
282 285
@@ -286,7 +289,8 @@ static int pvr2_dvb_adapter_init(struct pvr2_dvb_adapter *adap)
286 289
287 ret = dvb_dmxdev_init(&adap->dmxdev, &adap->dvb_adap); 290 ret = dvb_dmxdev_init(&adap->dmxdev, &adap->dvb_adap);
288 if (ret < 0) { 291 if (ret < 0) {
289 err("dvb_dmxdev_init failed: error %d", ret); 292 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
293 "dvb_dmxdev_init failed: error %d", ret);
290 goto err_dmx_dev; 294 goto err_dmx_dev;
291 } 295 }
292 296
@@ -304,7 +308,7 @@ err:
304 308
305static int pvr2_dvb_adapter_exit(struct pvr2_dvb_adapter *adap) 309static int pvr2_dvb_adapter_exit(struct pvr2_dvb_adapter *adap)
306{ 310{
307 printk(KERN_DEBUG "unregistering DVB devices\n"); 311 pvr2_trace(PVR2_TRACE_INFO, "unregistering DVB devices");
308 dvb_net_release(&adap->dvb_net); 312 dvb_net_release(&adap->dvb_net);
309 adap->demux.dmx.close(&adap->demux.dmx); 313 adap->demux.dmx.close(&adap->demux.dmx);
310 dvb_dmxdev_release(&adap->dmxdev); 314 dvb_dmxdev_release(&adap->dmxdev);
@@ -320,7 +324,7 @@ static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap)
320 int ret = 0; 324 int ret = 0;
321 325
322 if (dvb_props == NULL) { 326 if (dvb_props == NULL) {
323 err("fe_props not defined!"); 327 pvr2_trace(PVR2_TRACE_ERROR_LEGS, "fe_props not defined!");
324 return -EINVAL; 328 return -EINVAL;
325 } 329 }
326 330
@@ -328,13 +332,15 @@ static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap)
328 &adap->channel, 332 &adap->channel,
329 (1 << PVR2_CVAL_INPUT_DTV)); 333 (1 << PVR2_CVAL_INPUT_DTV));
330 if (ret) { 334 if (ret) {
331 err("failed to grab control of dtv input (code=%d)", 335 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
336 "failed to grab control of dtv input (code=%d)",
332 ret); 337 ret);
333 return ret; 338 return ret;
334 } 339 }
335 340
336 if (dvb_props->frontend_attach == NULL) { 341 if (dvb_props->frontend_attach == NULL) {
337 err("frontend_attach not defined!"); 342 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
343 "frontend_attach not defined!");
338 ret = -EINVAL; 344 ret = -EINVAL;
339 goto done; 345 goto done;
340 } 346 }
@@ -342,7 +348,8 @@ static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap)
342 if ((dvb_props->frontend_attach(adap) == 0) && (adap->fe)) { 348 if ((dvb_props->frontend_attach(adap) == 0) && (adap->fe)) {
343 349
344 if (dvb_register_frontend(&adap->dvb_adap, adap->fe)) { 350 if (dvb_register_frontend(&adap->dvb_adap, adap->fe)) {
345 err("frontend registration failed!"); 351 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
352 "frontend registration failed!");
346 dvb_frontend_detach(adap->fe); 353 dvb_frontend_detach(adap->fe);
347 adap->fe = NULL; 354 adap->fe = NULL;
348 ret = -ENODEV; 355 ret = -ENODEV;
@@ -359,7 +366,8 @@ static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap)
359 adap->fe->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl; 366 adap->fe->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl;
360 367
361 } else { 368 } else {
362 err("no frontend was attached!"); 369 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
370 "no frontend was attached!");
363 ret = -ENODEV; 371 ret = -ENODEV;
364 return ret; 372 return ret;
365 } 373 }