int bt_disable() {
    LOGV(__FUNCTION__);

    int ret;

    do_btd_disable();

    /* even if do_btd_disable fails, we'll try to disable the chip anyway */
    ret = bt_chip_disable();
out:
    return ret;
}
int bt_enable() {
    LOGV(__FUNCTION__);

    int ret = bt_chip_enable();

    if (ret)
        goto out;

    if ((ret = do_btd_enable()) != 0)
        bt_chip_disable();

out:
    return ret;
}
static jint nativeJFmRx_Destroy(JNIEnv *env, jobject obj,jlong jContextValue)
{
    FmRxContext * fmRxContext = (FmRxContext *)jContextValue;
    FmRxStatus  status ;
	
	FM_LOGD("%s: Entered, calling FM_RX_Destroy", __func__);


	status = FM_RX_Destroy(&fmRxContext);

	if (status) {
		LOGE("failed to destroy FM rx stack context");
		return status;

	} else{
			
			FM_LOGD("destroy FM rx stack context Success");

	}
	
	FM_LOGD("nativeJFmRx_destroy(): After calling FM_RX_Destroy ret val = %d", status);

	FM_LOGD("nativeJFmRx_destroy(): calling FM_RX_Deinit");
		

	status = FM_RX_Deinit();

	FM_LOGD("%s: After calling FM_RX_Deinit", __func__);


	if (status) {
		LOGE("failed to deinit FM rx stack context");
		return status;

	} else {

	FM_LOGD("deinit FM rx stack context Success");

	}
		
	fm_close_cmd_socket();

	
	FM_LOGD("%s: calling bt_chip_disable", __func__);

	if(bt_chip_disable() < 0) {
		LOGE("bt_chip_disable failed");
	} else {

		FM_LOGD("bt_chip_disable Success");

	}


	FM_LOGD("%s: calling fm_close_cmd_socket", __func__);


	if (fm_stack_debug) {
		fm_trace_deinit();
	}


	FM_LOGD("%s: Exit", __func__);

	return status;

}