static void ssp_early_suspend(struct early_suspend *handler) { struct ssp_data *data; data = container_of(handler, struct ssp_data, early_suspend); func_dbg(); disable_debug_timer(data); /* give notice to user that AP goes to sleep */ ssp_sensorhub_report_notice(data, MSG2SSP_AP_STATUS_SLEEP); ssp_send_status_cmd(data, MSG2SSP_AP_STATUS_SLEEP); data->bCheckSuspend = true; }
void reset_mcu(struct ssp_data *data) { ssp_enable(data, false); toggle_mcu_reset(data); msleep(SSP_SW_RESET_TIME); if (initialize_mcu(data) < 0) return; ssp_enable(data, true); sync_sensor_state(data); #ifdef CONFIG_SENSORS_SSP_SENSORHUB ssp_sensorhub_report_notice(data, MSG2SSP_AP_STATUS_RESET); #endif }
static void ssp_late_resume(struct power_suspend *handler) { struct ssp_data *data; data = container_of(handler, struct ssp_data, power_suspend); func_dbg(); enable_debug_timer(data); #ifdef CONFIG_SENSORS_SSP_SENSORHUB /* give notice to user that AP goes to sleep */ ssp_sensorhub_report_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__); ssp_enable(data, false); data->fw_dl_state = FW_DL_STATE_DOWNLOADING; pr_info("[SSP] %s, DL state = %d\n", __func__, data->fw_dl_state); iRet = update_mcu_bin(data, iBinType); if (iRet < 0) { ssp_dbg("[SSP]: %s - update_mcu_bin failed!\n", __func__); goto out; } data->fw_dl_state = FW_DL_STATE_SYNC; pr_info("[SSP] %s, DL state = %d\n", __func__, data->fw_dl_state); iRet = initialize_mcu(data); if (iRet == ERROR) { data->uResetCnt++; toggle_mcu_reset(data); msleep(SSP_SW_RESET_TIME); initialize_mcu(data); } else if (iRet < ERROR) { pr_err("[SSP]: %s - initialize_mcu failed\n", __func__); goto out; } ssp_enable(data, true); sync_sensor_state(data); #ifdef CONFIG_SENSORS_SSP_SENSORHUB ssp_sensorhub_report_notice(data, MSG2SSP_AP_STATUS_RESET); #endif data->fw_dl_state = FW_DL_STATE_DONE; pr_info("[SSP] %s, DL state = %d\n", __func__, data->fw_dl_state); iRet = SUCCESS; out: return iRet; }
static void ssp_early_suspend(struct early_suspend *handler) { struct ssp_data *data; data = container_of(handler, struct ssp_data, early_suspend); func_dbg(); disable_debug_timer(data); #ifdef CONFIG_SENSORS_SSP_SENSORHUB /* give notice to user that AP goes to sleep */ ssp_sensorhub_report_notice(data, MSG2SSP_AP_STATUS_SLEEP); ssp_sleep_mode(data); data->uLastAPState = MSG2SSP_AP_STATUS_SLEEP; #else if (atomic_read(&data->aSensorEnable) > 0) ssp_sleep_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_sensorhub_report_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; }
void reset_mcu(struct ssp_data *data) { func_dbg(); ssp_enable(data, false); clean_pending_list(data); toggle_mcu_reset(data); msleep(SSP_SW_RESET_TIME); ssp_enable(data, true); if (initialize_mcu(data) < 0) return; sync_sensor_state(data); #ifdef CONFIG_SENSORS_SSP_SENSORHUB ssp_sensorhub_report_notice(data, MSG2SSP_AP_STATUS_RESET); #endif if (data->uLastAPState != 0) ssp_send_cmd(data, data->uLastAPState, 0); if (data->uLastResumeState != 0) ssp_send_cmd(data, data->uLastResumeState, 0); }
int forced_to_download_binary(struct ssp_data *data, int iBinType) { int iRet = 0; int retry = 3; ssp_dbg("[SSP]: %s - mcu binany update!\n", __func__); ssp_enable(data, false); data->fw_dl_state = FW_DL_STATE_DOWNLOADING; pr_info("[SSP] %s, DL state = %d\n", __func__, data->fw_dl_state); data->spi->max_speed_hz = BOOT_SPI_HZ; if (spi_setup(data->spi)) pr_err("failed to setup spi for ssp_boot\n"); do { pr_info("[SSP] %d try\n", 3 - retry); iRet = update_mcu_bin(data, iBinType); } while (retry -- > 0 && iRet < 0); data->spi->max_speed_hz = NORM_SPI_HZ; if (spi_setup(data->spi)) pr_err("failed to setup spi for ssp_norm\n"); if (iRet < 0) { ssp_dbg("[SSP]: %s - update_mcu_bin failed!\n", __func__); goto out; } data->fw_dl_state = FW_DL_STATE_SYNC; pr_info("[SSP] %s, DL state = %d\n", __func__, data->fw_dl_state); clean_pending_list(data); ssp_enable(data, true); iRet = initialize_mcu(data); if (iRet < 0) { iRet = ERROR; ssp_dbg("[SSP]: %s - initialize_mcu failed!\n", __func__); goto out; } proximity_open_lcd_ldi(data); proximity_open_calibration(data); accel_open_calibration(data); gyro_open_calibration(data); pressure_open_calibration(data); if (mag_open_hwoffset(data) < 0) pr_info("[SSP]: %s - mag_open_hw_offset" " failed, %d\n", __func__, iRet); sync_sensor_state(data); #ifdef CONFIG_SENSORS_SSP_SENSORHUB ssp_sensorhub_report_notice(data, MSG2SSP_AP_STATUS_RESET); #endif data->fw_dl_state = FW_DL_STATE_DONE; pr_info("[SSP] %s, DL state = %d\n", __func__, data->fw_dl_state); iRet = SUCCESS; out: return iRet; }