linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] TSL2550 driver bugfix
@ 2009-06-30 15:31 Michele De Candia (VT)
       [not found] ` <4A4A2FBC.1060804-EZxuzQJkuwwybS5Ee8rs3A@public.gmane.org>
  0 siblings, 1 reply; 11+ messages in thread
From: Michele De Candia (VT) @ 2009-06-30 15:31 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA; +Cc: giometti-k2GhghHVRtY

[-- Attachment #1: Type: text/plain, Size: 380 bytes --]

Hi all,

I've tested TSL2550 driver and I've found a bug: when light is off, 
returned value from tsl2550_calculate_lux function is -1 when it should 
be 0 (sensor correctly read that light was off).

I think the bug is that a zero c0 value (approximated value of ch0) is 
misinterpreted as an error. 

I'm attaching you a patch that fixes the bug.

Regards,
Michele Jr De Candia

[-- Attachment #2: tsl2550_nolight_bugfix.patch --]
[-- Type: text/x-patch, Size: 722 bytes --]

Signed-off-by: Michele Jr De Candia <michele.decandia-EZxuzQJkuwwybS5Ee8rs3A@public.gmane.org>

diff --git a/drivers/i2c/chips/tsl2550.c b/drivers/i2c/chips/tsl2550.c
index 1a9cc13..6bad072 100644
--- a/drivers/i2c/chips/tsl2550.c
+++ b/drivers/i2c/chips/tsl2550.c
@@ -189,10 +189,16 @@ static int tsl2550_calculate_lux(u8 ch0, u8 ch1)
 	u8 r = 128;
 
 	/* Avoid division by 0 and count 1 cannot be greater than count 0 */
-	if (c0 && (c1 <= c0))
-		r = c1 * 128 / c0;
-	else
-		return -1;
+	if (c0)	{
+		if (c1 <= c0)
+			r = c1 * 128 / c0;
+		else
+			return -1;
+			
+		/* Calculate LUX */
+		lux = ((c0 - c1) * ratio_lut[r]) / 256;
+	}
+	else lux = 0;
 
 	/* Calculate LUX */
 	lux = ((c0 - c1) * ratio_lut[r]) / 256;

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2009-07-13 19:17 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-30 15:31 [PATCH] TSL2550 driver bugfix Michele De Candia (VT)
     [not found] ` <4A4A2FBC.1060804-EZxuzQJkuwwybS5Ee8rs3A@public.gmane.org>
2009-06-30 16:41   ` Jonathan Cameron
     [not found]     ` <4A4A4036.3000408-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
2009-07-01  8:12       ` Michele De Candia (VT)
     [not found]         ` <4A4B1A71.20101-EZxuzQJkuwwybS5Ee8rs3A@public.gmane.org>
2009-07-01 10:00           ` Jonathan Cameron
     [not found]             ` <4A4B7904.5010301@valueteam.com>
     [not found]               ` <4A4B7904.5010301-EZxuzQJkuwwybS5Ee8rs3A@public.gmane.org>
2009-07-01 16:06                 ` Jonathan Cameron
2009-07-11 18:20           ` Jean Delvare
     [not found]             ` <20090711202030.52ffbddb-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-07-12  8:52               ` Jean Delvare
     [not found]                 ` <20090712105237.01e11954-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-07-13  7:56                   ` Michele De Candia (VT)
     [not found]                     ` <4A5AE89A.8000000-EZxuzQJkuwwybS5Ee8rs3A@public.gmane.org>
2009-07-13  8:44                       ` Jean Delvare
     [not found]                         ` <4A5B011F.8030507@valueteam.com>
     [not found]                           ` <4A5B011F.8030507-EZxuzQJkuwwybS5Ee8rs3A@public.gmane.org>
2009-07-13 10:06                             ` Rodolfo Giometti
2009-07-13 19:17                             ` Jean Delvare

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).