media: radio: sprd: fix only requesting to get snr when used 86/206086/1
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 14 May 2019 07:01:04 +0000 (16:01 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 14 May 2019 07:09:35 +0000 (16:09 +0900)
When not used, requesting to get snr causes following kernel panic
because driver is not initialized. Fix only requesting to get snr
when used.

   Internal error: Oops: 805 [#1] PREEMPT SMP ARM
   ...
   [<c05a9fd8>] (skb_queue_tail+0x34/0x58) from [<c047e7e4>] (__fm_send_cmd.isra.0+0xcc/0xf8)
   [<c047e7e4>] (__fm_send_cmd.isra.0+0xcc/0xf8) from [<c047ea5c>] (fmc_send_cmd+0x6c/0x210)
   [<c047ea5c>] (fmc_send_cmd+0x6c/0x210) from [<c0482764>] (fm_rx_get_snr+0x4c/0x84)
   [<c0482764>] (fm_rx_get_snr+0x4c/0x84) from [<c0480ad4>] (show_fmrx_curr_snr+0x34/0x6c)
   [<c0480ad4>] (show_fmrx_curr_snr+0x34/0x6c) from [<c0308264>] (dev_attr_show+0x30/0x54)
   [<c0308264>] (dev_attr_show+0x30/0x54) from [<c0172498>] (sysfs_read_file+0xc0/0x170)
   [<c0172498>] (sysfs_read_file+0xc0/0x170) from [<c01160b8>] (vfs_read+0xbc/0x138)
   [<c01160b8>] (vfs_read+0xbc/0x138) from [<c01166a8>] (SyS_read+0x50/0x78)
   [<c01166a8>] (SyS_read+0x50/0x78) from [<c000fa4c>] (__sys_trace_return+0x0/0x14)

Change-Id: I6ada090c40925212ef96107d56021612c5cf46fe
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
drivers/media/radio/sc2331/fmdrv_v4l2.c

index d512bb8..2841be3 100755 (executable)
@@ -387,12 +387,15 @@ static ssize_t show_fmrx_curr_snr(struct device *dev,
     unsigned int curr_snr = 0;
     struct fmdrv_ops *fmdev = dev_get_drvdata(dev);
 
-    ret = fm_rx_get_snr(fmdev,&curr_snr);
+    if(atomic_read(&v4l2_device_available) != 1) {
+           /* only request when it is currently used */
+           ret = fm_rx_get_snr(fmdev,&curr_snr);
 
-    if (ret < 0 )
-    {
-        pr_err("(fmdrv) %s(): fail to get current SNR\n",
+           if (ret < 0 )
+           {
+               pr_err("(fmdrv) %s(): fail to get current SNR\n",
                        __func__);
+           }
     }
 
     return sprintf(buf, "%d\n", curr_snr);