[media] media: em28xx - fix i2c_xfer to return -ENODEV when dev is removed
authorShuah Khan <shuah.kh@samsung.com>
Fri, 11 Jul 2014 21:25:55 +0000 (18:25 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Sat, 26 Jul 2014 14:15:17 +0000 (11:15 -0300)
In em28xx usb disconnect code path, some dvb fe and tuner drivers
attempt i2c transfers from their release interfaces. When device
is removed, return -ENODEV instead of attempting to transfer data
over i2c.

Signed-off-by: Shuah Khan <shuah.kh@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/usb/em28xx/em28xx-i2c.c

index b58d4ebf641928dd535f9b1870398ab674e93c38..1048c1a23fb688daaeff7f0d1fc6af5b36702f0d 100644 (file)
@@ -501,6 +501,12 @@ static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
        int addr, rc, i;
        u8 reg;
 
+       /* prevent i2c xfer attempts after device is disconnected
+          some fe's try to do i2c writes/reads from their release
+          interfaces when called in disconnect path */
+       if (dev->disconnected)
+               return -ENODEV;
+
        rc = rt_mutex_trylock(&dev->i2c_bus_lock);
        if (rc < 0)
                return rc;