summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Love2018-02-01 23:04:37 +0100
committerMauro Carvalho Chehab2018-03-06 10:32:13 +0100
commit1b5f69f5b94489343d939700a50a0a841a16f97d (patch)
treec35abe5231b0d44870e57523262525fbed8a2ed0
parentmedia: em28xx: constify a new function (diff)
downloadkernel-qcow2-linux-1b5f69f5b94489343d939700a50a0a841a16f97d.tar.gz
kernel-qcow2-linux-1b5f69f5b94489343d939700a50a0a841a16f97d.tar.xz
kernel-qcow2-linux-1b5f69f5b94489343d939700a50a0a841a16f97d.zip
media: em28xx: Bulk transfer implementation fix
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>
-rw-r--r--drivers/media/usb/em28xx/em28xx-core.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c
index ef38e567c4bb..903d0b34f557 100644
--- a/drivers/media/usb/em28xx/em28xx-core.c
+++ b/drivers/media/usb/em28xx/em28xx-core.c
@@ -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,