Merge "input: touchscreen: st: enable touch firmware upgrade"

This commit is contained in:
qctecmdr Service 2018-07-31 03:26:29 -07:00 committed by Gerrit - the friendly Code Review server
commit 3da45a3687
3 changed files with 283 additions and 94 deletions

View File

@ -132,7 +132,7 @@ static void fts_interrupt_enable(struct fts_ts_info *info);
static int fts_init_afterProbe(struct fts_ts_info *info);
static int fts_mode_handler(struct fts_ts_info *info, int force);
static int fts_command(struct fts_ts_info *info, unsigned char cmd);
static int fts_chip_initialization(struct fts_ts_info *info);
void touch_callback(unsigned int status)
{
@ -633,7 +633,7 @@ static ssize_t fts_feature_enable_store(struct device *dev,
return -EINVAL;
logError(1, "%s fts_feature_enable: Stylus Enabled = %d\n",
tag, info->stylus_enabled);
tag, info->stylus_enabled);
break;
#endif
@ -2855,10 +2855,10 @@ static void fts_key_status_event_handler(struct fts_ts_info *info,
int value;
logError(0,
"%s %sReceived event %02X %02X %02X %02X %02X %02X %02X %02X\n",
"%s %sReceived event %02X %02X %02X %02X %02X %02X %02X %02X\n",
tag, __func__, event[0], event[1], event[2], event[3],
event[4], event[5], event[6], event[7]);
/**
/*
* TODO: the customer should handle the events coming
* from the keys according his needs (this is an example
* that report only the single pressure of one key at time)
@ -2885,7 +2885,6 @@ static void fts_key_status_event_handler(struct fts_ts_info *info,
logError(0,
"%s %s:No valid Button ID or more than one key pressed!\n",
tag, __func__);
//goto done;
return;
}
@ -2893,9 +2892,6 @@ static void fts_key_status_event_handler(struct fts_ts_info *info,
} else {
logError(0, "%s %s: All buttons released!\n", tag, __func__);
}
//done:
/* return fts_next_event(event); */
//return;
}
#endif
@ -2926,10 +2922,10 @@ static void fts_error_event_handler(struct fts_ts_info *info,
tag, __func__, error);
}
break;
case EVENT_TYPE_WATCHDOG_ERROR: /*watch dog timer*/
/*if (event[2] == 0) { */
case EVENT_TYPE_WATCHDOG_ERROR: /* watch dog timer */
/* if (event[2] == 0) { */
dumpErrorInfo();
/*before reset clear all slot */
/* before reset clear all slot */
release_all_touches(info);
error = fts_system_reset();
error |= fts_mode_handler(info, 0);
@ -2968,7 +2964,7 @@ static void fts_controller_ready_event_handler(struct fts_ts_info *info,
static void fts_status_event_handler(struct fts_ts_info *info,
unsigned char *event)
{
/*logError(1, "%s Received event 0x%02x\n", tag, event[0]);*/
/* logError(1, "%s Received event 0x%02x\n", tag, event[0]); */
switch (event[1]) {
case EVENT_TYPE_MS_TUNING_CMPL:
@ -3163,7 +3159,7 @@ static void fts_gesture_event_handler(struct fts_ts_info *info,
goto gesture_done;
}
/*no coordinates for gestures reported by FW */
/* no coordinates for gestures reported by FW */
if (event[1] == EVENT_TYPE_GESTURE_DTC1)
needCoords = 0;
@ -3202,9 +3198,9 @@ static void fts_event_handler(struct work_struct *work)
* read all the FIFO and parsing events
*/
/*wake_lock_timeout(&info->wakelock, HZ); */
/* wake_lock_timeout(&info->wakelock, HZ); */
__pm_wakeup_event(&info->wakeup_source, HZ);
/*logError(1, "%s %s: begin\n", tag, __func__);*/
/* logError(1, "%s %s: begin\n", tag, __func__); */
regAdd = FIFO_CMD_READONE;
for (count = 0; count < FIFO_DEPTH; count++) {
@ -3225,10 +3221,223 @@ static void fts_event_handler(struct work_struct *work)
}
input_sync(info->input_dev);
/*re-enable interrupts */
/* re-enable interrupts */
fts_interrupt_enable(info);
}
static int cx_crc_check(void)
{
unsigned char regAdd1[3] = {FTS_CMD_HW_REG_R, ADDR_CRC_BYTE0,
ADDR_CRC_BYTE1};
unsigned char val[2];
unsigned char crc_status;
int res;
u8 cmd[4] = { FTS_CMD_HW_REG_W, 0x00, 0x00, SYSTEM_RESET_VALUE };
int event_to_search[2] = {(int)EVENTID_ERROR_EVENT,
(int)EVENT_TYPE_CHECKSUM_ERROR};
u8 readData[FIFO_EVENT_SIZE];
/* read 2 bytes because the first one is a dummy byte! */
res = fts_readCmd(regAdd1, sizeof(regAdd1), val, 2);
if (res < OK) {
logError(1, "%s %s Cannot read crc status ERROR %08X\n",
tag, __func__, res);
return res;
}
crc_status = val[1] & CRC_MASK;
if (crc_status != OK) {
logError(1, "%s %s CRC ERROR = %X\n",
tag, __func__, crc_status);
return crc_status;
}
logError(0, "%s %s: Verifying if Config CRC Error...\n", tag, __func__);
u16ToU8_be(SYSTEM_RESET_ADDRESS, &cmd[1]);
res = fts_writeCmd(cmd, 4);
if (res < OK) {
logError(1, "%s %s Cannot send system resest command:%08X\n",
tag, __func__, res);
return res;
}
setSystemResettedDown(1);
setSystemResettedUp(1);
res = pollForEvent(event_to_search, 2, readData, GENERAL_TIMEOUT);
if (res < OK) {
logError(0, "%s %s: No Config CRC Found!\n", tag, __func__);
} else {
if (readData[2] == CRC_CONFIG_SIGNATURE ||
readData[2] == CRC_CONFIG) {
logError(1, "%s:%s: CRC Error for config found! %02X\n",
tag, __func__, readData[2]);
return readData[2];
}
}
return OK;
}
static void fts_fw_update_auto(struct work_struct *work)
{
u8 cmd[4] = { FTS_CMD_HW_REG_W, 0x00, 0x00, SYSTEM_RESET_VALUE };
int event_to_search[2] = {(int)EVENTID_ERROR_EVENT,
(int)EVENT_TYPE_CHECKSUM_ERROR};
u8 readData[FIFO_EVENT_SIZE];
int flag_init = 0;
int retval = 0;
int retval1 = 0;
int ret;
struct fts_ts_info *info;
struct delayed_work *fwu_work = container_of(work,
struct delayed_work, work);
int crc_status = 0;
int error = 0;
info = container_of(fwu_work, struct fts_ts_info, fwu_work);
logError(0, "%s Fw Auto Update is starting...\n", tag);
/* check CRC status */
ret = cx_crc_check();
if (ret > OK && ftsInfo.u16_fwVer == 0x0000) {
logError(1, "%s %s: CRC Error or NO FW!\n", tag, __func__);
crc_status = 1;
} else {
crc_status = 0;
logError(0, "%s %s:NO Error or can't read CRC register!\n",
tag, __func__);
}
retval = flashProcedure(PATH_FILE_FW, crc_status, 1);
if ((retval & ERROR_MEMH_READ) || (retval & ERROR_FW_NO_UPDATE)) {
logError(1, "%s %s: no firmware file or no newer firmware!\n",
tag, __func__);
goto NO_FIRMWARE_UPDATE;
} else if ((retval & 0xFF000000) == ERROR_FLASH_PROCEDURE) {
logError(1, "%s %s:firmware update retry! ERROR %08X\n",
tag, __func__, retval);
fts_chip_powercycle(info);
retval1 = flashProcedure(PATH_FILE_FW, crc_status, 1);
if ((retval1 & 0xFF000000) == ERROR_FLASH_PROCEDURE) {
logError(1, "%s %s: update failed again! ERROR %08X\n",
tag, __func__, retval1);
logError(1, "%s Fw Auto Update Failed!\n", tag);
}
}
logError(0, "%s %s: Verifying if CX CRC Error...\n",
tag, __func__, ret);
u16ToU8_be(SYSTEM_RESET_ADDRESS, &cmd[1]);
ret = fts_writeCmd(cmd, 4);
if (ret < OK) {
logError(1, "%s %s Can't send reset command! ERROR %08X\n",
tag, __func__, ret);
} else {
setSystemResettedDown(1);
setSystemResettedUp(1);
ret = pollForEvent(event_to_search, 2, readData,
GENERAL_TIMEOUT);
if (ret < OK) {
logError(0, "%s %s: No CX CRC Found!\n", tag, __func__);
} else {
if (readData[2] == CRC_CX_MEMORY) {
logError(1, "%s %s: CRC Error! ERROR:%02X\n\n",
tag, __func__, readData[2]);
flag_init = 1;
}
}
}
if (ftsInfo.u8_msScrConfigTuneVer != ftsInfo.u8_msScrCxmemTuneVer ||
ftsInfo.u8_ssTchConfigTuneVer != ftsInfo.u8_ssTchCxmemTuneVer)
ret = ERROR_GET_INIT_STATUS;
else if (((ftsInfo.u32_mpPassFlag != INIT_MP)
&& (ftsInfo.u32_mpPassFlag != INIT_FIELD)) || flag_init == 1)
ret = ERROR_GET_INIT_STATUS;
else
ret = OK;
if (ret == ERROR_GET_INIT_STATUS) {
error = fts_chip_initialization(info);
if (error < OK)
logError(1, "%s %s Can't initialize chip! ERROR %08X",
tag, __func__, error);
}
NO_FIRMWARE_UPDATE:
error = fts_init_afterProbe(info);
if (error < OK)
logError(1, "%s Can't initialize hardware device ERROR %08X\n",
tag, error);
logError(0, "%s Fw Auto Update Finished!\n", tag);
}
static int fts_chip_initialization(struct fts_ts_info *info)
{
int ret2 = 0;
int retry;
int initretrycnt = 0;
struct TestToDo todoDefault;
todoDefault.MutualRaw = 1;
todoDefault.MutualRawGap = 1;
todoDefault.MutualCx1 = 0;
todoDefault.MutualCx2 = 0;
todoDefault.MutualCx2Adj = 0;
todoDefault.MutualCxTotal = 0;
todoDefault.MutualCxTotalAdj = 0;
todoDefault.MutualKeyRaw = 0;
todoDefault.MutualKeyCx1 = 0;
todoDefault.MutualKeyCx2 = 0;
todoDefault.MutualKeyCxTotal = 0;
todoDefault.SelfForceRaw = 0;
todoDefault.SelfForceRawGap = 0;
todoDefault.SelfForceIx1 = 0;
todoDefault.SelfForceIx2 = 0;
todoDefault.SelfForceIx2Adj = 0;
todoDefault.SelfForceIxTotal = 0;
todoDefault.SelfForceIxTotalAdj = 0;
todoDefault.SelfForceCx1 = 0;
todoDefault.SelfForceCx2 = 0;
todoDefault.SelfForceCx2Adj = 0;
todoDefault.SelfForceCxTotal = 0;
todoDefault.SelfForceCxTotalAdj = 0;
todoDefault.SelfSenseRaw = 1;
todoDefault.SelfSenseRawGap = 0;
todoDefault.SelfSenseIx1 = 0;
todoDefault.SelfSenseIx2 = 0;
todoDefault.SelfSenseIx2Adj = 0;
todoDefault.SelfSenseIxTotal = 0;
todoDefault.SelfSenseIxTotalAdj = 0;
todoDefault.SelfSenseCx1 = 0;
todoDefault.SelfSenseCx2 = 0;
todoDefault.SelfSenseCx2Adj = 0;
todoDefault.SelfSenseCxTotal = 0;
todoDefault.SelfSenseCxTotalAdj = 0;
for (retry = 0; retry <= INIT_FLAG_CNT; retry++) {
ret2 = production_test_main(LIMITS_FILE, 1, 1, &todoDefault,
INIT_FIELD);
if (ret2 == OK)
break;
initretrycnt++;
logError(1, "%s %s: cycle count = %04d - ERROR %08X\n",
tag, __func__, initretrycnt, ret2);
fts_chip_powercycle(info);
}
if (ret2 < OK)
logError(1, "%s failed to initializate 3 times\n", tag);
return ret2;
}
#ifdef FTS_USE_POLLING_MODE
@ -3338,7 +3547,7 @@ static int fts_init(struct fts_ts_info *info)
logError(1, "%s Setting default Chip INFO!\n", tag);
defaultChipInfo(0);
} else {
error = readChipInfo(0);/*system reset OK*/
error = readChipInfo(0);
if (error < OK) {
logError(1, "%s Cannot read Chip Info!ERROR:%08X\n",
tag, error);
@ -3359,7 +3568,7 @@ int fts_chip_powercycle(struct fts_ts_info *info)
logError(0, "%s %s: Power Cycle Starting...\n", tag, __func__);
/**
/*
* if IRQ pin is short with DVDD a call to
* the ISR will triggered when the regulator is turned off
*/
@ -3402,12 +3611,12 @@ int fts_chip_powercycle(struct fts_ts_info *info)
tag, __func__);
}
}
/*time needed by the regulators for reaching the regime values*/
/* time needed by the regulators for reaching the regime values */
msleep(20);
if (info->bdata->reset_gpio != GPIO_NOT_DEFINED) {
/* time to wait before bring up the reset*/
/* time to wait before bring up the reset */
/* gpio after the power up of the regulators */
msleep(20);
gpio_set_value(info->bdata->reset_gpio, 1);
@ -3450,7 +3659,6 @@ int fts_chip_powercycle2(struct fts_ts_info *info, unsigned long sleep)
if (info->bdata->reset_gpio != GPIO_NOT_DEFINED)
gpio_set_value(info->bdata->reset_gpio, 0);
/*mdelay(sleep);*/
msleep(sleep);
if (info->pwr_reg) {
error = regulator_enable(info->bus_reg);
@ -3467,21 +3675,21 @@ int fts_chip_powercycle2(struct fts_ts_info *info, unsigned long sleep)
tag, __func__);
}
}
/*time needed by the regulators for reaching the regime values*/
/* time needed by the regulators for reaching the regime values */
msleep(500);
if (info->bdata->reset_gpio != GPIO_NOT_DEFINED) {
/**
/*
* time to wait before bring up the reset
* gpio after the power up of the regulators
*/
msleep(20);
gpio_set_value(info->bdata->reset_gpio, 1);
/*msleep(300);*/
/* msleep(300); */
}
/*before reset clear all slot */
/* before reset clear all slot */
release_all_touches(info);
logError(0, "%s %s: Power Cycle Finished! ERROR CODE = %08x\n",
@ -3496,13 +3704,13 @@ static int fts_init_afterProbe(struct fts_ts_info *info)
int error = 0;
/* system reset */
error = cleanUp(1);
error = cleanUp(0);
/* enable the features and the sensing */
error |= fts_mode_handler(info, 0);
/* enable the interrupt */
/* error |= fts_enableInterrupt(); */
error |= fts_enableInterrupt();
#if defined(CONFIG_FB_MSM)
error |= fb_register_client(&info->notifier);
@ -3517,7 +3725,7 @@ static int fts_init_afterProbe(struct fts_ts_info *info)
return error;
}
/**
/*
* TODO: change this function according with the needs
* of customer in terms of feature to enable/disable
*/
@ -3526,8 +3734,8 @@ static int fts_mode_handler(struct fts_ts_info *info, int force)
int res = OK;
int ret = OK;
/* initialize the mode to Nothing in order*/
/*to be updated depending on the features enabled */
/* initialize the mode to Nothing in order */
/* to be updated depending on the features enabled */
info->mode = MODE_NOTHING;
logError(0, "%s %s: Mode Handler starting...\n", tag, __func__);
@ -3535,15 +3743,17 @@ static int fts_mode_handler(struct fts_ts_info *info, int force)
case 0:
/* screen down */
logError(0, "%s %s: Screen OFF...\n", tag, __func__);
/**
/*
* do sense off in order to avoid the flooding
* of the fifo with touch events if someone is
* touching the panel during suspend
*/
logError(0, "%s %s: Sense OFF!\n", tag, __func__);
/*we need to use fts_command for speed reason*/
/*(no need to check echo in this case and interrupt*/
/* can be enabled)*/
/*
*we need to use fts_command for speed reason
* (no need to check echo in this case and interrupt
* can be enabled)
*/
res |= fts_command(info, FTS_CMD_MS_MT_SENSE_OFF);
#ifdef PHONE_KEY
logError(0, "%s %s: Key OFF!\n", tag, __func__);
@ -4153,9 +4363,7 @@ static int fts_probe(struct i2c_client *client,
logError(0, "%s SET I2C Functionality and Dev INFO:\n", tag);
openChannel(client);
/* logError(1, "%s driver ver. %s (built on %s, %s)\n", tag,*/
/* FTS_TS_DRV_VERSION, __DATE__, __TIME__);*/
logError(0, "%s driver ver. %s (built on)\n", tag, FTS_TS_DRV_VERSION);
logError(0, "%s driver ver. %s (built on)\n", tag, FTS_TS_DRV_VERSION);
if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
logError(1, "%s Unsupported I2C functionality\n", tag);
@ -4214,8 +4422,6 @@ static int fts_probe(struct i2c_client *client,
info->client->irq = gpio_to_irq(info->bdata->irq_gpio);
logError(0, "%s SET Auto Fw Update:\n", tag);
/*info->fwu_workqueue =*/
/*create_singlethread_workqueue("fts-fwu-queue");*/
info->fwu_workqueue = alloc_workqueue("fts-fwu-queue",
WQ_UNBOUND|WQ_HIGHPRI|WQ_CPU_INTENSIVE, 1);
if (!info->fwu_workqueue) {
@ -4223,10 +4429,10 @@ static int fts_probe(struct i2c_client *client,
goto ProbeErrorExit_3;
}
INIT_DELAYED_WORK(&info->fwu_work, fts_fw_update_auto);
logError(0, "%s SET Event Handler:\n", tag);
/*wake_lock_init(&info->wakelock, WAKE_LOCK_SUSPEND, "fts_tp");*/
wakeup_source_init(&info->wakeup_source, "fts_tp");
/*info->event_wq = create_singlethread_workqueue("fts-event-queue");*/
info->event_wq = alloc_workqueue("fts-event-queue",
WQ_UNBOUND|WQ_HIGHPRI|WQ_CPU_INTENSIVE, 1);
if (!info->event_wq) {
@ -4241,7 +4447,7 @@ static int fts_probe(struct i2c_client *client,
INIT_WORK(&info->suspend_work, fts_suspend_work);
logError(0, "%s SET Input Device Property:\n", tag);
/*info->dev = &info->client->dev;*/
/* info->dev = &info->client->dev; */
info->input_dev = input_allocate_device();
if (!info->input_dev) {
logError(1, "%s ERROR: No such input device defined!\n",
@ -4267,10 +4473,6 @@ static int fts_probe(struct i2c_client *client,
input_mt_init_slots(info->input_dev, TOUCH_ID_MAX, INPUT_MT_DIRECT);
/*input_mt_init_slots(info->input_dev, TOUCH_ID_MAX);*/
/*input_set_abs_params(info->input_dev,*/
/*ABS_MT_TRACKING_ID, 0, FINGER_MAX, 0, 0);*/
input_set_abs_params(info->input_dev, ABS_MT_POSITION_X,
X_AXIS_MIN, X_AXIS_MAX, 0, 0);
input_set_abs_params(info->input_dev, ABS_MT_POSITION_Y,
@ -4279,8 +4481,8 @@ static int fts_probe(struct i2c_client *client,
AREA_MIN, AREA_MAX, 0, 0);
input_set_abs_params(info->input_dev, ABS_MT_TOUCH_MINOR,
AREA_MIN, AREA_MAX, 0, 0);
/*input_set_abs_params(info->input_dev, ABS_MT_PRESSURE,*/
/*PRESSURE_MIN, PRESSURE_MAX, 0, 0);*/
input_set_abs_params(info->input_dev, ABS_MT_PRESSURE,
PRESSURE_MIN, PRESSURE_MAX, 0, 0);
#ifdef PHONE_GESTURE
input_set_capability(info->input_dev, EV_KEY, KEY_WAKEUP);
@ -4313,7 +4515,7 @@ static int fts_probe(struct i2c_client *client,
#endif
#ifdef PHONE_KEY
/*KEY associated to the touch screen buttons*/
/* KEY associated to the touch screen buttons */
input_set_capability(info->input_dev, EV_KEY, KEY_HOMEPAGE);
input_set_capability(info->input_dev, EV_KEY, KEY_BACK);
input_set_capability(info->input_dev, EV_KEY, KEY_MENU);
@ -4351,7 +4553,7 @@ static int fts_probe(struct i2c_client *client,
goto ProbeErrorExit_6;
}
/**
/*
* init feature switches (by default all the features
* are disable, if one feature want to be enabled from
* the start, set the corresponding value to 1)
@ -4368,11 +4570,6 @@ static int fts_probe(struct i2c_client *client,
info->resume_bit = 1;
info->notifier = fts_noti_block;
/*error = fb_register_client(&info->notifier);*/
/*if (error) {*/
/*logError(1, "%s ERROR: register notifier failed!\n", tag);*/
/*goto ProbeErrorExit_6;*/
/*}*/
logError(0, "%s SET Device File Nodes:\n", tag);
/* sysfs stuff */
@ -4385,7 +4582,7 @@ static int fts_probe(struct i2c_client *client,
}
#ifdef SCRIPTLESS
/*I2C cmd*/
/* I2C cmd */
if (fts_cmd_class == NULL)
fts_cmd_class = class_create(THIS_MODULE, FTS_TS_DRV_NAME);
info->i2c_cmd_dev = device_create(fts_cmd_class,
@ -4429,14 +4626,8 @@ static int fts_probe(struct i2c_client *client,
goto ProbeErrorExit_11;
}
#endif
error = fts_init_afterProbe(info);
if (error < OK) {
logError(1,
"%s Cannot initialize the hardware device ERROR %08X\n",
tag, error);
goto ProbeErrorExit_11;
}
queue_delayed_work(info->fwu_workqueue, &info->fwu_work,
msecs_to_jiffies(EXP_FN_WORK_DELAY_MS));
logError(1, "%s Probe Finished!\n", tag);
return OK;
@ -4450,7 +4641,7 @@ ProbeErrorExit_11:
ProbeErrorExit_10:
#ifndef SCRIPTLESS
sysfs_remove_group(&client->dev.kobj, &info->attrs);
#endif /*if fail before creating the*/
#endif
#endif
#ifdef SCRIPTLESS
@ -4462,7 +4653,7 @@ ProbeErrorExit_8:
#endif
ProbeErrorExit_7:
/*fb_unregister_client(&info->notifier);*/
/* fb_unregister_client(&info->notifier); */
ProbeErrorExit_6:
input_unregister_device(info->input_dev);
@ -4476,7 +4667,6 @@ ProbeErrorExit_5:
ProbeErrorExit_4:
destroy_workqueue(info->fwu_workqueue);
/* wake_lock_destroy(&info->wakelock); */
wakeup_source_trash(&info->wakeup_source);
ProbeErrorExit_3:
@ -4504,7 +4694,7 @@ static int fts_remove(struct i2c_client *client)
#endif
#ifdef SCRIPTLESS
/*I2C cmd*/
/* I2C cmd */
sysfs_remove_group(&info->i2c_cmd_dev->kobj, &i2c_cmd_attr_group);
#endif

View File

@ -254,7 +254,7 @@ int errorHandler(u8 *event, int size)
logError(0, "%s %s: No Action taken!\n", tag, __func__);
break;
}
logError(1, "%s %s: handling Finished! res = %08X\n",
logError(0, "%s %s: handling Finished! res = %08X\n",
tag, __func__, res);
return res;
}

View File

@ -139,8 +139,8 @@ int getFWdata(const char *pathToFile, u8 **data, int *size, int from)
memcpy(*data, (u8 *)FW_ARRAY_NAME, (*size));
break;
#endif
case 2:
logError(1, "%s Read FW from BIN file!\n", tag);
default:
logError(0, "%s Read FW from BIN file!\n", tag);
dev = getDev();
if (dev != NULL) {
@ -169,9 +169,6 @@ int getFWdata(const char *pathToFile, u8 **data, int *size, int from)
tag, __func__, ERROR_OP_NOT_ALLOW);
return ERROR_OP_NOT_ALLOW;
}
break;
default:
return ERROR_OP_NOT_ALLOW;
/* break; */
}
@ -462,9 +459,9 @@ int flash_burn(Firmware fw, int force_burn, int keep_cx)
if (!force_burn && (ftsInfo.u16_fwVer >= fw.fw_ver)
&& (ftsInfo.u16_cfgId >= fw.config_id)) {
logError(1, "Firmware in the chip newer");
logError(1, " or equal to the one to burn! ");
logError(1, "%s %s:NO UPDATE ERROR %02X\n",
logError(0, "Firmware in the chip newer");
logError(0, " or equal to the one to burn! ");
logError(0, "%s %s:NO UPDATE ERROR %02X\n",
tag, __func__, ERROR_FW_NO_UPDATE);
return (ERROR_FW_NO_UPDATE | ERROR_FLASH_BURN_FAILED);
}
@ -682,56 +679,56 @@ int parseBinFile(u8 *data, int fw_size,
}
index += FW_BYTES_ALIGN;
u8ToU32(&data[index], &temp);
logError(1, "%s %s: Fw ID = %08X\n", tag, __func__, temp);
logError(0, "%s %s: Fw ID = %08X\n", tag, __func__, temp);
index += FW_BYTES_ALIGN;
u8ToU32(&data[index], &temp);
fwData->fw_ver = temp;
logError(1, "%s %s:FILE Fw Version = %04X\n",
logError(0, "%s %s:FILE Fw Version = %04X\n",
tag, __func__, fwData->fw_ver);
index += FW_BYTES_ALIGN;
u8ToU32(&data[index], &temp);
fwData->config_id = temp;
logError(1, "%s %s:FILE Config ID = %04X\n",
logError(0, "%s %s:FILE Config ID = %04X\n",
tag, __func__, fwData->config_id);
index += FW_BYTES_ALIGN;
u8ToU32(&data[index], &temp);
logError(1, "%s %s:Config Version = %08X\n",
logError(0, "%s %s:Config Version = %08X\n",
tag, __func__, temp);
//skip reserved data
index += FW_BYTES_ALIGN * 2;
index += FW_BYTES_ALIGN;
logError(1, "%s %s:File External Release = ",
logError(0, "%s %s:File External Release = ",
tag, __func__);
for (i = 0; i < EXTERNAL_RELEASE_INFO_SIZE; i++) {
fwData->externalRelease[i] = data[index++];
logError(1, "%02X", fwData->externalRelease[i]);
logError(0, "%02X", fwData->externalRelease[i]);
}
logError(1, "\n");
logError(0, "\n");
//index += FW_BYTES_ALIGN;
u8ToU32(&data[index], &temp);
fwData->sec0_size = temp;
logError(1, "%s %s:sec0_size = %08X (%d bytes)\n",
logError(0, "%s %s:sec0_size = %08X (%d bytes)\n",
tag, __func__, fwData->sec0_size, fwData->sec0_size);
index += FW_BYTES_ALIGN;
u8ToU32(&data[index], &temp);
fwData->sec1_size = temp;
logError(1, "%s %s:sec1_size = %08X (%d bytes)\n",
logError(0, "%s %s:sec1_size = %08X (%d bytes)\n",
tag, __func__, fwData->sec1_size, fwData->sec1_size);
index += FW_BYTES_ALIGN;
u8ToU32(&data[index], &temp);
fwData->sec2_size = temp;
logError(1, "%s %s:sec2_size = %08X (%d bytes)\n",
logError(0, "%s %s:sec2_size = %08X (%d bytes)\n",
tag, __func__, fwData->sec2_size, fwData->sec2_size);
index += FW_BYTES_ALIGN;
u8ToU32(&data[index], &temp);
fwData->sec3_size = temp;
logError(1, "%s %s:sec3_size = %08X (%d bytes)\n",
logError(0, "%s %s:sec3_size = %08X (%d bytes)\n",
tag, __func__, fwData->sec3_size, fwData->sec3_size);
//skip header crc
@ -1021,15 +1018,17 @@ int flash_burn(struct Firmware fw, int force_burn, int keep_cx)
{
int res;
if (!force_burn) {
if (!force_burn && (ftsInfo.u16_fwVer >= fw.fw_ver)
&& (ftsInfo.u16_cfgId >= fw.config_id)) {
for (res = EXTERNAL_RELEASE_INFO_SIZE-1; res >= 0; res--) {
if (fw.externalRelease[res] >
ftsInfo.u8_extReleaseInfo[res])
goto start;
}
logError(1, "Firmware in the chip newer or ");
logError(1, "equal to the one to burn!");
logError(1, "%s %s:NO UPDATE ERROR %02X\n",
logError(0, "Firmware in the chip newer or ");
logError(0, "equal to the one to burn!");
logError(0, "%s %s:NO UPDATE ERROR %02X\n",
tag, __func__, ERROR_FW_NO_UPDATE);
return (ERROR_FW_NO_UPDATE | ERROR_FLASH_BURN_FAILED);
}
@ -1105,7 +1104,7 @@ start:
tag, ERROR_FLASH_BURN_FAILED);
return (res | ERROR_FLASH_BURN_FAILED);
}
logError(1, "%s load program DONE!\n", tag);
logError(0, "%s load program DONE!\n", tag);
logError(0, "%s 7) LOAD CONFIG:\n", tag);
res = fillFlash(FLASH_ADDR_CONFIG,
&(fw.data[fw.sec0_size]), fw.sec1_size);
@ -1114,7 +1113,7 @@ start:
tag, ERROR_FLASH_BURN_FAILED);
return (res | ERROR_FLASH_BURN_FAILED);
}
logError(1, "%s load config DONE!\n", tag);
logError(0, "%s load config DONE!\n", tag);
logError(0, "%s Flash burn COMPLETED!\n\n", tag);