Commit 4f1ca415 authored by Peter Meerwald's avatar Peter Meerwald Committed by Jonathan Cameron

staging:iio:hmc5843: Reorganize _set_meas_conf()

move locking inside _set() function
Signed-off-by: default avatarPeter Meerwald <pmeerw@pmeerw.net>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 62248758
...@@ -73,7 +73,6 @@ enum hmc5843_ids { ...@@ -73,7 +73,6 @@ enum hmc5843_ids {
#define HMC5843_MEAS_CONF_NORMAL 0x00 #define HMC5843_MEAS_CONF_NORMAL 0x00
#define HMC5843_MEAS_CONF_POSITIVE_BIAS 0x01 #define HMC5843_MEAS_CONF_POSITIVE_BIAS 0x01
#define HMC5843_MEAS_CONF_NEGATIVE_BIAS 0x02 #define HMC5843_MEAS_CONF_NEGATIVE_BIAS 0x02
#define HMC5843_MEAS_CONF_NOT_USED 0x03
#define HMC5843_MEAS_CONF_MASK 0x03 #define HMC5843_MEAS_CONF_MASK 0x03
/* Scaling factors: 10000000/Gain */ /* Scaling factors: 10000000/Gain */
...@@ -211,19 +210,24 @@ static int hmc5843_read_measurement(struct hmc5843_data *data, ...@@ -211,19 +210,24 @@ static int hmc5843_read_measurement(struct hmc5843_data *data,
*/ */
static s32 hmc5843_set_meas_conf(struct hmc5843_data *data, u8 meas_conf) static s32 hmc5843_set_meas_conf(struct hmc5843_data *data, u8 meas_conf)
{ {
u8 reg_val; int ret;
reg_val = (meas_conf & HMC5843_MEAS_CONF_MASK) |
(data->rate << HMC5843_RATE_OFFSET); mutex_lock(&data->lock);
return i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_A, ret = i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_A,
reg_val); (meas_conf & HMC5843_MEAS_CONF_MASK) |
(data->rate << HMC5843_RATE_OFFSET));
if (ret >= 0)
data->meas_conf = meas_conf;
mutex_unlock(&data->lock);
return ret;
} }
static ssize_t hmc5843_show_measurement_configuration(struct device *dev, static ssize_t hmc5843_show_measurement_configuration(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
{ {
struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev));
struct hmc5843_data *data = iio_priv(indio_dev);
return sprintf(buf, "%d\n", data->meas_conf); return sprintf(buf, "%d\n", data->meas_conf);
} }
...@@ -232,28 +236,19 @@ static ssize_t hmc5843_set_measurement_configuration(struct device *dev, ...@@ -232,28 +236,19 @@ static ssize_t hmc5843_set_measurement_configuration(struct device *dev,
const char *buf, const char *buf,
size_t count) size_t count)
{ {
struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev));
struct hmc5843_data *data = iio_priv(indio_dev);
unsigned long meas_conf = 0; unsigned long meas_conf = 0;
int error; int ret;
error = kstrtoul(buf, 10, &meas_conf); ret = kstrtoul(buf, 10, &meas_conf);
if (error) if (ret)
return error; return ret;
if (meas_conf >= HMC5843_MEAS_CONF_NOT_USED) if (meas_conf >= HMC5843_MEAS_CONF_MASK)
return -EINVAL; return -EINVAL;
mutex_lock(&data->lock); ret = hmc5843_set_meas_conf(data, meas_conf);
dev_dbg(dev, "set measurement configuration to %lu\n", meas_conf);
if (hmc5843_set_meas_conf(data, meas_conf)) {
count = -EINVAL;
goto exit;
}
data->meas_conf = meas_conf;
exit: return (ret < 0) ? ret : count;
mutex_unlock(&data->lock);
return count;
} }
static IIO_DEVICE_ATTR(meas_conf, static IIO_DEVICE_ATTR(meas_conf,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment