[media] s5p-fimc: Prevent lock-up in multiple sensor systems
The camera clocks managed by the driver were improperly reference counted
and remained disabled when multiple video nodes were opened simultaneously.
It manifested itself with following warning:
[12.920000] WARNING: at drivers/media/video/s5p-fimc/fimc-mdevice.c:787 __fimc_md_set_camclk+0x1c0/0x1dc()
[13.005000] Modules linked in:
[13.005000] Backtrace:
[13.040000] [<
c0013084>] (dump_backtrace+0x0/0x10c) from [<
c0454b70>] (dump_stack+0x18/0x1c)
[13.070000] r7:
00000009 r6:
00000313 r5:
c02d576c r4:
00000000
[13.155000] [<
c0454b58>] (dump_stack+0x0/0x1c) from [<
c0022ec4>] (warn_slowpath_common+0x54/0x6c)
[13.285000] [<
c0022e70>] (warn_slowpath_common+0x0/0x6c) from [<
c0022f00>] (warn_slowpath_null+0x24/0x2c)
[13.360000] r9:
e1981010 r8:
00000000 r7:
c061d3fc r6:
e1981010 r5:
e1981030
[13.430000] r4:
00000000
[13.430000] [<
c0022edc>] (warn_slowpath_null+0x0/0x2c) from [<
c02d576c>] (__fimc_md_set_camclk+0x1c0/0x1dc)
[13.550000] [<
c02d55ac>] (__fimc_md_set_camclk+0x0/0x1dc) from [<
c02d57b0>] (fimc_md_set_camclk+0x28/0x2c)
[13.630000] [<
c02d5788>] (fimc_md_set_camclk+0x0/0x2c) from [<
c02d57e8>] (__fimc_pipeline_shutdown+0x34/0x50)
[13.705000] [<
c02d57b4>] (__fimc_pipeline_shutdown+0x0/0x50) from [<
c02d5844>] (fimc_pipeline_shutdown+0x40/0x58)
[13.765000] r5:
e2391200 r4:
e2357704
[13.805000] [<
c02d5804>] (fimc_pipeline_shutdown+0x0/0x58) from [<
c02d4754>] (fimc_capture_close+0xcc/0xe4)
[13.915000] r5:
e1b396c0 r4:
e2357410
[13.915000] [<
c02d4688>] (fimc_capture_close+0x0/0xe4) from [<
c02b2d5c>] (v4l2_release+0x5c/0x80)
[13.970000] r7:
00000010 r6:
e1d2d990 r5:
e1b396c0 r4:
e2394800
[14.000000] [<
c02b2d00>] (v4l2_release+0x0/0x80) from [<
c00b66cc>] (fput+0xc0/0x22c)
[14.015000] r5:
c157ef30 r4:
e1b396c0
[14.015000] [<
c00b660c>] (fput+0x0/0x22c) from [<
c00b2ca0>] (filp_close+0x60/0x80)
[14.080000] [<
c00b2c40>] (filp_close+0x0/0x80) from [<
c00b2d78>] (sys_close+0xb8/0xf4)
[14.125000] r7:
00000001 r6:
e1b396c0 r5:
c1400340 r4:
c1400300
[14.125000] [<
c00b2cc0>] (sys_close+0x0/0xf4) from [<
c000f300>] (ret_fast_syscall+0x0/0x30)
[14.205000] r7:
00000006 r6:
beee5b94 r5:
00000003 r4:
b6f64fac
Fix this, as well as potential memory leaks due to not calling
v4l2_fh_release() on some error paths.
Also remove some error logs printed for events that aren't critical and
are normal conditions for some system configurations.
Also check if the device have been properly run-time enabled during
video node open.
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>