From: Jonathan Cameron <jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
To: Donggeun Kim <dg77.kim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org
Subject: Re: [PATCH] staging: iio: tmd2771x: Add tmd2771x proximity and ambient light sensor driver
Date: Fri, 10 Sep 2010 12:53:56 +0100 [thread overview]
Message-ID: <4C8A1C54.6030603@cam.ac.uk> (raw)
In-Reply-To: <4C8A181C.7080109-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
Hi Donggeun,
...
>> If they were auxiliary adcs (measuring some pin input) they would be
>> in0_raw and in1_raw. Here I believe they are providing raw access to
>> the readings on two different light sensors? Can we have names that
>> give us some clue of the range that each of these sensors cover?
> Because overall structure is similar to tsl2563,
> the channel 0 is resposive to both visible and infrared light and channel 1 is responsive to infraread light.
> I will change adc0 and adc1 into intensity_both_raw and intensity_ir_raw likewise in tsl2563.c file, respectively
>>> + &dev_attr_adc0.attr,
>>> + &dev_attr_adc1.attr,
>>> + &dev_attr_illuminance0_input.attr,
>>> + &dev_attr_power_on.attr,
>>
>> Please provide details on each of the next three attributes. They are
>> non standard and so need to be documented.
> The device have bitfields for each proximity and light sensor.
> The proximity_en and light_en attributes are related to the corresponding bit fields in the register.
> And the device is in the sleep mode, after a power-on-reset.
> As soon as the power_on attribute is enabled, the device will move to the start state.
> It will then continue through proximity sensing state, wait state, light sensing state, and start state.
> This procedure will be continuing if the device does not enter into sleep mode.
> When wait_en attribute is disabled, the device jumps the wait state.
That makes sense. Please add a comment to the code somewhere to explain this.
>>> + &dev_attr_wait_en.attr,
>>> + &dev_attr_proximity_en.attr,
>>> + &dev_attr_light_en.attr,
>>> + &iio_const_attr_name.dev_attr.attr,
>>> + NULL
>>> +};
...
>>
>> As this isn't done yet, can I confirm what exactly we have here?
>> I would propose updating to the new abi when it is confirmed
>> as a separate patch (so as not to delay your driver).
>>> +static struct attribute *tmd2771x_event_attributes[] = {
>>> + &iio_event_attr_proximity_mag_either_rising_en.dev_attr.attr,
>>> + &dev_attr_proximity_mag_pos_rising_value.attr,
>>> + &dev_attr_proximity_mag_neg_rising_value.attr,
>> So we have a single enable for both directions. As this isn't
>> signed, I guess we can put a threshold on the value falling and
>> one on it rising? So if our current is say 10, we can get an
>> event if it falls below 8 or rises above 20?
>> I think under the previous scheme this should have been
>> mag_pos_rising and mag_pos_falling (neg implies a theshold on the
>> actual negative value). Is there any way of enabling only
>> one of these at a time? Under the new scheme these will
>> be (if it doesn't change) proxmity_thresh_en,
>> proximity_thresh_rising_value and proximity_thresh_falling_value.
>>
> Actually, every raw data is positive number. I made some mistakes
> when naming the event attributes.
> The threshold values allows the user to define thresholds above and below a desired
> channel0 of light sensor and proximity level.
> An interrupt can be generated when the raw data exceeds the upper threshold value or
> falls below the lower threshold value.
> I'm not the proper attribute name, but I want to change it as belows:
> proximity_mag_either_rising_en -> proximity_thresh_en
> proximity_mag_pos_rising_value -> proximity_thresh_high_value
> proximity_mag_neg_rising_value -> proximity_thresh_low_value
Rising and falling rather than low and high as we care about the
direction of change causing the interrupt. Again, don't worry too
much about these, now I know what they are I can sort them out along
with all other drivers when we have agreed what the final interface will be.
> proximity_mag_either_rising_period -> proximity_thresh_period
> light_mag_either_rising_en -> intensity_both_thresh_en
> light_mag_pos_rising_value -> intensity_both_thresh_high_value
> light_mag_neg_rising_value -> intensity_both_thresh_low_value
> light_mag_either_rising_period -> intensity_both_thresh_period
>>> + &dev_attr_proximity_mag_either_rising_period.attr,
>>> + &iio_event_attr_light_mag_either_rising_en.dev_attr.attr,
>>> + &dev_attr_light_mag_pos_rising_value.attr,
>>> + &dev_attr_light_mag_neg_rising_value.attr,
>>> + &dev_attr_light_mag_either_rising_period.attr,
>>> +#define TMD2771X_POWERUP_WAIT_TIME 12
>>> +
>>
>> Please document this structure. Kernel doc format ideally.
> Sorry. I'm not familiar with kernel doc format.
> Where sholud I locate it after making a document file?
Stick (with all elements documented...) the following in here.
/**
* struct tmd2771x_platform_data - device instance specific data
* @control_power_source: function that controls power to the device
* @power_on: cache of poweron elements of TMD2771X_DEFAULT_COMMAND register
* ...
* @glass_attenuation: implementatation specific attenuation factor
**/
>>> +struct tmd2771x_platform_data {
>>> + void (*control_power_source)(int);
>>> +
>>> + u8 power_on; /* TMD2771X_PON */
>>> + u8 wait_enable; /* TMD2771X_WEN */
>>> + u8 wait_long; /* TMD2771X_WLONG */
>>> + u8 wait_time; /* 0x00 ~ 0xff */
>>> +
>>> + /* Proximity */
>>> + u8 ps_enable; /* TMD2771X_PEN */
>>> + u16 ps_interrupt_h_thres; /* 0x0000 ~ 0xffff */
>>> + u16 ps_interrupt_l_thres; /* 0x0000 ~ 0xffff */
>>> + u8 ps_interrupt_enable; /* TMD2771X_PIEN */
>>> + u8 ps_time; /* 0x00 ~ 0xff */
>>> + u8 ps_interrupt_persistence; /* 0x00 ~ 0xf0 (top four bits) */
>>> + u8 ps_pulse_count; /* 0x00 ~ 0xff */
>>> + u8 ps_drive_strength; /* TMD2771X_PDRIVE_12MA ~
>>> + TMD2771X_PDRIVE_100MA */
>>> + u8 ps_diode; /* TMD2771X_PDIODE_CH0_DIODE ~
>>> + TMD2771X_PDIODE_BOTH_DIODE */
>>> +
>>> + /* Ambient Light */
>>> + u8 als_enable; /* TMD2771X_AEN */
>>> + u16 als_interrupt_h_thres; /* 0x0000 ~ 0xffff */
>>> + u16 als_interrupt_l_thres; /* 0x0000 ~ 0xffff */
>>> + u8 als_interrupt_enable; /* TMD2771X_AIEN */
>>> + u8 als_time; /* 0x00 ~ 0xff */
>>> + u8 als_interrupt_persistence; /* 0x00 ~ 0x0f (bottom four bits) */
>>> + u8 als_gain; /* TMD2771X_AGAIN_1X ~
>>> + TMD2771X_AGAIN_120X */
>>> + u8 glass_attenuation;
>>> +};
>>> +
>>> +#endif
>>> diff --git a/drivers/staging/iio/sysfs.h b/drivers/staging/iio/sysfs.h
>>> index 6083416..c74eb83 100644
>>> --- a/drivers/staging/iio/sysfs.h
>>> +++ b/drivers/staging/iio/sysfs.h
>>> @@ -330,6 +330,7 @@ struct iio_const_attr {
>>> #define IIO_EVENT_CODE_ADC_BASE 500
>>> #define IIO_EVENT_CODE_MISC_BASE 600
>>> #define IIO_EVENT_CODE_LIGHT_BASE 700
>>> +#define IIO_EVENT_CODE_PROXIMITY_BASE 800
>>>
>>> #define IIO_EVENT_CODE_DEVICE_SPECIFIC 1000
>>>
>>> @@ -367,4 +368,6 @@ struct iio_const_attr {
>>> #define IIO_EVENT_CODE_RING_75_FULL (IIO_EVENT_CODE_RING_BASE + 1)
>>> #define IIO_EVENT_CODE_RING_100_FULL (IIO_EVENT_CODE_RING_BASE + 2)
>>>
>>> +#define IIO_EVENT_CODE_PROXIMITY_THRESH IIO_EVENT_CODE_PROXIMITY_BASE
>>> +
>>> #endif /* _INDUSTRIAL_IO_SYSFS_H_ */
>>
>> Thanks again.
>>
>> Jonathan
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
>> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
> Thanks for reviewing.
You are welcome,
Jonathan
next prev parent reply other threads:[~2010-09-10 11:53 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-09 6:58 [PATCH] staging: iio: tmd2771x: Add tmd2771x proximity and ambient light sensor driver Donggeun Kim
[not found] ` <4C888599.1060400-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2010-09-09 11:59 ` Jonathan Cameron
[not found] ` <4C88CC17.5070902-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
2010-09-10 11:35 ` Donggeun Kim
[not found] ` <4C8A181C.7080109-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2010-09-10 11:53 ` Jonathan Cameron [this message]
2010-09-10 7:24 ` samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w
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=4C8A1C54.6030603@cam.ac.uk \
--to=jic23-kwpb1pkirijaa/9udqfwiw@public.gmane.org \
--cc=dg77.kim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
--cc=kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox