All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Brian Masney <masneyb@onstation.org>
Cc: linux-iio@vger.kernel.org, gregkh@linuxfoundation.org,
	devel@driverdev.osuosl.org, knaack.h@gmx.de, lars@metafoo.de,
	pmeerw@pmeerw.net, linux-kernel@vger.kernel.org,
	Jon.Brenner@ams.com
Subject: Re: [PATCH 01/13] staging: iio: tsl2x7x: migrate *_thresh_period sysfs attributes to iio_event_spec
Date: Sat, 21 Oct 2017 18:31:20 +0100	[thread overview]
Message-ID: <20171021183120.3c846694@archlinux> (raw)
In-Reply-To: <20171019200632.25820-2-masneyb@onstation.org>

On Thu, 19 Oct 2017 16:06:20 -0400
Brian Masney <masneyb@onstation.org> wrote:

> The sysfs attributes in_intensity0_thresh_period and
> in_proximity0_thresh_period are currently directly created by the driver.
> This patch migrates the creation of these sysfs attributes from the driver
> to using the IIO core via iio_event_spec.
> 
> Signed-off-by: Brian Masney <masneyb@onstation.org>
Looks good to me.

Applied to the togreg branch of iio.git and pushed out as testing
for the autobuilders to play with it.

Thanks,

Jonathan
> ---
> Changes since v1:
> - Use IIO_EV_DIR_EITHER instead of IIO_EV_DIR_NONE
> 
>  drivers/staging/iio/light/tsl2x7x.c | 196 ++++++++++--------------------------
>  1 file changed, 52 insertions(+), 144 deletions(-)
> 
> diff --git a/drivers/staging/iio/light/tsl2x7x.c b/drivers/staging/iio/light/tsl2x7x.c
> index e6a71f5fc9cb..2dd8c502fd7a 100644
> --- a/drivers/staging/iio/light/tsl2x7x.c
> +++ b/drivers/staging/iio/light/tsl2x7x.c
> @@ -932,108 +932,6 @@ static ssize_t in_illuminance0_target_input_store(struct device *dev,
>  	return len;
>  }
>  
> -/* persistence settings */
> -static ssize_t in_intensity0_thresh_period_show(struct device *dev,
> -					    struct device_attribute *attr,
> -					    char *buf)
> -{
> -	struct tsl2X7X_chip *chip = iio_priv(dev_to_iio_dev(dev));
> -	int y, z, filter_delay;
> -
> -	/* Determine integration time */
> -	y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->settings.als_time) + 1;
> -	z = y * TSL2X7X_MIN_ITIME;
> -	filter_delay = z * (chip->settings.persistence & 0x0F);
> -	y = filter_delay / 1000;
> -	z = filter_delay % 1000;
> -
> -	return snprintf(buf, PAGE_SIZE, "%d.%03d\n", y, z);
> -}
> -
> -static ssize_t in_intensity0_thresh_period_store(struct device *dev,
> -					     struct device_attribute *attr,
> -					     const char *buf, size_t len)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct tsl2X7X_chip *chip = iio_priv(indio_dev);
> -	struct tsl2x7x_parse_result result;
> -	int y, z, filter_delay;
> -	int ret;
> -
> -	ret = iio_str_to_fixpoint(buf, 100, &result.integer, &result.fract);
> -	if (ret)
> -		return ret;
> -
> -	y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->settings.als_time) + 1;
> -	z = y * TSL2X7X_MIN_ITIME;
> -
> -	filter_delay =
> -		DIV_ROUND_UP((result.integer * 1000) + result.fract, z);
> -
> -	chip->settings.persistence &= 0xF0;
> -	chip->settings.persistence |= (filter_delay & 0x0F);
> -
> -	dev_info(&chip->client->dev, "%s: als persistence = %d",
> -		 __func__, filter_delay);
> -
> -	ret = tsl2x7x_invoke_change(indio_dev);
> -	if (ret < 0)
> -		return ret;
> -
> -	return IIO_VAL_INT_PLUS_MICRO;
> -}
> -
> -static ssize_t in_proximity0_thresh_period_show(struct device *dev,
> -					     struct device_attribute *attr,
> -					     char *buf)
> -{
> -	struct tsl2X7X_chip *chip = iio_priv(dev_to_iio_dev(dev));
> -	int y, z, filter_delay;
> -
> -	/* Determine integration time */
> -	y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->settings.prx_time) + 1;
> -	z = y * TSL2X7X_MIN_ITIME;
> -	filter_delay = z * ((chip->settings.persistence & 0xF0) >> 4);
> -	y = filter_delay / 1000;
> -	z = filter_delay % 1000;
> -
> -	return snprintf(buf, PAGE_SIZE, "%d.%03d\n", y, z);
> -}
> -
> -static ssize_t in_proximity0_thresh_period_store(struct device *dev,
> -					      struct device_attribute *attr,
> -					      const char *buf, size_t len)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct tsl2X7X_chip *chip = iio_priv(indio_dev);
> -	struct tsl2x7x_parse_result result;
> -	int y, z, filter_delay;
> -	int ret;
> -
> -	ret = iio_str_to_fixpoint(buf, 100, &result.integer, &result.fract);
> -	if (ret)
> -		return ret;
> -
> -	y = (TSL2X7X_MAX_TIMER_CNT - (u8)chip->settings.prx_time) + 1;
> -	z = y * TSL2X7X_MIN_ITIME;
> -
> -	filter_delay =
> -		DIV_ROUND_UP((result.integer * 1000) + result.fract, z);
> -
> -	chip->settings.persistence &= 0x0F;
> -	chip->settings.persistence |= ((filter_delay << 4) & 0xF0);
> -
> -	dev_info(&chip->client->dev, "%s: prox persistence = %d",
> -		 __func__, filter_delay);
> -
> -	ret = tsl2x7x_invoke_change(indio_dev);
> -	if (ret < 0)
> -		return ret;
> -
> -
> -	return IIO_VAL_INT_PLUS_MICRO;
> -}
> -
>  static ssize_t in_illuminance0_calibrate_store(struct device *dev,
>  				    struct device_attribute *attr,
>  				    const char *buf, size_t len)
> @@ -1198,7 +1096,8 @@ static int tsl2x7x_write_event_value(struct iio_dev *indio_dev,
>  				     int val, int val2)
>  {
>  	struct tsl2X7X_chip *chip = iio_priv(indio_dev);
> -	int ret = -EINVAL;
> +	int ret = -EINVAL, y, z, filter_delay;
> +	u8 time;
>  
>  	switch (info) {
>  	case IIO_EV_INFO_VALUE:
> @@ -1230,6 +1129,33 @@ static int tsl2x7x_write_event_value(struct iio_dev *indio_dev,
>  			}
>  		}
>  		break;
> +	case IIO_EV_INFO_PERIOD:
> +		if (chan->type == IIO_INTENSITY)
> +			time = chip->settings.als_time;
> +		else
> +			time = chip->settings.prx_time;
> +
> +		y = (TSL2X7X_MAX_TIMER_CNT - time) + 1;
> +		z = y * TSL2X7X_MIN_ITIME;
> +
> +		filter_delay = DIV_ROUND_UP((val * 1000) + val2, z);
> +
> +		if (chan->type == IIO_INTENSITY) {
> +			chip->settings.persistence &= 0xF0;
> +			chip->settings.persistence |=
> +				(filter_delay & 0x0F);
> +			dev_info(&chip->client->dev, "%s: ALS persistence = %d",
> +				 __func__, filter_delay);
> +		} else {
> +			chip->settings.persistence &= 0x0F;
> +			chip->settings.persistence |=
> +				((filter_delay << 4) & 0xF0);
> +			dev_info(&chip->client->dev,
> +				 "%s: Proximity persistence = %d",
> +				 __func__, filter_delay);
> +		}
> +		ret = 0;
> +		break;
>  	default:
>  		break;
>  	}
> @@ -1248,7 +1174,8 @@ static int tsl2x7x_read_event_value(struct iio_dev *indio_dev,
>  				    int *val, int *val2)
>  {
>  	struct tsl2X7X_chip *chip = iio_priv(indio_dev);
> -	int ret = -EINVAL;
> +	int ret = -EINVAL, filter_delay, mult;
> +	u8 time;
>  
>  	switch (info) {
>  	case IIO_EV_INFO_VALUE:
> @@ -1280,6 +1207,23 @@ static int tsl2x7x_read_event_value(struct iio_dev *indio_dev,
>  			}
>  		}
>  		break;
> +	case IIO_EV_INFO_PERIOD:
> +		if (chan->type == IIO_INTENSITY) {
> +			time = chip->settings.als_time;
> +			mult = chip->settings.persistence & 0x0F;
> +		} else {
> +			time = chip->settings.prx_time;
> +			mult = (chip->settings.persistence & 0xF0) >> 4;
> +		}
> +
> +		/* Determine integration time */
> +		*val = (TSL2X7X_MAX_TIMER_CNT - time) + 1;
> +		*val2 = *val * TSL2X7X_MIN_ITIME;
> +		filter_delay = *val2 * mult;
> +		*val = filter_delay / 1000;
> +		*val2 = filter_delay % 1000;
> +		ret = IIO_VAL_INT_PLUS_MICRO;
> +		break;
>  	default:
>  		break;
>  	}
> @@ -1444,10 +1388,6 @@ static DEVICE_ATTR_WO(in_proximity0_calibrate);
>  
>  static DEVICE_ATTR_RW(in_illuminance0_lux_table);
>  
> -static DEVICE_ATTR_RW(in_intensity0_thresh_period);
> -
> -static DEVICE_ATTR_RW(in_proximity0_thresh_period);
> -
>  /* Use the default register values to identify the Taos device */
>  static int tsl2x7x_device_id(int *id, int target)
>  {
> @@ -1554,22 +1494,6 @@ static struct attribute *tsl2x7x_ALSPRX2_device_attrs[] = {
>  	NULL
>  };
>  
> -static struct attribute *tsl2X7X_ALS_event_attrs[] = {
> -	&dev_attr_in_intensity0_thresh_period.attr,
> -	NULL,
> -};
> -
> -static struct attribute *tsl2X7X_PRX_event_attrs[] = {
> -	&dev_attr_in_proximity0_thresh_period.attr,
> -	NULL,
> -};
> -
> -static struct attribute *tsl2X7X_ALSPRX_event_attrs[] = {
> -	&dev_attr_in_intensity0_thresh_period.attr,
> -	&dev_attr_in_proximity0_thresh_period.attr,
> -	NULL,
> -};
> -
>  static const struct attribute_group tsl2X7X_device_attr_group_tbl[] = {
>  	[ALS] = {
>  		.attrs = tsl2x7x_ALS_device_attrs,
> @@ -1588,25 +1512,9 @@ static const struct attribute_group tsl2X7X_device_attr_group_tbl[] = {
>  	},
>  };
>  
> -static const struct attribute_group tsl2X7X_event_attr_group_tbl[] = {
> -	[ALS] = {
> -		.attrs = tsl2X7X_ALS_event_attrs,
> -		.name = "events",
> -	},
> -	[PRX] = {
> -		.attrs = tsl2X7X_PRX_event_attrs,
> -		.name = "events",
> -	},
> -	[ALSPRX] = {
> -		.attrs = tsl2X7X_ALSPRX_event_attrs,
> -		.name = "events",
> -	},
> -};
> -
>  static const struct iio_info tsl2X7X_device_info[] = {
>  	[ALS] = {
>  		.attrs = &tsl2X7X_device_attr_group_tbl[ALS],
> -		.event_attrs = &tsl2X7X_event_attr_group_tbl[ALS],
>  		.read_raw = &tsl2x7x_read_raw,
>  		.write_raw = &tsl2x7x_write_raw,
>  		.read_event_value = &tsl2x7x_read_event_value,
> @@ -1616,7 +1524,6 @@ static const struct iio_info tsl2X7X_device_info[] = {
>  	},
>  	[PRX] = {
>  		.attrs = &tsl2X7X_device_attr_group_tbl[PRX],
> -		.event_attrs = &tsl2X7X_event_attr_group_tbl[PRX],
>  		.read_raw = &tsl2x7x_read_raw,
>  		.write_raw = &tsl2x7x_write_raw,
>  		.read_event_value = &tsl2x7x_read_event_value,
> @@ -1626,7 +1533,6 @@ static const struct iio_info tsl2X7X_device_info[] = {
>  	},
>  	[ALSPRX] = {
>  		.attrs = &tsl2X7X_device_attr_group_tbl[ALSPRX],
> -		.event_attrs = &tsl2X7X_event_attr_group_tbl[ALSPRX],
>  		.read_raw = &tsl2x7x_read_raw,
>  		.write_raw = &tsl2x7x_write_raw,
>  		.read_event_value = &tsl2x7x_read_event_value,
> @@ -1636,7 +1542,6 @@ static const struct iio_info tsl2X7X_device_info[] = {
>  	},
>  	[PRX2] = {
>  		.attrs = &tsl2X7X_device_attr_group_tbl[PRX2],
> -		.event_attrs = &tsl2X7X_event_attr_group_tbl[PRX],
>  		.read_raw = &tsl2x7x_read_raw,
>  		.write_raw = &tsl2x7x_write_raw,
>  		.read_event_value = &tsl2x7x_read_event_value,
> @@ -1646,7 +1551,6 @@ static const struct iio_info tsl2X7X_device_info[] = {
>  	},
>  	[ALSPRX2] = {
>  		.attrs = &tsl2X7X_device_attr_group_tbl[ALSPRX2],
> -		.event_attrs = &tsl2X7X_event_attr_group_tbl[ALSPRX],
>  		.read_raw = &tsl2x7x_read_raw,
>  		.write_raw = &tsl2x7x_write_raw,
>  		.read_event_value = &tsl2x7x_read_event_value,
> @@ -1667,6 +1571,10 @@ static const struct iio_event_spec tsl2x7x_events[] = {
>  		.dir = IIO_EV_DIR_FALLING,
>  		.mask_separate = BIT(IIO_EV_INFO_VALUE) |
>  			BIT(IIO_EV_INFO_ENABLE),
> +	}, {
> +		.type = IIO_EV_TYPE_THRESH,
> +		.dir = IIO_EV_DIR_EITHER,
> +		.mask_separate = BIT(IIO_EV_INFO_PERIOD),
>  	},
>  };
>  


  reply	other threads:[~2017-10-21 17:31 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-19 20:06 [PATCH 00/13] staging: iio: tsl2x7x: staging cleanups Brian Masney
2017-10-19 20:06 ` [PATCH 01/13] staging: iio: tsl2x7x: migrate *_thresh_period sysfs attributes to iio_event_spec Brian Masney
2017-10-21 17:31   ` Jonathan Cameron [this message]
2017-10-19 20:06 ` [PATCH 02/13] staging: iio: tsl2x7x: remove unused tsl2x7x_parse_result structure Brian Masney
2017-10-21 17:32   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 03/13] staging: iio: tsl2x7x: sort #includes Brian Masney
2017-10-21 17:34   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 04/13] staging: iio: tsl2x7x: remove unnecessary struct iio_dev definition Brian Masney
2017-10-21 17:34   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 05/13] staging: iio: tsl2x7x: changed #defines to be aligned on the same column Brian Masney
2017-10-21 17:35   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 06/13] staging: iio: tsl2x7x: convert in_proximity0_calibscale_available to use IIO_CONST_ATTR Brian Masney
2017-10-21 17:36   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 07/13] staging: iio: tsl2x7x: remove unnecessary parentheses Brian Masney
2017-10-21 17:38   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 08/13] staging: iio: tsl2x7x: correct alignment of parenthesis Brian Masney
2017-10-21 17:40   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 09/13] " Brian Masney
2017-10-21 17:41   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 10/13] staging: iio: tsl2x7x: rename power defines to improve code readability Brian Masney
2017-10-21 17:42   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 11/13] staging: iio: tsl2x7x: fix alignment of break statements Brian Masney
2017-10-21 17:44   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 12/13] staging: iio: tsl2x7x: put function definitions on a single line Brian Masney
2017-10-21 17:45   ` Jonathan Cameron
2017-10-19 20:06 ` [PATCH 13/13] staging: iio: tsl2x7x: add goto for TSL2X7X_LUX_CALC_OVER_FLOW Brian Masney
2017-10-21 17:46   ` Jonathan Cameron
2017-10-23  9:06   ` Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171021183120.3c846694@archlinux \
    --to=jic23@kernel.org \
    --cc=Jon.Brenner@ams.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masneyb@onstation.org \
    --cc=pmeerw@pmeerw.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.