[media] dvb-usb: add support for dvb-usb-adapters that deliver raw payload
authorMichael Krufky <mkrufky@kernellabs.com>
Thu, 8 Sep 2011 07:47:20 +0000 (04:47 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 20 May 2012 13:03:07 +0000 (10:03 -0300)
Select this feature setting the dvb-usb-adapter caps field with
DVB_USB_ADAP_RECEIVES_RAW_PAYLOAD

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/dvb-usb-urb.c
drivers/media/dvb/dvb-usb/dvb-usb.h

index 53a5c30b51b2665e3c43fb01868c8ce2f62f1703..5c8f651344fc1fd2a713014a82d14cea8cc3718c 100644 (file)
@@ -80,6 +80,14 @@ static void dvb_usb_data_complete_204(struct usb_data_stream *stream, u8 *buffer
                dvb_dmx_swfilter_204(&adap->demux, buffer, length);
 }
 
+static void dvb_usb_data_complete_raw(struct usb_data_stream *stream,
+                                     u8 *buffer, size_t length)
+{
+       struct dvb_usb_adapter *adap = stream->user_priv;
+       if (adap->feedcount > 0 && adap->state & DVB_USB_ADAP_STATE_DVB)
+               dvb_dmx_swfilter_raw(&adap->demux, buffer, length);
+}
+
 int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap)
 {
        int i, ret = 0;
@@ -90,6 +98,10 @@ int dvb_usb_adapter_stream_init(struct dvb_usb_adapter *adap)
                        adap->fe_adap[i].stream.complete =
                                dvb_usb_data_complete_204;
                else
+               if (adap->props.fe[i].caps & DVB_USB_ADAP_RECEIVES_RAW_PAYLOAD)
+                       adap->fe_adap[i].stream.complete =
+                               dvb_usb_data_complete_raw;
+               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,
index 6d7d13f9ce68236579a77777169a888783b04d2f..86cfa86d2d238d25f23f0610047a43fc2466ea26 100644 (file)
@@ -141,6 +141,7 @@ struct dvb_usb_adapter_fe_properties {
 #define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
 #define DVB_USB_ADAP_NEED_PID_FILTERING           0x04
 #define DVB_USB_ADAP_RECEIVES_204_BYTE_TS         0x08
+#define DVB_USB_ADAP_RECEIVES_RAW_PAYLOAD         0x10
        int caps;
        int pid_filter_count;