10e7ade47SMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0
20e7ade47SMauro Carvalho Chehab
30e7ade47SMauro Carvalho Chehab=======================
40e7ade47SMauro Carvalho ChehabKernel driver bh1770glc
50e7ade47SMauro Carvalho Chehab=======================
60e7ade47SMauro Carvalho Chehab
70e7ade47SMauro Carvalho ChehabSupported chips:
80e7ade47SMauro Carvalho Chehab
90e7ade47SMauro Carvalho Chehab- ROHM BH1770GLC
100e7ade47SMauro Carvalho Chehab- OSRAM SFH7770
110e7ade47SMauro Carvalho Chehab
120e7ade47SMauro Carvalho ChehabData sheet:
130e7ade47SMauro Carvalho ChehabNot freely available
140e7ade47SMauro Carvalho Chehab
150e7ade47SMauro Carvalho ChehabAuthor:
160e7ade47SMauro Carvalho ChehabSamu Onkalo <samu.p.onkalo@nokia.com>
170e7ade47SMauro Carvalho Chehab
180e7ade47SMauro Carvalho ChehabDescription
190e7ade47SMauro Carvalho Chehab-----------
200e7ade47SMauro Carvalho ChehabBH1770GLC and SFH7770 are combined ambient light and proximity sensors.
210e7ade47SMauro Carvalho ChehabALS and proximity parts operates on their own, but they shares common I2C
220e7ade47SMauro Carvalho Chehabinterface and interrupt logic. In principle they can run on their own,
230e7ade47SMauro Carvalho Chehabbut ALS side results are used to estimate reliability of the proximity sensor.
240e7ade47SMauro Carvalho Chehab
250e7ade47SMauro Carvalho ChehabALS produces 16 bit lux values. The chip contains interrupt logic to produce
260e7ade47SMauro Carvalho Chehablow and high threshold interrupts.
270e7ade47SMauro Carvalho Chehab
280e7ade47SMauro Carvalho ChehabProximity part contains IR-led driver up to 3 IR leds. The chip measures
290e7ade47SMauro Carvalho Chehabamount of reflected IR light and produces proximity result. Resolution is
300e7ade47SMauro Carvalho Chehab8 bit. Driver supports only one channel. Driver uses ALS results to estimate
310e7ade47SMauro Carvalho Chehabreliability of the proximity results. Thus ALS is always running while
320e7ade47SMauro Carvalho Chehabproximity detection is needed.
330e7ade47SMauro Carvalho Chehab
340e7ade47SMauro Carvalho ChehabDriver uses threshold interrupts to avoid need for polling the values.
350e7ade47SMauro Carvalho ChehabProximity low interrupt doesn't exists in the chip. This is simulated
360e7ade47SMauro Carvalho Chehabby using a delayed work. As long as there is proximity threshold above
370e7ade47SMauro Carvalho Chehabinterrupts the delayed work is pushed forward. So, when proximity level goes
380e7ade47SMauro Carvalho Chehabbelow the threshold value, there is no interrupt and the delayed work will
390e7ade47SMauro Carvalho Chehabfinally run. This is handled as no proximity indication.
400e7ade47SMauro Carvalho Chehab
410e7ade47SMauro Carvalho ChehabChip state is controlled via runtime pm framework when enabled in config.
420e7ade47SMauro Carvalho Chehab
430e7ade47SMauro Carvalho ChehabCalibscale factor is used to hide differences between the chips. By default
440e7ade47SMauro Carvalho Chehabvalue set to neutral state meaning factor of 1.00. To get proper values,
450e7ade47SMauro Carvalho Chehabcalibrated source of light is needed as a reference. Calibscale factor is set
460e7ade47SMauro Carvalho Chehabso that measurement produces about the expected lux value.
470e7ade47SMauro Carvalho Chehab
480e7ade47SMauro Carvalho ChehabSYSFS
490e7ade47SMauro Carvalho Chehab-----
500e7ade47SMauro Carvalho Chehab
510e7ade47SMauro Carvalho Chehabchip_id
520e7ade47SMauro Carvalho Chehab	RO - shows detected chip type and version
530e7ade47SMauro Carvalho Chehab
540e7ade47SMauro Carvalho Chehabpower_state
550e7ade47SMauro Carvalho Chehab	RW - enable / disable chip
560e7ade47SMauro Carvalho Chehab
570e7ade47SMauro Carvalho Chehab	Uses counting logic
580e7ade47SMauro Carvalho Chehab
590e7ade47SMauro Carvalho Chehab	     - 1 enables the chip
600e7ade47SMauro Carvalho Chehab	     - 0 disables the chip
610e7ade47SMauro Carvalho Chehab
620e7ade47SMauro Carvalho Chehablux0_input
630e7ade47SMauro Carvalho Chehab	RO - measured lux value
640e7ade47SMauro Carvalho Chehab
650e7ade47SMauro Carvalho Chehab	     sysfs_notify called when threshold interrupt occurs
660e7ade47SMauro Carvalho Chehab
670e7ade47SMauro Carvalho Chehablux0_sensor_range
680e7ade47SMauro Carvalho Chehab	RO - lux0_input max value
690e7ade47SMauro Carvalho Chehab
700e7ade47SMauro Carvalho Chehablux0_rate
710e7ade47SMauro Carvalho Chehab	RW - measurement rate in Hz
720e7ade47SMauro Carvalho Chehab
730e7ade47SMauro Carvalho Chehablux0_rate_avail
740e7ade47SMauro Carvalho Chehab	RO - supported measurement rates
750e7ade47SMauro Carvalho Chehab
760e7ade47SMauro Carvalho Chehablux0_thresh_above_value
770e7ade47SMauro Carvalho Chehab	RW - HI level threshold value
780e7ade47SMauro Carvalho Chehab
790e7ade47SMauro Carvalho Chehab	     All results above the value
800e7ade47SMauro Carvalho Chehab	     trigs an interrupt. 65535 (i.e. sensor_range) disables the above
810e7ade47SMauro Carvalho Chehab	     interrupt.
820e7ade47SMauro Carvalho Chehab
830e7ade47SMauro Carvalho Chehablux0_thresh_below_value
840e7ade47SMauro Carvalho Chehab	RW - LO level threshold value
850e7ade47SMauro Carvalho Chehab
860e7ade47SMauro Carvalho Chehab	     All results below the value
870e7ade47SMauro Carvalho Chehab	     trigs an interrupt. 0 disables the below interrupt.
880e7ade47SMauro Carvalho Chehab
890e7ade47SMauro Carvalho Chehablux0_calibscale
900e7ade47SMauro Carvalho Chehab	RW - calibration value
910e7ade47SMauro Carvalho Chehab
920e7ade47SMauro Carvalho Chehab	     Set to neutral value by default.
930e7ade47SMauro Carvalho Chehab	     Output results are multiplied with calibscale / calibscale_default
940e7ade47SMauro Carvalho Chehab	     value.
950e7ade47SMauro Carvalho Chehab
960e7ade47SMauro Carvalho Chehablux0_calibscale_default
970e7ade47SMauro Carvalho Chehab	RO - neutral calibration value
980e7ade47SMauro Carvalho Chehab
990e7ade47SMauro Carvalho Chehabprox0_raw
1000e7ade47SMauro Carvalho Chehab	RO - measured proximity value
1010e7ade47SMauro Carvalho Chehab
1020e7ade47SMauro Carvalho Chehab	     sysfs_notify called when threshold interrupt occurs
1030e7ade47SMauro Carvalho Chehab
1040e7ade47SMauro Carvalho Chehabprox0_sensor_range
1050e7ade47SMauro Carvalho Chehab	RO - prox0_raw max value
1060e7ade47SMauro Carvalho Chehab
1070e7ade47SMauro Carvalho Chehabprox0_raw_en
1080e7ade47SMauro Carvalho Chehab	RW - enable / disable proximity
1090e7ade47SMauro Carvalho Chehab
1100e7ade47SMauro Carvalho Chehab	     Uses counting logic
1110e7ade47SMauro Carvalho Chehab
1120e7ade47SMauro Carvalho Chehab	     - 1 enables the proximity
1130e7ade47SMauro Carvalho Chehab	     - 0 disables the proximity
1140e7ade47SMauro Carvalho Chehab
1150e7ade47SMauro Carvalho Chehabprox0_thresh_above_count
1160e7ade47SMauro Carvalho Chehab	RW - number of proximity interrupts needed before triggering the event
1170e7ade47SMauro Carvalho Chehab
1180e7ade47SMauro Carvalho Chehabprox0_rate_above
1190e7ade47SMauro Carvalho Chehab	RW - Measurement rate (in Hz) when the level is above threshold
1200e7ade47SMauro Carvalho Chehab	i.e. when proximity on has been reported.
1210e7ade47SMauro Carvalho Chehab
1220e7ade47SMauro Carvalho Chehabprox0_rate_below
1230e7ade47SMauro Carvalho Chehab	RW - Measurement rate (in Hz) when the level is below threshold
1240e7ade47SMauro Carvalho Chehab	i.e. when proximity off has been reported.
1250e7ade47SMauro Carvalho Chehab
1260e7ade47SMauro Carvalho Chehabprox0_rate_avail
1270e7ade47SMauro Carvalho Chehab	RO - Supported proximity measurement rates in Hz
1280e7ade47SMauro Carvalho Chehab
1290e7ade47SMauro Carvalho Chehabprox0_thresh_above0_value
1300e7ade47SMauro Carvalho Chehab	RW - threshold level which trigs proximity events.
1310e7ade47SMauro Carvalho Chehab
1320e7ade47SMauro Carvalho Chehab	     Filtered by persistence filter (prox0_thresh_above_count)
1330e7ade47SMauro Carvalho Chehab
1340e7ade47SMauro Carvalho Chehabprox0_thresh_above1_value
1350e7ade47SMauro Carvalho Chehab	RW - threshold level which trigs event immediately
136