From 0d2d603124fe08a226d348495f345acd9a399214 Mon Sep 17 00:00:00 2001 From: Antti Palosaari Date: Wed, 12 Sep 2012 20:23:45 -0300 Subject: [PATCH] [media] ec100: improve I2C routines Signed-off-by: Antti Palosaari Signed-off-by: Mauro Carvalho Chehab --- drivers/media/dvb-frontends/ec100.c | 45 +++++++++++++++++++---------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/drivers/media/dvb-frontends/ec100.c b/drivers/media/dvb-frontends/ec100.c index b4ea34c2d09f..9d424809d06b 100644 --- a/drivers/media/dvb-frontends/ec100.c +++ b/drivers/media/dvb-frontends/ec100.c @@ -33,24 +33,33 @@ struct ec100_state { /* write single register */ static int ec100_write_reg(struct ec100_state *state, u8 reg, u8 val) { + int ret; u8 buf[2] = {reg, val}; - struct i2c_msg msg = { - .addr = state->config.demod_address, - .flags = 0, - .len = 2, - .buf = buf}; - - if (i2c_transfer(state->i2c, &msg, 1) != 1) { - dev_warn(&state->i2c->dev, "%s: i2c wr failed reg=%02x\n", - KBUILD_MODNAME, reg); - return -EREMOTEIO; + struct i2c_msg msg[1] = { + { + .addr = state->config.demod_address, + .flags = 0, + .len = sizeof(buf), + .buf = buf, + } + }; + + ret = i2c_transfer(state->i2c, msg, 1); + if (ret == 1) { + ret = 0; + } else { + dev_warn(&state->i2c->dev, "%s: i2c wr failed=%d reg=%02x\n", + KBUILD_MODNAME, ret, reg); + ret = -EREMOTEIO; } - return 0; + + return ret; } /* read single register */ static int ec100_read_reg(struct ec100_state *state, u8 reg, u8 *val) { + int ret; struct i2c_msg msg[2] = { { .addr = state->config.demod_address, @@ -65,12 +74,16 @@ static int ec100_read_reg(struct ec100_state *state, u8 reg, u8 *val) } }; - if (i2c_transfer(state->i2c, msg, 2) != 2) { - dev_warn(&state->i2c->dev, "%s: i2c rd failed reg=%02x\n", - KBUILD_MODNAME, reg); - return -EREMOTEIO; + ret = i2c_transfer(state->i2c, msg, 2); + if (ret == 2) { + ret = 0; + } else { + dev_warn(&state->i2c->dev, "%s: i2c rd failed=%d reg=%02x\n", + KBUILD_MODNAME, ret, reg); + ret = -EREMOTEIO; } - return 0; + + return ret; } static int ec100_set_frontend(struct dvb_frontend *fe) -- 2.20.1