static long touch_cal_ioctl(struct file *file, unsigned int cmd,unsigned long arg) {

	/*void __user *argp = (void __user *)arg;*/
	int cal_data[8] = {0, };
	/* int current_cal_mode = 0; */
	int i, idx;

	pr_info("[touch_cal_ioctl]cmd[%d]\n", cmd);

	switch (cmd) {
	case TOUCH_CAL_GET_DATA:
		for(i=0 ; i < 8 ; i++)
		{
			idx = i;
			msm_proc_comm(PCOM_OEM_GET_TOUCH_CAL, &cal_data[i], &idx);
			pr_info("### get cal_data[%d]:%d\n", i, cal_data[i]);
		}
		apply_cal_data(cal_data);
		break;
	case TOUCH_CAL_SET_DATA:

		pr_info("[touch_cal_ioctl]TOUCH_CAL_SET_DATA\n");

		ts_calibration_for_touch_key_region(TOUCH_KEY_FILENAME, cal_data);

		/*
		if (copy_from_user(&cal_data[0], argp, sizeof(cal_data))){
			return -ENODEV;
		}
		*/

		for(i=0 ; i < 8 ; i++)
		{
			idx = i;
			msm_proc_comm(PCOM_OEM_SET_TOUCH_CAL, &cal_data[i], &idx);

			pr_info("[SWIFT TOUCH CAL](%d) cal_data:%d\n", i, idx);
		}

		apply_cal_data(cal_data);

		break;
	}

	return 0;
}
static int touch_cal_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg)
{
	void __user *argp = (void __user *)arg;
	int cal_data[8] = {0,};
	int current_cal_mode = 0;
	int i, idx;

	printk("[touch_cal_ioctl]cmd[%d]\n", cmd); 

	switch (cmd) {
	case TOUCH_CAL_GET_DATA:
		for(i=0 ; i < 8 ; i++)
		{
			idx = i;
			msm_proc_comm(PCOM_OEM_GET_TOUCH_CAL, &cal_data[i], &idx);		
			printk("### get cal_data[%d]:%d\n", i, cal_data[i]); 			
		}
		apply_cal_data(cal_data);
		break;
	case TOUCH_CAL_SET_DATA:

		printk("[touch_cal_ioctl]TOUCH_CAL_SET_DATA\n"); 

		ts_calibration_for_touch_key_region(TOUCH_KEY_FILENAME, cal_data);

		/*
		if (copy_from_user(&cal_data[0], argp, sizeof(cal_data))){
			return -ENODEV;
		}
		*/

		for(i=0 ; i < 8 ; i++)
		{
			idx = i;
			msm_proc_comm(PCOM_OEM_SET_TOUCH_CAL, &cal_data[i], &idx);		
			
			printk("[SWIFT TOUCH CAL](%d) cal_data:%d\n", i, idx); 
		}

#if 1
		apply_cal_data(cal_data);
#else
		if (cal_data[0]) {
			x1 = (cal_data[0] * (X_MAX - X_MIN) / 320) + X_MIN;
		}

		if (cal_data[1]) {
			y1 = ((cal_data[1] + 20) * (Y_MAX - Y_MIN) / 450) + Y_MIN;
		}

		if (cal_data[2]) {
			x2 = (cal_data[2] * (X_MAX - X_MIN) / 320) + X_MIN;
		}

		if (cal_data[3]) {
			y2 = (cal_data[3] * (Y_MAX - Y_MIN) / 450) + Y_MIN;
		}

		if (cal_data[4]) {
			x3 = (cal_data[4] * (X_MAX - X_MIN) / 320) + X_MIN;
		}

		if (cal_data[5]) {
			y3 = (cal_data[5] * (Y_MAX - Y_MIN) / 450) + Y_MIN;
		}

		if (cal_data[6]) {
			x4 = (cal_data[6] * (X_MAX - X_MIN) / 320) + X_MIN;
		}

		if (cal_data[7]) {
			y4 = ((cal_data[7] + 20 )* (Y_MAX - Y_MIN) / 450) + Y_MIN;
		}

		menu_x = x1 - ((x4 - x1) * 100 / 541);
		menu_y = y2 + ((y2 - y1) * 100 / 841); /* 567 */
		back_x = x4 + ((x4 - x1) * 100 / 541);
		back_y = y3 + ((y3 - y4) * 100 / 841); /* 567 */
	
		if (!menu_x || !menu_y || !back_x || !back_y) {
			menu_x = MENU_KEY_X;
			menu_y = TS_KEY_Y; 
			back_x = BACK_KEY_X;
			back_y = TS_KEY_Y; 
		}

		printk("[SWIFT TOUCH CAL] X1:%d, Y1:%d\n", x1, y1);  
		printk("[SWIFT TOUCH CAL] X2:%d, Y2:%d\n", x2, y2);  
		printk("[SWIFT TOUCH CAL] X3:%d, Y3:%d\n", x3, y3);  
		printk("[SWIFT TOUCH CAL] X4:%d, Y4:%d\n", x4, y4);  
		printk("[SWIFT TOUCH CAL] MENU X:%d, MENU Y:%d\n", menu_x, menu_y);  
		printk("[SWIFT TOUCH CAL] BACK X:%d, BACk Y:%d\n", back_x, back_y);  
#endif
		break;
	}

	return 0;
}