From: Antti Palosaari Date: Tue, 29 May 2012 00:28:01 +0000 (-0300) Subject: [media] dvb_usb_v2: add .get_usb_stream_config() X-Git-Tag: next-20120816~66^2^2~211 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=39831f094fb703412c23a1178d28e1d8d1aa4d18;p=karo-tx-linux.git [media] dvb_usb_v2: add .get_usb_stream_config() New callback to resolve current USB stream configuration. Signed-off-by: Antti Palosaari Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/dvb/dvb-usb/dvb_usb.h b/drivers/media/dvb/dvb-usb/dvb_usb.h index 0715e72259f6..49df6fbeb1ad 100644 --- a/drivers/media/dvb/dvb-usb/dvb_usb.h +++ b/drivers/media/dvb/dvb-usb/dvb_usb.h @@ -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; diff --git a/drivers/media/dvb/dvb-usb/dvb_usb_dvb.c b/drivers/media/dvb/dvb-usb/dvb_usb_dvb.c index fd02be30b532..9ada473773d5 100644 --- a/drivers/media/dvb/dvb-usb/dvb_usb_dvb.c +++ b/drivers/media/dvb/dvb-usb/dvb_usb_dvb.c @@ -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 && diff --git a/drivers/media/dvb/dvb-usb/dvb_usb_urb.c b/drivers/media/dvb/dvb-usb/dvb_usb_urb.c index 8c98924a625a..903f77afb142 100644 --- a/drivers/media/dvb/dvb-usb/dvb_usb_urb.c +++ b/drivers/media/dvb/dvb-usb/dvb_usb_urb.c @@ -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; }