aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/linux-omap-psp-2.6.32/cam/0003-mt9v113-Fix-State-variable-handling.patch
blob: 45b54b841efa419e36648924a00b7ec93e0a4b4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
From ff2a80a1bef6f7215221812eab381f4303fffce8 Mon Sep 17 00:00:00 2001
From: Sergio Aguirre <saaguirre@ti.com>
Date: Thu, 22 Jul 2010 13:29:16 -0500
Subject: [PATCH 3/3] mt9v113: Fix State variable handling

State variable was misused, and was running detection all the
time the sensor was powered back on.

Reason? power off code was putting it to "not detected" always.

Signed-off-by: Sergio Aguirre <saaguirre@ti.com>
---
 drivers/media/video/mt9v113.c |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/drivers/media/video/mt9v113.c b/drivers/media/video/mt9v113.c
index 6714240..37e3e19 100644
--- a/drivers/media/video/mt9v113.c
+++ b/drivers/media/video/mt9v113.c
@@ -1251,7 +1251,6 @@ static int ioctl_s_power(struct v4l2_int_device *s, enum v4l2_power on)
 		/* Disable mux for mt9v113 data path */
 		if (decoder->pdata->power_set)
 			err |= decoder->pdata->power_set(s, on);
-		decoder->state = STATE_NOT_DETECTED;
 		break;
 
 	case V4L2_POWER_STANDBY:
@@ -1260,23 +1259,29 @@ static int ioctl_s_power(struct v4l2_int_device *s, enum v4l2_power on)
 		break;
 
 	case V4L2_POWER_ON:
-		/* Enable mux for mt9v113 data path */
-		if (decoder->state == STATE_NOT_DETECTED) {
-
-			if (decoder->pdata->power_set)
-				err = decoder->pdata->power_set(s, on);
+		if (decoder->pdata->power_set) {
+			err = decoder->pdata->power_set(s, on);
+			if (err)
+				return err;
+		}
 
+		if (decoder->state == STATE_NOT_DETECTED) {
 			/* Detect the sensor is not already detected */
-			err |= mt9v113_detect(decoder);
+			err = mt9v113_detect(decoder);
 			if (err) {
 				v4l_err(decoder->client,
 						"Unable to detect decoder\n");
+				WARN_ON(1);
 				return err;
 			}
 		}
 		/* Only VGA mode for now */
-		err |= mt9v113_configure(decoder);
-		err |= mt9v113_vga_mode(decoder);
+		err = mt9v113_configure(decoder);
+		if (err)
+			return err;
+		err = mt9v113_vga_mode(decoder);
+		if (err)
+			return err;
 		break;
 
 	default:
-- 
1.6.6.1