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

Commit 3f6a0bad authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Jonathan Cameron
Browse files

staging:iio:tsl2x7x: Use iio_str_to_fixedpoint instead of open-coding it



The tsl2x7x driver has a copy'n'pasted version of the iio_str_to_fixedpoint()
function from the IIO core. Replace this custom copy and use
iio_str_to_fixedpoint instead.

The patch also introduces a slight functional change in that it makes sure that
in case of a parsing error the error is reported back to userspace instead of
silently ignoring it.

Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Acked-by: default avatarJon Brenner <jon.brenner@ams.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 06ddd353
Loading
Loading
Loading
Loading
+12 −66
Original line number Diff line number Diff line
@@ -291,59 +291,6 @@ static const u8 device_channel_config[] = {
	ALSPRX2
};

/**
 * tsl2x7x_parse_buffer() - parse a decimal result from a buffer.
 * @*buf:                   pointer to char buffer to parse
 * @*result:                pointer to buffer to contain
 *                          resulting interger / decimal as ints.
 *
 */
static int
tsl2x7x_parse_buffer(const char *buf, struct tsl2x7x_parse_result *result)
{
	int integer = 0, fract = 0, fract_mult = 100000;
	bool integer_part = true, negative = false;

	if (buf[0] == '-') {
		negative = true;
		buf++;
	}

	while (*buf) {
		if ('0' <= *buf && *buf <= '9') {
			if (integer_part)
				integer = integer*10 + *buf - '0';
			else {
				fract += fract_mult*(*buf - '0');
				if (fract_mult == 1)
					break;
				fract_mult /= 10;
			}
		} else if (*buf == '\n') {
			if (*(buf + 1) == '\0')
				break;
			else
				return -EINVAL;
		} else if (*buf == '.') {
			integer_part = false;
		} else {
			return -EINVAL;
		}
		buf++;
	}
	if (negative) {
		if (integer)
			integer = -integer;
		else
			fract = -fract;
	}

	result->integer = integer;
	result->fract = fract;

	return 0;
}

/**
 * tsl2x7x_i2c_read() - Read a byte from a register.
 * @client:	i2c client
@@ -1036,13 +983,12 @@ static ssize_t tsl2x7x_als_time_store(struct device *dev,
	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
	struct tsl2X7X_chip *chip = iio_priv(indio_dev);
	struct tsl2x7x_parse_result result;
	int ret;

	result.integer = 0;
	result.fract = 0;

	tsl2x7x_parse_buffer(buf, &result);
	ret = iio_str_to_fixpoint(buf, 100, &result.integer, &result.fract);
	if (ret)
		return ret;

	result.fract /= 1000;
	result.fract /= 3;
	chip->tsl2x7x_settings.als_time =
			(TSL2X7X_MAX_TIMER_CNT - (u8)result.fract);
@@ -1109,12 +1055,12 @@ static ssize_t tsl2x7x_als_persistence_store(struct device *dev,
	struct tsl2X7X_chip *chip = iio_priv(indio_dev);
	struct tsl2x7x_parse_result result;
	int y, z, filter_delay;
	int ret;

	result.integer = 0;
	result.fract = 0;
	tsl2x7x_parse_buffer(buf, &result);
	ret = iio_str_to_fixpoint(buf, 100, &result.integer, &result.fract);
	if (ret)
		return ret;

	result.fract /= 1000;
	y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->tsl2x7x_settings.als_time) + 1;
	z = y * TSL2X7X_MIN_ITIME;

@@ -1155,12 +1101,12 @@ static ssize_t tsl2x7x_prox_persistence_store(struct device *dev,
	struct tsl2X7X_chip *chip = iio_priv(indio_dev);
	struct tsl2x7x_parse_result result;
	int y, z, filter_delay;
	int ret;

	result.integer = 0;
	result.fract = 0;
	tsl2x7x_parse_buffer(buf, &result);
	ret = iio_str_to_fixpoint(buf, 100, &result.integer, &result.fract);
	if (ret)
		return ret;

	result.fract /= 1000;
	y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->tsl2x7x_settings.prx_time) + 1;
	z = y * TSL2X7X_MIN_ITIME;