New callback to resolve current USB stream configuration.
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
int (*identify_state) (struct dvb_usb_device *);
int (*init) (struct dvb_usb_device *);
int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *);
+ int (*get_usb_stream_config) (struct dvb_frontend *,
+ struct usb_data_stream_properties *);
struct i2c_algorithm *i2c_algo;
* for reception.
*/
if (adap->feedcount == onoff && adap->feedcount > 0) {
+ struct usb_data_stream_properties stream_props;
+
+ /* resolve USB stream configuration */
+ if (adap->dev->props.get_usb_stream_config) {
+ ret = adap->dev->props.get_usb_stream_config(
+ adap->fe_adap[adap->active_fe].fe,
+ &stream_props);
+ if (ret < 0)
+ return ret;
+ } else {
+ stream_props = adap->props.fe[adap->active_fe].stream;
+ }
+
deb_ts("submitting all URBs\n");
- usb_urb_submit(&adap->fe_adap[adap->active_fe].stream, NULL);
+ usb_urb_submit(&adap->fe_adap[adap->active_fe].stream,
+ &stream_props);
deb_ts("controlling pid parser\n");
if (adap->props.fe[adap->active_fe].caps & DVB_USB_ADAP_HAS_PID_FILTER &&
int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap)
{
int i, ret = 0;
- for (i = 0; i < adap->props.num_frontends; i++) {
+ struct usb_data_stream_properties stream_props;
+ for (i = 0; i < adap->props.num_frontends; i++) {
adap->fe_adap[i].stream.udev = adap->dev->udev;
if (adap->props.fe[i].caps & DVB_USB_ADAP_RECEIVES_204_BYTE_TS)
adap->fe_adap[i].stream.complete =
else
adap->fe_adap[i].stream.complete = dvb_usb_data_complete;
adap->fe_adap[i].stream.user_priv = adap;
- ret = usb_urb_init(&adap->fe_adap[i].stream,
- &adap->props.fe[i].stream);
+
+ /* resolve USB stream configuration */
+ if (adap->dev->props.get_usb_stream_config) {
+ ret = adap->dev->props.get_usb_stream_config(NULL,
+ &stream_props);
+ if (ret < 0)
+ break;
+ } else {
+ stream_props = adap->props.fe[i].stream;
+ }
+
+ ret = usb_urb_init(&adap->fe_adap[i].stream, &stream_props);
if (ret < 0)
break;
}