Re: [RFC/PATCH] iio: light: add support for TI's opt3001 ligth sensor

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 07/08/14 15:39, Felipe Balbi wrote:
> Hi,
> 
> On Thu, Aug 07, 2014 at 11:08:24AM +0100, Jonathan Cameron wrote:
>>>>> +				OPT3001_CONFIGURATION); +		return ret; +	} + +	/* wait for conversion and give it an extra 5ms */ + 
>>>>> usleep_range(opt->int_time + 5000, opt->int_time + 10000); + +	ret = opt3001_read(opt,
>>>>> OPT3001_CONFIGURATION); +	if (ret < 0) { +		dev_err(opt->dev, "failed to read register %02x\n", +
>>>>> OPT3001_CONFIGURATION); +		return ret; +	} + +	reg = ret; +	if (!(reg & OPT3001_CONFIGURATION_CRF)) +
>>>>> return -EPIPE; + +	ret = opt3001_read(opt, OPT3001_RESULT); +	if (ret < 0) { +		dev_err(opt->dev, "failed
>>>>> to read register %02x\n", +				OPT3001_RESULT); +		return ret; +	} + +	exponent =
>>>>> OPT3001_REG_EXPONENT(ret); +	mantissa = OPT3001_REG_MANTISSA(ret); + + opt3001_to_iio_ret(opt, exponent,
>>>>> mantissa, val, val2); + +	return IIO_VAL_INT_PLUS_MICRO; +} + +static int opt3001_get_scale(struct opt3001
>>>>> *opt, int *val, int *val2) +{ +	int ret; +	u8 exponent; +
>>>> 
>>>> I guess OPT3001_RESULT is only valid AFTER performing opt3001_get_lux()
>>> 
>>> right. I'm only interested in the exponent part. It'll latch the exponent from last conversion, 0 being
>>> default.
>> Given you unwind the scale anyway in your read raw, I'd not bother having a scale interface at all (assuming I'm
>> right in thinking your read raw is returning the value in lux?)  Also as you are in lux, it should be the
>> processed form not the raw one to indicate the scale does not need to be applied to the value to convert to lux.
> 
> alright, I'll switch to processed and remove scale.
> 
>> For a light sensor, the conversion here is actually fairly straight forward. Almost all of them have to use the
>> processed interface as they are horribly non linear.
> 
> :)
> 
>>> 
>>>>> + +	if (opt->mode == OPT3001_CONFIGURATION_M_CONTINUOUS) +		return -EBUSY; + +	if (chan->type != IIO_LIGHT)
>>>>> + return -EINVAL; + +	mutex_lock(&opt->lock); + +	switch (mask) {
>>>> 
>>>> is there no way to control the scale?
>>> 
>>> yeah, but the HW does auto-scaling which works pretty well. Why would you want to control the scale manually ?
>> On a slow device like this you probably wouldn't but for quicker devices the overhead of converting into a
>> standard form in kernel might be excessive.
> 
> hehe, even when you _do_ set the scale, you still have the top 4 bits as exponent, the difference is that you know
> what they are before the conversion is done :-)
Then you can junk them and let userspace use the known value to deal with the raw data.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBAgAGBQJT46kMAAoJEFSFNJnE9BaICmQP/iY3mtojtzobsU1BTFiyd6ah
xp/5vsyCM4pdqMOm8xUDwp6aBlvBvAQfVDGcQetR/KawJt7SMtKJdDxhR/hkFodE
E/3thrUXjCYw0VW9Xkg5doBucqbaWOjNsjnZDFH8HBZupFTWHv3I/QQq3acbdAbJ
DC0DRtfrTBF2JEOSLRssY11pAbxkDdeuZvIqQLpwZ80+Ptpi9MkeWoHlwOq9v67P
s0KODDTep2n7Z2w9KaY4V5L5YgLjW5YsDW+qv3zpQyq54+LB+CnCFMK2DZ4RqQlt
zPDuz7Cw8ujiqoHJlrs+bc/AbTk6gV/+puOyzb9zp6/HbSF/Q72Drw/1yF+2dIz4
rZtNaxsg0I+mH0e8xiKRYIeYHEKnHvwhO2e+6CJdLWabYvS8tSiYrU7qHKwkZVja
P04RGZNdqWrdmEOmxidd9CO+K7lvMqv/pSzVmVpQWq7Zw9EDx77h1SxyIHWtnD+3
CsiZluC++2JqCdvU01Cen+x95DPZPfK3hp6u7Y8SGgKwGluxxRMlN3QyYQXC5g5s
o9G4Jw/0wV0hshuTmwR9SifwkS2XMp/FbCJC2/c6A8PUx9O9H5IVIqk+ChSaWXkP
3NPl2O1hQIdjLgoDF5Xn4SD+F/CC3WPczMV+zcW8GrmZKjb30X0x5BNIv2UxKN0H
zJyy8hv/NLTUBaoXd5BG
=QBgz
-----END PGP SIGNATURE-----
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux