Commit 39831f09 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab

[media] dvb_usb_v2: add .get_usb_stream_config()

New callback to resolve current USB stream configuration.
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 15072bba
...@@ -240,6 +240,8 @@ struct dvb_usb_device_properties { ...@@ -240,6 +240,8 @@ struct dvb_usb_device_properties {
int (*identify_state) (struct dvb_usb_device *); int (*identify_state) (struct dvb_usb_device *);
int (*init) (struct dvb_usb_device *); int (*init) (struct dvb_usb_device *);
int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *); 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; struct i2c_algorithm *i2c_algo;
......
...@@ -56,8 +56,22 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff) ...@@ -56,8 +56,22 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
* for reception. * for reception.
*/ */
if (adap->feedcount == onoff && adap->feedcount > 0) { 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"); 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"); deb_ts("controlling pid parser\n");
if (adap->props.fe[adap->active_fe].caps & DVB_USB_ADAP_HAS_PID_FILTER && if (adap->props.fe[adap->active_fe].caps & DVB_USB_ADAP_HAS_PID_FILTER &&
......
...@@ -94,8 +94,9 @@ static void dvb_usb_data_complete_raw(struct usb_data_stream *stream, ...@@ -94,8 +94,9 @@ static void dvb_usb_data_complete_raw(struct usb_data_stream *stream,
int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap) int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap)
{ {
int i, ret = 0; 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; adap->fe_adap[i].stream.udev = adap->dev->udev;
if (adap->props.fe[i].caps & DVB_USB_ADAP_RECEIVES_204_BYTE_TS) if (adap->props.fe[i].caps & DVB_USB_ADAP_RECEIVES_204_BYTE_TS)
adap->fe_adap[i].stream.complete = adap->fe_adap[i].stream.complete =
...@@ -107,8 +108,18 @@ int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap) ...@@ -107,8 +108,18 @@ int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap)
else else
adap->fe_adap[i].stream.complete = dvb_usb_data_complete; adap->fe_adap[i].stream.complete = dvb_usb_data_complete;
adap->fe_adap[i].stream.user_priv = adap; 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) if (ret < 0)
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment