[media] it913x: endpoint size changes
authorMalcolm Priestley <tvboxspy@gmail.com>
Sun, 27 Nov 2011 20:35:06 +0000 (17:35 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 11 Dec 2011 09:58:25 +0000 (07:58 -0200)
Previously endpoint had been aligned to packet size (128)

Some early it9135 devices appear to have problems with this.

This patch now aligns with mpeg TS size (188)

With the pid filter off max size is increased to the maxmium
size (348 * 188)

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/it913x.c

index 9abdaee4aa6c307dc5aa71fe250850ca7b7f71bc..24f04b4ac87c6ed6b1b3c18faa6765871a9309c9 100644 (file)
@@ -337,6 +337,13 @@ static int it913x_rc_query(struct dvb_usb_device *d)
 
        return ret;
 }
+
+#define TS_MPEG_PKT_SIZE       188
+#define EP_LOW                 21
+#define TS_BUFFER_SIZE_PID     (EP_LOW*TS_MPEG_PKT_SIZE)
+#define EP_HIGH                        348
+#define TS_BUFFER_SIZE_MAX     (EP_HIGH*TS_MPEG_PKT_SIZE)
+
 static int it913x_identify_state(struct usb_device *udev,
                struct dvb_usb_device_properties *props,
                struct dvb_usb_device_description **desc,
@@ -374,6 +381,17 @@ static int it913x_identify_state(struct usb_device *udev,
        info("Dual mode=%x Remote=%x Tuner Type=%x", it913x_config.dual_mode
                , remote, it913x_config.tuner_id_0);
 
+       /* Select Stream Buffer Size */
+       if (pid_filter)
+               props->adapter[0].fe[0].stream.u.bulk.buffersize =
+                       TS_BUFFER_SIZE_MAX;
+       else
+               props->adapter[0].fe[0].stream.u.bulk.buffersize =
+                       TS_BUFFER_SIZE_PID;
+       if (it913x_config.dual_mode)
+               props->adapter[1].fe[0].stream.u.bulk.buffersize =
+                       props->adapter[0].fe[0].stream.u.bulk.buffersize;
+
        if (firm_no > 0) {
                *cold = 0;
                return 0;
@@ -511,7 +529,7 @@ static int it913x_frontend_attach(struct dvb_usb_adapter *adap)
        struct usb_device *udev = adap->dev->udev;
        int ret = 0;
        u8 adap_addr = I2C_BASE_ADDR + (adap->id << 5);
-       u16 ep_size = adap->props.fe[0].stream.u.bulk.buffersize;
+       u16 ep_size = adap->props.fe[0].stream.u.bulk.buffersize / 4;
        u8 pkt_size = 0x80;
 
        if (adap->dev->udev->speed != USB_SPEED_HIGH)
@@ -610,8 +628,8 @@ static struct dvb_usb_device_properties it913x_properties = {
                                .endpoint = 0x04,
                                .u = {/* Keep Low if PID filter on */
                                        .bulk = {
-                                               .buffersize = 3584,
-
+                                       .buffersize =
+                                               TS_BUFFER_SIZE_PID,
                                        }
                                }
                        }
@@ -635,8 +653,8 @@ static struct dvb_usb_device_properties it913x_properties = {
                                .endpoint = 0x05,
                                .u = {
                                        .bulk = {
-                                               .buffersize = 3584,
-
+                                               .buffersize =
+                                                       TS_BUFFER_SIZE_PID,
                                        }
                                }
                        }