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; }