u32                             scale_avail[8][2];
        u8                              gpocon;
        u8                              devid;
+       struct mutex                    lock;   /* protect sensor state */
 
        struct ad_sigma_delta           sd;
 };
        case IIO_CHAN_INFO_SCALE:
                switch (chan->type) {
                case IIO_VOLTAGE:
-                       mutex_lock(&indio_dev->mlock);
+                       mutex_lock(&st->lock);
                        *val = st->scale_avail[AD7192_CONF_GAIN(st->conf)][0];
                        *val2 = st->scale_avail[AD7192_CONF_GAIN(st->conf)][1];
-                       mutex_unlock(&indio_dev->mlock);
+                       mutex_unlock(&st->lock);
                        return IIO_VAL_INT_PLUS_NANO;
                case IIO_TEMP:
                        *val = 0;
        switch (mask) {
        case IIO_CHAN_INFO_SCALE:
                ret = -EINVAL;
+               mutex_lock(&st->lock);
                for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++)
                        if (val2 == st->scale_avail[i][1]) {
                                ret = 0;
                                ad7192_calibrate_all(st);
                                break;
                        }
+               mutex_unlock(&st->lock);
                break;
        case IIO_CHAN_INFO_SAMP_FREQ:
                if (!val) {
 
        st = iio_priv(indio_dev);
 
+       mutex_init(&st->lock);
+
        st->avdd = devm_regulator_get(&spi->dev, "avdd");
        if (IS_ERR(st->avdd))
                return PTR_ERR(st->avdd);