• Akinobu Mita's avatar
    media: ov7740: fix runtime pm initialization · 12aceee1
    Akinobu Mita authored
    The runtime PM of this device is enabled after v4l2_ctrl_handler_setup(),
    and this makes this device's runtime PM usage count a negative value.
    
    The ov7740_set_ctrl() tries to do something only if the device's runtime
    PM usage counter is nonzero.
    
    ov7740_set_ctrl()
    {
    	if (!pm_runtime_get_if_in_use(&client->dev))
    		return 0;
    
    	<do something>;
    
    	pm_runtime_put(&client->dev);
    
    	return ret;
    }
    
    However, the ov7740_set_ctrl() is called by v4l2_ctrl_handler_setup()
    while the runtime PM of this device is not yet enabled.  In this case,
    the pm_runtime_get_if_in_use() returns -EINVAL (!= 0).
    
    Therefore we can't bail out of this function and the usage count is
    decreased by pm_runtime_put() without increment.
    
    This fixes this problem by enabling the runtime PM of this device before
    v4l2_ctrl_handler_setup() so that the ov7740_set_ctrl() is always called
    when the runtime PM is enabled.
    
    Cc: Wenyou Yang <wenyou.yang@microchip.com>
    Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
    Tested-by: default avatarEugen Hristev <eugen.hristev@microchip.com>
    Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
    12aceee1
ov7740.c 27.4 KB