Skip to contentSkip to conversation

ov7670: clean up ov7670_read semantics

PATCH RESEND In review Andres Salomon 2 participants 3 messages Jul 11, 2008 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

PATCH RESEND 1/1 ov7670: clean up ov7670_read semantics

[note: this should probably go in for 2.6.26, as it fixes a bug in ov7670_s_fmt where we incorrectly think that we've failed because we return !0]

Cortland Setlow pointed out a bug in ov7670.c where the result from ov7670_read() was just being checked for !0, rather than <0. This made me realize that ov7670_read's semantics were rather confusing; it both fills in 'value' with the result, and returns it. This is goes against general kernel convention; so rather than fixing callers, let's fix the function.

This makes ov7670_read return <0 in the case of an error, and 0 upon success. Thus, code like:

res = ov7670_read(...);
if (!res)

	goto error;

..will work properly.

---
 drivers/media/video/ov7670.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
drivers/media/video/ov7670.c +0 -0
index 2bc6bdc..d7bfd30 100644
@@ -406,8 +406,10 @@ static int ov7670_read(struct i2c_client *c,

unsigned char reg, int ret;

ret = i2c_smbus_read_byte_data(c, reg);
- if (ret >= 0)
+ if (ret >= 0) {
*value = (unsigned char) ret;
+ ret = 0;
+ }
return ret;
}

Signature · 1 line
1.5.5.3
#1 lore raw
Quoted 4 lines · On Fri, 11 Jul 2008 16:52:16 -0400 Andres Salomon <[email protected]> wrote:

[note: this should probably go in for 2.6.26, as it fixes a bug in ov7670_s_fmt where we incorrectly think that we've failed because we return !0]

In which case 2.6.25.x wants the fix as well?

Quoted 29 lines

Cortland Setlow pointed out a bug in ov7670.c where the result from ov7670_read() was just being checked for !0, rather than <0. This made me realize that ov7670_read's semantics were rather confusing; it both fills in 'value' with the result, and returns it. This is goes against general kernel convention; so rather than fixing callers, let's fix the function.

This makes ov7670_read return <0 in the case of an error, and 0 upon success. Thus, code like:

res = ov7670_read(...);
if (!res)

	goto error;

..will work properly.

---
 drivers/media/video/ov7670.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
drivers/media/video/ov7670.c +0 -0
index 2bc6bdc..d7bfd30 100644

drivers/media/video/ov7670.c static int ov7670_read(struct i2c_client *c, · line 406

Quoted 1 line
drivers/media/video/ov7670.c +0 -0
@@ -406,8 +406,10 @@ static int ov7670_read(struct i2c_client *c,
 unsigned char reg, int ret;

You have some wordwrapping happening there.

Quoted 11 lines
drivers/media/video/ov7670.c +3 -1
 	ret = i2c_smbus_read_byte_data(c, reg);
-	if (ret >= 0)
+	if (ret >= 0) {
 		*value = (unsigned char) ret;
+		ret = 0;
+	}
 	return ret;
 }
 
Signature · 1 line
1.5.5.3
#2 lore raw
Quoted 10 lines · On Fri, 11 Jul 2008 15:19:19 -0700 Andrew Morton <[email protected]>…
Quoted 4 lines · On Fri, 11 Jul 2008 16:52:16 -0400 Andres Salomon <[email protected]> wrote:

[note: this should probably go in for 2.6.26, as it fixes a bug in ov7670_s_fmt where we incorrectly think that we've failed because we return !0]

In which case 2.6.25.x wants the fix as well?

Yep!

[...]

Quoted 9 lines

drivers/media/video/ov7670.c static int ov7670_read(struct i2c_client *c, · line 406

Quoted 6 lines
(quoted diff) +0 -0

b/drivers/media/video/ov7670.c index 2bc6bdc..d7bfd30 100644

drivers/media/video/ov7670.c +0 -0
@@ -406,8 +406,10 @@ static int ov7670_read(struct i2c_client *c,
 unsigned char reg, int ret;

You have some wordwrapping happening there.

Eek, thanks. The original send wasn't line-wrapped, I'm not sure how that happened.