static ssize_t set_sensors_enable(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { int64_t dTemp; unsigned int uNewEnable = 0, uChangedSensor = 0; struct ssp_data *data = dev_get_drvdata(dev); if (kstrtoll(buf, 10, &dTemp) < 0) return -1; uNewEnable = (unsigned int)dTemp; ssp_dbg("[SSP]: %s - new_enable = %u, old_enable = %u\n", __func__, uNewEnable, atomic_read(&data->aSensorEnable)); if (uNewEnable == atomic_read(&data->aSensorEnable)) return size; for (uChangedSensor = 0; uChangedSensor < SENSOR_MAX; uChangedSensor++) if ((atomic_read(&data->aSensorEnable) & (1 << uChangedSensor)) != (uNewEnable & (1 << uChangedSensor))) { if (!(uNewEnable & (1 << uChangedSensor))) ssp_remove_sensor(data, uChangedSensor, uNewEnable); /* disable */ /* In case of enabling */ /* we will sensor instruction on change_sensor_delay. */ break; } atomic_set(&data->aSensorEnable, uNewEnable); return size; }
static ssize_t set_sensors_enable(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { int64_t dTemp; unsigned int uNewEnable = 0, uChangedSensor = 0; struct ssp_data *data = dev_get_drvdata(dev); int iRet; if (strict_strtoll(buf, 10, &dTemp) < 0) return -1; uNewEnable = (unsigned int)dTemp; ssp_dbg("[SSP]: %s - new_enable = %u, old_enable = %u\n", __func__, uNewEnable, atomic_read(&data->aSensorEnable)); if (uNewEnable == atomic_read(&data->aSensorEnable)) return 0; for (uChangedSensor = 0; uChangedSensor < SENSOR_MAX; uChangedSensor++) if ((atomic_read(&data->aSensorEnable) & (1 << uChangedSensor)) != (uNewEnable & (1 << uChangedSensor))) { if (!(uNewEnable & (1 << uChangedSensor))) ssp_remove_sensor(data, uChangedSensor, uNewEnable); /* disable */ else { /* Change to ADD_SENSOR_STATE from KitKat */ if (data->aiCheckStatus[uChangedSensor] == INITIALIZATION_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); } } data->aiCheckStatus[uChangedSensor] = ADD_SENSOR_STATE; } break; } atomic_set(&data->aSensorEnable, uNewEnable); return size; }