On Wed, 21 Mar 2018 06:29:08 -0400
Brian Masney <masn...@onstation.org> wrote:

> The struct tsl2x7x_settings contained a persistence member that
> contained both the ALS and proximity persistence fields. This patch
> splits this out into two separate fields so that the bitmasks in
> several parts of the code are no longer necessary.
> 
> The default persistence settings are also changed by this patch from:
> 
> - Proximity: 0 (Every proximity cycle generates an interrupt)
> - ALS: 255 (60 consecutive values out of range)
> 
> to something a little more reasonable based on my testing:
> 
> - Proximity: 1 (1 proximity value out of range)
> - ALS: 1 (1 value outside of threshold range)
> 
> Signed-off-by: Brian Masney <masn...@onstation.org>
Applied, thanks.

Jonathan
> ---
>  drivers/staging/iio/light/tsl2x7x.c | 24 +++++++++++-------------
>  drivers/staging/iio/light/tsl2x7x.h |  9 ++++++---
>  2 files changed, 17 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/staging/iio/light/tsl2x7x.c 
> b/drivers/staging/iio/light/tsl2x7x.c
> index 07ce3076a05d..c1e441857226 100644
> --- a/drivers/staging/iio/light/tsl2x7x.c
> +++ b/drivers/staging/iio/light/tsl2x7x.c
> @@ -226,10 +226,11 @@ static const struct tsl2x7x_settings 
> tsl2x7x_default_settings = {
>       .prox_config = 0,
>       .als_gain_trim = 1000,
>       .als_cal_target = 150,
> +     .als_persistence = 1,
>       .als_interrupt_en = false,
>       .als_thresh_low = 200,
>       .als_thresh_high = 256,
> -     .persistence = 255,
> +     .prox_persistence = 1,
>       .prox_interrupt_en = false,
>       .prox_thres_low  = 0,
>       .prox_thres_high = 512,
> @@ -621,7 +622,9 @@ static int tsl2x7x_chip_on(struct iio_dev *indio_dev)
>               (chip->settings.als_thresh_high) & 0xFF;
>       chip->tsl2x7x_config[TSL2X7X_ALS_MAXTHRESHHI] =
>               (chip->settings.als_thresh_high >> 8) & 0xFF;
> -     chip->tsl2x7x_config[TSL2X7X_PERSISTENCE] = chip->settings.persistence;
> +     chip->tsl2x7x_config[TSL2X7X_PERSISTENCE] =
> +             (chip->settings.prox_persistence & 0xFF) << 4 |
> +             (chip->settings.als_persistence & 0xFF);
>  
>       chip->tsl2x7x_config[TSL2X7X_PRX_COUNT] =
>                       chip->settings.prox_pulse_count;
> @@ -1043,15 +1046,10 @@ static int tsl2x7x_write_event_value(struct iio_dev 
> *indio_dev,
>  
>               filter_delay = DIV_ROUND_UP((val * 1000) + val2, z);
>  
> -             if (chan->type == IIO_INTENSITY) {
> -                     chip->settings.persistence &= 0xF0;
> -                     chip->settings.persistence |=
> -                             (filter_delay & 0x0F);
> -             } else {
> -                     chip->settings.persistence &= 0x0F;
> -                     chip->settings.persistence |=
> -                             ((filter_delay << 4) & 0xF0);
> -             }
> +             if (chan->type == IIO_INTENSITY)
> +                     chip->settings.als_persistence = filter_delay;
> +             else
> +                     chip->settings.prox_persistence = filter_delay;
>               ret = 0;
>               break;
>       default:
> @@ -1108,10 +1106,10 @@ static int tsl2x7x_read_event_value(struct iio_dev 
> *indio_dev,
>       case IIO_EV_INFO_PERIOD:
>               if (chan->type == IIO_INTENSITY) {
>                       time = chip->settings.als_time;
> -                     mult = chip->settings.persistence & 0x0F;
> +                     mult = chip->settings.als_persistence;
>               } else {
>                       time = chip->settings.prx_time;
> -                     mult = (chip->settings.persistence & 0xF0) >> 4;
> +                     mult = chip->settings.prox_persistence;
>               }
>  
>               /* Determine integration time */
> diff --git a/drivers/staging/iio/light/tsl2x7x.h 
> b/drivers/staging/iio/light/tsl2x7x.h
> index b2aa642299b3..d382cdbb976e 100644
> --- a/drivers/staging/iio/light/tsl2x7x.h
> +++ b/drivers/staging/iio/light/tsl2x7x.h
> @@ -50,11 +50,13 @@ struct tsl2x7x_lux {
>   *  @prox_config:           Prox configuration filters.
>   *  @als_cal_target:        Known external ALS reading for
>   *                          calibration.
> - *  @persistence:           H/W Filters, Number of 'out of limits'
> - *                          ADC readings PRX/ALS.
> + *  @als_persistence:       H/W Filters, Number of 'out of limits'
> + *                          ALS readings.
>   *  @als_interrupt_en:      Enable/Disable ALS interrupts
>   *  @als_thresh_low:        CH0 'low' count to trigger interrupt.
>   *  @als_thresh_high:       CH0 'high' count to trigger interrupt.
> + *  @prox_persistence:      H/W Filters, Number of 'out of limits'
> + *                          proximity readings.
>   *  @prox_interrupt_en:     Enable/Disable proximity interrupts
>   *  @prox_thres_low:        Low threshold proximity detection.
>   *  @prox_thres_high:       High threshold proximity detection
> @@ -70,10 +72,11 @@ struct tsl2x7x_settings {
>       int prox_gain;
>       int prox_config;
>       int als_cal_target;
> -     u8  persistence;
> +     u8 als_persistence;
>       bool als_interrupt_en;
>       int als_thresh_low;
>       int als_thresh_high;
> +     u8 prox_persistence;
>       bool prox_interrupt_en;
>       int prox_thres_low;
>       int prox_thres_high;

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to