diff options
Diffstat (limited to 'drivers/media/dvb/dvb-usb/dvb-usb-urb.c')
-rw-r--r-- | drivers/media/dvb/dvb-usb/dvb-usb-urb.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-urb.c b/drivers/media/dvb/dvb-usb/dvb-usb-urb.c index bb46ba6a357..53a5c30b51b 100644 --- a/drivers/media/dvb/dvb-usb/dvb-usb-urb.c +++ b/drivers/media/dvb/dvb-usb/dvb-usb-urb.c | |||
@@ -82,16 +82,28 @@ static void dvb_usb_data_complete_204(struct usb_data_stream *stream, u8 *buffer | |||
82 | 82 | ||
83 | int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap) | 83 | int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap) |
84 | { | 84 | { |
85 | adap->stream.udev = adap->dev->udev; | 85 | int i, ret = 0; |
86 | if (adap->props.caps & DVB_USB_ADAP_RECEIVES_204_BYTE_TS) | 86 | for (i = 0; i < adap->props.num_frontends; i++) { |
87 | adap->stream.complete = dvb_usb_data_complete_204; | 87 | |
88 | else | 88 | adap->fe_adap[i].stream.udev = adap->dev->udev; |
89 | adap->stream.complete = dvb_usb_data_complete; | 89 | if (adap->props.fe[i].caps & DVB_USB_ADAP_RECEIVES_204_BYTE_TS) |
90 | adap->stream.user_priv = adap; | 90 | adap->fe_adap[i].stream.complete = |
91 | return usb_urb_init(&adap->stream, &adap->props.stream); | 91 | dvb_usb_data_complete_204; |
92 | else | ||
93 | adap->fe_adap[i].stream.complete = dvb_usb_data_complete; | ||
94 | adap->fe_adap[i].stream.user_priv = adap; | ||
95 | ret = usb_urb_init(&adap->fe_adap[i].stream, | ||
96 | &adap->props.fe[i].stream); | ||
97 | if (ret < 0) | ||
98 | break; | ||
99 | } | ||
100 | return ret; | ||
92 | } | 101 | } |
93 | 102 | ||
94 | int dvb_usb_adapter_stream_exit(struct dvb_usb_adapter *adap) | 103 | int dvb_usb_adapter_stream_exit(struct dvb_usb_adapter *adap) |
95 | { | 104 | { |
96 | return usb_urb_exit(&adap->stream); | 105 | int i; |
106 | for (i = 0; i < adap->props.num_frontends; i++) | ||
107 | usb_urb_exit(&adap->fe_adap[i].stream); | ||
108 | return 0; | ||
97 | } | 109 | } |