void reset_mcu(struct ssp_data *data) { if (data->bSspShutdown == false) { data->bSspShutdown = true; disable_irq_wake(data->iIrq); disable_irq(data->iIrq); } toggle_mcu_reset(data); msleep(SSP_SW_RESET_TIME); data->bSspShutdown = false; if (initialize_mcu(data) < 0) return; sync_sensor_state(data); if (data->bSspShutdown == true) { data->bSspShutdown = false; enable_irq(data->iIrq); enable_irq_wake(data->iIrq); } #ifdef CONFIG_SENSORS_SSP_SENSORHUB ssp_report_sensorhub_notice(data, MSG2SSP_AP_STATUS_RESET); #endif }
static void ssp_late_resume(struct early_suspend *handler) { struct ssp_data *data; data = container_of(handler, struct ssp_data, early_suspend); func_dbg(); enable_debug_timer(data); data->bCheckSuspend = false; #ifdef CONFIG_SENSORS_SSP_SENSORHUB /* give notice to user that AP goes to sleep */ ssp_report_sensorhub_notice(data, MSG2SSP_AP_STATUS_WAKEUP); ssp_resume_mode(data); #else if (atomic_read(&data->aSensorEnable) > 0) ssp_resume_mode(data); #endif }
int forced_to_download_binary(struct ssp_data *data, int iBinType) { int iRet = 0; ssp_dbg("[SSP]: %s - mcu binany update!\n", __func__); if (data->bSspShutdown == false) { data->bSspShutdown = true; disable_irq_wake(data->iIrq); disable_irq(data->iIrq); } iRet = update_mcu_bin(data, iBinType); if (iRet < 0) { iRet = ERROR; ssp_dbg("[SSP]: %s - update_mcu_bin failed!\n", __func__); goto out; } iRet = initialize_mcu(data); if (iRet < 0) { iRet = ERROR; ssp_dbg("[SSP]: %s - initialize_mcu failed!\n", __func__); goto out; } sync_sensor_state(data); #ifdef CONFIG_SENSORS_SSP_SENSORHUB ssp_report_sensorhub_notice(data, MSG2SSP_AP_STATUS_RESET); #endif if (data->bSspShutdown == true) { data->bSspShutdown = false; enable_irq(data->iIrq); enable_irq_wake(data->iIrq); } iRet = SUCCESS; out: return iRet; }
ssize_t mcu_update_show(struct device *dev, struct device_attribute *attr, char *buf) { bool bSuccess = false; int iRet = 0; struct ssp_data *data = dev_get_drvdata(dev); ssp_dbg("[SSP]: %s - mcu binany update!\n", __func__); disable_irq(data->iIrq); disable_irq_wake(data->iIrq); iRet = update_mcu_bin(data); if (iRet < 0) { ssp_dbg("[SSP]: %s - update_mcu_bin failed!\n", __func__); goto exit; } iRet = initialize_mcu(data); if (iRet < 0) { ssp_dbg("[SSP]: %s - initialize_mcu failed!\n", __func__); goto exit; } sync_sensor_state(data); enable_irq(data->iIrq); enable_irq_wake(data->iIrq); #ifdef CONFIG_SENSORS_SSP_SENSORHUB ssp_report_sensorhub_notice(data, MSG2SSP_AP_STATUS_RESET); #endif bSuccess = true; exit: return sprintf(buf, "%s\n", (bSuccess ? "OK" : "NG")); }