media: em28xx: fix a regression with HVR-950
authorMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 9 Mar 2018 12:21:45 +0000 (07:21 -0500)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Fri, 4 May 2018 15:00:54 +0000 (11:00 -0400)
Commit be7fd3c3a8c5 ("media: em28xx: Hauppauge DualHD second tuner
functionality") removed the logic with sets the alternate for the DVB
device. Without setting the right alternate, the device won't be
able to submit URBs, and userspace fails with -EMSGSIZE:

ERROR     DMX_SET_PES_FILTER failed (PID = 0x2000): 90 Message too long

Tested with Hauppauge HVR-950 model A1C0.

Fixes: be7fd3c3a8c5 ("media: em28xx: Hauppauge DualHD second tuner functionality")
Cc: Brad Love <brad@nextdimension.cc>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/usb/em28xx/em28xx-dvb.c

index a54cb8dc52c9a867c107b69aa7e2f2b11e0e988b..2ce7de1c7cce49fb8b90f6dfb5be18f61e74a055 100644 (file)
@@ -199,6 +199,7 @@ static int em28xx_start_streaming(struct em28xx_dvb *dvb)
        int rc;
        struct em28xx_i2c_bus *i2c_bus = dvb->adapter.priv;
        struct em28xx *dev = i2c_bus->dev;
+       struct usb_device *udev = interface_to_usbdev(dev->intf);
        int dvb_max_packet_size, packet_multiplier, dvb_alt;
 
        if (dev->dvb_xfer_bulk) {
@@ -217,6 +218,7 @@ static int em28xx_start_streaming(struct em28xx_dvb *dvb)
                dvb_alt = dev->dvb_alt_isoc;
        }
 
+       usb_set_interface(udev, dev->ifnum, dvb_alt);
        rc = em28xx_set_mode(dev, EM28XX_DIGITAL_MODE);
        if (rc < 0)
                return rc;