| .. SPDX-License-Identifier: GPL-2.0 |
| |
| ======================= |
| 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 |