On Mon, 24 Jun 2019 14:57:24 +0000 Jean-Baptiste Maneyrol <JManeyrol@xxxxxxxxxxxxxx> wrote: > Only allow 3-axis gyro and/or 3-axis accel. > For icm20602, temp data is mandatory for all conf. > > Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@xxxxxxxxxxxxxx> Hi Jean-Baptiste, Is this policy or a hardware requirement, and hence a fix for the driver? If it's a fix, please make that clearer and add a fixes tag. Thanks, Jonathan > --- > drivers/iio/imu/inv_mpu6050/inv_mpu_core.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c > index 385f14a4d5a7..bfd6d093e54d 100644 > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c > @@ -851,6 +851,13 @@ static const struct iio_chan_spec inv_mpu_channels[] = { > INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z), > }; > > +static const unsigned long inv_mpu_scan_masks[] = { > + 0x07, /* 3-axis accel */ > + 0x38, /* 3-axis gyro */ > + 0x3F, /* 6-axis accel + gyro */ > + 0, > +}; > + > static const struct iio_chan_spec inv_icm20602_channels[] = { > IIO_CHAN_SOFT_TIMESTAMP(INV_ICM20602_SCAN_TIMESTAMP), > { > @@ -877,6 +884,13 @@ static const struct iio_chan_spec inv_icm20602_channels[] = { > INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_ICM20602_SCAN_ACCL_Z), > }; > > +static const unsigned long inv_icm20602_scan_masks[] = { > + 0x0F, /* 3-axis accel + temp (mandatory) */ > + 0x78, /* 3-axis gyro + temp (mandatory) */ > + 0x7F, /* 6-axis accel + gyro + temp (mandatory) */ > + 0, > +}; > + > /* > * The user can choose any frequency between INV_MPU6050_MIN_FIFO_RATE and > * INV_MPU6050_MAX_FIFO_RATE, but only these frequencies are matched by the > @@ -1136,9 +1150,11 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name, > if (chip_type == INV_ICM20602) { > indio_dev->channels = inv_icm20602_channels; > indio_dev->num_channels = ARRAY_SIZE(inv_icm20602_channels); > + indio_dev->available_scan_masks = inv_icm20602_scan_masks; > } else { > indio_dev->channels = inv_mpu_channels; > indio_dev->num_channels = ARRAY_SIZE(inv_mpu_channels); > + indio_dev->available_scan_masks = inv_mpu_scan_masks; > } > > indio_dev->info = &mpu_info;