123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 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
|