// Main entry point for the application
int F54TestHandle(struct synaptics_ts_data *ts, int input, int mode, char *buf)
{
	int ret = TOUCH_FAIL;
	u8 data;

	rst_size = 0;
	memset(f54_wlog_buf, 0x00, sizeof(f54_wlog_buf));

	data = 0x00;
	ret = Touch_I2C_Write(ts->client, REPORT_LSB_REG, &data, 1);
	ret = Touch_I2C_Write(ts->client, REPORT_MSB_REG, &data, 1);

	switch(input) {
	case F54_FULL_RAW_CAP:
		ret = FullRawTest(ts, mode);
		break;
	case F54_HIGH_RESISTANCE:
		ret = HighResistanceTest(ts);
		break;
	case F54_TRX_TO_TRX:
		ret = TRexShortTest(ts);
		break;
	default:
		break;
	}

	msleep(100);

	return ret;
}
static int TestPreparation(struct synaptics_ts_data *ts)
{
	int ret = 0;
	u8 data = 0;

	ReadChCount(ts);

	/*Turn off CBC.*/
	ret = Touch_I2C_Read(ts->client, ANALOG_CONTROL_REG, &data, 1);
	data = data & 0xDF;
	ret = Touch_I2C_Write(ts->client, ANALOG_CONTROL_REG, &data, 1);

	/*Apply ForceUpdate.*/
	ret = Touch_I2C_Read(ts->client, ANALOG_COMMAND_REG, &data, 1);
	data = data | 0x04;
	ret = Touch_I2C_Write(ts->client, ANALOG_COMMAND_REG, &data, 1);
	msleep(WAIT_TIME);

	/*Apply ForceCal.*/
	ret = Touch_I2C_Read(ts->client, ANALOG_COMMAND_REG, &data, 1);
	data = data | 0x02;
	ret = Touch_I2C_Write(ts->client, ANALOG_COMMAND_REG, &data, 1);
	msleep(WAIT_TIME);

	return TOUCH_SUCCESS;
	
}
// The following funtion illustrates the steps in getting a full raw image report (report #20) by Function $54.
static int FullRawTest(struct synaptics_ts_data *ts, int mode)
{
	int ret = 0;
	u8 data;

	TestPreparation(ts);

	TOUCH_DBG("[Touch][%s] raw capacitance mode!\n", __FUNCTION__);

	data = 0x14;	//raw capacitance mode
	ret = Touch_I2C_Write(ts->client, REPORT_TYPE_REG, &data, 1);

	//Set the GetReport bit to run the AutoScan
	data = 0x01;
	ret = Touch_I2C_Write(ts->client, ANALOG_COMMAND_REG, &data, 1);
	msleep(WAIT_TIME);

	if (ReadRawData(ts))		//rawdata store mode
		return TOUCH_FAIL;

	return TOUCH_SUCCESS;
}
static int HighResistanceTest(struct synaptics_ts_data *ts)
{
	int ret = 0;
	u8 data;

	TestPreparation(ts);

	/*Assign report type for High Resistance report*/
	data = 0x04;
	ret = Touch_I2C_Write(ts->client, REPORT_TYPE_REG, &data, 1);

	if (ReadHighResistance(ts))
		return TOUCH_FAIL;

	return TOUCH_SUCCESS;
}
static int TRexShortTest(struct synaptics_ts_data *ts)
{
	int ret = 0;
	u8 data;

	TestPreparation(ts);

	/*Assign report type for TRex Short Test*/
	data = 0x1A;
	ret = Touch_I2C_Write(ts->client, REPORT_TYPE_REG, &data, 1);

	if (ReadTRexShort(ts))
		return TOUCH_FAIL;

	return TOUCH_SUCCESS;
}
static int writeRMI(struct i2c_client *client, u8 uRmiAddress, u8 *data, unsigned int length)
{
	return Touch_I2C_Write(client, uRmiAddress, data, length);
}