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

[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
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -240,6 +240,8 @@ struct dvb_usb_device_properties {
	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;

+15 −1
Original line number Diff line number Diff line
@@ -56,8 +56,22 @@ static int dvb_usb_ctrl_feed(struct dvb_demux_feed *dvbdmxfeed, int onoff)
	 * 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 &&
+14 −3
Original line number Diff line number Diff line
@@ -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 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 =
@@ -107,8 +108,18 @@ int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap)
		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;
	}