Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / staging / iio / light / tsl2x7x.h
1 /*
2  * Device driver for monitoring ambient light intensity (lux)
3  * and proximity (prox) within the TAOS TSL2X7X family of devices.
4  *
5  * Copyright (c) 2012, TAOS Corporation.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21
22 #ifndef __TSL2X7X_H
23 #define __TSL2X7X_H
24 #include <linux/pm.h>
25
26 /* Max number of segments allowable in LUX table */
27 #define TSL2X7X_MAX_LUX_TABLE_SIZE              9
28 #define MAX_DEFAULT_TABLE_BYTES (sizeof(int) * TSL2X7X_MAX_LUX_TABLE_SIZE)
29
30 struct iio_dev;
31
32 struct tsl2x7x_lux {
33         unsigned int ratio;
34         unsigned int ch0;
35         unsigned int ch1;
36 };
37
38 /**
39  * struct tsl2x7x_default_settings - power on defaults unless
40  *                                   overridden by platform data.
41  *  @als_time:              ALS Integration time - multiple of 50mS
42  *  @als_gain:              Index into the ALS gain table.
43  *  @als_gain_trim:         default gain trim to account for
44  *                          aperture effects.
45  *  @wait_time:             Time between PRX and ALS cycles
46  *                          in 2.7 periods
47  *  @prx_time:              5.2ms prox integration time -
48  *                          decrease in 2.7ms periods
49  *  @prx_gain:              Proximity gain index
50  *  @prox_config:           Prox configuration filters.
51  *  @als_cal_target:        Known external ALS reading for
52  *                          calibration.
53  *  @interrupts_en:         Enable/Disable - 0x00 = none, 0x10 = als,
54  *                                           0x20 = prx,  0x30 = bth
55  *  @persistence:           H/W Filters, Number of 'out of limits'
56  *                          ADC readings PRX/ALS.
57  *  @als_thresh_low:        CH0 'low' count to trigger interrupt.
58  *  @als_thresh_high:       CH0 'high' count to trigger interrupt.
59  *  @prox_thres_low:        Low threshold proximity detection.
60  *  @prox_thres_high:       High threshold proximity detection
61  *  @prox_pulse_count:      Number if proximity emitter pulses
62  *  @prox_max_samples_cal:  Used for prox cal.
63  */
64 struct tsl2x7x_settings {
65         int als_time;
66         int als_gain;
67         int als_gain_trim;
68         int wait_time;
69         int prx_time;
70         int prox_gain;
71         int prox_config;
72         int als_cal_target;
73         u8  interrupts_en;
74         u8  persistence;
75         int als_thresh_low;
76         int als_thresh_high;
77         int prox_thres_low;
78         int prox_thres_high;
79         int prox_pulse_count;
80         int prox_max_samples_cal;
81 };
82
83 /**
84  * struct tsl2X7X_platform_data - Platform callback, glass and defaults
85  * @platform_power:            Suspend/resume platform callback
86  * @power_on:                  Power on callback
87  * @power_off:                 Power off callback
88  * @platform_lux_table:        Device specific glass coefficents
89  * @platform_default_settings: Device specific power on defaults
90  *
91  */
92 struct tsl2X7X_platform_data {
93         int (*platform_power)(struct device *dev, pm_message_t);
94         int (*power_on)(struct iio_dev *indio_dev);
95         int (*power_off)(struct i2c_client *dev);
96         struct tsl2x7x_lux platform_lux_table[TSL2X7X_MAX_LUX_TABLE_SIZE];
97         struct tsl2x7x_settings *platform_default_settings;
98 };
99
100 #endif /* __TSL2X7X_H */