| From 34817174fca0c5512c2d5b6ea0fc37a0337ce1d8 Mon Sep 17 00:00:00 2001 |
| From: Xi Wang <xi.wang@gmail.com> |
| Date: Tue, 14 Feb 2012 14:32:41 -0300 |
| Subject: [media] lgdt330x: fix signedness error in i2c_read_demod_bytes() |
| |
| From: Xi Wang <xi.wang@gmail.com> |
| |
| commit 34817174fca0c5512c2d5b6ea0fc37a0337ce1d8 upstream. |
| |
| The error handling in lgdt3303_read_status() and lgdt330x_read_ucblocks() |
| doesn't work, because i2c_read_demod_bytes() returns a u8 and (err < 0) |
| is always false. |
| |
| err = i2c_read_demod_bytes(state, 0x58, buf, 1); |
| if (err < 0) |
| return err; |
| |
| Change the return type of i2c_read_demod_bytes() to int. Also change |
| the return value on error to -EIO to make (err < 0) work. |
| |
| Signed-off-by: Xi Wang <xi.wang@gmail.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/media/dvb/frontends/lgdt330x.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/media/dvb/frontends/lgdt330x.c |
| +++ b/drivers/media/dvb/frontends/lgdt330x.c |
| @@ -104,8 +104,8 @@ static int i2c_write_demod_bytes (struct |
| * then reads the data returned for (len) bytes. |
| */ |
| |
| -static u8 i2c_read_demod_bytes (struct lgdt330x_state* state, |
| - enum I2C_REG reg, u8* buf, int len) |
| +static int i2c_read_demod_bytes(struct lgdt330x_state *state, |
| + enum I2C_REG reg, u8 *buf, int len) |
| { |
| u8 wr [] = { reg }; |
| struct i2c_msg msg [] = { |
| @@ -118,6 +118,8 @@ static u8 i2c_read_demod_bytes (struct l |
| ret = i2c_transfer(state->i2c, msg, 2); |
| if (ret != 2) { |
| printk(KERN_WARNING "lgdt330x: %s: addr 0x%02x select 0x%02x error (ret == %i)\n", __func__, state->config->demod_address, reg, ret); |
| + if (ret >= 0) |
| + ret = -EIO; |
| } else { |
| ret = 0; |
| } |