media: em28xx: Bulk transfer implementation fix
authorBrad Love <brad@nextdimension.cc>
Thu, 1 Feb 2018 22:04:37 +0000 (17:04 -0500)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Tue, 6 Mar 2018 09:32:13 +0000 (04:32 -0500)
Set appropriate bulk/ISOC transfer multiplier on capture start.
This sets ISOC transfer to USB endpoint configuration
This sets bulk transfer to 48128 bytes (188 * 256)

The bulk multiplier is maximum allowed according to Empia.

Signed-off-by: Brad Love <brad@nextdimension.cc>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/usb/em28xx/em28xx-core.c

index ef38e567c4bba53c6909ff463ff48d1a3de6995c..903d0b34f55715081adcf8e8324f17a7fad577b3 100644 (file)
@@ -638,6 +638,19 @@ int em28xx_capture_start(struct em28xx *dev, int start)
            dev->chip_id == CHIP_ID_EM28174 ||
            dev->chip_id == CHIP_ID_EM28178) {
                /* The Transport Stream Enable Register moved in em2874 */
+               if (dev->dvb_xfer_bulk) {
+                       /* Max Tx Size = 188 * 256 = 48128 - LCM(188,512) * 2 */
+                       em28xx_write_reg(dev, (dev->ts == PRIMARY_TS) ?
+                                       EM2874_R5D_TS1_PKT_SIZE :
+                                       EM2874_R5E_TS2_PKT_SIZE,
+                                       0xFF);
+               } else {
+                       /* ISOC Maximum Transfer Size = 188 * 5 */
+                       em28xx_write_reg(dev, (dev->ts == PRIMARY_TS) ?
+                                       EM2874_R5D_TS1_PKT_SIZE :
+                                       EM2874_R5E_TS2_PKT_SIZE,
+                                       dev->dvb_max_pkt_size_isoc / 188);
+               }
                if (dev->ts == PRIMARY_TS)
                        rc = em28xx_write_reg_bits(dev,
                                EM2874_R5F_TS_ENABLE,