Commit 708fe8c1 authored by Bogdan Davidoaia's avatar Bogdan Davidoaia Committed by Anas Nashif
Browse files

sensor: use integers for simple value calculations



Use integers for sensor value calculations in which doubles are not
required.

Change-Id: I8662023ca596cb232e31849b0b77ae2bf0372cf0
Signed-off-by: default avatarBogdan Davidoaia <bogdan.m.davidoaia@intel.com>
parent 4946e3e6
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -331,8 +331,10 @@ static int bmc150_magn_sample_fetch(struct device *dev,

static void bmc150_magn_convert(struct sensor_value *val, int raw_val)
{
	val->type = SENSOR_VALUE_TYPE_DOUBLE;
	val->dval = (double)(raw_val) * (1.0/1600.0);
	/* val = raw_val / 1600 */
	val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO;
	val->val1 = raw_val / 1600;
	val->val2 = ((int32_t)raw_val * (1000000 / 1600)) % 1000000;
}

static int bmc150_magn_channel_get(struct device *dev,
+11 −4
Original line number Diff line number Diff line
@@ -78,15 +78,22 @@ static int lps25hb_sample_fetch(struct device *dev,
static inline void lps25hb_press_convert(struct sensor_value *val,
					 int32_t raw_val)
{
	val->type = SENSOR_VALUE_TYPE_DOUBLE;
	val->dval = (double)(raw_val) / 40960.0;
	/* val = raw_val / 40960 */
	val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO;
	val->val1 = raw_val / 40960;
	val->val2 = ((int32_t)raw_val * 1000000 / 40960) % 1000000;
}

static inline void lps25hb_temp_convert(struct sensor_value *val,
					int16_t raw_val)
{
	val->type = SENSOR_VALUE_TYPE_DOUBLE;
	val->dval = (double)(raw_val) / 480.0 + 42.5;
	int32_t uval;

	/* val = raw_val / 480 + 42.5 */
	val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO;
	uval = (int32_t)raw_val * 1000000 / 480 + 42500000;
	val->val1 = (raw_val * 10 / 480 + 425) / 10;
	val->val2 = uval % 1000000;
}

static int lps25hb_channel_get(struct device *dev,
+4 −2
Original line number Diff line number Diff line
@@ -358,8 +358,10 @@ static int lsm6ds0_gyro_channel_get(enum sensor_channel chan,
static void lsm6ds0_gyro_channel_get_temp(struct sensor_value *val,
					  struct lsm6ds0_data *data)
{
	val->type = SENSOR_VALUE_TYPE_DOUBLE;
	val->dval = (double)(data->temp_sample) / 16.0 + 25.0;
	/* val = temp_sample / 16 + 25 */
	val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO;
	val->val1 = data->temp_sample / 16 + 25;
	val->val2 = (data->temp_sample % 16) * (1000000 / 16);
}
#endif

+3 −2
Original line number Diff line number Diff line
@@ -574,8 +574,9 @@ static int lsm9ds0_mfd_channel_get(struct device *dev,
#endif
#if !defined(LSM9DS0_MFD_TEMP_DISABLED)
	case SENSOR_CHAN_TEMP:
		val->type = SENSOR_VALUE_TYPE_DOUBLE;
		val->dval = data->sample_temp;
		val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO;
		val->val1 = data->sample_temp;
		val->val2 = 0;
		return 0;
#endif
	default:
+3 −2
Original line number Diff line number Diff line
@@ -164,9 +164,10 @@ static int max44009_channel_get(struct device *dev, enum sensor_channel chan,
	       ((uval & MAX44009_MANTISSA_HIGH_NIBBLE_MASK) >> 4);
	uval = uval << (drv_data->sample >> MAX44009_SAMPLE_EXPONENT_SHIFT);

	val->type = SENSOR_VALUE_TYPE_DOUBLE;
	/* lux is the integer of sample output multiplied by 0.045. */
	val->dval = ((double)uval) * 0.045;
	val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO;
	val->val1 = (uval * 45) / 1000;
	val->val2 = ((uval * 45) % 1000) * 1000;

	return 0;
}
Loading