RE: [PATCH V5] TAOS tsl2x7x
From: Jonathan Cameron
Date: Wed Apr 04 2012 - 12:23:54 EST
Jon Brenner <jbrenner@xxxxxxxxxxx> wrote:
>Hi Jonathan,
>Thanks for the review .
>
>Please see various responses - in line.
>
>Next patch will be V6 and the last - I hope!
>Jon
>
>> -----Original Message-----
>> From: Jonathan Cameron [mailto:jic23@xxxxxxxxx]
>> Sent: Wednesday, April 04, 2012 3:35 AM
>> To: Jon Brenner
>> Cc: linux-iio; Linux Kernel
>> Subject: Re: [PATCH V5] TAOS tsl2x7x
>>
>> On 4/2/2012 5:50 PM, Jon Brenner wrote:
>> > TAOS device driver (version 5) for the tsl/tmd 2771 and 2772 device
>families
>> (inc. all variants).
>> Hi Jon,
>>
>> Changes since last version?
>Correct.
>>
>> A few bits still to sort out in here I'm afraid... (getting there
>though!)
>> My reviews tend to get more picky as the big stuff gets sorted out.
>>
>> On trivial extra blank line to clear out.
>
>> Extra line for your next driver has snuck into the make file.
>Yikes!
>
>> Units don't look right for sampling frequency. Sorry, but that's an
>abi
>> issue so even if it is
>> fiddly to do the conversion to Hz it needs to be done.
>> Would normally expect changes to events to get applied immediately.
>Here
>> I think that only
>> happens if you turn the device off and on again?
>This is per customer request - allows complete reconfiguration without
>many device on/offs.
>
To match other devices turn off then on again iff previously on. Works for me and your customer!
>>
>> For future reference (don't bother here!) make any documentation
>moves
>> not directly dependent on the
>> driver (such as those that will become used by multiple drivers) in a
>> precursor patch.
>OK
>
>> >
>> > Signed-off-by: Jon Brenner<jbrenner@xxxxxxxxxxx>
>> > ---
>> > .../light/sysfs-bus-iio-light-tsl2583 | 6 +
>> > .../light/sysfs-bus-iio-light-tsl2x7x | 14 +
>> > drivers/staging/iio/Documentation/sysfs-bus-iio | 7 +
>> > .../staging/iio/Documentation/sysfs-bus-iio-light | 8 +-
>> > .../iio/Documentation/sysfs-bus-iio-light-tsl2583 | 20 -
>> > drivers/staging/iio/light/Kconfig | 8 +
>> > drivers/staging/iio/light/Makefile | 2 +
>> > drivers/staging/iio/light/tsl2x7x.h | 99 ++
>> > drivers/staging/iio/light/tsl2x7x_core.c | 1830
>++++++++++++++++++++
>> > 9 files changed, 1970 insertions(+), 24 deletions(-)
>> >
>> > diff --git
>a/drivers/staging/iio/Documentation/light/sysfs-bus-iio-light-tsl2583
>> b/drivers/staging/iio/Documentation/light/sysfs-bus-iio-light-tsl2583
>> > new file mode 100644
>> > index 0000000..8f2a038
>> > --- /dev/null
>> > +++
>b/drivers/staging/iio/Documentation/light/sysfs-bus-iio-light-tsl2583
>> > @@ -0,0 +1,6 @@
>> > +What: /sys/bus/iio/devices/device[n]/illuminance0_calibrate
>> > +KernelVersion: 2.6.37
>> > +Contact: linux-iio@xxxxxxxxxxxxxxx
>> > +Description:
>> > + This property causes an internal calibration of the als gain
>trim
>> > + value which is later used in calculating illuminance in lux.
>> > diff --git
>a/drivers/staging/iio/Documentation/light/sysfs-bus-iio-light-tsl2x7x
>> b/drivers/staging/iio/Documentation/light/sysfs-bus-iio-light-tsl2x7x
>> > new file mode 100644
>> > index 0000000..275ae54
>> > --- /dev/null
>> > +++
>b/drivers/staging/iio/Documentation/light/sysfs-bus-iio-light-tsl2x7x
>> > @@ -0,0 +1,14 @@
>> > +What: /sys/bus/iio/devices/device[n]/illuminance0_calibrate
>> > +KernelVersion: 2.6.37
>> > +Contact: linux-iio@xxxxxxxxxxxxxxx
>> > +Description:
>> > + This property causes an internal calibration of the als gain
>trim
>> > + value which is later used in calculating illuminance in lux.
>> Hmm.. could possibly move this into sysfs-bus-iio-light at some point
>> given we clearly have two drivers
>> using it. (fine for now though)
>> > +
>> > +What: /sys/bus/iio/devices/device[n]/proximity_calibrate
>> > +KernelVersion: 3.3-rc1
>> > +Contact: linux-iio@xxxxxxxxxxxxxxx
>> > +Description:
>> > + Causes an recalculation and adjustment to the
>> > + proximity_thresh_rising_value.
>> This one is interesting as there are other proximity sensors out
>there
>> (not light based) so we
>> may want to move this at some later point to a
>sysfs-bus-iio-proximity
>> documentation file.
>> > +
>> > diff --git a/drivers/staging/iio/Documentation/sysfs-bus-iio
>> b/drivers/staging/iio/Documentation/sysfs-bus-iio
>> > index 46a995d..5b2b5d3 100644
>> > --- a/drivers/staging/iio/Documentation/sysfs-bus-iio
>> > +++ b/drivers/staging/iio/Documentation/sysfs-bus-iio
>> > @@ -258,6 +258,8 @@ What
>> /sys/bus/iio/devices/iio:deviceX/in_accel_z_calibscale
>> > What
>> /sys/bus/iio/devices/iio:deviceX/in_anglvel_x_calibscale
>> > What
>> /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_calibscale
>> > What
>> /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_calibscale
>> > +what
>> /sys/bus/iio/devices/iio:deviceX/illuminance0_calibscale
>> > +what /sys/bus/iio/devices/iio:deviceX/proximity_calibscale
>> > KernelVersion: 2.6.35
>> > Contact: linux-iio@xxxxxxxxxxxxxxx
>> > Description:
>> > @@ -457,6 +459,10 @@ What:
>> /sys/.../events/in_voltageY_raw_thresh_falling_value
>> > What: /sys/.../events/in_voltageY_raw_thresh_falling_value
>> > What: /sys/.../events/in_tempY_raw_thresh_falling_value
>> > What: /sys/.../events/in_tempY_raw_thresh_falling_value
>> Oops, clearly and error in the lines above (repeats of falling and no
>> rising). I'll fix that up unless
>> someone else gets there first.
>OK - will not change in this patch.
>
>> > +What: /sys/.../events/illuminance0_thresh_falling_value
>> > +what: /sys/.../events/illuminance0_thresh_rising_value
>> > +what: /sys/.../events/proximity_thresh_falling_value
>> > +what: /sys/.../events/proximity_thresh_rising_value
>> > KernelVersion: 2.6.37
>> > Contact: linux-iio@xxxxxxxxxxxxxxx
>> > Description:
>> > @@ -739,3 +745,4 @@ Description:
>> > system. To minimize the current consumption of the system,
>> > the bridge can be disconnected (when it is not being used
>> > using the bridge_switch_en attribute.
>> > +
>> loose this extra blank line.
>> > diff --git a/drivers/staging/iio/Documentation/sysfs-bus-iio-light
>> b/drivers/staging/iio/Documentation/sysfs-bus-iio-light
>> > index edbf470..4385c70 100644
>> > --- a/drivers/staging/iio/Documentation/sysfs-bus-iio-light
>> > +++ b/drivers/staging/iio/Documentation/sysfs-bus-iio-light
>> > @@ -76,10 +76,10 @@ Contact: linux-iio@xxxxxxxxxxxxxxx
>> > Description:
>> > This property gets/sets the sensors ADC analog integration
>> time.
>> >
>> > -What: /sys/bus/iio/devices/device[n]/illuminance0_calibscale
>> > +What: /sys/bus/iio/devices/device[n]/lux_table
>> > KernelVersion: 2.6.37
>> > Contact: linux-iio@xxxxxxxxxxxxxxx
>> > Description:
>> > - Hardware or software applied calibration scale factor assumed
>> > - to account for attenuation due to industrial design (glass
>> > - filters or aperture holes).
>> > + This property gets/sets the table of coefficients
>> > + used in calculating illuminance in lux.
>> > +
>> > diff --git
>a/drivers/staging/iio/Documentation/sysfs-bus-iio-light-tsl2583
>> b/drivers/staging/iio/Documentation/sysfs-bus-iio-light-tsl2583
>> > deleted file mode 100644
>> > index 660781d..0000000
>> > --- a/drivers/staging/iio/Documentation/sysfs-bus-iio-light-tsl2583
>> > +++ /dev/null
>> > @@ -1,20 +0,0 @@
>> > -What: /sys/bus/iio/devices/device[n]/lux_table
>> > -KernelVersion: 2.6.37
>> > -Contact: linux-iio@xxxxxxxxxxxxxxx
>> > -Description:
>> > - This property gets/sets the table of coefficients
>> > - used in calculating illuminance in lux.
>> > -
>> > -What: /sys/bus/iio/devices/device[n]/illuminance0_calibrate
>> > -KernelVersion: 2.6.37
>> > -Contact: linux-iio@xxxxxxxxxxxxxxx
>> > -Description:
>> > - This property causes an internal calibration of the als gain
>trim
>> > - value which is later used in calculating illuminance in lux.
>> > -
>> > -What:
>> /sys/bus/iio/devices/device[n]/illuminance0_input_target
>> > -KernelVersion: 2.6.37
>> > -Contact: linux-iio@xxxxxxxxxxxxxxx
>> > -Description:
>> > - This property is the known externally illuminance (in lux).
>> > - It is used in the process of calibrating the device accuracy.
>> > diff --git a/drivers/staging/iio/light/Kconfig
>b/drivers/staging/iio/light/Kconfig
>> > index e7e9159..976f790 100644
>> > --- a/drivers/staging/iio/light/Kconfig
>> > +++ b/drivers/staging/iio/light/Kconfig
>> > @@ -31,4 +31,12 @@ config TSL2583
>> > Provides support for the TAOS tsl2580, tsl2581 and tsl2583
>devices.
>> > Access ALS data via iio, sysfs.
>> >
>> > +config TSL2x7x
>> > + tristate "TAOS TSL/TMD2x71 and TSL/TMD2x72 Family of light and
>> proximity sensors"
>> > + depends on I2C
>> > + help
>> > + Support for: tsl2571, tsl2671, tmd2671, tsl2771, tmd2771,
>tsl2572,
>> tsl2672,
>> > + tmd2672, tsl2772, tmd2772 devices.
>> > + Provides iio_events and direct access via sysfs.
>> > +
>> > endmenu
>> > diff --git a/drivers/staging/iio/light/Makefile
>> b/drivers/staging/iio/light/Makefile
>> > index 3011fbf..0b8fb22 100644
>> > --- a/drivers/staging/iio/light/Makefile
>> > +++ b/drivers/staging/iio/light/Makefile
>> > @@ -5,3 +5,5 @@
>> > obj-$(CONFIG_SENSORS_TSL2563) += tsl2563.o
>> > obj-$(CONFIG_SENSORS_ISL29018) += isl29018.o
>> > obj-$(CONFIG_TSL2583) += tsl2583.o
>> > +obj-$(CONFIG_TSL2x7x) += tsl2x7x_core.o
>> > +obj-$(CONFIG_TCS3x7x) += tcs3x7x_core.o
>> Really?
>Oops
>
>> > diff --git a/drivers/staging/iio/light/tsl2x7x.h
>> b/drivers/staging/iio/light/tsl2x7x.h
>> > new file mode 100644
>> > index 0000000..fe9e853
>> > --- /dev/null
>> > +++ b/drivers/staging/iio/light/tsl2x7x.h
>> > @@ -0,0 +1,99 @@
>> > +/*
>> > + * Device driver for monitoring ambient light intensity (lux)
>> > + * and proximity (prox) within the TAOS TSL2X7X family of devices.
>> > + *
>> > + * Copyright (c) 2012, TAOS Corporation.
>> > + *
>> > + * This program is free software; you can redistribute it and/or
>modify
>> > + * it under the terms of the GNU General Public License as
>published by
>> > + * the Free Software Foundation; either version 2 of the License,
>or
>> > + * (at your option) any later version.
>> > + *
>> > + * This program is distributed in the hope that it will be useful,
>but WITHOUT
>> > + * ANY WARRANTY; without even the implied warranty of
>MERCHANTABILITY
>> or
>> > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
>License
>> for
>> > + * more details.
>> > + *
>> > + * You should have received a copy of the GNU General Public
>License along
>> > + * with this program; if not, write to the Free Software
>Foundation, Inc.,
>> > + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
>> > + */
>> > +
>> > +#ifndef __TSL2X7X_H
>> > +#define __TSL2X7X_H
>> > +#include<linux/pm.h>
>> > +
>> > +/* Max number of segments allowable in LUX table */
>> > +#define TSL2X7X_MAX_LUX_TABLE_SIZE 9
>> > +#define MAX_DEFAULT_TABLE_BYTES (sizeof(int) *
>> TSL2X7X_MAX_LUX_TABLE_SIZE)
>> > +
>> > +struct iio_dev;
>> > +
>> > +struct tsl2x7x_lux {
>> > + unsigned int ratio;
>> > + unsigned int ch0;
>> > + unsigned int ch1;
>> > +};
>> > +
>> > +/**
>> > + * struct tsl2x7x_default_settings - power on defaults unless
>> > + * overridden by platform data.
>> > + * @als_time: ALS Integration time - multiple of
>50mS
>> > + * @als_gain: Index into the ALS gain table.
>> > + * @prx_time: 5.2ms prox integration time -
>> > + * dec in 2.7ms periods
>> > + * @wait_time: Time between PRX and ALS cycles
>> > + * in 2.7 periods
>> > + * @prox_config: Prox configuration filters.
>> > + * @als_gain_trim: default gain trim to account for
>> > + * aperture effects.
>> > + * @als_cal_target: Known external ALS reading for
>> > + * calibration.
>> > + * @als_thresh_low: CH0 'low' count to trigger interrupt.
>> > + * @als_thresh_high: CH0 'high' count to trigger interrupt.
>> > + * @persistence: H/W Filters, Number of 'out of limits'
>> > + * ADC readings PRX/ALS.
>> > + * @interrupts_en: Enable/Disable - 0x00 = none, 0x10 =
>als,
>> > + * 0x20 = prx, 0x30 =
>bth
>> > + * @prox_thres_low: Low threshold proximity detection.
>> > + * @prox_thres_high: High threshold proximity detection
>> > + * @prox_max_samples_cal: Used for prox cal.
>> > + * @prox_pulse_count: Number if proximity emitter pulses
>> reorder the docs to match the structure. Pick which ever order makes
>> most sense
>> (don't worry about wasting a byte or two, clarity is more important
>on
>> structures
>> like this!)
>OK
>
>> > + */
>> > +struct tsl2x7x_settings {
>> > + int als_time;
>> > + int als_gain;
>> > + int als_gain_trim;
>> > + int wait_time;
>> > + int prx_time;
>> > + int prox_gain;
>> > + int prox_config;
>> > + int als_cal_target;
>> > + u8 interrupts_en;
>> > + u8 persistence;
>> > + int als_thresh_low;
>> > + int als_thresh_high;
>> > + int prox_thres_low;
>> > + int prox_thres_high;
>> > + int prox_pulse_count;
>> > + int prox_max_samples_cal;
>> > +};
>> > +
>> > +/**
>> > + * struct tsl2X7X_platform_data - Platform callback, glass and
>defaults
>> > + * @platform_power: Suspend/resume
>> platform callback
>> > + * @power_on: Power on callback
>> > + * @power_off: Power off callback
>> > + * @platform_lux_table: Device specific glass
>> coefficents
>> > + * @platform_default_settings: Device specific power on defaults
>> > + * Platform PM functions.
>> > + */
>> > +struct tsl2X7X_platform_data {
>> > + int (*platform_power)(struct device *dev, pm_message_t);
>> > + int (*power_on) (struct iio_dev *indio_dev);
>> > + int (*power_off) (struct i2c_client *dev);
>> > + struct tsl2x7x_lux
>platform_lux_table[TSL2X7X_MAX_LUX_TABLE_SIZE];
>> > + struct tsl2x7x_settings *platform_default_settings;
>> > +};
>> > +
>> > +#endif /* __TSL2X7X_H */
>> > diff --git a/drivers/staging/iio/light/tsl2x7x_core.c
>> b/drivers/staging/iio/light/tsl2x7x_core.c
>> > new file mode 100644
>> > index 0000000..267faab
>> > --- /dev/null
>> > +++ b/drivers/staging/iio/light/tsl2x7x_core.c
>> > @@ -0,0 +1,1830 @@
>> > +/*
>> > + * Device driver for monitoring ambient light intensity in (lux)
>> > + * and proximity detection (prox) within the TAOS TSL2X7X family
>of devices.
>> > + *
>> > + * Copyright (c) 2012, TAOS Corporation.
>> > + *
>> > + * This program is free software; you can redistribute it and/or
>modify
>> > + * it under the terms of the GNU General Public License as
>published by
>> > + * the Free Software Foundation; either version 2 of the License,
>or
>> > + * (at your option) any later version.
>> > + *
>> > + * This program is distributed in the hope that it will be useful,
>but WITHOUT
>> > + * ANY WARRANTY; without even the implied warranty of
>MERCHANTABILITY
>> or
>> > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
>License
>> for
>> > + * more details.
>> > + *
>> > + * You should have received a copy of the GNU General Public
>License along
>> > + * with this program; if not, write to the Free Software
>Foundation, Inc.,
>> > + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
>USA.
>> > + */
>> > +
>> > +#include<linux/kernel.h>
>> > +#include<linux/i2c.h>
>> > +#include<linux/errno.h>
>> > +#include<linux/delay.h>
>> > +#include<linux/mutex.h>
>> > +#include<linux/interrupt.h>
>> > +#include<linux/slab.h>
>> > +#include<linux/module.h>
>> > +#include<linux/version.h>
>> > +#include "tsl2x7x.h"
>> > +#include "../events.h"
>> > +#include "../iio.h"
>> > +#include "../sysfs.h"
>> > +
>> > +/* Cal defs*/
>> > +#define PROX_STAT_CAL 0
>> > +#define PROX_STAT_SAMP 1
>> > +#define MAX_SAMPLES_CAL 200
>> > +
>> > +/* TSL2X7X Device ID */
>> > +#define TRITON_ID 0x00
>> > +#define SWORDFISH_ID 0x30
>> > +#define HALIBUT_ID 0x20
>> hmmm.. fish ;)
>And Chips - uum ;^)
>
>> > +
>> > +/* Lux calculation constants */
>> > +#define TSL2X7X_LUX_CALC_OVER_FLOW 65535
>> > +
>> > +/* TAOS Register definitions - note:
>> > + * depending on device, some of these register are not used and
>the
>> > + * register address is benign.
>> > + */
>> > +/* 2X7X register offsets */
>> > +#define TSL2X7X_MAX_CONFIG_REG 16
>> > +
>> > +/* Device Registers and Masks */
>> > +#define TSL2X7X_CNTRL 0x00
>> > +#define TSL2X7X_ALS_TIME 0X01
>> > +#define TSL2X7X_PRX_TIME 0x02
>> > +#define TSL2X7X_WAIT_TIME 0x03
>> > +#define TSL2X7X_ALS_MINTHRESHLO 0X04
>> > +#define TSL2X7X_ALS_MINTHRESHHI 0X05
>> > +#define TSL2X7X_ALS_MAXTHRESHLO 0X06
>> > +#define TSL2X7X_ALS_MAXTHRESHHI 0X07
>> > +#define TSL2X7X_PRX_MINTHRESHLO 0X08
>> > +#define TSL2X7X_PRX_MINTHRESHHI 0X09
>> > +#define TSL2X7X_PRX_MAXTHRESHLO 0X0A
>> > +#define TSL2X7X_PRX_MAXTHRESHHI 0X0B
>> > +#define TSL2X7X_PERSISTENCE 0x0C
>> > +#define TSL2X7X_PRX_CONFIG 0x0D
>> > +#define TSL2X7X_PRX_COUNT 0x0E
>> > +#define TSL2X7X_GAIN 0x0F
>> > +#define TSL2X7X_NOTUSED 0x10
>> > +#define TSL2X7X_REVID 0x11
>> > +#define TSL2X7X_CHIPID 0x12
>> > +#define TSL2X7X_STATUS 0x13
>> > +#define TSL2X7X_ALS_CHAN0LO 0x14
>> > +#define TSL2X7X_ALS_CHAN0HI 0x15
>> > +#define TSL2X7X_ALS_CHAN1LO 0x16
>> > +#define TSL2X7X_ALS_CHAN1HI 0x17
>> > +#define TSL2X7X_PRX_LO 0x18
>> > +#define TSL2X7X_PRX_HI 0x19
>> > +
>> > +/* tsl2X7X cmd reg masks */
>> > +#define TSL2X7X_CMD_REG 0x80
>> > +#define TSL2X7X_CMD_SPL_FN 0x60
>> > +
>> > +#define TSL2X7X_CMD_PROX_INT_CLR 0X05
>> > +#define TSL2X7X_CMD_ALS_INT_CLR 0x06
>> > +#define TSL2X7X_CMD_PROXALS_INT_CLR 0X07
>> > +
>> > +/* tsl2X7X cntrl reg masks */
>> > +#define TSL2X7X_CNTL_ADC_ENBL 0x02
>> > +#define TSL2X7X_CNTL_PWR_ON 0x01
>> > +
>> > +/* tsl2X7X status reg masks */
>> > +#define TSL2X7X_STA_ADC_VALID 0x01
>> > +#define TSL2X7X_STA_PRX_VALID 0x02
>> > +#define TSL2X7X_STA_ADC_PRX_VALID 0x03
>> Would prefer above defined as TSL2X7X_STA_ADC_VALID |
>> TSL2X7X_STA_PRX_VALID
>> (makes it obvious at a glance what is going on).
>> > +#define TSL2X7X_STA_ALS_INTR 0x10
>> > +#define TSL2X7X_STA_ADC_INTR 0x10
>> above unused (and seems to be repeated) ? (repeated value was
>suspicious )
>> > +#define TSL2X7X_STA_PRX_INTR 0x20
>> > +
>> > +#define TSL2X7X_STA_ADC_INTR 0x10
>> > +
>> > +/* tsl2X7X cntrl reg masks */
>> > +#define TSL2X7X_CNTL_REG_CLEAR 0x00
>> > +#define TSL2X7X_CNTL_PROX_INT_ENBL 0X20
>> > +#define TSL2X7X_CNTL_ALS_INT_ENBL 0X10
>> > +#define TSL2X7X_CNTL_WAIT_TMR_ENBL 0X08
>> > +#define TSL2X7X_CNTL_PROX_DET_ENBL 0X04
>> > +#define TSL2X7X_CNTL_PWRON 0x01
>> > +#define TSL2X7X_CNTL_ALSPON_ENBL 0x03
>> > +#define TSL2X7X_CNTL_INTALSPON_ENBL 0x13
>> > +#define TSL2X7X_CNTL_PROXPON_ENBL 0x0F
>> > +#define TSL2X7X_CNTL_INTPROXPON_ENBL 0x2F
>> > +
>> > +/*Prox diode to use */
>> > +#define TSL2X7X_DIODE0 0x10
>> > +#define TSL2X7X_DIODE1 0x20
>> > +#define TSL2X7X_DIODE_BOTH 0x30
>> > +
>> > +/* LED Power */
>> > +#define TSL2X7X_mA100 0x00
>> > +#define TSL2X7X_mA50 0x40
>> > +#define TSL2X7X_mA25 0x80
>> > +#define TSL2X7X_mA13 0xD0
>> > +
>> > +/*Common device IIO EventMask */
>> > +#define TSL2X7X_EVENT_MASK \
>> > + (IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) | \
>> > + IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING)),
>> > +
>> > +/* TAOS txx2x7x Device family members */
>> > +enum {
>> > + tsl2571,
>> > + tsl2671,
>> > + tmd2671,
>> > + tsl2771,
>> > + tmd2771,
>> > + tsl2572,
>> > + tsl2672,
>> > + tmd2672,
>> > + tsl2772,
>> > + tmd2772
>> > +};
>> > +
>> > +enum {
>> > + TSL2X7X_CHIP_UNKNOWN = 0,
>> > + TSL2X7X_CHIP_WORKING = 1,
>> > + TSL2X7X_CHIP_SUSPENDED = 2
>> > +};
>> > +
>> > +/* Per-device data */
>> > +struct tsl2x7x_als_info {
>> > + u16 als_ch0;
>> > + u16 als_ch1;
>> > + u16 lux;
>> > +};
>> > +
>> > +struct prox_stat {
>> > + u16 min;
>> > + u16 max;
>> > + u16 mean;
>> > + unsigned long stddev;
>> > +};
>> > +
>> > +struct tsl2x7x_chip_info {
>> > + int chan_table_elements;
>> > + struct iio_chan_spec channel[9];
>> > + const struct iio_info *info;
>> > +};
>> > +
>> > +struct tsl2X7X_chip {
>> > + kernel_ulong_t id;
>> > + struct mutex prox_mutex;
>> > + struct mutex als_mutex;
>> > + struct i2c_client *client;
>> > + u16 prox_data;
>> > + struct tsl2x7x_als_info als_cur_info;
>> > + struct tsl2x7x_settings tsl2x7x_settings;
>> > + struct tsl2X7X_platform_data *pdata;
>> > + int als_time_scale;
>> > + int als_saturation;
>> > + int tsl2x7x_chip_status;
>> > + u8 tsl2x7x_config[TSL2X7X_MAX_CONFIG_REG];
>> > + const struct tsl2x7x_chip_info *chip_info;
>> > + const struct iio_info *info;
>> > + s64 event_timestamp;
>> > + /* This structure is intentionally large to accommodate
>> > + * updates via sysfs. */
>> > + /* Sized to 9 = max 8 segments + 1 termination segment */
>> > + struct tsl2x7x_lux
>tsl2x7x_device_lux[TSL2X7X_MAX_LUX_TABLE_SIZE];
>> > +};
>> > +
>> > +/* Different devices require different coefficents */
>> > +static const struct tsl2x7x_lux tsl2x71_lux_table[] = {
>> > + { 14461, 611, 1211 },
>> > + { 18540, 352, 623 },
>> > + { 0, 0, 0 },
>> > +};
>> > +
>> > +static const struct tsl2x7x_lux tmd2x71_lux_table[] = {
>> > + { 11635, 115, 256 },
>> > + { 15536, 87, 179 },
>> > + { 0, 0, 0 },
>> > +};
>> > +
>> > +static const struct tsl2x7x_lux tsl2x72_lux_table[] = {
>> > + { 14013, 466, 917 },
>> > + { 18222, 310, 552 },
>> > + { 0, 0, 0 },
>> > +};
>> > +
>> > +static const struct tsl2x7x_lux tmd2x72_lux_table[] = {
>> > + { 13218, 130, 262 },
>> > + { 17592, 92, 169 },
>> > + { 0, 0, 0 },
>> > +};
>> > +
>> > +static const struct tsl2x7x_lux *tsl2x7x_default_lux_table_group[]
>= {
>> > + [tsl2571] = tsl2x71_lux_table,
>> > + [tsl2671] = tsl2x71_lux_table,
>> > + [tmd2671] = tmd2x71_lux_table,
>> > + [tsl2771] = tsl2x71_lux_table,
>> > + [tmd2771] = tmd2x71_lux_table,
>> > + [tsl2572] = tsl2x72_lux_table,
>> > + [tsl2672] = tsl2x72_lux_table,
>> > + [tmd2672] = tmd2x72_lux_table,
>> > + [tsl2772] = tsl2x72_lux_table,
>> > + [tmd2772] = tmd2x72_lux_table,
>> > +};
>> > +
>> > +static const struct tsl2x7x_settings tsl2x7x_default_settings = {
>> > + .als_time = 200,
>> > + .als_gain = 0,
>> > + .prx_time = 0xfe, /*5.4 mS */
>> > + .prox_gain = 1,
>> > + .wait_time = 245,
>> > + .prox_config = 0,
>> > + .als_gain_trim = 1000,
>> > + .als_cal_target = 150,
>> > + .als_thresh_low = 200,
>> > + .als_thresh_high = 256,
>> > + .persistence = 0xFF,
>> > + .interrupts_en = 0x00,
>> > + .prox_thres_low = 0,
>> > + .prox_thres_high = 512,
>> > + .prox_max_samples_cal = 30,
>> > + .prox_pulse_count = 8
>> > +};
>> > +
>> > +static const s16 tsl2X7X_als_gainadj[] = {
>> > + 1,
>> > + 8,
>> > + 16,
>> > + 120
>> > +};
>> > +
>> > +static const s16 tsl2X7X_prx_gainadj[] = {
>> > + 1,
>> > + 2,
>> > + 4,
>> > + 8
>> > +};
>> > +
>> > +/* Channel variations */
>> > +enum {
>> > + ALS,
>> > + PRX,
>> > + ALSPRX,
>> > + PRX2,
>> > + ALSPRX2,
>> > +};
>> > +
>> > +const u8 device_channel_config[] = {
>> > + ALS,
>> > + PRX,
>> > + PRX,
>> > + ALSPRX,
>> > + ALSPRX,
>> > + ALS,
>> > + PRX2,
>> > + PRX2,
>> > + ALSPRX2,
>> > + ALSPRX2
>> > +};
>> > +
>> > +/*
>> > + * Read a number of bytes starting at register (reg) location.
>> > + * Return 0, or i2c_smbus_write_byte ERROR code.
>> > + *
--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/