On Tue, Nov 03, 2009 at 02:09:44PM +0200, Samu Onkalo wrote: > Report output values as 1/1000 of earth gravity. Without having tried that, I assume that changes the values for all events reported? That would break all userspace clients of this device, right? Daniel > Signed-off-by: Samu Onkalo <samu.p.onkalo@xxxxxxxxx> > --- > drivers/hwmon/lis3lv02d.c | 31 ++++++++++++++++++++++++++++--- > drivers/hwmon/lis3lv02d.h | 4 ++++ > 2 files changed, 32 insertions(+), 3 deletions(-) > > diff --git a/drivers/hwmon/lis3lv02d.c b/drivers/hwmon/lis3lv02d.c > index be2eb97..7e72836 100644 > --- a/drivers/hwmon/lis3lv02d.c > +++ b/drivers/hwmon/lis3lv02d.c > @@ -53,6 +53,19 @@ > #define LIS3_PWRON_DELAY_WAI_12B (5000) > #define LIS3_PWRON_DELAY_WAI_8B (3000) > > +/* > + * LIS3LV02D spec says 1024 LSBs corresponds 1 G -> 1LSB is 1000/1024 mG > + * LIS302D spec says: 18 mG / digit > + * SCALING_ACCURACY is used to increase accuracy of the intermediate > + * calculation results. > + */ > +#define LIS3_SCALING_ACCURACY 1024 > +#define LIS3_2G2G_SENSITIVITY_WAI_12B ((LIS3_SCALING_ACCURACY * 1000) / 1024) > +#define LIS3_2G2G_SENSITIVITY_WAI_8B (18 * LIS3_SCALING_ACCURACY) > + > +#define LIS3_DEFAULT_FUZZ 3 > +#define LIS3_DEFAULT_FLAT 3 > + > struct lis3lv02d lis3_dev = { > .misc_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lis3_dev.misc_wait), > }; > @@ -105,11 +118,16 @@ static inline int lis3lv02d_get_axis(s8 axis, int hw_values[3]) > static void lis3lv02d_get_xyz(struct lis3lv02d *lis3, int *x, int *y, int *z) > { > int position[3]; > + int i; > > position[0] = lis3->read_data(lis3, OUTX); > position[1] = lis3->read_data(lis3, OUTY); > position[2] = lis3->read_data(lis3, OUTZ); > > + for (i = 0; i < 3; i++) > + position[i] = (position[i] * lis3->scale) / > + LIS3_SCALING_ACCURACY; > + > *x = lis3lv02d_get_axis(lis3->ac.x, position); > *y = lis3lv02d_get_axis(lis3->ac.y, position); > *z = lis3lv02d_get_axis(lis3->ac.z, position); > @@ -385,6 +403,7 @@ int lis3lv02d_joystick_enable(void) > { > struct input_dev *input_dev; > int err; > + int max_val, fuzz, flat; > > if (lis3_dev.idev) > return -EINVAL; > @@ -404,9 +423,13 @@ int lis3lv02d_joystick_enable(void) > input_dev->dev.parent = &lis3_dev.pdev->dev; > > set_bit(EV_ABS, input_dev->evbit); > - input_set_abs_params(input_dev, ABS_X, -lis3_dev.mdps_max_val, lis3_dev.mdps_max_val, 3, 3); > - input_set_abs_params(input_dev, ABS_Y, -lis3_dev.mdps_max_val, lis3_dev.mdps_max_val, 3, 3); > - input_set_abs_params(input_dev, ABS_Z, -lis3_dev.mdps_max_val, lis3_dev.mdps_max_val, 3, 3); > + max_val = (lis3_dev.mdps_max_val * lis3_dev.scale) > + / LIS3_SCALING_ACCURACY; > + fuzz = (LIS3_DEFAULT_FUZZ * lis3_dev.scale) / LIS3_SCALING_ACCURACY; > + flat = (LIS3_DEFAULT_FLAT * lis3_dev.scale) / LIS3_SCALING_ACCURACY; > + input_set_abs_params(input_dev, ABS_X, -max_val, max_val, fuzz, flat); > + input_set_abs_params(input_dev, ABS_Y, -max_val, max_val, fuzz, flat); > + input_set_abs_params(input_dev, ABS_Z, -max_val, max_val, fuzz, flat); > > err = input_register_polled_device(lis3_dev.idev); > if (err) { > @@ -521,12 +544,14 @@ int lis3lv02d_init_device(struct lis3lv02d *dev) > dev->read_data = lis3lv02d_read_12; > dev->mdps_max_val = 2048; > dev->pwron_delay = LIS3_PWRON_DELAY_WAI_12B; > + dev->scale = LIS3_2G2G_SENSITIVITY_WAI_12B; > break; > case WAI_8B: > printk(KERN_INFO DRIVER_NAME ": 8 bits sensor found\n"); > dev->read_data = lis3lv02d_read_8; > dev->mdps_max_val = 128; > dev->pwron_delay = LIS3_PWRON_DELAY_WAI_8B; > + dev->scale = LIS3_2G2G_SENSITIVITY_WAI_8B; > break; > default: > printk(KERN_ERR DRIVER_NAME > diff --git a/drivers/hwmon/lis3lv02d.h b/drivers/hwmon/lis3lv02d.h > index a692116..42618b8 100644 > --- a/drivers/hwmon/lis3lv02d.h > +++ b/drivers/hwmon/lis3lv02d.h > @@ -212,6 +212,10 @@ struct lis3lv02d { > s16 (*read_data) (struct lis3lv02d *lis3, int reg); > int mdps_max_val; > int pwron_delay; > + int scale; /* > + * relationship between 1 LBS and mG > + * (1/1000th of earth gravity) > + */ > > struct input_polled_dev *idev; /* input device */ > struct platform_device *pdev; /* platform device */ > -- > 1.5.6.3 > _______________________________________________ lm-sensors mailing list lm-sensors@xxxxxxxxxxxxxx http://lists.lm-sensors.org/mailman/listinfo/lm-sensors