From: Jonathan Cameron <jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
To: Samu Onkalo <samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org
Subject: Re: [PATCHv3 5/5] Documentation: Short descriptions for bh1770glc and apds990x drivers
Date: Mon, 11 Oct 2010 14:50:33 +0100 [thread overview]
Message-ID: <4CB31629.6010006@cam.ac.uk> (raw)
In-Reply-To: <1286795209-12487-6-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
On 10/11/10 12:06, Samu Onkalo wrote:
> Add short documentation for two ALS / proximity chip drivers.
Couple of nitpicks. All in category of things to fix if you are
respinning the patch for some other reason.
>
> Signed-off-by: Samu Onkalo <samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
Acked-by: Jonathan Cameron <jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
> ---
> Documentation/misc-devices/apds990x.txt | 113 ++++++++++++++++++++++++++++
> Documentation/misc-devices/bh1770glc.txt | 118 ++++++++++++++++++++++++++++++
> 2 files changed, 231 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/misc-devices/apds990x.txt
> create mode 100644 Documentation/misc-devices/bh1770glc.txt
>
> diff --git a/Documentation/misc-devices/apds990x.txt b/Documentation/misc-devices/apds990x.txt
> new file mode 100644
> index 0000000..36b9e40
> --- /dev/null
> +++ b/Documentation/misc-devices/apds990x.txt
> @@ -0,0 +1,113 @@
> +Kernel driver apds990x
> +======================
> +
> +Supported chips:
> +Avago APDS990X
> +
> +Data sheet:
> +Not freely available
> +
> +Author:
> +Samu Onkalo <samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
> +
> +Description
> +-----------
> +
> +APDS990x is a combined ambient light and proximity sensor. ALS and proximity
> +functionality are highly connected. ALS measurement path must be running
> +while the proximity functionality is enabled.
> +
> +ALS produces raw measurement values for two channels: Clear channel
> +(infrared + visible light) and IR only. However, threshold comparisons happen
> +using clear channel only. LUX value and the threshold level on the HW
> +might vary quite much depending the spectrum of the light source.
> +
> +Driver makes necessary conversions to both directions so that user handles
> +only LUX values. LUX value is calculated using information from the both
> +channels. HW threshold level is calculated from the given LUX value to match
> +with current type of the lightning. Sometimes inaccuracy of the estimations
> +lead to false interrupt, but that doesn't harm.
> +
> +ALS contains 4 different gain steps. Driver automatically
> +selects suitable gain step. After each measurement, reliability of the results
> +is estimated and new measurement is trigged if necessary.
> +
> +Platform data can provide tuned values to the conversion formulas if
> +values are known. Otherwise plain sensor default values are used.
> +
> +Proximity side is little bit simpler. There is no need for complex conversions.
> +It produces directly usable values.
> +
> +Driver controls chip operational state using pm_runtime framework.
> +Voltage regulators are controlled based on chip operational state.
> +
> +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. Actually never reaches since sensor tends
> + to saturate much before that. Real max value varies depending
> + on the light spectrum etc.
> +
bonus blank line?
> +
> +lux0_rate
> + RW - measurement rate in Hz
> +
> +lux0_rate_avail
> + RO - supported measurement rates
> +
> +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
> +
> +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.
> +
> +prox0_raw
> + RO - measured proximity value
> + sysfs_notify called when threshold interrupt occurs
> +
> +prox0_sensor_range
> + RO - prox0_raw max value (1023)
> +
> +prox0_raw_en
> + RW - enable / disable proximity - uses counting logic
> + 1 enables the proximity
> + 0 disables the proximity
> +
> +prox0_reporting_mode
> + RW - trigger / periodic. In "trigger" mode the driver tells two possible
> + values: 0 or prox0_sensor_range value. 0 means no proximity,
> + 1023 means proximity. This causes minimal number of interrupts.
> + In "periodic" mode the driver reports all values above
> + prox0_thresh_above. This causes more interrupts, but it can give
> + _rough_ estimate about the distance.
> +
> +prox0_reporting_mode_avail
> + RO - accepted values to prox0_reporting_mode (trigger, periodic)
> +
> +prox0_thresh_above_value
> + RW - threshold level which trigs proximity events.
> +
> diff --git a/Documentation/misc-devices/bh1770glc.txt b/Documentation/misc-devices/bh1770glc.txt
> new file mode 100644
> index 0000000..e98e756
> --- /dev/null
> +++ b/Documentation/misc-devices/bh1770glc.txt
> @@ -0,0 +1,118 @@
> +Kernel driver bh1770glc
> +=======================
> +
> +Supported chips:
> +ROHM BH1770GLC
> +OSRAM SFH7770
> +
> +Data sheet:
> +Not freely available
> +
> +Author:
> +Samu Onkalo <samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
> +
> +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.
I'm not sure why LUX is in capitals everywhere else, but if there is a reason
then I think this one should be as well?
> +
> +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
Nitpick, bonus white line?
> +
> +
> +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
> +
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron <jic23@cam.ac.uk>
To: Samu Onkalo <samu.p.onkalo@nokia.com>
Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org,
alan@lxorguk.ukuu.org.uk
Subject: Re: [PATCHv3 5/5] Documentation: Short descriptions for bh1770glc and apds990x drivers
Date: Mon, 11 Oct 2010 14:50:33 +0100 [thread overview]
Message-ID: <4CB31629.6010006@cam.ac.uk> (raw)
In-Reply-To: <1286795209-12487-6-git-send-email-samu.p.onkalo@nokia.com>
On 10/11/10 12:06, Samu Onkalo wrote:
> Add short documentation for two ALS / proximity chip drivers.
Couple of nitpicks. All in category of things to fix if you are
respinning the patch for some other reason.
>
> Signed-off-by: Samu Onkalo <samu.p.onkalo@nokia.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
> Documentation/misc-devices/apds990x.txt | 113 ++++++++++++++++++++++++++++
> Documentation/misc-devices/bh1770glc.txt | 118 ++++++++++++++++++++++++++++++
> 2 files changed, 231 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/misc-devices/apds990x.txt
> create mode 100644 Documentation/misc-devices/bh1770glc.txt
>
> diff --git a/Documentation/misc-devices/apds990x.txt b/Documentation/misc-devices/apds990x.txt
> new file mode 100644
> index 0000000..36b9e40
> --- /dev/null
> +++ b/Documentation/misc-devices/apds990x.txt
> @@ -0,0 +1,113 @@
> +Kernel driver apds990x
> +======================
> +
> +Supported chips:
> +Avago APDS990X
> +
> +Data sheet:
> +Not freely available
> +
> +Author:
> +Samu Onkalo <samu.p.onkalo@nokia.com>
> +
> +Description
> +-----------
> +
> +APDS990x is a combined ambient light and proximity sensor. ALS and proximity
> +functionality are highly connected. ALS measurement path must be running
> +while the proximity functionality is enabled.
> +
> +ALS produces raw measurement values for two channels: Clear channel
> +(infrared + visible light) and IR only. However, threshold comparisons happen
> +using clear channel only. LUX value and the threshold level on the HW
> +might vary quite much depending the spectrum of the light source.
> +
> +Driver makes necessary conversions to both directions so that user handles
> +only LUX values. LUX value is calculated using information from the both
> +channels. HW threshold level is calculated from the given LUX value to match
> +with current type of the lightning. Sometimes inaccuracy of the estimations
> +lead to false interrupt, but that doesn't harm.
> +
> +ALS contains 4 different gain steps. Driver automatically
> +selects suitable gain step. After each measurement, reliability of the results
> +is estimated and new measurement is trigged if necessary.
> +
> +Platform data can provide tuned values to the conversion formulas if
> +values are known. Otherwise plain sensor default values are used.
> +
> +Proximity side is little bit simpler. There is no need for complex conversions.
> +It produces directly usable values.
> +
> +Driver controls chip operational state using pm_runtime framework.
> +Voltage regulators are controlled based on chip operational state.
> +
> +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. Actually never reaches since sensor tends
> + to saturate much before that. Real max value varies depending
> + on the light spectrum etc.
> +
bonus blank line?
> +
> +lux0_rate
> + RW - measurement rate in Hz
> +
> +lux0_rate_avail
> + RO - supported measurement rates
> +
> +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
> +
> +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.
> +
> +prox0_raw
> + RO - measured proximity value
> + sysfs_notify called when threshold interrupt occurs
> +
> +prox0_sensor_range
> + RO - prox0_raw max value (1023)
> +
> +prox0_raw_en
> + RW - enable / disable proximity - uses counting logic
> + 1 enables the proximity
> + 0 disables the proximity
> +
> +prox0_reporting_mode
> + RW - trigger / periodic. In "trigger" mode the driver tells two possible
> + values: 0 or prox0_sensor_range value. 0 means no proximity,
> + 1023 means proximity. This causes minimal number of interrupts.
> + In "periodic" mode the driver reports all values above
> + prox0_thresh_above. This causes more interrupts, but it can give
> + _rough_ estimate about the distance.
> +
> +prox0_reporting_mode_avail
> + RO - accepted values to prox0_reporting_mode (trigger, periodic)
> +
> +prox0_thresh_above_value
> + RW - threshold level which trigs proximity events.
> +
> diff --git a/Documentation/misc-devices/bh1770glc.txt b/Documentation/misc-devices/bh1770glc.txt
> new file mode 100644
> index 0000000..e98e756
> --- /dev/null
> +++ b/Documentation/misc-devices/bh1770glc.txt
> @@ -0,0 +1,118 @@
> +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.
I'm not sure why LUX is in capitals everywhere else, but if there is a reason
then I think this one should be as well?
> +
> +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
Nitpick, bonus white line?
> +
> +
> +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
> +
next prev parent reply other threads:[~2010-10-11 13:50 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-11 11:06 [PATCHv3 0/5] [PATCHv3 0/6] BH1770GLC, SFH7770 and APDS990x als / proximity sensor drivers Samu Onkalo
2010-10-11 11:06 ` Samu Onkalo
[not found] ` <1286795209-12487-1-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-11 11:06 ` [PATCHv3 1/5] misc: Driver for bh1770glc / sfh7770 ALS and proximity sensor Samu Onkalo
2010-10-11 11:06 ` Samu Onkalo
[not found] ` <1286795209-12487-2-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-11 13:43 ` Jonathan Cameron
2010-10-11 13:43 ` Jonathan Cameron
2010-10-11 11:06 ` [PATCHv3 5/5] Documentation: Short descriptions for bh1770glc and apds990x drivers Samu Onkalo
2010-10-11 11:06 ` Samu Onkalo
[not found] ` <1286795209-12487-6-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-11 13:50 ` Jonathan Cameron [this message]
2010-10-11 13:50 ` Jonathan Cameron
2010-10-12 7:05 ` [PATCHv3 0/5] [PATCHv3 0/6] BH1770GLC, SFH7770 and APDS990x als / proximity sensor drivers Onkalo Samu
2010-10-12 7:05 ` Onkalo Samu
2010-10-11 11:06 ` [PATCHv3 2/5] misc: update bh1770glc driver to Kconfig and Makefile Samu Onkalo
2010-10-11 11:06 ` [PATCHv3 3/5] misc: Driver for APDS990X ALS and proximity sensors Samu Onkalo
[not found] ` <1286795209-12487-4-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-11 13:46 ` Jonathan Cameron
2010-10-11 13:46 ` Jonathan Cameron
2010-10-11 11:06 ` [PATCHv3 4/5] misc: update apds990x driver to Kconfig and Makefile Samu Onkalo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4CB31629.6010006@cam.ac.uk \
--to=jic23-kwpb1pkirijaa/9udqfwiw@public.gmane.org \
--cc=alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.