Right now, dev->users is not been decremented for VBI nodes, causing unregister to fail. Fix it. Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@xxxxxxxxxx> --- drivers/media/usb/cx231xx/cx231xx-video.c | 25 +++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/media/usb/cx231xx/cx231xx-video.c b/drivers/media/usb/cx231xx/cx231xx-video.c index 6d2f4da3a3fa..69abafaebbf3 100644 --- a/drivers/media/usb/cx231xx/cx231xx-video.c +++ b/drivers/media/usb/cx231xx/cx231xx-video.c @@ -1557,6 +1557,18 @@ static int cx231xx_close(struct file *filp) _vb2_fop_release(filp, NULL); + if (--dev->users == 0) { + /* Save some power by putting tuner to sleep */ + call_all(dev, tuner, standby); + + /* do this before setting alternate! */ + if (dev->USE_ISO) + cx231xx_uninit_isoc(dev); + else + cx231xx_uninit_bulk(dev); + cx231xx_set_mode(dev, CX231XX_SUSPEND); + } + /* * To workaround error number=-71 on EP0 for VideoGrabber, * need exclude following. @@ -1577,20 +1589,11 @@ static int cx231xx_close(struct file *filp) return 0; } - if (--dev->users == 0) { - /* Save some power by putting tuner to sleep */ - call_all(dev, tuner, standby); - - /* do this before setting alternate! */ - if (dev->USE_ISO) - cx231xx_uninit_isoc(dev); - else - cx231xx_uninit_bulk(dev); - cx231xx_set_mode(dev, CX231XX_SUSPEND); - + if (dev->users == 0) { /* set alternate 0 */ cx231xx_set_alt_setting(dev, INDEX_VIDEO, 0); } + wake_up_interruptible(&dev->open); return 0; } -- 2.21.0