public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC 2/2] tda18218: use generic dvb_wr_regs()
@ 2011-11-08 23:59 Antti Palosaari
  2011-11-09 22:06 ` tvboxspy
  0 siblings, 1 reply; 5+ messages in thread
From: Antti Palosaari @ 2011-11-08 23:59 UTC (permalink / raw)
  To: linux-media
  Cc: Antti Palosaari, Michael Krufky, Mauro Carvalho Chehab,
	Jean Delvare

Signed-off-by: Antti Palosaari <crope@iki.fi>
---
  drivers/media/common/tuners/tda18218.c      |   69 
+++++---------------------
  drivers/media/common/tuners/tda18218_priv.h |    3 +
  2 files changed, 17 insertions(+), 55 deletions(-)

diff --git a/drivers/media/common/tuners/tda18218.c 
b/drivers/media/common/tuners/tda18218.c
index aacfe23..fef5560f 100644
--- a/drivers/media/common/tuners/tda18218.c
+++ b/drivers/media/common/tuners/tda18218.c
@@ -25,46 +25,6 @@ static int debug;
  module_param(debug, int, 0644);
  MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");

-/* write multiple registers */
-static int tda18218_wr_regs(struct tda18218_priv *priv, u8 reg, u8 
*val, u8 len)
-{
-	int ret = 0;
-	u8 buf[1+len], quotient, remainder, i, msg_len, msg_len_max;
-	struct i2c_msg msg[1] = {
-		{
-			.addr = priv->cfg->i2c_address,
-			.flags = 0,
-			.buf = buf,
-		}
-	};
-
-	msg_len_max = priv->cfg->i2c_wr_max - 1;
-	quotient = len / msg_len_max;
-	remainder = len % msg_len_max;
-	msg_len = msg_len_max;
-	for (i = 0; (i <= quotient && remainder); i++) {
-		if (i == quotient)  /* set len of the last msg */
-			msg_len = remainder;
-
-		msg[0].len = msg_len + 1;
-		buf[0] = reg + i * msg_len_max;
-		memcpy(&buf[1], &val[i * msg_len_max], msg_len);
-
-		ret = i2c_transfer(priv->i2c, msg, 1);
-		if (ret != 1)
-			break;
-	}
-
-	if (ret == 1) {
-		ret = 0;
-	} else {
-		warn("i2c wr failed ret:%d reg:%02x len:%d", ret, reg, len);
-		ret = -EREMOTEIO;
-	}
-
-	return ret;
-}
-
  /* read multiple registers */
  static int tda18218_rd_regs(struct tda18218_priv *priv, u8 reg, u8 
*val, u8 len)
  {
@@ -96,14 +56,7 @@ static int tda18218_rd_regs(struct tda18218_priv 
*priv, u8 reg, u8 *val, u8 len)
  	return ret;
  }

-/* write single register */
-static int tda18218_wr_reg(struct tda18218_priv *priv, u8 reg, u8 val)
-{
-	return tda18218_wr_regs(priv, reg, &val, 1);
-}
-
  /* read single register */
-
  static int tda18218_rd_reg(struct tda18218_priv *priv, u8 reg, u8 *val)
  {
  	return tda18218_rd_regs(priv, reg, val, 1);
@@ -167,7 +120,7 @@ static int tda18218_set_params(struct dvb_frontend *fe,
  	buf[0] = (priv->regs[R1A_IF1] & ~7) | BP_Filter; /* BP_Filter */
  	buf[1] = (priv->regs[R1B_IF2] & ~3) | LP_Fc; /* LP_Fc */
  	buf[2] = priv->regs[R1C_AGC2B];
-	ret = tda18218_wr_regs(priv, R1A_IF1, buf, 3);
+	ret = dvb_wr_regs(&priv->i2c_cfg, R1A_IF1, buf, 3);
  	if (ret)
  		goto error;

@@ -175,23 +128,23 @@ static int tda18218_set_params(struct dvb_frontend 
*fe,
  	buf[1] = (LO_Frac / 1000) >> 4; /* LO_Frac_1 */
  	buf[2] = (LO_Frac / 1000) << 4 |
  		(priv->regs[R0C_MD5] & 0x0f); /* LO_Frac_2 */
-	ret = tda18218_wr_regs(priv, R0A_MD3, buf, 3);
+	ret = dvb_wr_regs(&priv->i2c_cfg, R0A_MD3, buf, 3);
  	if (ret)
  		goto error;

  	buf[0] = priv->regs[R0F_MD8] | (1 << 6); /* Freq_prog_Start */
-	ret = tda18218_wr_regs(priv, R0F_MD8, buf, 1);
+	ret = dvb_wr_regs(&priv->i2c_cfg, R0F_MD8, buf, 1);
  	if (ret)
  		goto error;

  	buf[0] = priv->regs[R0F_MD8] & ~(1 << 6); /* Freq_prog_Start */
-	ret = tda18218_wr_regs(priv, R0F_MD8, buf, 1);
+	ret = dvb_wr_regs(&priv->i2c_cfg, R0F_MD8, buf, 1);
  	if (ret)
  		goto error;

  	/* trigger AGC */
  	for (i = 0; i < ARRAY_SIZE(agc); i++) {
-		ret = tda18218_wr_reg(priv, agc[i][0], agc[i][1]);
+		ret = dvb_wr_reg(&priv->i2c_cfg, agc[i][0], agc[i][1]);
  		if (ret)
  			goto error;
  	}
@@ -215,7 +168,8 @@ static int tda18218_sleep(struct dvb_frontend *fe)
  		fe->ops.i2c_gate_ctrl(fe, 1); /* open I2C-gate */

  	/* standby */
-	ret = tda18218_wr_reg(priv, R17_PD1, priv->regs[R17_PD1] | (1 << 0));
+	ret = dvb_wr_reg(&priv->i2c_cfg, R17_PD1,
+		priv->regs[R17_PD1] | (1 << 0));

  	if (fe->ops.i2c_gate_ctrl)
  		fe->ops.i2c_gate_ctrl(fe, 0); /* close I2C-gate */
@@ -236,7 +190,8 @@ static int tda18218_init(struct dvb_frontend *fe)
  	if (fe->ops.i2c_gate_ctrl)
  		fe->ops.i2c_gate_ctrl(fe, 1); /* open I2C-gate */

-	ret = tda18218_wr_regs(priv, R00_ID, priv->regs, TDA18218_NUM_REGS);
+	ret = dvb_wr_regs(&priv->i2c_cfg, R00_ID, priv->regs,
+		TDA18218_NUM_REGS);

  	if (fe->ops.i2c_gate_ctrl)
  		fe->ops.i2c_gate_ctrl(fe, 0); /* close I2C-gate */
@@ -292,6 +247,9 @@ struct dvb_frontend *tda18218_attach(struct 
dvb_frontend *fe,

  	priv->cfg = cfg;
  	priv->i2c = i2c;
+	priv->i2c_cfg.adapter = i2c;
+	priv->i2c_cfg.addr = cfg->i2c_address;
+	priv->i2c_cfg.max_wr = cfg->i2c_wr_max;
  	fe->tuner_priv = priv;

  	if (fe->ops.i2c_gate_ctrl)
@@ -318,7 +276,8 @@ struct dvb_frontend *tda18218_attach(struct 
dvb_frontend *fe,
  	}

  	/* standby */
-	ret = tda18218_wr_reg(priv, R17_PD1, priv->regs[R17_PD1] | (1 << 0));
+	ret = dvb_wr_reg(&priv->i2c_cfg, R17_PD1,
+		priv->regs[R17_PD1] | (1 << 0));
  	if (ret)
  		dbg("%s: failed ret:%d", __func__, ret);

diff --git a/drivers/media/common/tuners/tda18218_priv.h 
b/drivers/media/common/tuners/tda18218_priv.h
index 904e536..72d7277 100644
--- a/drivers/media/common/tuners/tda18218_priv.h
+++ b/drivers/media/common/tuners/tda18218_priv.h
@@ -23,6 +23,8 @@

  #define LOG_PREFIX "tda18218"

+#include "dvb_generic.h"
+
  #undef dbg
  #define dbg(f, arg...) \
  	if (debug) \
@@ -99,6 +101,7 @@
  struct tda18218_priv {
  	struct tda18218_config *cfg;
  	struct i2c_adapter *i2c;
+	struct dvb_i2c_cfg i2c_cfg;

  	u8 regs[TDA18218_NUM_REGS];
  };
-- 
1.7.4.4

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

end of thread, other threads:[~2011-11-10  8:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-08 23:59 [RFC 2/2] tda18218: use generic dvb_wr_regs() Antti Palosaari
2011-11-09 22:06 ` tvboxspy
2011-11-09 22:18   ` Antti Palosaari
2011-11-09 23:01   ` Antti Palosaari
2011-11-10  8:20     ` Jean Delvare

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox