static int Dummy_UpdateFirmware(struct i2c_client *client, char *pFilename)
{
	int ret = 0;
	const struct firmware *fw = NULL;
	u8 *pBin = NULL;
	char *pFwFilename = NULL;

	TOUCH_FUNC();
	
	if( pFilename == NULL ) {
		pFwFilename = (char *)defaultFirmware;
	} else {
		pFwFilename = pFilename;
	}

	TOUCH_LOG("Firmware filename = %s\n", pFwFilename);
	
	/* Get firmware image buffer pointer from file */
	ret = request_firmware(&fw, pFilename, &client->dev);
	if( ret )
	{
		TOUCH_ERR("failed at request_firmware() ( error = %d )\n", ret);
		return TOUCH_FAIL;
	}

	pBin = (u8 *)(fw->data);

	/* IMPLEMENT : firmware update function */

	/* Free firmware image buffer */
	release_firmware(fw);

	return TOUCH_SUCCESS;
	
}
static void TouchPowerVioC30( int isOn )
{
    static struct regulator *vdd_io = NULL;
    int error = 0;


    if( vdd_io == NULL ) {
        vdd_io = regulator_get(NULL, "vdd_ana");
        if (IS_ERR(vdd_io))
        {
            error = PTR_ERR(vdd_io);
            TOUCH_ERR("failed to get regulator ( error = %d )\n",error);
            return;
        }

        error = regulator_set_voltage(vdd_io, 1800000, 1800000);
        if (error < 0) {
            TOUCH_ERR("failed to set regulator voltage ( error = %d )\n", error);
            return;
        }
    }

    if( vdd_io != NULL )
    {
        if( isOn )
        {
            error = regulator_enable(vdd_io);
            if (error < 0) {
                TOUCH_ERR("failed to enable regulator ( error = %d )\n", error);
                return;
            }
            msleep(15);
        }
        else
        {
            error = regulator_disable(vdd_io);
            if (error < 0) {
                TOUCH_ERR("failed to enable regulator ( error = %d )\n", error);
                return;
            }
        }
    }
}
static int dma_allocation(void)
{
	I2CDMABuf_va = (u8*)dma_alloc_coherent(NULL, 4096, &I2CDMABuf_pa, GFP_KERNEL);
	if( I2CDMABuf_va == NULL ) {
		TOUCH_ERR("fail to allocate DMA\n");
		return TOUCH_FAIL;
	}

	return TOUCH_SUCCESS;
}
int FirmwareUpgrade (struct synaptics_ts_data *ts, const char* fw_path) {

	int ret = 0;
	const struct firmware *fw_entry = NULL;

	if ((ret = request_firmware(&fw_entry, fw_path, &ts->client->dev)) != 0) {
		TOUCH_ERR("request_firmware() failed %d\n", ret);
		goto error;
	}

	my_image_size = fw_entry->size;
	my_image_bin = kzalloc(sizeof(char) * (my_image_size+1), GFP_KERNEL);
	if (my_image_bin == NULL) {
		TOUCH_ERR("Can not allocate memory\n");
		ret = -ENOMEM;
		goto error;
	}

	memcpy(my_image_bin, fw_entry->data, my_image_size);

	/* for checksum */
	*(my_image_bin+my_image_size) = 0xFF;

//	strncpy(ts->fw_info.fw_image_product_id, &my_image_bin[0x0040], 6);
//	strncpy(ts->fw_info.fw_image_version, &my_image_bin[0x16d00], 4);

//	ts->fw_info.fw_start = (unsigned char*)&my_image_bin[0];
//	ts->fw_info.fw_size = my_image_size;

	CompleteReflash(ts);

	release_firmware(fw_entry);

	return ret;
error:
    if ( fw_entry != NULL )
	    memset(&fw_entry, 0, sizeof(fw_entry));

	return ret;
}
/* Function to handle report reads based on user input*/
int ReadReport(unsigned char input, char *buf)
{
	int ret = 0;
	unsigned char data;

	/*Set the GetReport bit to run the AutoScan*/
	data = 0x01;
	DO_SAFE(Write8BitRegisters(F54CommandBase, &data, 1), error);
	
	count = 0;
	do {
		DO_SAFE(Read8BitRegisters(F54CommandBase, &data, 1), error);
		msleep(1);
		count++;
	} while (data != 0x00 && (count < DefaultTimeout));
	if (count >= DefaultTimeout) {
		TOUCH_LOG("Timeout - Not supported Report Type in FW\n");
		Reset();
		return -EAGAIN;
	}

	do_gettimeofday(&t_interval[ENDTIME]);

	TOUCH_LOG("Takes %lu ticks\n",
			get_time_interval(t_interval[ENDTIME].tv_sec,
				t_interval[STARTTIME].tv_sec));

	switch (input) {
	case 'p':
		ret = ReadRT78(buf);
		break;
    case 'q':
		ret = GetImageRT78(buf);
		break;
    case 'r':
		ret = ReadElectodeShortRT78(buf);
		break;
	default:
		break;
	}

	return ret;

error:
	TOUCH_ERR("[%s] ReadReport fail\n", __func__);
	return -EAGAIN;
}
static int Dummy_GetBinFirmwareInfo(struct i2c_client *client, char *pFilename, TouchFirmwareInfo *pFwInfo)
{
	int ret = 0;
	const struct firmware *fw = NULL;
	u8 *pBin = NULL;
	char *pFwFilename = NULL;

	TOUCH_FUNC();
	
	if( pFilename == NULL ) {
		pFwFilename = (char *)defaultFirmware;
	} else {
		pFwFilename = pFilename;
	}

	TOUCH_LOG("Firmware filename = %s\n", pFwFilename);
	
	/* Get firmware image buffer pointer from file */
	ret = request_firmware(&fw, pFilename, &client->dev);
	if( ret )
	{
		TOUCH_ERR("failed at request_firmware() ( error = %d )\n", ret);
		return TOUCH_FAIL;
	}

	pBin = (u8 *)(fw->data);

	/* IMPLEMENT : parse and get firmware information function */
	
	pFwInfo->moduleMakerID = 0;
	pFwInfo->moduleVersion = 0;
	pFwInfo->modelID = 0;
	pFwInfo->isOfficial = 0;
	pFwInfo->version = 0;

	/* Free firmware image buffer */
	release_firmware(fw);

	return TOUCH_SUCCESS;
		
}