driver: input: sensors: fix mma8452 gsensor data convert err

Change-Id: Icd754e9606dc8b0d1d44e932dd19cf113c79c3d6
Signed-off-by: Zorro Liu <lyx@rock-chips.com>
This commit is contained in:
Zorro Liu 2019-01-02 10:00:48 +08:00 committed by Tao Huang
parent 62b7ebee85
commit 6395f07d89

View File

@ -109,26 +109,26 @@
Gravity_step: gravity value indicated by per count
*/
#define FREAD_MASK 0 /* enabled(1<<1) only if reading MSB 8bits*/
#define MMA845X_RANGE 2000000
#define MMA845X_RANGE (16384 * 2)
/* mma8451 */
#define MMA8451_PRECISION 14
#define MMA8451_BOUNDARY (0x1 << (MMA8451_PRECISION - 1))
#define MMA8451_GRAVITY_STEP MMA845X_RANGE / MMA8451_BOUNDARY
#define MMA8451_GRAVITY_STEP (MMA845X_RANGE / MMA8451_BOUNDARY)
/* mma8452 */
#define MMA8452_PRECISION 12
#define MMA8452_BOUNDARY (0x1 << (MMA8452_PRECISION - 1))
#define MMA8452_GRAVITY_STEP MMA845X_RANGE / MMA8452_BOUNDARY
#define MMA8452_GRAVITY_STEP (MMA845X_RANGE / MMA8452_BOUNDARY)
/* mma8453 */
#define MMA8453_PRECISION 10
#define MMA8453_BOUNDARY (0x1 << (MMA8453_PRECISION - 1))
#define MMA8453_GRAVITY_STEP MMA845X_RANGE / MMA8453_BOUNDARY
#define MMA8453_GRAVITY_STEP (MMA845X_RANGE / MMA8453_BOUNDARY)
/* mma8653 */
#define MMA8653_PRECISION 10
#define MMA8653_BOUNDARY (0x1 << (MMA8653_PRECISION - 1))
#define MMA8653_GRAVITY_STEP MMA845X_RANGE / MMA8653_BOUNDARY
#define MMA8653_GRAVITY_STEP (MMA845X_RANGE / MMA8653_BOUNDARY)
#define MMA8451_DEVID 0x1a
@ -250,28 +250,44 @@ static int sensor_convert_data(struct i2c_client *client, char high_byte, char l
swap(high_byte,low_byte);
result = ((int)high_byte << (MMA8451_PRECISION-8))
| ((int)low_byte >> (16-MMA8451_PRECISION));
result *= 4;
if (result < MMA8451_BOUNDARY)
result = result * MMA8451_GRAVITY_STEP;
else
result = ~(((~result & (0x7fff >> (16 - MMA8451_PRECISION))) + 1)
* MMA8451_GRAVITY_STEP) + 1;
break;
case MMA8452_DEVID:
swap(high_byte,low_byte);
result = ((int)high_byte << (MMA8452_PRECISION-8))
| ((int)low_byte >> (16-MMA8452_PRECISION));
result *= 16;
if (result < MMA8452_BOUNDARY)
result = result * MMA8452_GRAVITY_STEP;
else
result = ~(((~result & (0x7fff >> (16 - MMA8452_PRECISION))) + 1)
* MMA8452_GRAVITY_STEP) + 1;
break;
case MMA8453_DEVID:
swap(high_byte,low_byte);
result = ((int)high_byte << (MMA8453_PRECISION-8))
| ((int)low_byte >> (16-MMA8453_PRECISION));
result *= 64;
if (result < MMA8453_BOUNDARY)
result = result * MMA8453_GRAVITY_STEP;
else
result = ~(((~result & (0x7fff >> (16 - MMA8453_PRECISION))) + 1)
* MMA8453_GRAVITY_STEP) + 1;
break;
case MMA8653_DEVID:
swap(high_byte,low_byte);
result = ((int)high_byte << (MMA8653_PRECISION-8))
| ((int)low_byte >> (16-MMA8653_PRECISION));
result *= 64;
if (result < MMA8653_BOUNDARY)
result = result * MMA8653_GRAVITY_STEP;
else
result = ~(((~result & (0x7fff >> (16 - MMA8653_PRECISION))) + 1)
* MMA8653_GRAVITY_STEP) + 1;
break;
default:
@ -364,7 +380,7 @@ struct sensor_operate gsensor_mma8452_ops = {
.precision = MMA8452_PRECISION,
.ctrl_reg = MMA8452_REG_CTRL_REG1,
.int_status_reg = MMA8452_REG_INTSRC,
.range = {-32768, 32768},
.range = {-MMA845X_RANGE, MMA845X_RANGE},
.trig = IRQF_TRIGGER_LOW | IRQF_ONESHOT,
.active = sensor_active,
.init = sensor_init,