static ssize_t set_acc_delay(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { int64_t dNewDelay; struct ssp_data *data = dev_get_drvdata(dev); if (strict_strtoll(buf, 10, &dNewDelay) < 0) return -1; if ((atomic_read(&data->aSensorEnable) & (1 << ORIENTATION_SENSOR)) && (data->adDelayBuf[ORIENTATION_SENSOR] < dNewDelay)) data->adDelayBuf[ACCELEROMETER_SENSOR] = dNewDelay; else change_sensor_delay(data, ACCELEROMETER_SENSOR, dNewDelay); return size; }
static int ssp_remove_sensor(struct ssp_data *data, unsigned int uChangedSensor, unsigned int uNewEnable) { u8 uBuf[2]; int iRet = 0; int64_t dSensorDelay = data->adDelayBuf[uChangedSensor]; ssp_dbg("[SSP]: %s - remove sensor = %d, current state = %d\n", __func__, (1 << uChangedSensor), uNewEnable); data->adDelayBuf[uChangedSensor] = DEFUALT_POLLING_DELAY; if (data->aiCheckStatus[uChangedSensor] == INITIALIZATION_STATE) { data->aiCheckStatus[uChangedSensor] = NO_SENSOR_STATE; if (uChangedSensor == ACCELEROMETER_SENSOR) accel_open_calibration(data); else if (uChangedSensor == GYROSCOPE_SENSOR) gyro_open_calibration(data); else if (uChangedSensor == PRESSURE_SENSOR) pressure_open_calibration(data); else if (uChangedSensor == PROXIMITY_SENSOR) { proximity_open_lcd_ldi(data); proximity_open_calibration(data); } else if (uChangedSensor == GEOMAGNETIC_SENSOR) { iRet = mag_open_hwoffset(data); if (iRet < 0) pr_err("[SSP]: %s - mag_open_hw_offset" " failed, %d\n", __func__, iRet); iRet = set_hw_offset(data); if (iRet < 0) { pr_err("[SSP]: %s - set_hw_offset failed\n", __func__); } } return 0; } else if (uChangedSensor == ORIENTATION_SENSOR) { if (!(atomic_read(&data->aSensorEnable) & (1 << ACCELEROMETER_SENSOR))) { uChangedSensor = ACCELEROMETER_SENSOR; } else { change_sensor_delay(data, ACCELEROMETER_SENSOR, data->adDelayBuf[ACCELEROMETER_SENSOR]); return 0; } } else if (uChangedSensor == ACCELEROMETER_SENSOR) { if (atomic_read(&data->aSensorEnable) & (1 << ORIENTATION_SENSOR)) { change_sensor_delay(data, ORIENTATION_SENSOR, data->adDelayBuf[ORIENTATION_SENSOR]); return 0; } } else if (uChangedSensor == GEOMAGNETIC_SENSOR) { if (mag_store_hwoffset(data)) pr_err("mag_store_hwoffset success\n"); } if (atomic_read(&data->aSensorEnable) & (1 << uChangedSensor)) { uBuf[1] = (u8)get_msdelay(dSensorDelay); uBuf[0] = (u8)get_delay_cmd(uBuf[1]); send_instruction(data, REMOVE_SENSOR, uChangedSensor, uBuf, 2); } data->aiCheckStatus[uChangedSensor] = NO_SENSOR_STATE; return 0; }