From: Shuah Khan Date: Fri, 11 Jul 2014 21:25:55 +0000 (-0300) Subject: [media] media: em28xx - fix i2c_xfer to return -ENODEV when dev is removed X-Git-Tag: v3.17-rc1~112^2~82 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=cc5c5d20c3cb9066576043b937b35d6b669a52e0;p=~emulex%2Finfiniband.git [media] media: em28xx - fix i2c_xfer to return -ENODEV when dev is removed 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 Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/usb/em28xx/em28xx-i2c.c b/drivers/media/usb/em28xx/em28xx-i2c.c index b58d4ebf641..1048c1a23fb 100644 --- a/drivers/media/usb/em28xx/em28xx-i2c.c +++ b/drivers/media/usb/em28xx/em28xx-i2c.c @@ -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;