summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Love <brad@nextdimension.cc>2018-06-28 13:29:09 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-09-19 22:41:35 +0200
commit1b210d52abf5cc2e059bcb346875fbda3d787fc7 (patch)
tree30ac0e5713876313761facdb74f7bdace3cadd33
parent088ce054c745f94a3d7a48ceedb483164b8724d0 (diff)
downloadlinux-stable-1b210d52abf5cc2e059bcb346875fbda3d787fc7.tar.gz
linux-stable-1b210d52abf5cc2e059bcb346875fbda3d787fc7.tar.bz2
linux-stable-1b210d52abf5cc2e059bcb346875fbda3d787fc7.zip
media: em28xx: Fix dual transport stream operation
[ Upstream commit a7853c257a3ea0907467a1750ff45de4d9ba1915 ] Addresses the following, which introduced a regression itself: Commit 509f89652f83 ("media: em28xx: fix a regression with HVR-950") The regression fix breaks dual transport stream support. Currently, when a tuner starts streaming it sets alt mode on the USB interface. The problem is, in a dual tuner model, both tuners share the same USB interface, so when the second tuner becomes active and sets alt mode on the interface it kills streaming on the other port. This patch addresses the regression by only setting alt mode on the USB interface during em28xx_start_streaming, if the device is not a dual tuner model. This allows all older and single tuner devices to explicitly set alt mode during stream startup. Testers report both isoc and bulk DualHD models work correctly with the alt mode set only once, in em28xx_dvb_init. Fixes: 509f89652f83 ("media: em28xx: fix a regression with HVR-950") Signed-off-by: Brad Love <brad@nextdimension.cc> Signed-off-by: Michael Ira Krufky <mkrufky@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/media/usb/em28xx/em28xx-dvb.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
index b778d8a1983e..a73faf12f7e4 100644
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
@@ -218,7 +218,9 @@ static int em28xx_start_streaming(struct em28xx_dvb *dvb)
dvb_alt = dev->dvb_alt_isoc;
}
- usb_set_interface(udev, dev->ifnum, dvb_alt);
+ if (!dev->board.has_dual_ts)
+ usb_set_interface(udev, dev->ifnum, dvb_alt);
+
rc = em28xx_set_mode(dev, EM28XX_DIGITAL_MODE);
if (rc < 0)
return rc;