All of lore.kernel.org
 help / color / mirror / Atom feed
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

WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron <jic23@cam.ac.uk>
To: Donggeun Kim <dg77.kim@samsung.com>
Cc: linux-iio@vger.kernel.org, linux-i2c@vger.kernel.org,
	kyungmin.park@samsung.com
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@samsung.com>

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@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
> 
> Thanks for reviewing.
You are welcome,

Jonathan

  parent reply	other threads:[~2010-09-10 11:53 UTC|newest]

Thread overview: 10+ 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
2010-09-09  6:58 ` Donggeun Kim
     [not found] ` <4C888599.1060400-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2010-09-09 11:59   ` Jonathan Cameron
2010-09-09 11:59     ` Jonathan Cameron
     [not found]     ` <4C88CC17.5070902-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
2010-09-10 11:35       ` Donggeun Kim
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 11:53             ` Jonathan Cameron
2010-09-10  7:24   ` samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w
2010-09-10  7:24     ` samu.p.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=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 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.