Kernel driver bh1770glc¶
Supported chips:
- ROHM BH1770GLC
- OSRAM SFH7770
Data sheet: Not freely available
Author: Samu Onkalo <samu.p.onkalo@nokia.com>
Description¶
BH1770GLC and SFH7770 are combined ambient light and proximity sensors. ALS and proximity parts operates on their own, but they shares common I2C interface and interrupt logic. In principle they can run on their own, but ALS side results are used to estimate reliability of the proximity sensor.
ALS produces 16 bit lux values. The chip contains interrupt logic to produce low and high threshold interrupts.
Proximity part contains IR-led driver up to 3 IR leds. The chip measures amount of reflected IR light and produces proximity result. Resolution is 8 bit. Driver supports only one channel. Driver uses ALS results to estimate reliability of the proximity results. Thus ALS is always running while proximity detection is needed.
Driver uses threshold interrupts to avoid need for polling the values. Proximity low interrupt doesn’t exists in the chip. This is simulated by using a delayed work. As long as there is proximity threshold above interrupts the delayed work is pushed forward. So, when proximity level goes below the threshold value, there is no interrupt and the delayed work will finally run. This is handled as no proximity indication.
Chip state is controlled via runtime pm framework when enabled in config.
Calibscale factor is used to hide differences between the chips. By default value set to neutral state meaning factor of 1.00. To get proper values, calibrated source of light is needed as a reference. Calibscale factor is set so that measurement produces about the expected lux value.
SYSFS¶
- chip_id
- RO - shows detected chip type and version
- power_state
RW - enable / disable chip
Uses counting logic
- 1 enables the chip
- 0 disables the chip
- lux0_input
RO - measured lux value
sysfs_notify called when threshold interrupt occurs- lux0_sensor_range
- RO - lux0_input max value
- lux0_rate
- RW - measurement rate in Hz
- lux0_rate_avail
- RO - supported measurement rates
- lux0_thresh_above_value
RW - HI level threshold value
All results above the value trigs an interrupt. 65535 (i.e. sensor_range) disables the above interrupt.- lux0_thresh_below_value
RW - LO level threshold value
All results below the value trigs an interrupt. 0 disables the below interrupt.- lux0_calibscale
RW - calibration value
Set to neutral value by default. Output results are multiplied with calibscale / calibscale_default value.- lux0_calibscale_default
- RO - neutral calibration value
- prox0_raw
RO - measured proximity value
sysfs_notify called when threshold interrupt occurs- prox0_sensor_range
- RO - prox0_raw max value
- prox0_raw_en
RW - enable / disable proximity
Uses counting logic
- 1 enables the proximity
- 0 disables the proximity
- prox0_thresh_above_count
- RW - number of proximity interrupts needed before triggering the event
- prox0_rate_above
- RW - Measurement rate (in Hz) when the level is above threshold i.e. when proximity on has been reported.
- prox0_rate_below
- RW - Measurement rate (in Hz) when the level is below threshold i.e. when proximity off has been reported.
- prox0_rate_avail
- RO - Supported proximity measurement rates in Hz
- prox0_thresh_above0_value
RW - threshold level which trigs proximity events.
Filtered by persistence filter (prox0_thresh_above_count)- prox0_thresh_above1_value
- RW - threshold level which trigs event immediately