staging:iio:hmc5843: Reorganize _set_meas_conf()
move locking inside _set() function Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
Родитель
62248758a7
Коммит
4f1ca4158d
|
@ -73,7 +73,6 @@ enum hmc5843_ids {
|
|||
#define HMC5843_MEAS_CONF_NORMAL 0x00
|
||||
#define HMC5843_MEAS_CONF_POSITIVE_BIAS 0x01
|
||||
#define HMC5843_MEAS_CONF_NEGATIVE_BIAS 0x02
|
||||
#define HMC5843_MEAS_CONF_NOT_USED 0x03
|
||||
#define HMC5843_MEAS_CONF_MASK 0x03
|
||||
|
||||
/* Scaling factors: 10000000/Gain */
|
||||
|
@ -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)
|
||||
{
|
||||
u8 reg_val;
|
||||
reg_val = (meas_conf & HMC5843_MEAS_CONF_MASK) |
|
||||
(data->rate << HMC5843_RATE_OFFSET);
|
||||
return i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_A,
|
||||
reg_val);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&data->lock);
|
||||
ret = i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_A,
|
||||
(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,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct hmc5843_data *data = iio_priv(indio_dev);
|
||||
struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev));
|
||||
return sprintf(buf, "%d\n", data->meas_conf);
|
||||
}
|
||||
|
||||
|
@ -232,28 +236,19 @@ static ssize_t hmc5843_set_measurement_configuration(struct device *dev,
|
|||
const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct hmc5843_data *data = iio_priv(indio_dev);
|
||||
struct hmc5843_data *data = iio_priv(dev_to_iio_dev(dev));
|
||||
unsigned long meas_conf = 0;
|
||||
int error;
|
||||
int ret;
|
||||
|
||||
error = kstrtoul(buf, 10, &meas_conf);
|
||||
if (error)
|
||||
return error;
|
||||
if (meas_conf >= HMC5843_MEAS_CONF_NOT_USED)
|
||||
ret = kstrtoul(buf, 10, &meas_conf);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (meas_conf >= HMC5843_MEAS_CONF_MASK)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&data->lock);
|
||||
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;
|
||||
ret = hmc5843_set_meas_conf(data, meas_conf);
|
||||
|
||||
exit:
|
||||
mutex_unlock(&data->lock);
|
||||
return count;
|
||||
return (ret < 0) ? ret : count;
|
||||
}
|
||||
|
||||
static IIO_DEVICE_ATTR(meas_conf,
|
||||
|
|
Загрузка…
Ссылка в новой задаче