Integration time of cm32181 is guessed about milliseconds. But cm32181_read_als_it function return IIO_VAL_INT. IIO_VAL_INT print integer(25000, 50000, 100000 ...). So fixed to return IIO_VAL_INT_PLUS_MICRO. Next, change cm32181_write_als_it and add .write_raw_get_fmt callback function for call iio_str_to_fixpoint. Cc: Kevin Tsai <ktsai@xxxxxxxxxxxxxxxx> Signed-off-by: Beomho Seo <beomho.seo@xxxxxxxxxxx> --- drivers/iio/light/cm32181.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/drivers/iio/light/cm32181.c b/drivers/iio/light/cm32181.c index f17b4e6..78d5620 100644 --- a/drivers/iio/light/cm32181.c +++ b/drivers/iio/light/cm32181.c @@ -103,13 +103,13 @@ static int cm32181_reg_init(struct cm32181_chip *cm32181) /** * cm32181_read_als_it() - Get sensor integration time (ms) * @cm32181: pointer of struct cm32181 - * @val: pointer of int to load the als_it value. + * @val2: pointer of int to load the als_it value. * * Report the current integartion time by millisecond. * - * Return: IIO_VAL_INT for success, otherwise -EINVAL. + * Return: IIO_VAL_INT_PLUS_MICRO for success, otherwise -EINVAL. */ -static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val) +static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val2) { u16 als_it; int i; @@ -119,8 +119,8 @@ static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val) als_it >>= CM32181_CMD_ALS_IT_SHIFT; for (i = 0; i < ARRAY_SIZE(als_it_bits); i++) { if (als_it == als_it_bits[i]) { - *val = als_it_value[i]; - return IIO_VAL_INT; + *val2 = als_it_value[i]; + return IIO_VAL_INT_PLUS_MICRO; } } @@ -136,7 +136,7 @@ static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val) * * Return: i2c_smbus_write_word_data command return value. */ -static int cm32181_write_als_it(struct cm32181_chip *cm32181, int val) +static int cm32181_write_als_it(struct cm32181_chip *cm32181, int val2) { struct i2c_client *client = cm32181->client; u16 als_it; @@ -144,7 +144,7 @@ static int cm32181_write_als_it(struct cm32181_chip *cm32181, int val) n = ARRAY_SIZE(als_it_value); for (i = 0; i < n; i++) - if (val <= als_it_value[i]) + if (val2 <= als_it_value[i]) break; if (i >= n) i = n - 1; @@ -221,7 +221,7 @@ static int cm32181_read_raw(struct iio_dev *indio_dev, *val = cm32181->calibscale; return IIO_VAL_INT; case IIO_CHAN_INFO_INT_TIME: - ret = cm32181_read_als_it(cm32181, val); + ret = cm32181_read_als_it(cm32181, val2); return ret; } @@ -240,13 +240,20 @@ static int cm32181_write_raw(struct iio_dev *indio_dev, cm32181->calibscale = val; return val; case IIO_CHAN_INFO_INT_TIME: - ret = cm32181_write_als_it(cm32181, val); + ret = cm32181_write_als_it(cm32181, val2); return ret; } return -EINVAL; } +static int cm32181_write_raw_get_fmt(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + long mask) +{ + return IIO_VAL_INT_PLUS_MICRO; +} + /** * cm32181_get_it_available() - Get available ALS IT value * @dev: pointer of struct device. @@ -264,7 +271,7 @@ static ssize_t cm32181_get_it_available(struct device *dev, n = ARRAY_SIZE(als_it_value); for (i = 0, len = 0; i < n; i++) - len += sprintf(buf + len, "%d ", als_it_value[i]); + len += sprintf(buf + len, "0.%06u ", als_it_value[i]); return len + sprintf(buf + len, "\n"); } @@ -294,6 +301,7 @@ static const struct iio_info cm32181_info = { .driver_module = THIS_MODULE, .read_raw = &cm32181_read_raw, .write_raw = &cm32181_write_raw, + .write_raw_get_fmt = &cm32181_write_raw_get_fmt, .attrs = &cm32181_attribute_group, }; -- 1.7.9.5 -- Best Regards, -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html