diff --git a/jni/FmConst.h b/jni/FmConst.h
index c4cd33b..00e6f82 100644
--- a/jni/FmConst.h
+++ b/jni/FmConst.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2015, The Linux Foundation. All rights reserved.
 
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -44,7 +44,7 @@
 #define STD_BUF_SIZE  256
 
 const char *const FM_PERFORMANCE_PARAMS = "/etc/fm/fm_srch_af_th.conf";
-const char *const CALIB_DATA_NAME = "/data/app/Riva_fm_cal";
+const char *const CALIB_DATA_NAME = "/data/misc/fm/Riva_fm_cal";
 
 #define V4L2_CTRL_CLASS_USER  0x00980000
 #define V4L2_CID_BASE  (V4L2_CTRL_CLASS_USER | 0x900)
diff --git a/libfm_jni/FM_Const.h b/libfm_jni/FM_Const.h
index a93fe77..b0cc684 100644
--- a/libfm_jni/FM_Const.h
+++ b/libfm_jni/FM_Const.h
@@ -121,7 +121,7 @@
 const char *const SCRIPT_START_PROP = "ctl.start";
 const char *const FM_SOC_DL_SCRIPT = "fm_dl";
 const char *const SCRIPT_STOP_PROP = "ctl.stOP";
-const char *const CALIB_DATA_NAME = "/data/app/Riva_fm_cal";
+const char *const CALIB_DATA_NAME = "/data/misc/fm/Riva_fm_cal";
 const char *const SOC_PATCH_DL_SCRPT = "fm_dl";
 const char *const FM_DEVICE_PATH = "/dev/radio0";
 const char *const FM_PERFORMANCE_PARAMS = "/etc/fm/fm_srch_af_th.conf";
diff --git a/libfm_jni/FmIoctlsInterface.cpp b/libfm_jni/FmIoctlsInterface.cpp
index bd3440b..fbe035c 100644
--- a/libfm_jni/FmIoctlsInterface.cpp
+++ b/libfm_jni/FmIoctlsInterface.cpp
@@ -119,7 +119,7 @@
     channel.type = V4L2_TUNER_RADIO;
     ret = ioctl(fd, VIDIOC_G_FREQUENCY, &channel);
 
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         freq = (channel.frequency / TUNE_MULT);
@@ -139,7 +139,7 @@
     channel.frequency = (freq * TUNE_MULT);
 
     ret = ioctl(fd, VIDIOC_S_FREQUENCY, &channel);
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         return FM_SUCCESS;
@@ -158,7 +158,7 @@
     control.id = id;
 
     ret = ioctl(fd, VIDIOC_S_CTRL, &control);
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         return FM_SUCCESS;
@@ -190,7 +190,7 @@
        v4l2_ctls.count = 1;
        v4l2_ctls.controls = &ext_ctl;
        ret = ioctl(fd, VIDIOC_S_EXT_CTRLS, &v4l2_ctls);
-       if(ret != IOCTL_SUCC) {
+       if(ret < IOCTL_SUCC) {
            return FM_FAILURE;
        }else {
            return FM_SUCCESS;
@@ -210,7 +210,7 @@
 
     control.id = id;
     ret = ioctl(fd, VIDIOC_G_CTRL, &control);
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         val = control.value;
@@ -230,7 +230,7 @@
     hw_seek.type = V4L2_TUNER_RADIO;
 
     ret = ioctl(fd, VIDIOC_S_HW_FREQ_SEEK, &hw_seek);
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         return FM_SUCCESS;
@@ -252,7 +252,7 @@
 
     ret = ioctl(fd, VIDIOC_S_TUNER, &tuner);
     ret = set_control(fd, V4L2_CID_PRV_REGION, 0);
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         return FM_SUCCESS;
@@ -270,8 +270,8 @@
     tuner.index = 0;
     tuner.signal = 0;
     ret = ioctl(fd, VIDIOC_G_TUNER, &tuner);
-    if(ret != IOCTL_SUCC) {
-        ret = FM_SUCCESS;
+    if(ret < IOCTL_SUCC) {
+        ret = FM_FAILURE;
     }else {
         rmssi = tuner.signal;
         ret = FM_SUCCESS;
@@ -289,7 +289,7 @@
 
     tuner.index = 0;
     ret = ioctl(fd, VIDIOC_G_TUNER, &tuner);
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         freq = (tuner.rangehigh / TUNE_MULT);
@@ -308,7 +308,7 @@
 
     tuner.index = 0;
     ret = ioctl(fd, VIDIOC_G_TUNER, &tuner);
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         freq = (tuner.rangelow / TUNE_MULT);
@@ -327,7 +327,7 @@
 
     tuner.index = 0;
     ret = ioctl(fd, VIDIOC_G_TUNER, &tuner);
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
         return FM_FAILURE;
     }else {
         tuner.audmode = mode;
@@ -357,7 +357,7 @@
         v4l2_buf.length = STD_BUF_SIZE;
         v4l2_buf.m.userptr = (ULINT)buff;
         ret = ioctl(fd, VIDIOC_DQBUF, &v4l2_buf);
-        if(ret != IOCTL_SUCC) {
+        if(ret < IOCTL_SUCC) {
             return FM_FAILURE;
         }else {
             return v4l2_buf.bytesused;
@@ -375,7 +375,7 @@
 
     ret = ioctl(fd, VIDIOC_S_EXT_CTRLS, v4l2_ctls);
 
-    if(ret != IOCTL_SUCC) {
+    if(ret < IOCTL_SUCC) {
        return FM_FAILURE;
     }else {
        return FM_SUCCESS;
diff --git a/libfm_jni/FmRadioController.cpp b/libfm_jni/FmRadioController.cpp
index 55bcef4..613a062 100644
--- a/libfm_jni/FmRadioController.cpp
+++ b/libfm_jni/FmRadioController.cpp
@@ -159,8 +159,11 @@
     int ret = FM_SUCCESS;
     struct timespec ts;
     ConfigFmThs thsObj;
+    char value[PROPERTY_VALUE_MAX] = {'\0'};
 
     ALOGI("%s,[freq=%d]\n", __func__, freq);
+    property_get("qcom.bluetooth.soc", value, NULL);
+    ALOGD("BT soc is %s\n", value);
     if (fd_driver < 0) {
         ret = open_dev();
         if (ret != FM_SUCCESS) {
@@ -171,12 +174,14 @@
 
     if (cur_fm_state == FM_OFF) {
         ALOGE("cur_fm_state = %d\n",cur_fm_state);
-        ret = FmIoctlsInterface::start_fm_patch_dl(fd_driver);
-        if (ret != FM_SUCCESS) {
-            ALOGE("FM patch downloader failed: %d\n", ret);
-            close_dev();
-            set_fm_state(FM_OFF);
-            return FM_FAILURE;
+        if (strcmp(value, "rome") != 0) {
+            ret = FmIoctlsInterface::start_fm_patch_dl(fd_driver);
+            if (ret != FM_SUCCESS) {
+                ALOGE("FM patch downloader failed: %d\n", ret);
+                close_dev();
+                set_fm_state(FM_OFF);
+                return FM_FAILURE;
+            }
         }
         if (event_listener_thread == 0) {
             ret = pthread_create(&event_listener_thread, NULL,
@@ -1095,10 +1100,15 @@
      void
 )
 {
+     char value[PROPERTY_VALUE_MAX] = {'\0'};
+
      ALOGI("FM handle ready Event\n");
      FmIoctlsInterface::set_control(fd_driver,
              V4L2_CID_PRV_AUDIO_PATH, AUDIO_DIGITAL_PATH);
-     FmIoctlsInterface::set_calibration(fd_driver);
+     property_get("qcom.bluetooth.soc", value, NULL);
+     if (strcmp(value, "rome") != 0) {
+         FmIoctlsInterface::set_calibration(fd_driver);
+     }
      pthread_mutex_lock(&mutex_turn_on_cond);
      set_fm_state(FM_ON);
      pthread_cond_broadcast(&turn_on_cond);
