Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f08a1508 authored by sayli karnik's avatar sayli karnik Committed by Jonathan Cameron
Browse files

staging: iio: cdc: ad7152: Replace mlock with a local mutex lock



mlock is intended to protect only switches between modes.
Given this driver doesn't support more than one mode (sysfs polled reads
only), replace mlock with a local mutex lock.

Signed-off-by: default avatarsayli karnik <karniksayli1995@gmail.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 2296c062
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ struct ad7152_chip_info {
	 */
	u8	filter_rate_setup;
	u8	setup[2];
	struct mutex state_lock;	/* protect hardware state */
};

static inline ssize_t ad7152_start_calib(struct device *dev,
@@ -115,10 +116,10 @@ static inline ssize_t ad7152_start_calib(struct device *dev,
	else
		regval |= AD7152_CONF_CH2EN;

	mutex_lock(&indio_dev->mlock);
	mutex_lock(&chip->state_lock);
	ret = i2c_smbus_write_byte_data(chip->client, AD7152_REG_CFG, regval);
	if (ret < 0) {
		mutex_unlock(&indio_dev->mlock);
		mutex_unlock(&chip->state_lock);
		return ret;
	}

@@ -126,12 +127,12 @@ static inline ssize_t ad7152_start_calib(struct device *dev,
		mdelay(20);
		ret = i2c_smbus_read_byte_data(chip->client, AD7152_REG_CFG);
		if (ret < 0) {
			mutex_unlock(&indio_dev->mlock);
			mutex_unlock(&chip->state_lock);
			return ret;
		}
	} while ((ret == regval) && timeout--);

	mutex_unlock(&indio_dev->mlock);
	mutex_unlock(&chip->state_lock);
	return len;
}

@@ -230,16 +231,16 @@ static int ad7152_write_raw_samp_freq(struct device *dev, int val)
	if (i >= ARRAY_SIZE(ad7152_filter_rate_table))
		i = ARRAY_SIZE(ad7152_filter_rate_table) - 1;

	mutex_lock(&indio_dev->mlock);
	mutex_lock(&chip->state_lock);
	ret = i2c_smbus_write_byte_data(chip->client,
					AD7152_REG_CFG2, AD7152_CFG2_OSR(i));
	if (ret < 0) {
		mutex_unlock(&indio_dev->mlock);
		mutex_unlock(&chip->state_lock);
		return ret;
	}

	chip->filter_rate_setup = i;
	mutex_unlock(&indio_dev->mlock);
	mutex_unlock(&chip->state_lock);

	return ret;
}
@@ -252,7 +253,7 @@ static int ad7152_write_raw(struct iio_dev *indio_dev,
	struct ad7152_chip_info *chip = iio_priv(indio_dev);
	int ret, i;

	mutex_lock(&indio_dev->mlock);
	mutex_lock(&chip->state_lock);

	switch (mask) {
	case IIO_CHAN_INFO_CALIBSCALE:
@@ -321,7 +322,7 @@ static int ad7152_write_raw(struct iio_dev *indio_dev,
	}

out:
	mutex_unlock(&indio_dev->mlock);
	mutex_unlock(&chip->state_lock);
	return ret;
}

@@ -334,7 +335,7 @@ static int ad7152_read_raw(struct iio_dev *indio_dev,
	int ret;
	u8 regval = 0;

	mutex_lock(&indio_dev->mlock);
	mutex_lock(&chip->state_lock);

	switch (mask) {
	case IIO_CHAN_INFO_RAW:
@@ -422,7 +423,7 @@ static int ad7152_read_raw(struct iio_dev *indio_dev,
		ret = -EINVAL;
	}
out:
	mutex_unlock(&indio_dev->mlock);
	mutex_unlock(&chip->state_lock);
	return ret;
}

@@ -509,6 +510,7 @@ static int ad7152_probe(struct i2c_client *client,
	i2c_set_clientdata(client, indio_dev);

	chip->client = client;
	mutex_init(&chip->state_lock);

	/* Establish that the iio_dev is a child of the i2c device */
	indio_dev->name = id->name;