summaryrefslogtreecommitdiffstats
path: root/jni
diff options
context:
space:
mode:
authorVenkateshwarlu Domakonda <vdomak@codeaurora.org>2014-05-19 10:41:10 +0530
committerVenkateshwarlu Domakonda <vdomak@codeaurora.org>2014-05-23 21:22:54 +0530
commitc748b4b9ab0ad836cafa4c15cd73b2b0f5e37d63 (patch)
treed8d95642805ea090de34f940dc8d802683f34117 /jni
parent5e32924236b3f6e7849edc430cc0c35bf9e95f78 (diff)
downloadandroid_hardware_qcom_fm-c748b4b9ab0ad836cafa4c15cd73b2b0f5e37d63.tar.gz
android_hardware_qcom_fm-c748b4b9ab0ad836cafa4c15cd73b2b0f5e37d63.tar.bz2
android_hardware_qcom_fm-c748b4b9ab0ad836cafa4c15cd73b2b0f5e37d63.zip
FM: Add support to configure the spur Rotation table
- Add support to configure the FM SOC spur table. Change-Id: I817268be67f29dfb6862314dc90a915c01f40342 CRs-Fixed: 664779
Diffstat (limited to 'jni')
-rw-r--r--jni/android_hardware_fm.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/jni/android_hardware_fm.cpp b/jni/android_hardware_fm.cpp
index 46ae7c4..505efb8 100644
--- a/jni/android_hardware_fm.cpp
+++ b/jni/android_hardware_fm.cpp
@@ -53,6 +53,7 @@
#define V4L2_CID_PRIVATE_IRIS_SET_CALIBRATION (V4L2_CTRL_CLASS_USER + 0x92A)
#define V4L2_CID_PRIVATE_TAVARUA_ON_CHANNEL_THRESHOLD (V4L2_CTRL_CLASS_USER + 0x92B)
#define V4L2_CID_PRIVATE_TAVARUA_OFF_CHANNEL_THRESHOLD (V4L2_CTRL_CLASS_USER + 0x92C)
+#define V4L2_CID_PRIVATE_IRIS_SET_SPURTABLE (V4L2_CTRL_CLASS_USER + 0x92D)
#define TX_RT_LENGTH 63
#define WAIT_TIMEOUT 200000 /* 200*1000us */
#define TX_RT_DELIMITER 0x0d
@@ -736,6 +737,45 @@ static jint android_hardware_fmradio_FmReceiverJNI_setTxPowerLevelNative
return FM_JNI_SUCCESS;
}
+/* native interface */
+static jint android_hardware_fmradio_FmReceiverJNI_setSpurDataNative
+ (JNIEnv * env, jobject thiz, jint fd, jshortArray buff, jint count)
+{
+ ALOGE("entered JNI's setSpurDataNative\n");
+ int err, i = 0;
+ struct v4l2_ext_control ext_ctl;
+ struct v4l2_ext_controls v4l2_ctls;
+ uint8_t *data;
+ short *spur_data = env->GetShortArrayElements(buff, NULL);
+ if (spur_data == NULL) {
+ ALOGE("Spur data is NULL\n");
+ return FM_JNI_FAILURE;
+ }
+ data = (uint8_t *) malloc(count);
+ if (data == NULL) {
+ ALOGE("Allocation failed for data\n");
+ return FM_JNI_FAILURE;
+ }
+ for(i = 0; i < count; i++)
+ data[i] = (uint8_t) spur_data[i];
+
+ ext_ctl.id = V4L2_CID_PRIVATE_IRIS_SET_SPURTABLE;
+ ext_ctl.string = (char*)data;
+ ext_ctl.size = count;
+ v4l2_ctls.ctrl_class = V4L2_CTRL_CLASS_USER;
+ v4l2_ctls.count = 1;
+ v4l2_ctls.controls = &ext_ctl;
+
+ err = ioctl(fd, VIDIOC_S_EXT_CTRLS, &v4l2_ctls );
+ if (err < 0){
+ ALOGE("Set ioctl failed\n");
+ free(data);
+ return FM_JNI_FAILURE;
+ }
+ free(data);
+ return FM_JNI_SUCCESS;
+}
+
/*
* JNI registration.
*/
@@ -795,7 +835,8 @@ static JNINativeMethod gMethods[] = {
(void*)android_hardware_fmradio_FmReceiverJNI_SetCalibrationNative},
{ "configureSpurTable", "(I)I",
(void*)android_hardware_fmradio_FmReceiverJNI_configureSpurTable},
-
+ { "setSpurDataNative", "(I[SI)I",
+ (void*)android_hardware_fmradio_FmReceiverJNI_setSpurDataNative},
};
int register_android_hardware_fm_fmradio(JNIEnv* env)