aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dvb-usb
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2012-06-19 23:32:53 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-08-04 06:56:37 -0400
commit831511bdeee8b956fc9399f61fc9b25bd808429f (patch)
tree35313549cfb3b1dc7888a7f9f5f87b40beedb4b5 /drivers/media/dvb/dvb-usb
parent9f6f82ee61b23f0234fc83be363483bc4a65d99c (diff)
[media] dvb_usb_v2: multiple small tweaks around the code
Naming, small code changes, debug writings, etc. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb/dvb-usb')
-rw-r--r--drivers/media/dvb/dvb-usb/anysee.c4
-rw-r--r--drivers/media/dvb/dvb-usb/dvb_usb.h111
-rw-r--r--drivers/media/dvb/dvb-usb/dvb_usb_core.c91
-rw-r--r--drivers/media/dvb/dvb-usb/usb_urb.c36
4 files changed, 109 insertions, 133 deletions
diff --git a/drivers/media/dvb/dvb-usb/anysee.c b/drivers/media/dvb/dvb-usb/anysee.c
index 2655034b86a..9de0004c06d 100644
--- a/drivers/media/dvb/dvb-usb/anysee.c
+++ b/drivers/media/dvb/dvb-usb/anysee.c
@@ -1264,7 +1264,7 @@ static int anysee_init(struct dvb_usb_device *d)
1264 return 0; 1264 return 0;
1265} 1265}
1266 1266
1267static void anysee_disconnect(struct dvb_usb_device *d) 1267static void anysee_exit(struct dvb_usb_device *d)
1268{ 1268{
1269 return anysee_ci_release(d); 1269 return anysee_ci_release(d);
1270} 1270}
@@ -1287,7 +1287,7 @@ static struct dvb_usb_device_properties anysee_props = {
1287 .get_rc_config = anysee_get_rc_config, 1287 .get_rc_config = anysee_get_rc_config,
1288 .frontend_ctrl = anysee_frontend_ctrl, 1288 .frontend_ctrl = anysee_frontend_ctrl,
1289 .streaming_ctrl = anysee_streaming_ctrl, 1289 .streaming_ctrl = anysee_streaming_ctrl,
1290 .disconnect = anysee_disconnect, 1290 .exit = anysee_exit,
1291 1291
1292 .num_adapters = 1, 1292 .num_adapters = 1,
1293 .adapter = { 1293 .adapter = {
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb.h b/drivers/media/dvb/dvb-usb/dvb_usb.h
index a87a9ff579c..56bf3a7f085 100644
--- a/drivers/media/dvb/dvb-usb/dvb_usb.h
+++ b/drivers/media/dvb/dvb-usb/dvb_usb.h
@@ -10,10 +10,8 @@
10#ifndef DVB_USB_H 10#ifndef DVB_USB_H
11#define DVB_USB_H 11#define DVB_USB_H
12 12
13#include <linux/input.h> 13#include <linux/usb/input.h>
14#include <linux/usb.h>
15#include <linux/firmware.h> 14#include <linux/firmware.h>
16#include <linux/mutex.h>
17#include <media/rc-core.h> 15#include <media/rc-core.h>
18 16
19#include "dvb_frontend.h" 17#include "dvb_frontend.h"
@@ -65,15 +63,35 @@
65 .rc_map = (rc), \ 63 .rc_map = (rc), \
66 }) 64 })
67 65
66struct dvb_usb_device;
67struct dvb_usb_adapter;
68
68struct dvb_usb_driver_info { 69struct dvb_usb_driver_info {
69 const char *name; 70 const char *name;
70 const char *rc_map; 71 const char *rc_map;
71 const struct dvb_usb_device_properties *props; 72 const struct dvb_usb_device_properties *props;
72}; 73};
73 74
74struct dvb_usb_device; 75/**
75struct dvb_usb_adapter; 76 * struct dvb_rc properties of remote controller, using rc-core
76struct usb_data_stream; 77 * @rc_codes: name of rc codes table
78 * @protocol: type of protocol(s) currently used by the driver
79 * @allowed_protos: protocol(s) supported by the driver
80 * @driver_type: Used to point if a device supports raw mode
81 * @change_protocol: callback to change protocol
82 * @rc_query: called to query an event event.
83 * @rc_interval: time in ms between two queries.
84 * @bulk_mode: device supports bulk mode for RC (disable polling mode)
85 */
86struct dvb_usb_rc {
87 char *map_name;
88 u64 allowed_protos;
89 int (*change_protocol)(struct rc_dev *dev, u64 rc_type);
90 int (*query) (struct dvb_usb_device *d);
91 unsigned int interval;
92 const enum rc_driver_type driver_type;
93 bool bulk_mode;
94};
77 95
78/** 96/**
79 * Properties of USB streaming - TODO this structure should be somewhere else 97 * Properties of USB streaming - TODO this structure should be somewhere else
@@ -83,13 +101,13 @@ struct usb_data_stream;
83struct usb_data_stream_properties { 101struct usb_data_stream_properties {
84#define USB_BULK 1 102#define USB_BULK 1
85#define USB_ISOC 2 103#define USB_ISOC 2
86 int type; 104 u8 type;
87 int count; 105 u8 count;
88 int endpoint; 106 u8 endpoint;
89 107
90 union { 108 union {
91 struct { 109 struct {
92 int buffersize; /* per URB */ 110 unsigned int buffersize; /* per URB */
93 } bulk; 111 } bulk;
94 struct { 112 struct {
95 int framesperurb; 113 int framesperurb;
@@ -124,10 +142,9 @@ struct dvb_usb_adapter_properties {
124#define DVB_USB_ADAP_HAS_PID_FILTER 0x01 142#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
125#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02 143#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
126#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04 144#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
127 int caps; 145 u8 caps;
128 int size_of_priv;
129 146
130 int pid_filter_count; 147 u8 pid_filter_count;
131 int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int); 148 int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
132 int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int); 149 int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
133 150
@@ -135,27 +152,6 @@ struct dvb_usb_adapter_properties {
135}; 152};
136 153
137/** 154/**
138 * struct dvb_rc properties of remote controller, using rc-core
139 * @rc_codes: name of rc codes table
140 * @protocol: type of protocol(s) currently used by the driver
141 * @allowed_protos: protocol(s) supported by the driver
142 * @driver_type: Used to point if a device supports raw mode
143 * @change_protocol: callback to change protocol
144 * @rc_query: called to query an event event.
145 * @rc_interval: time in ms between two queries.
146 * @bulk_mode: device supports bulk mode for RC (disable polling mode)
147 */
148struct dvb_usb_rc {
149 char *map_name;
150 u64 allowed_protos;
151 int (*change_protocol)(struct rc_dev *dev, u64 rc_type);
152 int (*query) (struct dvb_usb_device *d);
153 int interval;
154 const enum rc_driver_type driver_type;
155 bool bulk_mode;
156};
157
158/**
159 * struct dvb_usb_device_properties - properties of a dvb-usb-device 155 * struct dvb_usb_device_properties - properties of a dvb-usb-device
160 * @owner: owner of the dvb_adapter 156 * @owner: owner of the dvb_adapter
161 * @usb_ctrl: which USB device-side controller is in use. Needed for firmware 157 * @usb_ctrl: which USB device-side controller is in use. Needed for firmware
@@ -196,8 +192,11 @@ struct dvb_usb_device_properties {
196 const char *driver_name; 192 const char *driver_name;
197 struct module *owner; 193 struct module *owner;
198 short *adapter_nr; 194 short *adapter_nr;
195
199 u8 bInterfaceNumber; 196 u8 bInterfaceNumber;
200 int size_of_priv; 197 unsigned int size_of_priv;
198 u8 generic_bulk_ctrl_endpoint;
199 u8 generic_bulk_ctrl_endpoint_response;
201 200
202#define WARM 0 201#define WARM 0
203#define COLD 1 202#define COLD 1
@@ -207,11 +206,12 @@ struct dvb_usb_device_properties {
207 int (*download_firmware) (struct dvb_usb_device *, 206 int (*download_firmware) (struct dvb_usb_device *,
208 const struct firmware *); 207 const struct firmware *);
209 208
210 int num_adapters; 209 struct i2c_algorithm *i2c_algo;
211 int (*get_adapter_count) (struct dvb_usb_device *);
212 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
213 210
214 int (*power_ctrl) (struct dvb_usb_device *, int); 211 unsigned int num_adapters;
212 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
213 int (*get_adapter_count) (struct dvb_usb_device *);
214 int (*power_ctrl) (struct dvb_usb_device *, int);
215 int (*read_config) (struct dvb_usb_device *d); 215 int (*read_config) (struct dvb_usb_device *d);
216 int (*read_mac_address) (struct dvb_usb_adapter *, u8 []); 216 int (*read_mac_address) (struct dvb_usb_adapter *, u8 []);
217 int (*frontend_attach) (struct dvb_usb_adapter *); 217 int (*frontend_attach) (struct dvb_usb_adapter *);
@@ -221,18 +221,13 @@ struct dvb_usb_device_properties {
221 int (*fe_ioctl_override) (struct dvb_frontend *, 221 int (*fe_ioctl_override) (struct dvb_frontend *,
222 unsigned int, void *, unsigned int); 222 unsigned int, void *, unsigned int);
223 int (*init) (struct dvb_usb_device *); 223 int (*init) (struct dvb_usb_device *);
224 void (*disconnect) (struct dvb_usb_device *); 224 void (*exit) (struct dvb_usb_device *);
225 int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *); 225 int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *);
226#define DVB_USB_FE_TS_TYPE_188 0 226#define DVB_USB_FE_TS_TYPE_188 0
227#define DVB_USB_FE_TS_TYPE_204 1 227#define DVB_USB_FE_TS_TYPE_204 1
228#define DVB_USB_FE_TS_TYPE_RAW 2 228#define DVB_USB_FE_TS_TYPE_RAW 2
229 int (*get_stream_config) (struct dvb_frontend *, u8 *, 229 int (*get_stream_config) (struct dvb_frontend *, u8 *,
230 struct usb_data_stream_properties *); 230 struct usb_data_stream_properties *);
231
232 struct i2c_algorithm *i2c_algo;
233
234 int generic_bulk_ctrl_endpoint;
235 int generic_bulk_ctrl_endpoint_response;
236}; 231};
237 232
238/** 233/**
@@ -247,12 +242,12 @@ struct dvb_usb_device_properties {
247 */ 242 */
248#define MAX_NO_URBS_FOR_DATA_STREAM 10 243#define MAX_NO_URBS_FOR_DATA_STREAM 10
249struct usb_data_stream { 244struct usb_data_stream {
250 struct usb_device *udev; 245 struct usb_device *udev;
251 struct usb_data_stream_properties props; 246 struct usb_data_stream_properties props;
252 247
253#define USB_STATE_INIT 0x00 248#define USB_STATE_INIT 0x00
254#define USB_STATE_URB_BUF 0x01 249#define USB_STATE_URB_BUF 0x01
255 int state; 250 u8 state;
256 251
257 void (*complete) (struct usb_data_stream *, u8 *, size_t); 252 void (*complete) (struct usb_data_stream *, u8 *, size_t);
258 253
@@ -297,26 +292,23 @@ struct usb_data_stream {
297struct dvb_usb_adapter { 292struct dvb_usb_adapter {
298 const struct dvb_usb_adapter_properties *props; 293 const struct dvb_usb_adapter_properties *props;
299 struct usb_data_stream stream; 294 struct usb_data_stream stream;
300 u8 id; 295 u8 id;
301 u8 ts_type; 296 u8 ts_type;
302 int pid_filtering; 297 bool pid_filtering;
303 int feed_count; 298 u8 feed_count;
304 int max_feed_count; 299 u8 max_feed_count;
305 300 s8 active_fe;
306 /* sync frontend and streaming as those are different tasks */
307 struct mutex sync_mutex;
308 301
309 /* dvb */ 302 /* dvb */
310 struct dvb_adapter dvb_adap; 303 struct dvb_adapter dvb_adap;
311 struct dmxdev dmxdev; 304 struct dmxdev dmxdev;
312 struct dvb_demux demux; 305 struct dvb_demux demux;
313 struct dvb_net dvb_net; 306 struct dvb_net dvb_net;
307 struct mutex sync_mutex;
314 308
315 struct dvb_frontend *fe[MAX_NO_OF_FE_PER_ADAP]; 309 struct dvb_frontend *fe[MAX_NO_OF_FE_PER_ADAP];
316 int (*fe_init[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *); 310 int (*fe_init[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
317 int (*fe_sleep[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *); 311 int (*fe_sleep[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
318
319 int active_fe;
320}; 312};
321 313
322/** 314/**
@@ -346,11 +338,12 @@ struct dvb_usb_device {
346 const struct dvb_usb_device_properties *props; 338 const struct dvb_usb_device_properties *props;
347 const char *name; 339 const char *name;
348 const char *rc_map; 340 const char *rc_map;
349 struct dvb_usb_rc rc; 341
350 struct usb_device *udev; 342 struct usb_device *udev;
343 struct usb_interface *intf;
344 struct dvb_usb_rc rc;
351 struct work_struct probe_work; 345 struct work_struct probe_work;
352 pid_t work_pid; 346 pid_t work_pid;
353 struct usb_interface *intf;
354 int powered; 347 int powered;
355 348
356 /* locking */ 349 /* locking */
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb_core.c b/drivers/media/dvb/dvb-usb/dvb_usb_core.c
index f3e1ec2c473..42473e1dbac 100644
--- a/drivers/media/dvb/dvb-usb/dvb_usb_core.c
+++ b/drivers/media/dvb/dvb-usb/dvb_usb_core.c
@@ -12,22 +12,22 @@
12 * see Documentation/dvb/README.dvb-usb for more information 12 * see Documentation/dvb/README.dvb-usb for more information
13 */ 13 */
14#include "dvb_usb_common.h" 14#include "dvb_usb_common.h"
15#include <linux/usb/input.h>
16 15
17int dvb_usbv2_disable_rc_polling; 16int dvb_usbv2_disable_rc_polling;
18module_param_named(disable_rc_polling, dvb_usbv2_disable_rc_polling, int, 0644); 17module_param_named(disable_rc_polling, dvb_usbv2_disable_rc_polling, int, 0644);
19MODULE_PARM_DESC(disable_rc_polling, 18MODULE_PARM_DESC(disable_rc_polling,
20 "disable remote control polling (default: 0)."); 19 "disable remote control polling (default: 0)");
21static int dvb_usb_force_pid_filter_usage; 20static int dvb_usb_force_pid_filter_usage;
22module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage, 21module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage,
23 int, 0444); 22 int, 0444);
24MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a" \ 23MODULE_PARM_DESC(force_pid_filter_usage, "force all DVB USB devices to use a " \
25 " PID filter, if any (default: 0)."); 24 "PID filter, if any (default: 0)");
26 25
27static int dvb_usbv2_download_firmware(struct dvb_usb_device *d, const char *name) 26static int dvb_usbv2_download_firmware(struct dvb_usb_device *d, const char *name)
28{ 27{
29 int ret; 28 int ret;
30 const struct firmware *fw; 29 const struct firmware *fw;
30 pr_debug("%s:\n", __func__);
31 31
32 if (!d->props->download_firmware) { 32 if (!d->props->download_firmware) {
33 ret = -EINVAL; 33 ret = -EINVAL;
@@ -36,10 +36,10 @@ static int dvb_usbv2_download_firmware(struct dvb_usb_device *d, const char *nam
36 36
37 ret = request_firmware(&fw, name, &d->udev->dev); 37 ret = request_firmware(&fw, name, &d->udev->dev);
38 if (ret < 0) { 38 if (ret < 0) {
39 pr_err("%s: did not find the firmware file. (%s) " \ 39 pr_err("%s: Did not find the firmware file '%s'. " \
40 "Please see linux/Documentation/dvb/ for " \ 40 "Please see linux/Documentation/dvb/ for " \
41 "more details on firmware-problems. (%d)\n", 41 "more details on firmware-problems. Status " \
42 KBUILD_MODNAME, name, ret); 42 "%d\n", KBUILD_MODNAME, name, ret);
43 goto err; 43 goto err;
44 } 44 }
45 45
@@ -47,9 +47,7 @@ static int dvb_usbv2_download_firmware(struct dvb_usb_device *d, const char *nam
47 name); 47 name);
48 48
49 ret = d->props->download_firmware(d, fw); 49 ret = d->props->download_firmware(d, fw);
50
51 release_firmware(fw); 50 release_firmware(fw);
52
53 if (ret < 0) 51 if (ret < 0)
54 goto err; 52 goto err;
55 53
@@ -62,7 +60,6 @@ err:
62static int dvb_usbv2_i2c_init(struct dvb_usb_device *d) 60static int dvb_usbv2_i2c_init(struct dvb_usb_device *d)
63{ 61{
64 int ret; 62 int ret;
65
66 pr_debug("%s:\n", __func__); 63 pr_debug("%s:\n", __func__);
67 64
68 if (!d->props->i2c_algo) 65 if (!d->props->i2c_algo)
@@ -103,29 +100,27 @@ static void dvb_usb_read_remote_control(struct work_struct *work)
103 struct dvb_usb_device, rc_query_work.work); 100 struct dvb_usb_device, rc_query_work.work);
104 int ret; 101 int ret;
105 102
106 /* TODO: need a lock here. We can simply skip checking for the remote 103 /*
107 control if we're busy. */ 104 * When the parameter has been set to 1 via sysfs while the
108 105 * driver was running, or when bulk mode is enabled after IR init.
109 /* when the parameter has been set to 1 via sysfs while the
110 * driver was running, or when bulk mode is enabled after IR init
111 */ 106 */
112 if (dvb_usbv2_disable_rc_polling || d->rc.bulk_mode) 107 if (dvb_usbv2_disable_rc_polling || d->rc.bulk_mode)
113 return; 108 return;
114 109
115 ret = d->rc.query(d); 110 ret = d->rc.query(d);
116 if (ret < 0) 111 if (ret < 0) {
117 pr_err("%s: error %d while querying for an remote control " \ 112 pr_err("%s: rc.query() failed=%d\n", KBUILD_MODNAME, ret);
118 "event\n", KBUILD_MODNAME, ret); 113 return; /* stop polling */
114 }
119 115
120 schedule_delayed_work(&d->rc_query_work, 116 schedule_delayed_work(&d->rc_query_work,
121 msecs_to_jiffies(d->rc.interval)); 117 msecs_to_jiffies(d->rc.interval));
122} 118}
123 119
124static int dvb_usbv2_remote_init(struct dvb_usb_device *d) 120static int dvb_usbv2_remote_init(struct dvb_usb_device *d)
125{ 121{
126 int ret; 122 int ret;
127 struct rc_dev *dev; 123 struct rc_dev *dev;
128
129 pr_debug("%s:\n", __func__); 124 pr_debug("%s:\n", __func__);
130 125
131 if (dvb_usbv2_disable_rc_polling || !d->props->get_rc_config) 126 if (dvb_usbv2_disable_rc_polling || !d->props->get_rc_config)
@@ -142,7 +137,7 @@ static int dvb_usbv2_remote_init(struct dvb_usb_device *d)
142 } 137 }
143 138
144 dev->dev.parent = &d->udev->dev; 139 dev->dev.parent = &d->udev->dev;
145 dev->input_name = "IR-receiver inside an USB DVB receiver"; 140 dev->input_name = d->name;
146 usb_make_path(d->udev, d->rc_phys, sizeof(d->rc_phys)); 141 usb_make_path(d->udev, d->rc_phys, sizeof(d->rc_phys));
147 strlcat(d->rc_phys, "/ir0", sizeof(d->rc_phys)); 142 strlcat(d->rc_phys, "/ir0", sizeof(d->rc_phys));
148 dev->input_phys = d->rc_phys; 143 dev->input_phys = d->rc_phys;
@@ -153,13 +148,10 @@ static int dvb_usbv2_remote_init(struct dvb_usb_device *d)
153 dev->allowed_protos = d->rc.allowed_protos; 148 dev->allowed_protos = d->rc.allowed_protos;
154 dev->change_protocol = d->rc.change_protocol; 149 dev->change_protocol = d->rc.change_protocol;
155 dev->priv = d; 150 dev->priv = d;
156 /* select used keymap */
157 if (d->rc.map_name) 151 if (d->rc.map_name)
158 dev->map_name = d->rc.map_name; 152 dev->map_name = d->rc.map_name;
159 else if (d->rc_map)
160 dev->map_name = d->rc_map;
161 else 153 else
162 dev->map_name = RC_MAP_EMPTY; /* keep rc enabled */ 154 dev->map_name = d->rc_map;
163 155
164 ret = rc_register_device(dev); 156 ret = rc_register_device(dev);
165 if (ret < 0) { 157 if (ret < 0) {
@@ -235,9 +227,8 @@ int dvb_usbv2_adapter_stream_init(struct dvb_usb_adapter *adap)
235int dvb_usbv2_adapter_stream_exit(struct dvb_usb_adapter *adap) 227int dvb_usbv2_adapter_stream_exit(struct dvb_usb_adapter *adap)
236{ 228{
237 pr_debug("%s: adap=%d\n", __func__, adap->id); 229 pr_debug("%s: adap=%d\n", __func__, adap->id);
238 usb_urb_exitv2(&adap->stream);
239 230
240 return 0; 231 return usb_urb_exitv2(&adap->stream);
241} 232}
242 233
243static inline int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, 234static inline int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed,
@@ -369,7 +360,7 @@ int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
369 if (ret < 0) { 360 if (ret < 0) {
370 pr_debug("%s: dvb_register_adapter() failed=%d\n", __func__, 361 pr_debug("%s: dvb_register_adapter() failed=%d\n", __func__,
371 ret); 362 ret);
372 goto err; 363 goto err_dvb_register_adapter;
373 } 364 }
374 365
375 adap->dvb_adap.priv = adap; 366 adap->dvb_adap.priv = adap;
@@ -378,7 +369,7 @@ int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
378 ret = d->props->read_mac_address(adap, 369 ret = d->props->read_mac_address(adap,
379 adap->dvb_adap.proposed_mac); 370 adap->dvb_adap.proposed_mac);
380 if (ret < 0) 371 if (ret < 0)
381 goto err_dmx; 372 goto err_dvb_dmx_init;
382 373
383 pr_info("%s: MAC address: %pM\n", KBUILD_MODNAME, 374 pr_info("%s: MAC address: %pM\n", KBUILD_MODNAME,
384 adap->dvb_adap.proposed_mac); 375 adap->dvb_adap.proposed_mac);
@@ -387,8 +378,7 @@ int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
387 adap->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING; 378 adap->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
388 adap->demux.priv = adap; 379 adap->demux.priv = adap;
389 adap->demux.filternum = 0; 380 adap->demux.filternum = 0;
390 if (adap->demux.filternum < adap->max_feed_count) 381 adap->demux.filternum = adap->max_feed_count;
391 adap->demux.filternum = adap->max_feed_count;
392 adap->demux.feednum = adap->demux.filternum; 382 adap->demux.feednum = adap->demux.filternum;
393 adap->demux.start_feed = dvb_usb_start_feed; 383 adap->demux.start_feed = dvb_usb_start_feed;
394 adap->demux.stop_feed = dvb_usb_stop_feed; 384 adap->demux.stop_feed = dvb_usb_stop_feed;
@@ -396,7 +386,7 @@ int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
396 ret = dvb_dmx_init(&adap->demux); 386 ret = dvb_dmx_init(&adap->demux);
397 if (ret < 0) { 387 if (ret < 0) {
398 pr_err("%s: dvb_dmx_init() failed=%d\n", KBUILD_MODNAME, ret); 388 pr_err("%s: dvb_dmx_init() failed=%d\n", KBUILD_MODNAME, ret);
399 goto err_dmx; 389 goto err_dvb_dmx_init;
400 } 390 }
401 391
402 adap->dmxdev.filternum = adap->demux.filternum; 392 adap->dmxdev.filternum = adap->demux.filternum;
@@ -406,25 +396,25 @@ int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
406 if (ret < 0) { 396 if (ret < 0) {
407 pr_err("%s: dvb_dmxdev_init() failed=%d\n", KBUILD_MODNAME, 397 pr_err("%s: dvb_dmxdev_init() failed=%d\n", KBUILD_MODNAME,
408 ret); 398 ret);
409 goto err_dmx_dev; 399 goto err_dvb_dmxdev_init;
410 } 400 }
411 401
412 ret = dvb_net_init(&adap->dvb_adap, &adap->dvb_net, &adap->demux.dmx); 402 ret = dvb_net_init(&adap->dvb_adap, &adap->dvb_net, &adap->demux.dmx);
413 if (ret < 0) { 403 if (ret < 0) {
414 pr_err("%s: dvb_net_init() failed=%d\n", KBUILD_MODNAME, ret); 404 pr_err("%s: dvb_net_init() failed=%d\n", KBUILD_MODNAME, ret);
415 goto err_net_init; 405 goto err_dvb_net_init;
416 } 406 }
417 407
418 mutex_init(&adap->sync_mutex); 408 mutex_init(&adap->sync_mutex);
419 409
420 return 0; 410 return 0;
421err_net_init: 411err_dvb_net_init:
422 dvb_dmxdev_release(&adap->dmxdev); 412 dvb_dmxdev_release(&adap->dmxdev);
423err_dmx_dev: 413err_dvb_dmxdev_init:
424 dvb_dmx_release(&adap->demux); 414 dvb_dmx_release(&adap->demux);
425err_dmx: 415err_dvb_dmx_init:
426 dvb_unregister_adapter(&adap->dvb_adap); 416 dvb_unregister_adapter(&adap->dvb_adap);
427err: 417err_dvb_register_adapter:
428 adap->dvb_adap.priv = NULL; 418 adap->dvb_adap.priv = NULL;
429 return ret; 419 return ret;
430} 420}
@@ -468,7 +458,7 @@ err:
468 return ret; 458 return ret;
469} 459}
470 460
471static int dvb_usb_fe_wakeup(struct dvb_frontend *fe) 461static int dvb_usb_fe_init(struct dvb_frontend *fe)
472{ 462{
473 int ret; 463 int ret;
474 struct dvb_usb_adapter *adap = fe->dvb->priv; 464 struct dvb_usb_adapter *adap = fe->dvb->priv;
@@ -560,10 +550,9 @@ int dvb_usbv2_adapter_frontend_init(struct dvb_usb_adapter *adap)
560 550
561 for (i = 0; i < MAX_NO_OF_FE_PER_ADAP && adap->fe[i]; i++) { 551 for (i = 0; i < MAX_NO_OF_FE_PER_ADAP && adap->fe[i]; i++) {
562 adap->fe[i]->id = i; 552 adap->fe[i]->id = i;
563
564 /* re-assign sleep and wakeup functions */ 553 /* re-assign sleep and wakeup functions */
565 adap->fe_init[i] = adap->fe[i]->ops.init; 554 adap->fe_init[i] = adap->fe[i]->ops.init;
566 adap->fe[i]->ops.init = dvb_usb_fe_wakeup; 555 adap->fe[i]->ops.init = dvb_usb_fe_init;
567 adap->fe_sleep[i] = adap->fe[i]->ops.sleep; 556 adap->fe_sleep[i] = adap->fe[i]->ops.sleep;
568 adap->fe[i]->ops.sleep = dvb_usb_fe_sleep; 557 adap->fe[i]->ops.sleep = dvb_usb_fe_sleep;
569 558
@@ -699,7 +688,6 @@ err:
699static int dvb_usbv2_adapter_exit(struct dvb_usb_device *d) 688static int dvb_usbv2_adapter_exit(struct dvb_usb_device *d)
700{ 689{
701 int i; 690 int i;
702
703 pr_debug("%s:\n", __func__); 691 pr_debug("%s:\n", __func__);
704 692
705 for (i = MAX_NO_OF_ADAPTER_PER_DEVICE - 1; i >= 0; i--) { 693 for (i = MAX_NO_OF_ADAPTER_PER_DEVICE - 1; i >= 0; i--) {
@@ -727,7 +715,8 @@ static int dvb_usbv2_exit(struct dvb_usb_device *d)
727 715
728static int dvb_usbv2_init(struct dvb_usb_device *d) 716static int dvb_usbv2_init(struct dvb_usb_device *d)
729{ 717{
730 int ret = 0; 718 int ret;
719 pr_debug("%s:\n", __func__);
731 720
732 dvb_usbv2_device_power_ctrl(d, 1); 721 dvb_usbv2_device_power_ctrl(d, 1);
733 722
@@ -770,7 +759,6 @@ err:
770 * is this routine. Due to that we delay actual operation using workqueue 759 * is this routine. Due to that we delay actual operation using workqueue
771 * and return always success here. 760 * and return always success here.
772 */ 761 */
773
774static void dvb_usbv2_init_work(struct work_struct *work) 762static void dvb_usbv2_init_work(struct work_struct *work)
775{ 763{
776 int ret; 764 int ret;
@@ -778,7 +766,6 @@ static void dvb_usbv2_init_work(struct work_struct *work)
778 container_of(work, struct dvb_usb_device, probe_work); 766 container_of(work, struct dvb_usb_device, probe_work);
779 767
780 d->work_pid = current->pid; 768 d->work_pid = current->pid;
781
782 pr_debug("%s: work_pid=%d\n", __func__, d->work_pid); 769 pr_debug("%s: work_pid=%d\n", __func__, d->work_pid);
783 770
784 if (d->props->size_of_priv) { 771 if (d->props->size_of_priv) {
@@ -817,7 +804,8 @@ static void dvb_usbv2_init_work(struct work_struct *work)
817 */ 804 */
818 return; 805 return;
819 } else { 806 } else {
820 /* Unexpected error. We must unregister driver 807 /*
808 * Unexpected error. We must unregister driver
821 * manually from the device, because device is 809 * manually from the device, because device is
822 * already register by returning from probe() 810 * already register by returning from probe()
823 * with success. usb_driver_release_interface() 811 * with success. usb_driver_release_interface()
@@ -844,7 +832,6 @@ static void dvb_usbv2_init_work(struct work_struct *work)
844err_usb_driver_release_interface: 832err_usb_driver_release_interface:
845 pr_info("%s: '%s' error while loading driver (%d)\n", KBUILD_MODNAME, 833 pr_info("%s: '%s' error while loading driver (%d)\n", KBUILD_MODNAME,
846 d->name, ret); 834 d->name, ret);
847 /* it finally calls disconnect() which frees mem */
848 usb_driver_release_interface(to_usb_driver(d->intf->dev.driver), 835 usb_driver_release_interface(to_usb_driver(d->intf->dev.driver),
849 d->intf); 836 d->intf);
850 pr_debug("%s: failed=%d\n", __func__, ret); 837 pr_debug("%s: failed=%d\n", __func__, ret);
@@ -909,8 +896,7 @@ EXPORT_SYMBOL(dvb_usbv2_probe);
909void dvb_usbv2_disconnect(struct usb_interface *intf) 896void dvb_usbv2_disconnect(struct usb_interface *intf)
910{ 897{
911 struct dvb_usb_device *d = usb_get_intfdata(intf); 898 struct dvb_usb_device *d = usb_get_intfdata(intf);
912 const char *name; 899 const char *name = d->name;
913
914 pr_debug("%s: pid=%d work_pid=%d\n", __func__, current->pid, 900 pr_debug("%s: pid=%d work_pid=%d\n", __func__, current->pid,
915 d->work_pid); 901 d->work_pid);
916 902
@@ -918,10 +904,9 @@ void dvb_usbv2_disconnect(struct usb_interface *intf)
918 if (d->work_pid != current->pid) 904 if (d->work_pid != current->pid)
919 cancel_work_sync(&d->probe_work); 905 cancel_work_sync(&d->probe_work);
920 906
921 if (d->props->disconnect) 907 if (d->props->exit)
922 d->props->disconnect(d); 908 d->props->exit(d);
923 909
924 name = d->name;
925 dvb_usbv2_exit(d); 910 dvb_usbv2_exit(d);
926 911
927 pr_info("%s: '%s' successfully deinitialized and disconnected\n", 912 pr_info("%s: '%s' successfully deinitialized and disconnected\n",
@@ -933,7 +918,6 @@ int dvb_usbv2_suspend(struct usb_interface *intf, pm_message_t msg)
933{ 918{
934 struct dvb_usb_device *d = usb_get_intfdata(intf); 919 struct dvb_usb_device *d = usb_get_intfdata(intf);
935 int i; 920 int i;
936
937 pr_debug("%s:\n", __func__); 921 pr_debug("%s:\n", __func__);
938 922
939 /* stop remote controller poll */ 923 /* stop remote controller poll */
@@ -955,7 +939,6 @@ int dvb_usbv2_resume(struct usb_interface *intf)
955{ 939{
956 struct dvb_usb_device *d = usb_get_intfdata(intf); 940 struct dvb_usb_device *d = usb_get_intfdata(intf);
957 int i; 941 int i;
958
959 pr_debug("%s:\n", __func__); 942 pr_debug("%s:\n", __func__);
960 943
961 /* start streaming */ 944 /* start streaming */
diff --git a/drivers/media/dvb/dvb-usb/usb_urb.c b/drivers/media/dvb/dvb-usb/usb_urb.c
index 32e80be2168..d860dac2a83 100644
--- a/drivers/media/dvb/dvb-usb/usb_urb.c
+++ b/drivers/media/dvb/dvb-usb/usb_urb.c
@@ -38,7 +38,7 @@ static void usb_urb_complete(struct urb *urb)
38 case -ESHUTDOWN: 38 case -ESHUTDOWN:
39 return; 39 return;
40 default: /* error */ 40 default: /* error */
41 pr_debug("%s: URB completition failed=%d\n", __func__, 41 pr_debug("%s: urb completition failed=%d\n", __func__,
42 urb->status); 42 urb->status);
43 break; 43 break;
44 } 44 }
@@ -76,7 +76,7 @@ int usb_urb_killv2(struct usb_data_stream *stream)
76{ 76{
77 int i; 77 int i;
78 for (i = 0; i < stream->urbs_submitted; i++) { 78 for (i = 0; i < stream->urbs_submitted; i++) {
79 pr_debug("%s: kill URB=%d\n", __func__, i); 79 pr_debug("%s: kill urb=%d\n", __func__, i);
80 /* stop the URB */ 80 /* stop the URB */
81 usb_kill_urb(stream->urb_list[i]); 81 usb_kill_urb(stream->urb_list[i]);
82 } 82 }
@@ -96,10 +96,10 @@ int usb_urb_submitv2(struct usb_data_stream *stream,
96 } 96 }
97 97
98 for (i = 0; i < stream->urbs_initialized; i++) { 98 for (i = 0; i < stream->urbs_initialized; i++) {
99 pr_debug("%s: submit URB=%d\n", __func__, i); 99 pr_debug("%s: submit urb=%d\n", __func__, i);
100 ret = usb_submit_urb(stream->urb_list[i], GFP_ATOMIC); 100 ret = usb_submit_urb(stream->urb_list[i], GFP_ATOMIC);
101 if (ret) { 101 if (ret) {
102 pr_err("%s: could not submit URB no. %d - get them " \ 102 pr_err("%s: could not submit urb no. %d - get them " \
103 "all back\n", KBUILD_MODNAME, i); 103 "all back\n", KBUILD_MODNAME, i);
104 usb_urb_killv2(stream); 104 usb_urb_killv2(stream);
105 return ret; 105 return ret;
@@ -115,9 +115,9 @@ int usb_urb_free_urbs(struct usb_data_stream *stream)
115 115
116 usb_urb_killv2(stream); 116 usb_urb_killv2(stream);
117 117
118 for (i = 0; i < stream->urbs_initialized; i++) { 118 for (i = stream->urbs_initialized - 1; i >= 0; i--) {
119 if (stream->urb_list[i] != NULL) { 119 if (stream->urb_list[i]) {
120 pr_debug("%s: free URB=%d\n", __func__, i); 120 pr_debug("%s: free urb=%d\n", __func__, i);
121 /* free the URBs */ 121 /* free the URBs */
122 usb_free_urb(stream->urb_list[i]); 122 usb_free_urb(stream->urb_list[i]);
123 } 123 }
@@ -133,7 +133,7 @@ static int usb_urb_alloc_bulk_urbs(struct usb_data_stream *stream)
133 133
134 /* allocate the URBs */ 134 /* allocate the URBs */
135 for (i = 0; i < stream->props.count; i++) { 135 for (i = 0; i < stream->props.count; i++) {
136 pr_debug("%s: alloc URB=%d\n", __func__, i); 136 pr_debug("%s: alloc urb=%d\n", __func__, i);
137 stream->urb_list[i] = usb_alloc_urb(0, GFP_ATOMIC); 137 stream->urb_list[i] = usb_alloc_urb(0, GFP_ATOMIC);
138 if (!stream->urb_list[i]) { 138 if (!stream->urb_list[i]) {
139 pr_debug("%s: failed\n", __func__); 139 pr_debug("%s: failed\n", __func__);
@@ -164,7 +164,7 @@ static int usb_urb_alloc_isoc_urbs(struct usb_data_stream *stream)
164 for (i = 0; i < stream->props.count; i++) { 164 for (i = 0; i < stream->props.count; i++) {
165 struct urb *urb; 165 struct urb *urb;
166 int frame_offset = 0; 166 int frame_offset = 0;
167 pr_debug("%s: alloc URB=%d\n", __func__, i); 167 pr_debug("%s: alloc urb=%d\n", __func__, i);
168 stream->urb_list[i] = usb_alloc_urb( 168 stream->urb_list[i] = usb_alloc_urb(
169 stream->props.u.isoc.framesperurb, GFP_ATOMIC); 169 stream->props.u.isoc.framesperurb, GFP_ATOMIC);
170 if (!stream->urb_list[i]) { 170 if (!stream->urb_list[i]) {
@@ -229,17 +229,17 @@ int usb_alloc_stream_buffers(struct usb_data_stream *stream, int num,
229 __func__, num * size); 229 __func__, num * size);
230 230
231 for (stream->buf_num = 0; stream->buf_num < num; stream->buf_num++) { 231 for (stream->buf_num = 0; stream->buf_num < num; stream->buf_num++) {
232 pr_debug("%s: alloc buf=%d\n", __func__, stream->buf_num);
233 stream->buf_list[stream->buf_num] = usb_alloc_coherent( 232 stream->buf_list[stream->buf_num] = usb_alloc_coherent(
234 stream->udev, size, GFP_ATOMIC, 233 stream->udev, size, GFP_ATOMIC,
235 &stream->dma_addr[stream->buf_num]); 234 &stream->dma_addr[stream->buf_num]);
236 if (stream->buf_list[stream->buf_num] == NULL) { 235 if (!stream->buf_list[stream->buf_num]) {
237 pr_debug("%s: failed\n", __func__); 236 pr_debug("%s: alloc buf=%d failed\n", __func__,
237 stream->buf_num);
238 usb_free_stream_buffers(stream); 238 usb_free_stream_buffers(stream);
239 return -ENOMEM; 239 return -ENOMEM;
240 } 240 }
241 241
242 pr_debug("%s: buf %d: %p (dma %llu)\n", __func__, 242 pr_debug("%s: alloc buf=%d %p (dma %llu)\n", __func__,
243 stream->buf_num, 243 stream->buf_num,
244 stream->buf_list[stream->buf_num], 244 stream->buf_list[stream->buf_num],
245 (long long)stream->dma_addr[stream->buf_num]); 245 (long long)stream->dma_addr[stream->buf_num]);
@@ -255,7 +255,7 @@ int usb_urb_reconfig(struct usb_data_stream *stream,
255{ 255{
256 int buf_size; 256 int buf_size;
257 257
258 if (props == NULL) 258 if (!props)
259 return 0; 259 return 0;
260 260
261 /* check allocated buffers are large enough for the request */ 261 /* check allocated buffers are large enough for the request */
@@ -293,7 +293,7 @@ int usb_urb_reconfig(struct usb_data_stream *stream,
293 return 0; 293 return 0;
294 } 294 }
295 295
296 pr_debug("%s: re-alloc URBs\n", __func__); 296 pr_debug("%s: re-alloc urbs\n", __func__);
297 297
298 usb_urb_free_urbs(stream); 298 usb_urb_free_urbs(stream);
299 memcpy(&stream->props, props, sizeof(*props)); 299 memcpy(&stream->props, props, sizeof(*props));
@@ -310,7 +310,7 @@ int usb_urb_initv2(struct usb_data_stream *stream,
310{ 310{
311 int ret; 311 int ret;
312 312
313 if (stream == NULL || props == NULL) 313 if (!stream || !props)
314 return -EINVAL; 314 return -EINVAL;
315 315
316 memcpy(&stream->props, props, sizeof(*props)); 316 memcpy(&stream->props, props, sizeof(*props));
@@ -318,7 +318,7 @@ int usb_urb_initv2(struct usb_data_stream *stream,
318 usb_clear_halt(stream->udev, usb_rcvbulkpipe(stream->udev, 318 usb_clear_halt(stream->udev, usb_rcvbulkpipe(stream->udev,
319 stream->props.endpoint)); 319 stream->props.endpoint));
320 320
321 if (stream->complete == NULL) { 321 if (!stream->complete) {
322 pr_err("%s: there is no data callback - this doesn't make " \ 322 pr_err("%s: there is no data callback - this doesn't make " \
323 "sense\n", KBUILD_MODNAME); 323 "sense\n", KBUILD_MODNAME);
324 return -EINVAL; 324 return -EINVAL;
@@ -341,7 +341,7 @@ int usb_urb_initv2(struct usb_data_stream *stream,
341 341
342 return usb_urb_alloc_isoc_urbs(stream); 342 return usb_urb_alloc_isoc_urbs(stream);
343 default: 343 default:
344 pr_err("%s: unknown URB-type for data transfer\n", 344 pr_err("%s: unknown urb-type for data transfer\n",
345 KBUILD_MODNAME); 345 KBUILD_MODNAME);
346 return -EINVAL; 346 return -EINVAL;
347 } 347 }